Source Code
Overview
S Balance
More Info
ContractCreator
Multichain Info
N/A
| Transaction Hash |
Method
|
Block
|
From
|
To
|
Amount
|
||||
|---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | Amount | ||
|---|---|---|---|---|---|---|
| 10359171 | 6 hrs ago | 0 S | ||||
| 10359138 | 6 hrs ago | 0 S | ||||
| 10359102 | 6 hrs ago | 0 S | ||||
| 10359063 | 6 hrs ago | 0 S | ||||
| 10359034 | 6 hrs ago | 0 S | ||||
| 10359002 | 6 hrs ago | 0 S | ||||
| 10278242 | 3 days ago | 0 S | ||||
| 10278207 | 3 days ago | 0 S | ||||
| 10278179 | 3 days ago | 0 S | ||||
| 10255422 | 4 days ago | 0 S | ||||
| 10255391 | 4 days ago | 0 S | ||||
| 10255355 | 4 days ago | 0 S | ||||
| 10255317 | 4 days ago | 0 S | ||||
| 10255288 | 4 days ago | 0 S | ||||
| 10255258 | 4 days ago | 0 S | ||||
| 10255221 | 4 days ago | 0 S | ||||
| 10226746 | 5 days ago | 0 S | ||||
| 10226706 | 5 days ago | 0 S | ||||
| 10226668 | 5 days ago | 0 S | ||||
| 10226634 | 5 days ago | 0 S | ||||
| 10226583 | 5 days ago | 0 S | ||||
| 10225493 | 5 days ago | 0 S | ||||
| 10182210 | 6 days ago | 0 S | ||||
| 10182138 | 6 days ago | 0 S | ||||
| 10182073 | 6 days ago | 0 S |
Loading...
Loading
Contract Name:
SeedLinkPublisher
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "./libraries/FixedPointMathLib.sol";
import "./interfaces/IPanjea.sol";
import "./interfaces/IDistribution.sol";
import "./interfaces/ISubscription.sol";
import "./interfaces/IRewardsContract.sol";
import "./interfaces/ISeedLinkPublisher.sol";
import "./utils/ReentrancyGuardUpgradeable.sol";
contract SeedLinkPublisher is ReentrancyGuardUpgradeable, ISeedLinkPublisher {
address public owner;
address public ecosystemFund;
uint256 seedId;
uint256 linkId;
uint256 panjeaSeedBurned;
uint256 panjeaLinkBurned;
mapping(uint256 => mapping(uint256 => bool)) seedsLinked;
mapping(uint256 => SeedStruct) public seeds;
mapping(uint256 => LinkStruct) public links;
mapping(uint256 => uint256[]) seedIdsForLink;
IPanjea public panjea;
ISubscription public subscription;
IRewardsContract public rewards;
struct SeedStruct {
uint256 storageSize;
uint256 amountLinked;
address publisher;
string seed;
}
struct LinkStruct {
uint256 seedId1;
uint256 seedId2;
}
modifier isOwner() {
require(msg.sender == owner, "!owner");
_;
}
/// --------- Initialize -----//
function initialize(
address _panjea,
address _subscription,
address _ecosystemFund
) external initializer {
require(
_panjea != address(0) &&
_subscription != address(0) &&
_ecosystemFund != address(0),
"!zero"
);
__ReentrancyGuard_init();
owner = msg.sender;
panjea = IPanjea(_panjea);
ecosystemFund = _ecosystemFund;
subscription = ISubscription(_subscription);
}
/// --------- External functions -----//
function registerSeed(
string memory _seed,
uint256 storageSize
) external nonReentrant {
require(subscription.isSubscribed(msg.sender) == true, "!sub");
require(storageSize > 0, "!size");
uint256 transferred = getSeedCost(storageSize);
uint256 burned = (transferred * 80) / 100;
panjea.transferFrom(msg.sender, address(this), transferred);
if (address(rewards) != address(0)) {
uint256 share = transferred / 10;
panjea.approve(address(rewards), share);
rewards.addRewardsForNextPeriod(share);
panjea.transfer(ecosystemFund, share);
}
panjea.burn(burned);
seeds[seedId] = SeedStruct({
seed: _seed,
storageSize: storageSize,
publisher: msg.sender,
amountLinked: 0
});
panjeaSeedBurned += burned;
emit RegisterSeed(msg.sender, _seed, seedId);
seedId++;
}
function registerLink(
uint256 _seedId1,
uint256 _seedId2
) external nonReentrant {
//calculate price of link creation
require(subscription.isSubscribed(msg.sender) == true, "!sub");
require(seedsLinked[_seedId1][_seedId2] == false, "!exists");
require(_seedId1 != _seedId2, "!self");
require(
seeds[_seedId1].publisher != address(0) &&
seeds[_seedId2].publisher != address(0),
"!link"
);
uint256 transferred = getLinkCost(_seedId1, _seedId2);
panjea.transferFrom(msg.sender, address(this), transferred);
panjea.burn((transferred * 80) / 100);
if (address(rewards) != address(0)) {
uint256 share = transferred / 10;
panjea.approve(address(rewards), share);
rewards.addRewardsForNextPeriod(share);
panjea.transfer(ecosystemFund, share);
}
links[linkId] = LinkStruct({seedId1: _seedId1, seedId2: _seedId2});
seeds[_seedId1].amountLinked = seeds[_seedId1].amountLinked + 1;
seeds[_seedId2].amountLinked = seeds[_seedId2].amountLinked + 1;
seedsLinked[_seedId1][_seedId2] = true;
seedsLinked[_seedId2][_seedId1] = true;
seedIdsForLink[_seedId1].push(linkId);
seedIdsForLink[_seedId2].push(linkId);
panjeaLinkBurned += (transferred * 80) / 100;
emit RegisterLink(msg.sender, _seedId1, _seedId2, linkId);
linkId += 1;
}
function withdraw(uint256 value) external isOwner nonReentrant {
panjea.transfer(msg.sender, value);
}
function setRewards(address _address) external isOwner {
require(_address != address(0), "!zero");
rewards = IRewardsContract(_address);
}
/// --------- External view -----//
function getTotalLinks() external view returns (uint256) {
return linkId;
}
function getTotalSeeds() external view returns (uint256) {
return seedId;
}
function getLinks(
uint256 _seedId
) external view returns (uint256[] memory) {
return seedIdsForLink[_seedId];
}
/// --------- Public view -----//
function getSeedCost(uint256 storageSize) public view returns (uint256) {
//get amount of panj in equality of 1 USDC
uint256 _price = subscription.getSubscribePrice() / 5;
if (storageSize <= 5000) {
// returns 1$
return _price;
} else {
return FixedPointMathLib.fullMulDiv(_price, 4592065, 1e9) + _price;
}
}
function getLinkCost(
uint256 _seedId1,
uint256 _seedId2
) public view returns (uint256) {
uint256 amount1 = seeds[_seedId1].amountLinked;
uint256 amount2 = seeds[_seedId2].amountLinked;
/// @dev returns price of 1$ in panjea
uint256 price = subscription.getSubscribePrice() / 5;
return (((amount1 + amount2 + 1) * price) / 2);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IDistribution {
function getCirculatingSupply() external view returns (uint256);
event Claim(address indexed from, uint256 seedAmount, uint256 amount);
event Buy(address indexed from, uint256 value);
event SaleStarted(uint256 timestamp);
event SaleEnded(uint256 timestamp);
event MonthlyMint(address to, uint256 amount);
event GenesisEvent(uint256 timestamp);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IPanjea {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function allowance(
address owner,
address spender
) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
function mint(address owner, uint256 amount) external;
function burn(uint256 amount) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IRewardsContract {
function addRewardsForNextPeriod(uint256 amount) external;
function getCurrentPeriod() external view returns (uint256);
function getTotalPeriodRewards(
uint256 _period
) external view returns (uint256);
event Claim(
address indexed owner,
uint256 indexed tokenId,
uint256 amount,
uint256 endPeriod,
uint256 timestamp
);
event AdminSet(address admin, uint256 timestamp);
event RewardsSet(uint256 period, uint256 amount, uint256 timestamp);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface ISeedLinkPublisher {
event RegisterSeed(
address indexed owner,
string indexed seed,
uint256 indexed seedId
);
event RegisterLink(
address indexed owner,
uint256 seedId1,
uint256 seedId2,
uint256 indexed linkId
);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface ISubscription {
function isSubscribed(address account) external view returns (bool);
function getSubscribePrice() external view returns (uint256);
event Subscribe(address indexed from, uint256 months);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
/// @notice Arithmetic library with operations for fixed-point numbers.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/FixedPointMathLib.sol)
/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/FixedPointMathLib.sol)
library FixedPointMathLib {
function max(uint256 x, uint256 y) internal pure returns (uint256 z) {
/// @solidity memory-safe-assembly
assembly {
z := xor(x, mul(xor(x, y), gt(y, x)))
}
}
function fullMulDiv(
uint256 x,
uint256 y,
uint256 d
) internal pure returns (uint256 z) {
/// @solidity memory-safe-assembly
assembly {
// 512-bit multiply `[p1 p0] = x * y`.
// Compute the product mod `2**256` and mod `2**256 - 1`
// then use the Chinese Remainder Theorem to reconstruct
// the 512 bit result. The result is stored in two 256
// variables such that `product = p1 * 2**256 + p0`.
// Temporarily use `z` as `p0` to save gas.
z := mul(x, y) // Lower 256 bits of `x * y`.
for {
} 1 {
} {
// If overflows.
if iszero(mul(or(iszero(x), eq(div(z, x), y)), d)) {
let mm := mulmod(x, y, not(0))
let p1 := sub(mm, add(z, lt(mm, z))) // Upper 256 bits of `x * y`.
/*------------------- 512 by 256 division --------------------*/
// Make division exact by subtracting the remainder from `[p1 p0]`.
let r := mulmod(x, y, d) // Compute remainder using mulmod.
let t := and(d, sub(0, d)) // The least significant bit of `d`. `t >= 1`.
// Make sure `z` is less than `2**256`. Also prevents `d == 0`.
// Placing the check here seems to give more optimal stack operations.
if iszero(gt(d, p1)) {
mstore(0x00, 0xae47f702) // `FullMulDivFailed()`.
revert(0x1c, 0x04)
}
d := div(d, t) // Divide `d` by `t`, which is a power of two.
// Invert `d mod 2**256`
// Now that `d` is an odd number, it has an inverse
// modulo `2**256` such that `d * inv = 1 mod 2**256`.
// Compute the inverse by starting with a seed that is correct
// correct for four bits. That is, `d * inv = 1 mod 2**4`.
let inv := xor(2, mul(3, d))
// Now use Newton-Raphson iteration to improve the precision.
// Thanks to Hensel's lifting lemma, this also works in modular
// arithmetic, doubling the correct bits in each step.
inv := mul(inv, sub(2, mul(d, inv))) // inverse mod 2**8
inv := mul(inv, sub(2, mul(d, inv))) // inverse mod 2**16
inv := mul(inv, sub(2, mul(d, inv))) // inverse mod 2**32
inv := mul(inv, sub(2, mul(d, inv))) // inverse mod 2**64
inv := mul(inv, sub(2, mul(d, inv))) // inverse mod 2**128
z := mul(
// Divide [p1 p0] by the factors of two.
// Shift in bits from `p1` into `p0`. For this we need
// to flip `t` such that it is `2**256 / t`.
or(
mul(sub(p1, gt(r, z)), add(div(sub(0, t), t), 1)),
div(sub(z, r), t)
),
mul(sub(2, mul(d, inv)), inv) // inverse mod 2**256
)
break
}
z := div(z, d)
break
}
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
abstract contract Initializable {
struct InitializableStorage {
uint64 _initialized;
bool _initializing;
}
bytes32 private constant INITIALIZABLE_STORAGE =
0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;
error InvalidInitialization();
error NotInitializing();
event Initialized(uint64 version);
modifier initializer() {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
// Cache values to avoid duplicated sloads
bool isTopLevelCall = !$._initializing;
uint64 initialized = $._initialized;
bool initialSetup = initialized == 0 && isTopLevelCall;
bool construction = initialized == 1 && address(this).code.length == 0;
if (!initialSetup && !construction) {
revert InvalidInitialization();
}
$._initialized = 1;
if (isTopLevelCall) {
$._initializing = true;
}
_;
if (isTopLevelCall) {
$._initializing = false;
emit Initialized(1);
}
}
modifier reinitializer(uint64 version) {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
if ($._initializing || $._initialized >= version) {
revert InvalidInitialization();
}
$._initialized = version;
$._initializing = true;
_;
$._initializing = false;
emit Initialized(version);
}
modifier onlyInitializing() {
_checkInitializing();
_;
}
function _checkInitializing() internal view virtual {
if (!_isInitializing()) {
revert NotInitializing();
}
}
function _disableInitializers() internal virtual {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
if ($._initializing) {
revert InvalidInitialization();
}
if ($._initialized != type(uint64).max) {
$._initialized = type(uint64).max;
emit Initialized(type(uint64).max);
}
}
function _getInitializedVersion() internal view returns (uint64) {
return _getInitializableStorage()._initialized;
}
function _isInitializing() internal view returns (bool) {
return _getInitializableStorage()._initializing;
}
function _initializableStorageSlot()
internal
pure
virtual
returns (bytes32)
{
return INITIALIZABLE_STORAGE;
}
function _getInitializableStorage()
private
pure
returns (InitializableStorage storage $)
{
bytes32 slot = _initializableStorageSlot();
assembly {
$.slot := slot
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import './Initializable.sol';
abstract contract ReentrancyGuardUpgradeable is Initializable {
uint256 private constant NOT_ENTERED = 1;
uint256 private constant ENTERED = 2;
struct ReentrancyGuardStorage {
uint256 _status;
}
bytes32 private constant ReentrancyGuardStorageLocation = 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;
function _getReentrancyGuardStorage() private pure returns (ReentrancyGuardStorage storage $) {
assembly {
$.slot := ReentrancyGuardStorageLocation
}
}
/**
* @dev Unauthorized reentrant call.
*/
error ReentrancyGuardReentrantCall();
function __ReentrancyGuard_init() internal onlyInitializing {
__ReentrancyGuard_init_unchained();
}
function __ReentrancyGuard_init_unchained() internal onlyInitializing {
ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();
$._status = NOT_ENTERED;
}
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();
// On the first call to nonReentrant, _status will be NOT_ENTERED
if ($._status == ENTERED) {
revert ReentrancyGuardReentrantCall();
}
// Any calls to nonReentrant after this point will fail
$._status = ENTERED;
}
function _nonReentrantAfter() private {
ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
$._status = NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();
return $._status == ENTERED;
}
}{
"metadata": {
"bytecodeHash": "none"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract ABI
API[{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"seedId1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"seedId2","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"linkId","type":"uint256"}],"name":"RegisterLink","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"string","name":"seed","type":"string"},{"indexed":true,"internalType":"uint256","name":"seedId","type":"uint256"}],"name":"RegisterSeed","type":"event"},{"inputs":[],"name":"ecosystemFund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seedId1","type":"uint256"},{"internalType":"uint256","name":"_seedId2","type":"uint256"}],"name":"getLinkCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seedId","type":"uint256"}],"name":"getLinks","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"storageSize","type":"uint256"}],"name":"getSeedCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalLinks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSeeds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_panjea","type":"address"},{"internalType":"address","name":"_subscription","type":"address"},{"internalType":"address","name":"_ecosystemFund","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"links","outputs":[{"internalType":"uint256","name":"seedId1","type":"uint256"},{"internalType":"uint256","name":"seedId2","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"panjea","outputs":[{"internalType":"contract IPanjea","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seedId1","type":"uint256"},{"internalType":"uint256","name":"_seedId2","type":"uint256"}],"name":"registerLink","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_seed","type":"string"},{"internalType":"uint256","name":"storageSize","type":"uint256"}],"name":"registerSeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewards","outputs":[{"internalType":"contract IRewardsContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"seeds","outputs":[{"internalType":"uint256","name":"storageSize","type":"uint256"},{"internalType":"uint256","name":"amountLinked","type":"uint256"},{"internalType":"address","name":"publisher","type":"address"},{"internalType":"string","name":"seed","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"subscription","outputs":[{"internalType":"contract ISubscription","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b5061188a806100206000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638da5cb5b116100a2578063bd88706c11610071578063bd88706c14610245578063c0c53b8b14610258578063cd2cafc01461026b578063ec38a8621461027e578063f0503e801461029157600080fd5b80638da5cb5b1461020f5780638e597b83146102225780639d30d0631461022a5780639ec5a8941461023257600080fd5b80632e1a7d4d116100de5780632e1a7d4d1461019857806344387cc2146101ad57806375d85b8f146101c0578063881d8a40146101d357600080fd5b80630bfd36cf146101105780630c486495146101395780631d0cf6831461015a578063288c6ed214610185575b600080fd5b61012361011e366004611410565b6102b4565b6040516101309190611429565b60405180910390f35b61014c61014736600461146d565b610316565b604051908152602001610130565b60015461016d906001600160a01b031681565b6040516001600160a01b039091168152602001610130565b61014c610193366004611410565b6103eb565b6101ab6101a6366004611410565b6104ac565b005b600b5461016d906001600160a01b031681565b6101ab6101ce3660046114a5565b61058c565b6101fa6101e1366004611410565b6008602052600090815260409020805460019091015482565b60408051928352602083019190915201610130565b60005461016d906001600160a01b031681565b60035461014c565b60025461014c565b600c5461016d906001600160a01b031681565b600a5461016d906001600160a01b031681565b6101ab610266366004611576565b6109ed565b6101ab61027936600461146d565b610b98565b6101ab61028c3660046115b9565b611150565b6102a461029f366004611410565b6111f3565b60405161013094939291906115f8565b60008181526009602090815260409182902080548351818402810184019094528084526060939283018282801561030a57602002820191906000526020600020905b8154815260200190600101908083116102f6575b50505050509050919050565b600082815260076020908152604080832060019081015485855282852090910154600b54835163d12f772d60e01b815293519294919386936005936001600160a01b039093169263d12f772d92600480820193918290030181865afa158015610383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a79190611648565b6103b19190611677565b90506002816103c08486611699565b6103cb906001611699565b6103d591906116ac565b6103df9190611677565b93505050505b92915050565b6000806005600b60009054906101000a90046001600160a01b03166001600160a01b031663d12f772d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104679190611648565b6104719190611677565b905061138883116104825792915050565b8061049582624611c1633b9aca006112b0565b61049f9190611699565b9392505050565b50919050565b6000546001600160a01b031633146104f45760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b60448201526064015b60405180910390fd5b6104fc611342565b600a5460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561054d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057191906116c3565b50610589600160008051602061185e83398151915255565b50565b610594611342565b600b54604051632e4aba1f60e21b81523360048201526001600160a01b039091169063b92ae87c90602401602060405180830381865afa1580156105dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060091906116c3565b151560011461063a5760405162461bcd60e51b81526004016104eb9060208082526004908201526310b9bab160e11b604082015260600190565b600081116106725760405162461bcd60e51b81526020600482015260056024820152642173697a6560d81b60448201526064016104eb565b600061067d826103eb565b90506000606461068e8360506116ac565b6106989190611677565b600a546040516323b872dd60e01b8152336004820152306024820152604481018590529192506001600160a01b0316906323b872dd906064016020604051808303816000875af11580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071491906116c3565b50600c546001600160a01b031615610889576000610733600a84611677565b600a54600c5460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af115801561078a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ae91906116c3565b50600c54604051633698e06f60e21b8152600481018390526001600160a01b039091169063da6381bc90602401600060405180830381600087803b1580156107f557600080fd5b505af1158015610809573d6000803e3d6000fd5b5050600a5460015460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018690529116925063a9059cbb91506044016020604051808303816000875af1158015610862573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088691906116c3565b50505b600a54604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b1580156108cf57600080fd5b505af11580156108e3573d6000803e3d6000fd5b5050604080516080810182528681526000602080830182815233848601908152606085018c81526002805486526007909452959093208451815590516001820155915190820180546001600160a01b0319166001600160a01b039092169190911790559151909350909150600382019061095d9082611768565b5090505080600460008282546109739190611699565b9091555050600254604051610989908690611828565b6040519081900381209033907fd5756611f299ae3fab8d0ed7d7d087b43dde9d1e0766447349bcec247a40229590600090a4600280549060006109cb83611844565b919050555050506109e9600160008051602061185e83398151915255565b5050565b60006109f761138e565b805490915060ff600160401b820416159067ffffffffffffffff16600081158015610a1f5750825b905060008267ffffffffffffffff166001148015610a3c5750303b155b905081158015610a4a575080155b15610a685760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a9257845460ff60401b1916600160401b1785555b6001600160a01b03881615801590610ab257506001600160a01b03871615155b8015610ac657506001600160a01b03861615155b610afa5760405162461bcd60e51b8152602060048201526005602482015264217a65726f60d81b60448201526064016104eb565b610b026113b7565b60008054336001600160a01b031991821617909155600a805482166001600160a01b038b811691909117909155600180548316898316179055600b80549092169089161790558315610b8e57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610ba0611342565b600b54604051632e4aba1f60e21b81523360048201526001600160a01b039091169063b92ae87c90602401602060405180830381865afa158015610be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0c91906116c3565b1515600114610c465760405162461bcd60e51b81526004016104eb9060208082526004908201526310b9bab160e11b604082015260600190565b600082815260066020908152604080832084845290915290205460ff1615610c9a5760405162461bcd60e51b81526020600482015260076024820152662165786973747360c81b60448201526064016104eb565b808203610cd15760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064016104eb565b6000828152600760205260409020600201546001600160a01b031615801590610d1357506000818152600760205260409020600201546001600160a01b031615155b610d475760405162461bcd60e51b8152602060048201526005602482015264216c696e6b60d81b60448201526064016104eb565b6000610d538383610316565b600a546040516323b872dd60e01b8152336004820152306024820152604481018390529192506001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcf91906116c3565b50600a546001600160a01b03166342966c686064610dee8460506116ac565b610df89190611677565b6040518263ffffffff1660e01b8152600401610e1691815260200190565b600060405180830381600087803b158015610e3057600080fd5b505af1158015610e44573d6000803e3d6000fd5b5050600c546001600160a01b0316159150610fbe9050576000610e68600a83611677565b600a54600c5460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015610ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee391906116c3565b50600c54604051633698e06f60e21b8152600481018390526001600160a01b039091169063da6381bc90602401600060405180830381600087803b158015610f2a57600080fd5b505af1158015610f3e573d6000803e3d6000fd5b5050600a5460015460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018690529116925063a9059cbb91506044016020604051808303816000875af1158015610f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbb91906116c3565b50505b604080518082018252848152602080820185815260035460009081526008835284812093518455905160019384015586815260079091529190912081015461100591611699565b600084815260076020526040808220600190810193909355848252902081015461102e91611699565b600083815260076020908152604080832060019081019490945586835260068083528184208785528352818420805460ff19908116871790915590835281842088855283528184208054909116851790556009825280832060038054825480880184559286528486209092019190915586845290832090548154948501825590835291209091015560646110c38260506116ac565b6110cd9190611677565b600560008282546110de9190611699565b9091555050600354604080518581526020810185905233917ffac4215d8cc179f7fb2ca407359e0c2c84b596da6e544d394b164b4516659470910160405180910390a36001600360008282546111349190611699565b9091555050600160008051602061185e83398151915255505050565b6000546001600160a01b031633146111935760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b60448201526064016104eb565b6001600160a01b0381166111d15760405162461bcd60e51b8152602060048201526005602482015264217a65726f60d81b60448201526064016104eb565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6007602052600090815260409020805460018201546002830154600384018054939492936001600160a01b03909216929161122d906116e5565b80601f0160208091040260200160405190810160405280929190818152602001828054611259906116e5565b80156112a65780601f1061127b576101008083540402835291602001916112a6565b820191906000526020600020905b81548152906001019060200180831161128957829003601f168201915b5050505050905084565b8282028183858304148515170261133b5760001983850981811082019003828486098360000384168285116112ed5763ae47f7026000526004601cfd5b9384900493838211909203600083900383900460010102920304176002600383028118808402820302808402820302808402820302808402820302808402820302808402909103020261049f565b0492915050565b60008051602061185e83398151915280546001190161137457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b600160008051602061185e83398151915255565b6000807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006103e5565b6113bf6113c9565b6113c76113ee565b565b6113d16113f6565b6113c757604051631afcd79f60e31b815260040160405180910390fd5b61137a6113c9565b600061140061138e565b54600160401b900460ff16919050565b60006020828403121561142257600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561146157835183529284019291840191600101611445565b50909695505050505050565b6000806040838503121561148057600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156114b857600080fd5b823567ffffffffffffffff808211156114d057600080fd5b818501915085601f8301126114e457600080fd5b8135818111156114f6576114f661148f565b604051601f8201601f19908116603f0116810190838211818310171561151e5761151e61148f565b8160405282815288602084870101111561153757600080fd5b826020860160208301376000602093820184015298969091013596505050505050565b80356001600160a01b038116811461157157600080fd5b919050565b60008060006060848603121561158b57600080fd5b6115948461155a565b92506115a26020850161155a565b91506115b06040850161155a565b90509250925092565b6000602082840312156115cb57600080fd5b61049f8261155a565b60005b838110156115ef5781810151838201526020016115d7565b50506000910152565b84815283602082015260018060a01b038316604082015260806060820152600082518060808401526116318160a08501602087016115d4565b601f01601f19169190910160a00195945050505050565b60006020828403121561165a57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008261169457634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156103e5576103e5611661565b80820281158282048414176103e5576103e5611661565b6000602082840312156116d557600080fd5b8151801515811461049f57600080fd5b600181811c908216806116f957607f821691505b6020821081036104a657634e487b7160e01b600052602260045260246000fd5b601f82111561176357600081815260208120601f850160051c810160208610156117405750805b601f850160051c820191505b8181101561175f5782815560010161174c565b5050505b505050565b815167ffffffffffffffff8111156117825761178261148f565b6117968161179084546116e5565b84611719565b602080601f8311600181146117cb57600084156117b35750858301515b600019600386901b1c1916600185901b17855561175f565b600085815260208120601f198616915b828110156117fa578886015182559484019460019091019084016117db565b50858210156118185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000825161183a8184602087016115d4565b9190910192915050565b60006001820161185657611856611661565b506001019056fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a164736f6c6343000814000a
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80638da5cb5b116100a2578063bd88706c11610071578063bd88706c14610245578063c0c53b8b14610258578063cd2cafc01461026b578063ec38a8621461027e578063f0503e801461029157600080fd5b80638da5cb5b1461020f5780638e597b83146102225780639d30d0631461022a5780639ec5a8941461023257600080fd5b80632e1a7d4d116100de5780632e1a7d4d1461019857806344387cc2146101ad57806375d85b8f146101c0578063881d8a40146101d357600080fd5b80630bfd36cf146101105780630c486495146101395780631d0cf6831461015a578063288c6ed214610185575b600080fd5b61012361011e366004611410565b6102b4565b6040516101309190611429565b60405180910390f35b61014c61014736600461146d565b610316565b604051908152602001610130565b60015461016d906001600160a01b031681565b6040516001600160a01b039091168152602001610130565b61014c610193366004611410565b6103eb565b6101ab6101a6366004611410565b6104ac565b005b600b5461016d906001600160a01b031681565b6101ab6101ce3660046114a5565b61058c565b6101fa6101e1366004611410565b6008602052600090815260409020805460019091015482565b60408051928352602083019190915201610130565b60005461016d906001600160a01b031681565b60035461014c565b60025461014c565b600c5461016d906001600160a01b031681565b600a5461016d906001600160a01b031681565b6101ab610266366004611576565b6109ed565b6101ab61027936600461146d565b610b98565b6101ab61028c3660046115b9565b611150565b6102a461029f366004611410565b6111f3565b60405161013094939291906115f8565b60008181526009602090815260409182902080548351818402810184019094528084526060939283018282801561030a57602002820191906000526020600020905b8154815260200190600101908083116102f6575b50505050509050919050565b600082815260076020908152604080832060019081015485855282852090910154600b54835163d12f772d60e01b815293519294919386936005936001600160a01b039093169263d12f772d92600480820193918290030181865afa158015610383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a79190611648565b6103b19190611677565b90506002816103c08486611699565b6103cb906001611699565b6103d591906116ac565b6103df9190611677565b93505050505b92915050565b6000806005600b60009054906101000a90046001600160a01b03166001600160a01b031663d12f772d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104679190611648565b6104719190611677565b905061138883116104825792915050565b8061049582624611c1633b9aca006112b0565b61049f9190611699565b9392505050565b50919050565b6000546001600160a01b031633146104f45760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b60448201526064015b60405180910390fd5b6104fc611342565b600a5460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561054d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057191906116c3565b50610589600160008051602061185e83398151915255565b50565b610594611342565b600b54604051632e4aba1f60e21b81523360048201526001600160a01b039091169063b92ae87c90602401602060405180830381865afa1580156105dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060091906116c3565b151560011461063a5760405162461bcd60e51b81526004016104eb9060208082526004908201526310b9bab160e11b604082015260600190565b600081116106725760405162461bcd60e51b81526020600482015260056024820152642173697a6560d81b60448201526064016104eb565b600061067d826103eb565b90506000606461068e8360506116ac565b6106989190611677565b600a546040516323b872dd60e01b8152336004820152306024820152604481018590529192506001600160a01b0316906323b872dd906064016020604051808303816000875af11580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071491906116c3565b50600c546001600160a01b031615610889576000610733600a84611677565b600a54600c5460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af115801561078a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ae91906116c3565b50600c54604051633698e06f60e21b8152600481018390526001600160a01b039091169063da6381bc90602401600060405180830381600087803b1580156107f557600080fd5b505af1158015610809573d6000803e3d6000fd5b5050600a5460015460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018690529116925063a9059cbb91506044016020604051808303816000875af1158015610862573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088691906116c3565b50505b600a54604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b1580156108cf57600080fd5b505af11580156108e3573d6000803e3d6000fd5b5050604080516080810182528681526000602080830182815233848601908152606085018c81526002805486526007909452959093208451815590516001820155915190820180546001600160a01b0319166001600160a01b039092169190911790559151909350909150600382019061095d9082611768565b5090505080600460008282546109739190611699565b9091555050600254604051610989908690611828565b6040519081900381209033907fd5756611f299ae3fab8d0ed7d7d087b43dde9d1e0766447349bcec247a40229590600090a4600280549060006109cb83611844565b919050555050506109e9600160008051602061185e83398151915255565b5050565b60006109f761138e565b805490915060ff600160401b820416159067ffffffffffffffff16600081158015610a1f5750825b905060008267ffffffffffffffff166001148015610a3c5750303b155b905081158015610a4a575080155b15610a685760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a9257845460ff60401b1916600160401b1785555b6001600160a01b03881615801590610ab257506001600160a01b03871615155b8015610ac657506001600160a01b03861615155b610afa5760405162461bcd60e51b8152602060048201526005602482015264217a65726f60d81b60448201526064016104eb565b610b026113b7565b60008054336001600160a01b031991821617909155600a805482166001600160a01b038b811691909117909155600180548316898316179055600b80549092169089161790558315610b8e57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610ba0611342565b600b54604051632e4aba1f60e21b81523360048201526001600160a01b039091169063b92ae87c90602401602060405180830381865afa158015610be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0c91906116c3565b1515600114610c465760405162461bcd60e51b81526004016104eb9060208082526004908201526310b9bab160e11b604082015260600190565b600082815260066020908152604080832084845290915290205460ff1615610c9a5760405162461bcd60e51b81526020600482015260076024820152662165786973747360c81b60448201526064016104eb565b808203610cd15760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064016104eb565b6000828152600760205260409020600201546001600160a01b031615801590610d1357506000818152600760205260409020600201546001600160a01b031615155b610d475760405162461bcd60e51b8152602060048201526005602482015264216c696e6b60d81b60448201526064016104eb565b6000610d538383610316565b600a546040516323b872dd60e01b8152336004820152306024820152604481018390529192506001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610dab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcf91906116c3565b50600a546001600160a01b03166342966c686064610dee8460506116ac565b610df89190611677565b6040518263ffffffff1660e01b8152600401610e1691815260200190565b600060405180830381600087803b158015610e3057600080fd5b505af1158015610e44573d6000803e3d6000fd5b5050600c546001600160a01b0316159150610fbe9050576000610e68600a83611677565b600a54600c5460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af1158015610ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee391906116c3565b50600c54604051633698e06f60e21b8152600481018390526001600160a01b039091169063da6381bc90602401600060405180830381600087803b158015610f2a57600080fd5b505af1158015610f3e573d6000803e3d6000fd5b5050600a5460015460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018690529116925063a9059cbb91506044016020604051808303816000875af1158015610f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbb91906116c3565b50505b604080518082018252848152602080820185815260035460009081526008835284812093518455905160019384015586815260079091529190912081015461100591611699565b600084815260076020526040808220600190810193909355848252902081015461102e91611699565b600083815260076020908152604080832060019081019490945586835260068083528184208785528352818420805460ff19908116871790915590835281842088855283528184208054909116851790556009825280832060038054825480880184559286528486209092019190915586845290832090548154948501825590835291209091015560646110c38260506116ac565b6110cd9190611677565b600560008282546110de9190611699565b9091555050600354604080518581526020810185905233917ffac4215d8cc179f7fb2ca407359e0c2c84b596da6e544d394b164b4516659470910160405180910390a36001600360008282546111349190611699565b9091555050600160008051602061185e83398151915255505050565b6000546001600160a01b031633146111935760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b60448201526064016104eb565b6001600160a01b0381166111d15760405162461bcd60e51b8152602060048201526005602482015264217a65726f60d81b60448201526064016104eb565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6007602052600090815260409020805460018201546002830154600384018054939492936001600160a01b03909216929161122d906116e5565b80601f0160208091040260200160405190810160405280929190818152602001828054611259906116e5565b80156112a65780601f1061127b576101008083540402835291602001916112a6565b820191906000526020600020905b81548152906001019060200180831161128957829003601f168201915b5050505050905084565b8282028183858304148515170261133b5760001983850981811082019003828486098360000384168285116112ed5763ae47f7026000526004601cfd5b9384900493838211909203600083900383900460010102920304176002600383028118808402820302808402820302808402820302808402820302808402820302808402909103020261049f565b0492915050565b60008051602061185e83398151915280546001190161137457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b600160008051602061185e83398151915255565b6000807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006103e5565b6113bf6113c9565b6113c76113ee565b565b6113d16113f6565b6113c757604051631afcd79f60e31b815260040160405180910390fd5b61137a6113c9565b600061140061138e565b54600160401b900460ff16919050565b60006020828403121561142257600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561146157835183529284019291840191600101611445565b50909695505050505050565b6000806040838503121561148057600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156114b857600080fd5b823567ffffffffffffffff808211156114d057600080fd5b818501915085601f8301126114e457600080fd5b8135818111156114f6576114f661148f565b604051601f8201601f19908116603f0116810190838211818310171561151e5761151e61148f565b8160405282815288602084870101111561153757600080fd5b826020860160208301376000602093820184015298969091013596505050505050565b80356001600160a01b038116811461157157600080fd5b919050565b60008060006060848603121561158b57600080fd5b6115948461155a565b92506115a26020850161155a565b91506115b06040850161155a565b90509250925092565b6000602082840312156115cb57600080fd5b61049f8261155a565b60005b838110156115ef5781810151838201526020016115d7565b50506000910152565b84815283602082015260018060a01b038316604082015260806060820152600082518060808401526116318160a08501602087016115d4565b601f01601f19169190910160a00195945050505050565b60006020828403121561165a57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008261169457634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156103e5576103e5611661565b80820281158282048414176103e5576103e5611661565b6000602082840312156116d557600080fd5b8151801515811461049f57600080fd5b600181811c908216806116f957607f821691505b6020821081036104a657634e487b7160e01b600052602260045260246000fd5b601f82111561176357600081815260208120601f850160051c810160208610156117405750805b601f850160051c820191505b8181101561175f5782815560010161174c565b5050505b505050565b815167ffffffffffffffff8111156117825761178261148f565b6117968161179084546116e5565b84611719565b602080601f8311600181146117cb57600084156117b35750858301515b600019600386901b1c1916600185901b17855561175f565b600085815260208120601f198616915b828110156117fa578886015182559484019460019091019084016117db565b50858210156118185787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000825161183a8184602087016115d4565b9190910192915050565b60006001820161185657611856611661565b506001019056fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a164736f6c6343000814000a
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.