Source Code
Overview
S Balance
More Info
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18294761 | 28 hrs ago | 0 S | ||||
18294761 | 28 hrs ago | Contract Creation | 0 S | |||
18294761 | 28 hrs ago | 0 S | ||||
18065789 | 2 days ago | 0 S | ||||
18065789 | 2 days ago | Contract Creation | 0 S | |||
18065789 | 2 days ago | 0 S | ||||
18065127 | 2 days ago | 0 S | ||||
18065127 | 2 days ago | Contract Creation | 0 S | |||
18065127 | 2 days ago | 0 S | ||||
18029877 | 2 days ago | 0 S | ||||
18029877 | 2 days ago | Contract Creation | 0 S | |||
18029877 | 2 days ago | 0 S | ||||
17573391 | 4 days ago | 0 S | ||||
17573391 | 4 days ago | Contract Creation | 0 S | |||
17573391 | 4 days ago | 0 S | ||||
16111394 | 10 days ago | 0 S | ||||
16111394 | 10 days ago | Contract Creation | 0 S | |||
16111394 | 10 days ago | 0 S | ||||
16111044 | 10 days ago | 0 S | ||||
16111044 | 10 days ago | Contract Creation | 0 S | |||
16111044 | 10 days ago | 0 S | ||||
16110278 | 10 days ago | 0 S | ||||
16110278 | 10 days ago | Contract Creation | 0 S | |||
16110278 | 10 days ago | 0 S | ||||
16109571 | 10 days ago | 0 S |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
BondingCurveFactory
Compiler Version
v0.8.28+commit.7893614a
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.0; import "./interfaces/IBondingCurveFactory.sol"; import "./BondingCurve.sol"; contract BondingCurveFactory is IBondingCurveFactory { mapping(address => address) public override getCurve; address[] public allCurves; event CurveCreated(address indexed token, address curve, address migrator); function createCurve(address token, address migrator) external override returns (address curve) { require(token != address(0), "zero address"); require(getCurve[token] == address(0), "curve exists"); bytes memory bytecode = type(BondingCurve).creationCode; bytes32 salt = keccak256(abi.encodePacked(token, migrator)); assembly { curve := create2(0, add(bytecode, 32), mload(bytecode), salt) } BondingCurve(curve).initialize(token, migrator); getCurve[token] = curve; allCurves.push(curve); emit CurveCreated(token, curve, migrator); } function allCurvesLength() external view returns (uint) { return allCurves.length; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, * consider using {ReentrancyGuardTransient} instead. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // 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 { // 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) { return _status == ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; import "./libraries/TransferHelper.sol"; import "./interfaces/IERC20.sol"; import "./interfaces/IBondingCurve.sol"; import "./libraries/BondingCurveLibrary.sol"; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; // import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; contract BondingCurve is ReentrancyGuard, IBondingCurve { address public immutable factory; address public migrator; address public token; // meme token uint256 private reserve0 = 1073000191 ether; uint256 private reserve1 = 1.5 ether; uint256 public constant rate = 2096; // test = 6000; default = 2096 bool public isMarketCapReached; uint256 private initialized; event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint256 reserve0, uint256 reserve1); event RemoveLiquidity(uint256 tokenAmount, uint256 ehter); constructor() { factory = msg.sender; } function initialize(address _token, address _migrator) external { require(msg.sender == factory, 'FORBIDDEN'); require(initialized == 0, 'already initialized'); require(_token != address(0), 'zero address'); token = _token; migrator = _migrator; initialized = 1; } function getReserves() external view returns (uint, uint) { return (reserve0, reserve1); } // buy meme token // amount = meme token out amount function buy(uint256 amountOut, uint256 maxEthCost) external payable nonReentrant { require(!isMarketCapReached, "Market Cap reached"); uint256 amountDiff = IERC20(token).balanceOf(address(this)) - amountOut; require(amountDiff > 0, "only 10,000,000,000"); // check if the meme token is reached the market cap if (amountDiff < _migrateToken()) { amountOut = IERC20(token).balanceOf(address(this)) - _migrateToken(); isMarketCapReached = true; } uint ethIn = BondingCurveLibrary.getAmountIn(amountOut, reserve1, reserve0); require(ethIn <= maxEthCost, "Cost ETH too high"); TransferHelper.safeTransfer(token, msg.sender, amountOut); TransferHelper.safeTransferETH(msg.sender, msg.value - ethIn); _update(reserve0 - amountOut, reserve1 + ethIn); emit Swap(msg.sender, 0, ethIn, amountOut, 0, msg.sender); } function sell(uint256 amountIn, uint256 minEthOut) external nonReentrant { require(!isMarketCapReached, "Market Cap reached"); uint ethOut = BondingCurveLibrary.getAmountOut(amountIn, reserve0, reserve1); require(ethOut >= minEthOut, "Get ETH too low"); require(ethOut <= address(this).balance, "Not enough ETH"); TransferHelper.safeTransferFrom(token, msg.sender, address(this), amountIn); TransferHelper.safeTransferETH(msg.sender, ethOut); _update(reserve0 + amountIn, reserve1 - ethOut); emit Swap(msg.sender, amountIn, 0, 0, ethOut, msg.sender); } function _update(uint reserve0_, uint reserve1_) internal { reserve0 = reserve0_; reserve1 = reserve1_; emit Sync(reserve0, reserve1); } function migrateToken() public pure returns (uint256 amount) { return _migrateToken(); } function _migrateToken() internal pure returns (uint256 amount) { amount = 1e9 * rate * 10 ** 18 / 1e4 ; } function removeLiquidity() external { require(msg.sender == migrator, "migrator required"); require(isMarketCapReached, "Market Cap not reach"); TransferHelper.safeTransfer(token, migrator, _migrateToken()); uint eth = address(this).balance; TransferHelper.safeTransferETH(migrator, eth); emit RemoveLiquidity(_migrateToken(), eth); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; interface IBondingCurve { function initialize(address token0, address migrator) external; function buy(uint256 amount, uint256 maxEthCost) external payable; function sell(uint256 amount, uint256 minEthOutput) external; function removeLiquidity() external; function migrateToken() external returns (uint256 amount); function token() external returns (address); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; interface IBondingCurveFactory { function createCurve(address token, address migrator) external returns (address curve); function getCurve(address) external view returns (address); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.8.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity >= 0.8.0; library BondingCurveLibrary { // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) { require(amountIn != 0, 'INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn != 0 && reserveOut != 0, 'INSUFFICIENT_LIQUIDITY'); uint numerator = amountIn * reserveOut; uint denominator = reserveIn + amountIn; amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) { require(amountOut != 0, 'INSUFFICIENT_OUTPUT_AMOUNT'); require(reserveIn != 0 && reserveOut != 0, 'INSUFFICIENT_LIQUIDITY'); uint numerator = amountOut * reserveIn; uint denominator = reserveOut - amountOut; amountIn = (numerator / denominator) + 1; } }
// SPDX-License-Identifier: MIT pragma solidity >= 0.8.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'APPROVE_FAILED'); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'ETH_TRANSFER_FAILED'); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "viaIR": true, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"curve","type":"address"},{"indexed":false,"internalType":"address","name":"migrator","type":"address"}],"name":"CurveCreated","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allCurves","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allCurvesLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"migrator","type":"address"}],"name":"createCurve","outputs":[{"internalType":"address","name":"curve","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"getCurve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608080604052346015576111c5908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806361f029fb1461005757806388876b2c14610052578063a1eeba1f1461004d5763ce159c9a1461004857600080fd5b61014d565b6100f2565b6100d4565b34610098576020366003190112610098576001600160a01b0361007861009d565b16600052600060205260018060a01b036040600020541660805260206080f35b600080fd5b600435906001600160a01b038216820361009857565b602435906001600160a01b038216820361009857565b600091031261009857565b34610098576000366003190112610098576020600154604051908152f35b34610098576020366003190112610098576004356001548110156100985760016000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601546040516001600160a01b039091168152602090f35b346100985760403660031901126100985761016661009d565b61016e6100b3565b6001600160a01b038216610183811515610350565b6101c76101c16101b56101a88660018060a01b03166000526000602052604060002090565b546001600160a01b031690565b6001600160a01b031690565b1561038b565b610cf06101d660208201610403565b9080825260208201906104a08239604051606086811b6bffffffffffffffffffffffff19908116602084019081529187901b166034830152602882529061021e6048826103dc565b5190209151906000f5916001600160a01b03831690813b156100985760405163485cc95560e01b81526001600160a01b03868116600483015282166024820152916000908390604490829084905af190811561034b576102e4856102c561032c987f5beb1a9316febdf79449530de709e3300ab301e2a47cf3ce7928a27e11ca9c1d9661030f96610330575b506001600160a01b0316600090815260208190526040902090565b80546001600160a01b0319166001600160a01b03909216919091179055565b6102ed8561041f565b604080516001600160a01b038088168252909216602083015290918291820190565b0390a26040516001600160a01b0390911681529081906020820190565b0390f35b8061033f6000610345936103dc565b806100c9565b386102aa565b610413565b1561035757565b60405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606490fd5b1561039257565b60405162461bcd60e51b815260206004820152600c60248201526b63757276652065786973747360a01b6044820152606490fd5b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176103fe57604052565b6103c6565b9061041160405192836103dc565b565b6040513d6000823e3d90fd5b600154680100000000000000008110156103fe5760018101600155600060015482101561048b57600190527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03909216919091179055565b634e487b7160e01b81526032600452602490fdfe60a08060405234604a5760016000556b037790a0e8714009b49c00006003556714d1120d7b16000060045533608052610ca09081610050823960805181818161064301526107ee0152f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081630902f1ac146109435750806325a6547a146109205780632c4e722e14610903578063485cc955146107b057806367b9a2861461069b5780637cd07e4714610672578063c45a01551461062d578063d548280414610606578063d6febde814610328578063d79875eb146100c65763fc0c546a1461009857600080fd5b346100c15760003660031901126100c1576002546040516001600160a01b039091168152602090f35b600080fd5b346100c1576100d436610967565b6100dc610bc9565b6100eb60ff600554161561097d565b6003546004549083156102e3576101218461011b61012794841515806102da575b61011590610beb565b82610a10565b92610a03565b90610a23565b9081106102a35747811161026d5760008060018060a01b03600254166040518260208201916323b872dd60e01b8352336024820152306044820152876064820152606481526101776084826109be565b51925af1610183610a43565b8161023e575b5015610202576101998133610b56565b6101ba6101a883600354610a03565b6101b4836004546109f6565b90610c30565b6040519182526000602083015260006040830152606082015233907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82260803392a36001600055005b60405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606490fd5b8051801592508215610253575b505083610189565b6102669250602080918301019101610a83565b838061024b565b60405162461bcd60e51b815260206004820152600e60248201526d09cdee840cadcdeeaced0408aa8960931b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e4765742045544820746f6f206c6f7760881b6044820152606490fd5b5080151561010c565b60405162461bcd60e51b815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e54000000000000006044820152606490fd5b61033136610967565b9061033a610bc9565b8060055461034b60ff82161561097d565b6002546040516370a0823160e01b81523060048201526001600160a01b0390911692602082602481875afa801561058b576000906105d2575b61038e92506109f6565b8015610597576aad6086c48495c238000000809110610509575b505060045460035483156104c457610121846103d2846103d8951515806104bb5761011590610beb565b926109f6565b92600184018094116104a557831161046c57816103f6913390610a9b565b61040961040383346109f6565b33610b56565b610424610418826003546109f6565b6101b484600454610a03565b6040519160008352602083015260408201526000606082015233907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82260803392a36001600055005b60405162461bcd60e51b8152602060048201526011602482015270086dee6e8408aa89040e8dede40d0d2ced607b1b6044820152606490fd5b634e487b7160e01b600052601160045260246000fd5b5084151561010c565b60405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e540000000000006044820152606490fd5b6040516370a0823160e01b8152306004820152919350602082602481865afa91821561058b57600092610554575b5081039081116104a55760ff1990921660011760055583806103a8565b90916020823d602011610583575b8161056f602093836109be565b810103126105805750519085610537565b80fd5b3d9150610562565b6040513d6000823e3d90fd5b60405162461bcd60e51b815260206004820152601360248201527206f6e6c792031302c3030302c3030302c30303606c1b6044820152606490fd5b506020823d6020116105fe575b816105ec602093836109be565b810103126100c15761038e9151610384565b3d91506105df565b346100c15760003660031901126100c15760206aad6086c48495c238000000604051908152f35b346100c15760003660031901126100c1576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100c15760003660031901126100c1576001546040516001600160a01b039091168152602090f35b346100c15760003660031901126100c1576001546001600160a01b0316338190036107775760ff600554161561073b576002547f9101fb4cb96b608de64eae79af26fc5fbe69904c5e3b6108204eefd9212f4770916040916aad6086c48495c23800000091610715918391906001600160a01b0316610a9b565b600154479061072e9082906001600160a01b0316610b56565b82519182526020820152a1005b60405162461bcd60e51b815260206004820152601460248201527309ac2e4d6cae84086c2e040dcdee840e4cac2c6d60631b6044820152606490fd5b60405162461bcd60e51b81526020600482015260116024820152701b5a59dc985d1bdc881c995c5d5a5c9959607a1b6044820152606490fd5b346100c15760403660031901126100c1576004356001600160a01b038116908190036100c1576024356001600160a01b03811691908290036100c1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036108d257600654610897578015610863576bffffffffffffffffffffffff60a01b60025416176002556bffffffffffffffffffffffff60a01b60015416176001556001600655600080f35b60405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b60405162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b6044820152606490fd5b346100c15760003660031901126100c15760206040516108308152f35b346100c15760003660031901126100c157602060ff600554166040519015158152f35b346100c15760003660031901126100c1576040906003546004549082526020820152f35b60409060031901126100c1576004359060243590565b1561098457565b60405162461bcd60e51b815260206004820152601260248201527113585c9ad95d0810d85c081c995858da195960721b6044820152606490fd5b90601f8019910116810190811067ffffffffffffffff8211176109e057604052565b634e487b7160e01b600052604160045260246000fd5b919082039182116104a557565b919082018092116104a557565b818102929181159184041417156104a557565b8115610a2d570490565b634e487b7160e01b600052601260045260246000fd5b3d15610a7e573d9067ffffffffffffffff82116109e05760405191610a72601f8201601f1916602001846109be565b82523d6000602084013e565b606090565b908160209103126100c1575180151581036100c15790565b6000929183809360405190602082019363a9059cbb60e01b855260018060a01b03166024830152604482015260448152610ad66064826109be565b51925af1610ae2610a43565b81610b27575b5015610af057565b60405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606490fd5b8051801592508215610b3c575b505038610ae8565b610b4f9250602080918301019101610a83565b3880610b34565b6000809160209360405190610b6b86836109be565b83825285820191601f19870136843751925af1610b86610a43565b5015610b8f5750565b6064906040519062461bcd60e51b82526004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152fd5b600260005414610bda576002600055565b633ee5aeb560e01b60005260046000fd5b15610bf257565b60405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b6044820152606490fd5b6040907fcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a92816003558060045582519182526020820152a156fea2646970667358221220b2189e757048ddde8aa46feca95b2f19c2302dab6e11f33bf63d42c22dabb57464736f6c634300081c0033a26469706673582212200b3416dfa86d6da6a3b98b1a39b8bde21aacbc6e0837e9831178ddf81735cbbb64736f6c634300081c0033
Deployed Bytecode
0x6080604052600436101561001257600080fd5b60003560e01c806361f029fb1461005757806388876b2c14610052578063a1eeba1f1461004d5763ce159c9a1461004857600080fd5b61014d565b6100f2565b6100d4565b34610098576020366003190112610098576001600160a01b0361007861009d565b16600052600060205260018060a01b036040600020541660805260206080f35b600080fd5b600435906001600160a01b038216820361009857565b602435906001600160a01b038216820361009857565b600091031261009857565b34610098576000366003190112610098576020600154604051908152f35b34610098576020366003190112610098576004356001548110156100985760016000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601546040516001600160a01b039091168152602090f35b346100985760403660031901126100985761016661009d565b61016e6100b3565b6001600160a01b038216610183811515610350565b6101c76101c16101b56101a88660018060a01b03166000526000602052604060002090565b546001600160a01b031690565b6001600160a01b031690565b1561038b565b610cf06101d660208201610403565b9080825260208201906104a08239604051606086811b6bffffffffffffffffffffffff19908116602084019081529187901b166034830152602882529061021e6048826103dc565b5190209151906000f5916001600160a01b03831690813b156100985760405163485cc95560e01b81526001600160a01b03868116600483015282166024820152916000908390604490829084905af190811561034b576102e4856102c561032c987f5beb1a9316febdf79449530de709e3300ab301e2a47cf3ce7928a27e11ca9c1d9661030f96610330575b506001600160a01b0316600090815260208190526040902090565b80546001600160a01b0319166001600160a01b03909216919091179055565b6102ed8561041f565b604080516001600160a01b038088168252909216602083015290918291820190565b0390a26040516001600160a01b0390911681529081906020820190565b0390f35b8061033f6000610345936103dc565b806100c9565b386102aa565b610413565b1561035757565b60405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606490fd5b1561039257565b60405162461bcd60e51b815260206004820152600c60248201526b63757276652065786973747360a01b6044820152606490fd5b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176103fe57604052565b6103c6565b9061041160405192836103dc565b565b6040513d6000823e3d90fd5b600154680100000000000000008110156103fe5760018101600155600060015482101561048b57600190527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03909216919091179055565b634e487b7160e01b81526032600452602490fdfe60a08060405234604a5760016000556b037790a0e8714009b49c00006003556714d1120d7b16000060045533608052610ca09081610050823960805181818161064301526107ee0152f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081630902f1ac146109435750806325a6547a146109205780632c4e722e14610903578063485cc955146107b057806367b9a2861461069b5780637cd07e4714610672578063c45a01551461062d578063d548280414610606578063d6febde814610328578063d79875eb146100c65763fc0c546a1461009857600080fd5b346100c15760003660031901126100c1576002546040516001600160a01b039091168152602090f35b600080fd5b346100c1576100d436610967565b6100dc610bc9565b6100eb60ff600554161561097d565b6003546004549083156102e3576101218461011b61012794841515806102da575b61011590610beb565b82610a10565b92610a03565b90610a23565b9081106102a35747811161026d5760008060018060a01b03600254166040518260208201916323b872dd60e01b8352336024820152306044820152876064820152606481526101776084826109be565b51925af1610183610a43565b8161023e575b5015610202576101998133610b56565b6101ba6101a883600354610a03565b6101b4836004546109f6565b90610c30565b6040519182526000602083015260006040830152606082015233907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82260803392a36001600055005b60405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606490fd5b8051801592508215610253575b505083610189565b6102669250602080918301019101610a83565b838061024b565b60405162461bcd60e51b815260206004820152600e60248201526d09cdee840cadcdeeaced0408aa8960931b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e4765742045544820746f6f206c6f7760881b6044820152606490fd5b5080151561010c565b60405162461bcd60e51b815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e54000000000000006044820152606490fd5b61033136610967565b9061033a610bc9565b8060055461034b60ff82161561097d565b6002546040516370a0823160e01b81523060048201526001600160a01b0390911692602082602481875afa801561058b576000906105d2575b61038e92506109f6565b8015610597576aad6086c48495c238000000809110610509575b505060045460035483156104c457610121846103d2846103d8951515806104bb5761011590610beb565b926109f6565b92600184018094116104a557831161046c57816103f6913390610a9b565b61040961040383346109f6565b33610b56565b610424610418826003546109f6565b6101b484600454610a03565b6040519160008352602083015260408201526000606082015233907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82260803392a36001600055005b60405162461bcd60e51b8152602060048201526011602482015270086dee6e8408aa89040e8dede40d0d2ced607b1b6044820152606490fd5b634e487b7160e01b600052601160045260246000fd5b5084151561010c565b60405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e540000000000006044820152606490fd5b6040516370a0823160e01b8152306004820152919350602082602481865afa91821561058b57600092610554575b5081039081116104a55760ff1990921660011760055583806103a8565b90916020823d602011610583575b8161056f602093836109be565b810103126105805750519085610537565b80fd5b3d9150610562565b6040513d6000823e3d90fd5b60405162461bcd60e51b815260206004820152601360248201527206f6e6c792031302c3030302c3030302c30303606c1b6044820152606490fd5b506020823d6020116105fe575b816105ec602093836109be565b810103126100c15761038e9151610384565b3d91506105df565b346100c15760003660031901126100c15760206aad6086c48495c238000000604051908152f35b346100c15760003660031901126100c1576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346100c15760003660031901126100c1576001546040516001600160a01b039091168152602090f35b346100c15760003660031901126100c1576001546001600160a01b0316338190036107775760ff600554161561073b576002547f9101fb4cb96b608de64eae79af26fc5fbe69904c5e3b6108204eefd9212f4770916040916aad6086c48495c23800000091610715918391906001600160a01b0316610a9b565b600154479061072e9082906001600160a01b0316610b56565b82519182526020820152a1005b60405162461bcd60e51b815260206004820152601460248201527309ac2e4d6cae84086c2e040dcdee840e4cac2c6d60631b6044820152606490fd5b60405162461bcd60e51b81526020600482015260116024820152701b5a59dc985d1bdc881c995c5d5a5c9959607a1b6044820152606490fd5b346100c15760403660031901126100c1576004356001600160a01b038116908190036100c1576024356001600160a01b03811691908290036100c1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036108d257600654610897578015610863576bffffffffffffffffffffffff60a01b60025416176002556bffffffffffffffffffffffff60a01b60015416176001556001600655600080f35b60405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606490fd5b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b60405162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b6044820152606490fd5b346100c15760003660031901126100c15760206040516108308152f35b346100c15760003660031901126100c157602060ff600554166040519015158152f35b346100c15760003660031901126100c1576040906003546004549082526020820152f35b60409060031901126100c1576004359060243590565b1561098457565b60405162461bcd60e51b815260206004820152601260248201527113585c9ad95d0810d85c081c995858da195960721b6044820152606490fd5b90601f8019910116810190811067ffffffffffffffff8211176109e057604052565b634e487b7160e01b600052604160045260246000fd5b919082039182116104a557565b919082018092116104a557565b818102929181159184041417156104a557565b8115610a2d570490565b634e487b7160e01b600052601260045260246000fd5b3d15610a7e573d9067ffffffffffffffff82116109e05760405191610a72601f8201601f1916602001846109be565b82523d6000602084013e565b606090565b908160209103126100c1575180151581036100c15790565b6000929183809360405190602082019363a9059cbb60e01b855260018060a01b03166024830152604482015260448152610ad66064826109be565b51925af1610ae2610a43565b81610b27575b5015610af057565b60405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606490fd5b8051801592508215610b3c575b505038610ae8565b610b4f9250602080918301019101610a83565b3880610b34565b6000809160209360405190610b6b86836109be565b83825285820191601f19870136843751925af1610b86610a43565b5015610b8f5750565b6064906040519062461bcd60e51b82526004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152fd5b600260005414610bda576002600055565b633ee5aeb560e01b60005260046000fd5b15610bf257565b60405162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b6044820152606490fd5b6040907fcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a92816003558060045582519182526020820152a156fea2646970667358221220b2189e757048ddde8aa46feca95b2f19c2302dab6e11f33bf63d42c22dabb57464736f6c634300081c0033a26469706673582212200b3416dfa86d6da6a3b98b1a39b8bde21aacbc6e0837e9831178ddf81735cbbb64736f6c634300081c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.