Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 6,795 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Multi Path Swap | 12316158 | 1310 days ago | IN | 0 ETH | 0.01939162 | ||||
Multi Path Swap | 12315999 | 1310 days ago | IN | 0 ETH | 0.01810359 | ||||
Multi Path Swap | 12315989 | 1310 days ago | IN | 0 ETH | 0.01831069 | ||||
Multi Path Swap | 12315984 | 1310 days ago | IN | 0 ETH | 0.01707972 | ||||
Swap | 12315896 | 1310 days ago | IN | 0 ETH | 0.0074892 | ||||
Multi Path Swap | 12315883 | 1310 days ago | IN | 0 ETH | 0.01025028 | ||||
Multi Path Swap | 12315818 | 1310 days ago | IN | 0 ETH | 0.01673898 | ||||
Multi Path Swap | 12315759 | 1310 days ago | IN | 0 ETH | 0.01906317 | ||||
Multi Path Swap | 12315538 | 1310 days ago | IN | 0 ETH | 0.01031114 | ||||
Multi Path Swap ... | 12315509 | 1310 days ago | IN | 0 ETH | 0.01622252 | ||||
Multi Path Swap | 12315495 | 1310 days ago | IN | 0 ETH | 0.01370446 | ||||
Multi Path Swap | 12315491 | 1310 days ago | IN | 0 ETH | 0.01218296 | ||||
Multi Path Swap | 12315476 | 1310 days ago | IN | 0 ETH | 0.01823967 | ||||
Multi Path Swap | 12315406 | 1310 days ago | IN | 0 ETH | 0.02832746 | ||||
Multi Path Swap | 12315404 | 1310 days ago | IN | 0 ETH | 0.02091967 | ||||
Multi Path Swap | 12315397 | 1310 days ago | IN | 0 ETH | 0.01990155 | ||||
Multi Path Swap | 12315161 | 1310 days ago | IN | 0 ETH | 0.01257802 | ||||
Multi Path Swap | 12315123 | 1310 days ago | IN | 0 ETH | 0.03223013 | ||||
Swap | 12315102 | 1310 days ago | IN | 0 ETH | 0.01264597 | ||||
Multi Path Swap | 12315041 | 1310 days ago | IN | 0 ETH | 0.02166917 | ||||
Multi Path Swap | 12314999 | 1310 days ago | IN | 0 ETH | 0.01604597 | ||||
Multi Path Swap | 12314988 | 1310 days ago | IN | 0 ETH | 0.02067876 | ||||
Multi Path Swap | 12314918 | 1310 days ago | IN | 0 ETH | 0.01511525 | ||||
Multi Path Swap | 12314914 | 1310 days ago | IN | 0 ETH | 0.02268337 | ||||
Multi Path Swap | 12314772 | 1310 days ago | IN | 0 ETH | 0.01988142 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
12314442 | 1310 days ago | 4.1 ETH | ||||
12314237 | 1310 days ago | 4 ETH | ||||
12291724 | 1314 days ago | 1.29 ETH | ||||
12281466 | 1315 days ago | 0.4 ETH | ||||
12279175 | 1316 days ago | 8 ETH | ||||
12261275 | 1319 days ago | 45 ETH | ||||
12256590 | 1319 days ago | 3 ETH | ||||
12256588 | 1319 days ago | 3 ETH | ||||
12256583 | 1319 days ago | 4 ETH | ||||
12255187 | 1320 days ago | 25 ETH | ||||
12249470 | 1320 days ago | 1 ETH | ||||
12249455 | 1320 days ago | 5.9 ETH | ||||
12226083 | 1324 days ago | 5 ETH | ||||
12221908 | 1325 days ago | 100 ETH | ||||
12219293 | 1325 days ago | 20.01784532 ETH | ||||
12217968 | 1325 days ago | 9.4 ETH | ||||
12217751 | 1325 days ago | 0.01 ETH | ||||
12217749 | 1325 days ago | 0.01 ETH | ||||
12217749 | 1325 days ago | 0.01 ETH | ||||
12217749 | 1325 days ago | 0.01 ETH | ||||
12217745 | 1325 days ago | 0.01 ETH | ||||
12217744 | 1325 days ago | 0.01 ETH | ||||
12217739 | 1325 days ago | 0.01 ETH | ||||
12217732 | 1325 days ago | 0.01 ETH | ||||
12217730 | 1325 days ago | 0.01 ETH |
Loading...
Loading
Contract Name:
AtomicTokenProxy
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-02-12 */ pragma solidity 0.6.12; pragma experimental ABIEncoderV2; contract AtomicTypes{ struct SwapParams{ Token sellToken; uint256 input; Token buyToken; uint minOutput; } struct DistributionParams{ IAtomicExchange[] exchangeModules; bytes[] exchangeData; uint256[] chunks; } event Trade( address indexed sellToken, uint256 sellAmount, address indexed buyToken, uint256 buyAmount, address indexed trader, address receiver ); } contract AtomicUtils{ // ETH and its wrappers address constant WETHAddress = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; IWETH constant WETH = IWETH(WETHAddress); Token constant ETH = Token(address(0)); address constant EEEAddress = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; Token constant EEE = Token(EEEAddress); // Universal function to query this contracts balance, supporting and Token function balanceOf(Token token) internal view returns(uint balance){ if(isETH(token)){ return address(this).balance; }else{ return token.balanceOf(address(this)); } } // Universal send function, supporting ETH and Token function send(Token token, address payable recipient, uint amount) internal { if(isETH(token)){ require( recipient.send(amount), "Sending of ETH failed." ); }else{ Token(token).transfer(recipient, amount); require( validateOptionalERC20Return(), "ERC20 token transfer failed." ); } } // Universal function to claim tokens from msg.sender function claimTokenFromSenderTo(Token _token, uint _amount, address _receiver) internal { if (isETH(_token)) { require(msg.value == _amount); // dont forward ETH }else{ require(msg.value == 0); _token.transferFrom(msg.sender, _receiver, _amount); } } // Token approval function supporting non-compliant tokens function approve(Token _token, address _spender, uint _amount) internal { if (!isETH(_token)) { _token.approve(_spender, _amount); require( validateOptionalERC20Return(), "ERC20 approval failed." ); } } // Validate return data of non-compliant erc20s function validateOptionalERC20Return() pure internal returns (bool){ uint256 success = 0; assembly { switch returndatasize() // Check the number of bytes the token contract returned case 0 { // Nothing returned, but contract did not throw > assume our transfer succeeded success := 1 } case 32 { // 32 bytes returned, result is the returned bool returndatacopy(0, 0, 32) success := mload(0) } } return success != 0; } function isETH(Token token) pure internal returns (bool){ if( address(token) == address(0) || address(token) == EEEAddress ){ return true; }else{ return false; } } function isWETH(Token token) pure internal returns (bool){ if(address(token) == WETHAddress){ return true; }else{ return false; } } // Source: https://github.com/GNSPS/solidity-bytes-utils/blob/master/contracts/BytesLib.sol function sliceBytes( bytes memory _bytes, uint256 _start, uint256 _length ) internal pure returns (bytes memory) { require(_bytes.length >= (_start + _length), "Read out of bounds"); bytes memory tempBytes; assembly { switch iszero(_length) case 0 { // Get a location of some free memory and store it in tempBytes as // Solidity does for memory variables. tempBytes := mload(0x40) // The first word of the slice result is potentially a partial // word read from the original array. To read it, we calculate // the length of that partial word and start copying that many // bytes into the array. The first word we copy will start with // data we don't care about, but the last `lengthmod` bytes will // land at the beginning of the contents of the new array. When // we're done copying, we overwrite the full first word with // the actual length of the slice. let lengthmod := and(_length, 31) // The multiplication in the next line is necessary // because when slicing multiples of 32 bytes (lengthmod == 0) // the following copy loop was copying the origin's length // and then ending prematurely not copying everything it should. let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod))) let end := add(mc, _length) for { // The multiplication in the next line has the same exact purpose // as the one above. let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start) } lt(mc, end) { mc := add(mc, 0x20) cc := add(cc, 0x20) } { mstore(mc, mload(cc)) } mstore(tempBytes, _length) //update free-memory pointer //allocating the array padded to 32 bytes like the compiler does now mstore(0x40, and(add(mc, 31), not(31))) } //if we want a zero-length slice let's just return a zero-length array default { tempBytes := mload(0x40) mstore(0x40, add(tempBytes, 0x20)) } } return tempBytes; } } contract AtomicModuleRegistry { address moduleRegistrar; mapping(address => bool) public isModule; constructor () public { moduleRegistrar = msg.sender; } modifier onlyRegistrar() { require(moduleRegistrar == msg.sender, "caller is not moduleRegistrar"); _; } function setNewRegistrar(address newRegistrar) public virtual onlyRegistrar { moduleRegistrar = newRegistrar; } function registerModule(address module, bool status) public virtual onlyRegistrar { isModule[module] = status; } } abstract contract IAtomicExchange is AtomicTypes{ function swap( SwapParams memory _swap, bytes memory data ) external payable virtual returns( uint output ); } contract AtomicBlue is AtomicUtils, AtomicTypes, AtomicModuleRegistry{ // IMPORTANT NOTICE: // NEVER set a token allowance to this contract, as everybody can do arbitrary calls from it. // When swapping tokens always go through AtomicTokenProxy. // This contract assumes token to swap has already been transfered to it when being called. Ether can be sent directly with the call. // perform a distributed swap and transfer outcome to _receipient function swapAndSend( SwapParams memory _swap, DistributionParams memory _distribution, address payable _receipient ) public payable returns (uint _output){ // execute swaps on behalf of trader _output = doDistributedSwap(_swap, _distribution); // check if output of swap is sufficient require(_output >= _swap.minOutput, "Slippage limit exceeded."); // send swap output to receipient send(_swap.buyToken, _receipient, _output); emit Trade( address(_swap.sellToken), _swap.input, address(_swap.buyToken), _output, msg.sender, _receipient ); } function multiPathSwapAndSend( SwapParams memory _swap, Token[] calldata _path, DistributionParams[] memory _distribution, address payable _receipient ) public payable returns (uint _output){ // verify path require( _path[0] == _swap.sellToken && _path[_path.length - 1] == _swap.buyToken && _path.length >= 2 ); // execute swaps on behalf of trader _output = _swap.input; for(uint i = 1; i < _path.length; i++){ _output = doDistributedSwap(SwapParams({ sellToken : _path[i - 1], input : _output, // output of last swap is input for this one buyToken : _path[i], minOutput : 0 // we check the total outcome in the end }), _distribution[i - 1]); } // check if output of swap is sufficient require(_output >= _swap.minOutput, "Slippage limit exceeded."); // send swap output to sender send(_swap.buyToken, _receipient, _output); emit Trade( address(_swap.sellToken), _swap.input, address(_swap.buyToken), _output, msg.sender, _receipient ); } // internal function to perform a distributed swap function doDistributedSwap( SwapParams memory _swap, DistributionParams memory _distribution ) internal returns(uint){ // count totalChunks uint totalChunks = 0; for(uint i = 0; i < _distribution.chunks.length; i++){ totalChunks += _distribution.chunks[i]; } // route trades to the different exchanges for(uint i = 0; i < _distribution.exchangeModules.length; i++){ IAtomicExchange exchange = _distribution.exchangeModules[i]; uint thisInput = _swap.input * _distribution.chunks[i] / totalChunks; if(address(exchange) == address(0)){ // trade is not using an exchange module but a direct call (address target, uint value, bytes memory callData) = abi.decode(_distribution.exchangeData[i], (address, uint, bytes)); (bool success, bytes memory data) = address(target).call.value(value)(callData); require(success, "Exchange call reverted."); }else{ // delegate call to the exchange module require(isModule[address(exchange)], "unknown exchangeModule"); (bool success, bytes memory data) = address(exchange).delegatecall( abi.encodePacked(// This encodes the function to call and the parameters we are passing to the settlement function exchange.swap.selector, abi.encode( SwapParams({ sellToken : _swap.sellToken, input : thisInput, buyToken : _swap.buyToken, minOutput : 1 // we are checking the combined output in the end }), _distribution.exchangeData[i] ) ) ); require(success, "Exchange module reverted."); } } return balanceOf(_swap.buyToken); } // perform a distributed swap function swap( SwapParams memory _swap, DistributionParams memory _distribution ) public payable returns (uint _output){ return swapAndSend(_swap, _distribution, msg.sender); } // perform a multi-path distributed swap function multiPathSwap( SwapParams memory _swap, Token[] calldata _path, DistributionParams[] memory _distribution ) public payable returns (uint _output){ return multiPathSwapAndSend(_swap, _path, _distribution, msg.sender); } // allow ETH receivals receive() external payable {} } contract AtomicTokenProxy is AtomicUtils, AtomicTypes{ AtomicBlue constant atomic = AtomicBlue(0xAc7E32eB5ceC7eB7B6B43A305B64d1d3487b97A0); // perform a distributed swap and transfer outcome to _receipient function swapAndSend( SwapParams calldata _swap, DistributionParams calldata _distribution, address payable _receipient ) public payable returns (uint _output){ // deposit tokens to executor claimTokenFromSenderTo(_swap.sellToken, _swap.input, address(atomic)); // execute swaps on behalf of sender _output = atomic.swapAndSend.value(msg.value)(_swap, _distribution, _receipient); } // perform a multi-path distributed swap and transfer outcome to _receipient function multiPathSwapAndSend( SwapParams calldata _swap, Token[] calldata _path, DistributionParams[] calldata _distribution, address payable _receipient ) public payable returns (uint _output){ // deposit tokens to executor claimTokenFromSenderTo(_swap.sellToken, _swap.input, address(atomic)); // execute swaps on behalf of sender _output = atomic.multiPathSwapAndSend.value(msg.value)( _swap, _path, _distribution, _receipient ); } // perform a distributed swap function swap( SwapParams calldata _swap, DistributionParams calldata _distribution ) public payable returns (uint _output){ return swapAndSend(_swap, _distribution, msg.sender); } // perform a distributed swap and burn optimal gastoken amount afterwards function swapWithGasTokens( SwapParams calldata _swap, DistributionParams calldata _distribution, IGasToken _gasToken, uint _gasQtyPerToken ) public payable returns (uint _output){ uint startGas = gasleft(); _output = swapAndSend(_swap, _distribution, msg.sender); _gasToken.freeFromUpTo(msg.sender, (startGas - gasleft() + 25000) / _gasQtyPerToken); } // perform a multi-path distributed swap function multiPathSwap( SwapParams calldata _swap, Token[] calldata _path, DistributionParams[] calldata _distribution ) public payable returns (uint _output){ return multiPathSwapAndSend(_swap, _path, _distribution, msg.sender); } // perform a multi-path distributed swap and burn optimal gastoken amount afterwards function multiPathSwapWithGasTokens( SwapParams calldata _swap, Token[] calldata _path, DistributionParams[] calldata _distribution, IGasToken _gasToken, uint _gasQtyPerToken ) public payable returns (uint _output){ uint startGas = gasleft(); _output = multiPathSwapAndSend(_swap, _path, _distribution, msg.sender); _gasToken.freeFromUpTo(msg.sender, (startGas - gasleft() + 25000) / _gasQtyPerToken); } // perform a distributed swap, send outcome to _receipient and burn optimal gastoken amount afterwards function swapAndSendWithGasTokens( SwapParams calldata _swap, DistributionParams calldata _distribution, address payable _receipient, IGasToken _gasToken, uint _gasQtyPerToken ) public payable returns (uint _output){ uint startGas = gasleft(); _output = swapAndSend(_swap, _distribution, _receipient); _gasToken.freeFromUpTo(msg.sender, (startGas - gasleft() + 25000) / _gasQtyPerToken); } // perform a multi-path distributed swap, send outcome to _receipient and burn optimal gastoken amount afterwards function multiPathSwapAndSendWithGasTokens( SwapParams calldata _swap, Token[] calldata _path, DistributionParams[] calldata _distribution, address payable _receipient, IGasToken _gasToken, uint _gasQtyPerToken ) public payable returns (uint _output){ uint startGas = gasleft(); _output = multiPathSwapAndSend(_swap, _path, _distribution, _receipient); _gasToken.freeFromUpTo(msg.sender, (startGas - gasleft() + 25000) / _gasQtyPerToken); } } // Interfaces contract Token { function totalSupply() view public returns (uint256 supply) {} function balanceOf(address _owner) view public returns (uint256 balance) {} function transfer(address _to, uint256 _value) public {} function transferFrom(address _from, address _to, uint256 _value) public {} function approve(address _spender, uint256 _value) public {} function allowance(address _owner, address _spender) view public returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); uint256 public decimals; string public name; } contract IWETH is Token { function deposit() public payable {} function withdraw(uint256 amount) public {} } contract IGasToken { function freeUpTo(uint256 value) public returns (uint256) { } function free(uint256 value) public returns (uint256) { } function freeFrom(address from, uint256 value) public returns (uint256) { } function freeFromUpTo(address from, uint256 value) public returns (uint256) { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sellToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"sellAmount","type":"uint256"},{"indexed":true,"internalType":"address","name":"buyToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"buyAmount","type":"uint256"},{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"}],"name":"Trade","type":"event"},{"inputs":[{"components":[{"internalType":"contract Token","name":"sellToken","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"contract Token","name":"buyToken","type":"address"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"internalType":"struct AtomicTypes.SwapParams","name":"_swap","type":"tuple"},{"internalType":"contract Token[]","name":"_path","type":"address[]"},{"components":[{"internalType":"contract IAtomicExchange[]","name":"exchangeModules","type":"address[]"},{"internalType":"bytes[]","name":"exchangeData","type":"bytes[]"},{"internalType":"uint256[]","name":"chunks","type":"uint256[]"}],"internalType":"struct AtomicTypes.DistributionParams[]","name":"_distribution","type":"tuple[]"}],"name":"multiPathSwap","outputs":[{"internalType":"uint256","name":"_output","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"contract Token","name":"sellToken","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"contract Token","name":"buyToken","type":"address"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"internalType":"struct AtomicTypes.SwapParams","name":"_swap","type":"tuple"},{"internalType":"contract Token[]","name":"_path","type":"address[]"},{"components":[{"internalType":"contract IAtomicExchange[]","name":"exchangeModules","type":"address[]"},{"internalType":"bytes[]","name":"exchangeData","type":"bytes[]"},{"internalType":"uint256[]","name":"chunks","type":"uint256[]"}],"internalType":"struct AtomicTypes.DistributionParams[]","name":"_distribution","type":"tuple[]"},{"internalType":"address payable","name":"_receipient","type":"address"}],"name":"multiPathSwapAndSend","outputs":[{"internalType":"uint256","name":"_output","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"contract Token","name":"sellToken","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"contract Token","name":"buyToken","type":"address"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"internalType":"struct AtomicTypes.SwapParams","name":"_swap","type":"tuple"},{"internalType":"contract Token[]","name":"_path","type":"address[]"},{"components":[{"internalType":"contract IAtomicExchange[]","name":"exchangeModules","type":"address[]"},{"internalType":"bytes[]","name":"exchangeData","type":"bytes[]"},{"internalType":"uint256[]","name":"chunks","type":"uint256[]"}],"internalType":"struct AtomicTypes.DistributionParams[]","name":"_distribution","type":"tuple[]"},{"internalType":"address payable","name":"_receipient","type":"address"},{"internalType":"contract IGasToken","name":"_gasToken","type":"address"},{"internalType":"uint256","name":"_gasQtyPerToken","type":"uint256"}],"name":"multiPathSwapAndSendWithGasTokens","outputs":[{"internalType":"uint256","name":"_output","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"contract Token","name":"sellToken","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"contract Token","name":"buyToken","type":"address"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"internalType":"struct AtomicTypes.SwapParams","name":"_swap","type":"tuple"},{"internalType":"contract Token[]","name":"_path","type":"address[]"},{"components":[{"internalType":"contract IAtomicExchange[]","name":"exchangeModules","type":"address[]"},{"internalType":"bytes[]","name":"exchangeData","type":"bytes[]"},{"internalType":"uint256[]","name":"chunks","type":"uint256[]"}],"internalType":"struct AtomicTypes.DistributionParams[]","name":"_distribution","type":"tuple[]"},{"internalType":"contract IGasToken","name":"_gasToken","type":"address"},{"internalType":"uint256","name":"_gasQtyPerToken","type":"uint256"}],"name":"multiPathSwapWithGasTokens","outputs":[{"internalType":"uint256","name":"_output","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"contract Token","name":"sellToken","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"contract Token","name":"buyToken","type":"address"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"internalType":"struct AtomicTypes.SwapParams","name":"_swap","type":"tuple"},{"components":[{"internalType":"contract IAtomicExchange[]","name":"exchangeModules","type":"address[]"},{"internalType":"bytes[]","name":"exchangeData","type":"bytes[]"},{"internalType":"uint256[]","name":"chunks","type":"uint256[]"}],"internalType":"struct AtomicTypes.DistributionParams","name":"_distribution","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"_output","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"contract Token","name":"sellToken","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"contract Token","name":"buyToken","type":"address"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"internalType":"struct AtomicTypes.SwapParams","name":"_swap","type":"tuple"},{"components":[{"internalType":"contract IAtomicExchange[]","name":"exchangeModules","type":"address[]"},{"internalType":"bytes[]","name":"exchangeData","type":"bytes[]"},{"internalType":"uint256[]","name":"chunks","type":"uint256[]"}],"internalType":"struct AtomicTypes.DistributionParams","name":"_distribution","type":"tuple"},{"internalType":"address payable","name":"_receipient","type":"address"}],"name":"swapAndSend","outputs":[{"internalType":"uint256","name":"_output","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"contract Token","name":"sellToken","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"contract Token","name":"buyToken","type":"address"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"internalType":"struct AtomicTypes.SwapParams","name":"_swap","type":"tuple"},{"components":[{"internalType":"contract IAtomicExchange[]","name":"exchangeModules","type":"address[]"},{"internalType":"bytes[]","name":"exchangeData","type":"bytes[]"},{"internalType":"uint256[]","name":"chunks","type":"uint256[]"}],"internalType":"struct AtomicTypes.DistributionParams","name":"_distribution","type":"tuple"},{"internalType":"address payable","name":"_receipient","type":"address"},{"internalType":"contract IGasToken","name":"_gasToken","type":"address"},{"internalType":"uint256","name":"_gasQtyPerToken","type":"uint256"}],"name":"swapAndSendWithGasTokens","outputs":[{"internalType":"uint256","name":"_output","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"contract Token","name":"sellToken","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"contract Token","name":"buyToken","type":"address"},{"internalType":"uint256","name":"minOutput","type":"uint256"}],"internalType":"struct AtomicTypes.SwapParams","name":"_swap","type":"tuple"},{"components":[{"internalType":"contract IAtomicExchange[]","name":"exchangeModules","type":"address[]"},{"internalType":"bytes[]","name":"exchangeData","type":"bytes[]"},{"internalType":"uint256[]","name":"chunks","type":"uint256[]"}],"internalType":"struct AtomicTypes.DistributionParams","name":"_distribution","type":"tuple"},{"internalType":"contract IGasToken","name":"_gasToken","type":"address"},{"internalType":"uint256","name":"_gasQtyPerToken","type":"uint256"}],"name":"swapWithGasTokens","outputs":[{"internalType":"uint256","name":"_output","type":"uint256"}],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50610ed3806100206000396000f3fe60806040526004361061007b5760003560e01c8063b11456bd1161004e578063b11456bd146100e2578063b965c75f146100f5578063bbf6c9f114610108578063d35db4141461011b5761007b565b806333a2901e1461008057806375804f6d146100a9578063898196f1146100bc57806398933bec146100cf575b600080fd5b61009361008e3660046109da565b61012e565b6040516100a09190610e34565b60405180910390f35b6100936100b7366004610ab6565b6101f6565b6100936100ca3660046108f0565b6102a2565b6100936100dd3660046107af565b610354565b6100936100f0366004610730565b610425565b610093610103366004610840565b61043f565b61009361011636600461098d565b6104f2565b610093610129366004610a3b565b610508565b600061015f610140602086018661070d565b856020013573ac7e32eb5cec7eb7b6b43a305b64d1d3487b97a06105b5565b6040516319d1480f60e11b815273ac7e32eb5cec7eb7b6b43a305b64d1d3487b97a0906333a2901e90349061019c90889088908890600401610dfc565b6020604051808303818588803b1580156101b557600080fd5b505af11580156101c9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906101ee9190610b1d565b949350505050565b6000805a905061020786863361012e565b9150836001600160a01b031663079d229f33855a85036161a8018161022857fe5b046040518363ffffffff1660e01b8152600401610246929190610d17565b602060405180830381600087803b15801561026057600080fd5b505af1158015610274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102989190610b1d565b5050949350505050565b6000805a90506102b6898989898933610354565b9150836001600160a01b031663079d229f33855a85036161a801816102d757fe5b046040518363ffffffff1660e01b81526004016102f5929190610d17565b602060405180830381600087803b15801561030f57600080fd5b505af1158015610323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103479190610b1d565b5050979650505050505050565b6000610385610366602089018961070d565b886020013573ac7e32eb5cec7eb7b6b43a305b64d1d3487b97a06105b5565b604051632624cefb60e21b815273ac7e32eb5cec7eb7b6b43a305b64d1d3487b97a0906398933bec9034906103c8908b908b908b908b908b908b90600401610d30565b6020604051808303818588803b1580156103e157600080fd5b505af11580156103f5573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061041a9190610b1d565b979650505050505050565b6000610435868686868633610354565b9695505050505050565b6000805a90506104538a8a8a8a8a8a610354565b9150836001600160a01b031663079d229f33855a85036161a8018161047457fe5b046040518363ffffffff1660e01b8152600401610492929190610d17565b602060405180830381600087803b1580156104ac57600080fd5b505af11580156104c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e49190610b1d565b505098975050505050505050565b60006104ff83833361012e565b90505b92915050565b6000805a905061051987878761012e565b9150836001600160a01b031663079d229f33855a85036161a8018161053a57fe5b046040518363ffffffff1660e01b8152600401610558929190610d17565b602060405180830381600087803b15801561057257600080fd5b505af1158015610586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105aa9190610b1d565b505095945050505050565b6105be83610647565b156105d4578134146105cf57600080fd5b610642565b34156105df57600080fd5b6040516323b872dd60e01b81526001600160a01b038416906323b872dd9061060f90339085908790600401610cf3565b600060405180830381600087803b15801561062957600080fd5b505af115801561063d573d6000803e3d6000fd5b505050505b505050565b60006001600160a01b038216158061067b57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b156106885750600161068c565b5060005b919050565b60008083601f8401126106a2578182fd5b50813567ffffffffffffffff8111156106b9578182fd5b60208301915083602080830285010111156106d357600080fd5b9250929050565b803561050281610e85565b6000606082840312156106f6578081fd5b50919050565b6000608082840312156106f6578081fd5b60006020828403121561071e578081fd5b813561072981610e85565b9392505050565b600080600080600060c08688031215610747578081fd5b61075187876106fc565b9450608086013567ffffffffffffffff8082111561076d578283fd5b61077989838a01610691565b909650945060a0880135915080821115610791578283fd5b5061079e88828901610691565b969995985093965092949392505050565b60008060008060008060e087890312156107c7578081fd5b6107d188886106fc565b9550608087013567ffffffffffffffff808211156107ed578283fd5b6107f98a838b01610691565b909750955060a0890135915080821115610811578283fd5b5061081e89828a01610691565b90945092505060c087013561083281610e85565b809150509295509295509295565b600080600080600080600080610120898b03121561085c578182fd5b6108668a8a6106fc565b9750608089013567ffffffffffffffff80821115610882578384fd5b61088e8c838d01610691565b909950975060a08b01359150808211156108a6578384fd5b506108b38b828c01610691565b90965094505060c08901356108c781610e85565b925060e08901356108d781610e85565b8092505061010089013590509295985092959890939650565b6000806000806000806000610100888a03121561090b578283fd5b61091589896106fc565b9650608088013567ffffffffffffffff80821115610931578485fd5b61093d8b838c01610691565b909850965060a08a0135915080821115610955578485fd5b506109628a828b01610691565b90955093505060c088013561097681610e85565b8092505060e0880135905092959891949750929550565b60008060a0838503121561099f578182fd5b6109a984846106fc565b9150608083013567ffffffffffffffff8111156109c4578182fd5b6109d0858286016106e5565b9150509250929050565b600080600060c084860312156109ee578283fd5b6109f885856106fc565b9250608084013567ffffffffffffffff811115610a13578283fd5b610a1f868287016106e5565b92505060a0840135610a3081610e85565b809150509250925092565b60008060008060006101008688031215610a53578081fd5b610a5d87876106fc565b9450608086013567ffffffffffffffff811115610a78578182fd5b610a84888289016106e5565b94505060a0860135610a9581610e85565b925060c0860135610aa581610e85565b9497939650919460e0013592915050565b60008060008060e08587031215610acb578182fd5b610ad586866106fc565b9350608085013567ffffffffffffffff811115610af0578283fd5b610afc878288016106e5565b93505060a0850135610b0d81610e85565b9396929550929360c00135925050565b600060208284031215610b2e578081fd5b5051919050565b6001600160a01b0316815260200190565b6001600160a01b03169052565b81835260006001600160fb1b03831115610b6b578081fd5b6020830280836020870137939093016020019283525090919050565b600060608301610b978384610e3d565b6060865291829052908290608086015b81831015610bd85760208435610bbc81610e85565b6001600160a01b03168252938401936001939093019201610ba7565b60209350610be884870187610e3d565b888303868a0152808352935091508381018484028201850183875b86811015610c7e57601f19808685030185528235601e19883603018112610c28578a8bfd5b8701803567ffffffffffffffff811115610c40578b8cfd5b803603891315610c4e578b8cfd5b808652808b83018c8801378581018b018c9052958a0195601f019091169093018801925090870190600101610c03565b5050610c8d6040890189610e3d565b9650945088810360408a0152610ca4818787610b53565b9998505050505050505050565b8035610cbc81610e85565b6001600160a01b03908116835260208281013590840152604082013590610ce282610e85565b166040830152606090810135910152565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060e08201610d40838a610cb1565b60e0608084015280610d528883610e34565b9050889150825b88811015610d855760208301610d7883610d7383876106da565b610b35565b9093509150600101610d59565b5083810360a0850152858152602080820192508087028201810188855b89811015610de657848303601f190186528135368c9003605e19018112610dc7578788fd5b610dd3848d8301610b87565b9685019693505090830190600101610da2565b50508094505050505061041a60c0830184610b46565b6000610e088286610cb1565b60c06080830152610e1c60c0830185610b87565b905060018060a01b03831660a0830152949350505050565b90815260200190565b6000808335601e19843603018112610e53578283fd5b830160208101925035905067ffffffffffffffff811115610e7357600080fd5b6020810236038313156106d357600080fd5b6001600160a01b0381168114610e9a57600080fd5b5056fea2646970667358221220353750a65747dce9ce88b45a9e5cb9f4d1f1f715e945a5a422c6fa2f2287a2b264736f6c634300060c0033
Deployed Bytecode
0x60806040526004361061007b5760003560e01c8063b11456bd1161004e578063b11456bd146100e2578063b965c75f146100f5578063bbf6c9f114610108578063d35db4141461011b5761007b565b806333a2901e1461008057806375804f6d146100a9578063898196f1146100bc57806398933bec146100cf575b600080fd5b61009361008e3660046109da565b61012e565b6040516100a09190610e34565b60405180910390f35b6100936100b7366004610ab6565b6101f6565b6100936100ca3660046108f0565b6102a2565b6100936100dd3660046107af565b610354565b6100936100f0366004610730565b610425565b610093610103366004610840565b61043f565b61009361011636600461098d565b6104f2565b610093610129366004610a3b565b610508565b600061015f610140602086018661070d565b856020013573ac7e32eb5cec7eb7b6b43a305b64d1d3487b97a06105b5565b6040516319d1480f60e11b815273ac7e32eb5cec7eb7b6b43a305b64d1d3487b97a0906333a2901e90349061019c90889088908890600401610dfc565b6020604051808303818588803b1580156101b557600080fd5b505af11580156101c9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906101ee9190610b1d565b949350505050565b6000805a905061020786863361012e565b9150836001600160a01b031663079d229f33855a85036161a8018161022857fe5b046040518363ffffffff1660e01b8152600401610246929190610d17565b602060405180830381600087803b15801561026057600080fd5b505af1158015610274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102989190610b1d565b5050949350505050565b6000805a90506102b6898989898933610354565b9150836001600160a01b031663079d229f33855a85036161a801816102d757fe5b046040518363ffffffff1660e01b81526004016102f5929190610d17565b602060405180830381600087803b15801561030f57600080fd5b505af1158015610323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103479190610b1d565b5050979650505050505050565b6000610385610366602089018961070d565b886020013573ac7e32eb5cec7eb7b6b43a305b64d1d3487b97a06105b5565b604051632624cefb60e21b815273ac7e32eb5cec7eb7b6b43a305b64d1d3487b97a0906398933bec9034906103c8908b908b908b908b908b908b90600401610d30565b6020604051808303818588803b1580156103e157600080fd5b505af11580156103f5573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061041a9190610b1d565b979650505050505050565b6000610435868686868633610354565b9695505050505050565b6000805a90506104538a8a8a8a8a8a610354565b9150836001600160a01b031663079d229f33855a85036161a8018161047457fe5b046040518363ffffffff1660e01b8152600401610492929190610d17565b602060405180830381600087803b1580156104ac57600080fd5b505af11580156104c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e49190610b1d565b505098975050505050505050565b60006104ff83833361012e565b90505b92915050565b6000805a905061051987878761012e565b9150836001600160a01b031663079d229f33855a85036161a8018161053a57fe5b046040518363ffffffff1660e01b8152600401610558929190610d17565b602060405180830381600087803b15801561057257600080fd5b505af1158015610586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105aa9190610b1d565b505095945050505050565b6105be83610647565b156105d4578134146105cf57600080fd5b610642565b34156105df57600080fd5b6040516323b872dd60e01b81526001600160a01b038416906323b872dd9061060f90339085908790600401610cf3565b600060405180830381600087803b15801561062957600080fd5b505af115801561063d573d6000803e3d6000fd5b505050505b505050565b60006001600160a01b038216158061067b57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b156106885750600161068c565b5060005b919050565b60008083601f8401126106a2578182fd5b50813567ffffffffffffffff8111156106b9578182fd5b60208301915083602080830285010111156106d357600080fd5b9250929050565b803561050281610e85565b6000606082840312156106f6578081fd5b50919050565b6000608082840312156106f6578081fd5b60006020828403121561071e578081fd5b813561072981610e85565b9392505050565b600080600080600060c08688031215610747578081fd5b61075187876106fc565b9450608086013567ffffffffffffffff8082111561076d578283fd5b61077989838a01610691565b909650945060a0880135915080821115610791578283fd5b5061079e88828901610691565b969995985093965092949392505050565b60008060008060008060e087890312156107c7578081fd5b6107d188886106fc565b9550608087013567ffffffffffffffff808211156107ed578283fd5b6107f98a838b01610691565b909750955060a0890135915080821115610811578283fd5b5061081e89828a01610691565b90945092505060c087013561083281610e85565b809150509295509295509295565b600080600080600080600080610120898b03121561085c578182fd5b6108668a8a6106fc565b9750608089013567ffffffffffffffff80821115610882578384fd5b61088e8c838d01610691565b909950975060a08b01359150808211156108a6578384fd5b506108b38b828c01610691565b90965094505060c08901356108c781610e85565b925060e08901356108d781610e85565b8092505061010089013590509295985092959890939650565b6000806000806000806000610100888a03121561090b578283fd5b61091589896106fc565b9650608088013567ffffffffffffffff80821115610931578485fd5b61093d8b838c01610691565b909850965060a08a0135915080821115610955578485fd5b506109628a828b01610691565b90955093505060c088013561097681610e85565b8092505060e0880135905092959891949750929550565b60008060a0838503121561099f578182fd5b6109a984846106fc565b9150608083013567ffffffffffffffff8111156109c4578182fd5b6109d0858286016106e5565b9150509250929050565b600080600060c084860312156109ee578283fd5b6109f885856106fc565b9250608084013567ffffffffffffffff811115610a13578283fd5b610a1f868287016106e5565b92505060a0840135610a3081610e85565b809150509250925092565b60008060008060006101008688031215610a53578081fd5b610a5d87876106fc565b9450608086013567ffffffffffffffff811115610a78578182fd5b610a84888289016106e5565b94505060a0860135610a9581610e85565b925060c0860135610aa581610e85565b9497939650919460e0013592915050565b60008060008060e08587031215610acb578182fd5b610ad586866106fc565b9350608085013567ffffffffffffffff811115610af0578283fd5b610afc878288016106e5565b93505060a0850135610b0d81610e85565b9396929550929360c00135925050565b600060208284031215610b2e578081fd5b5051919050565b6001600160a01b0316815260200190565b6001600160a01b03169052565b81835260006001600160fb1b03831115610b6b578081fd5b6020830280836020870137939093016020019283525090919050565b600060608301610b978384610e3d565b6060865291829052908290608086015b81831015610bd85760208435610bbc81610e85565b6001600160a01b03168252938401936001939093019201610ba7565b60209350610be884870187610e3d565b888303868a0152808352935091508381018484028201850183875b86811015610c7e57601f19808685030185528235601e19883603018112610c28578a8bfd5b8701803567ffffffffffffffff811115610c40578b8cfd5b803603891315610c4e578b8cfd5b808652808b83018c8801378581018b018c9052958a0195601f019091169093018801925090870190600101610c03565b5050610c8d6040890189610e3d565b9650945088810360408a0152610ca4818787610b53565b9998505050505050505050565b8035610cbc81610e85565b6001600160a01b03908116835260208281013590840152604082013590610ce282610e85565b166040830152606090810135910152565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060e08201610d40838a610cb1565b60e0608084015280610d528883610e34565b9050889150825b88811015610d855760208301610d7883610d7383876106da565b610b35565b9093509150600101610d59565b5083810360a0850152858152602080820192508087028201810188855b89811015610de657848303601f190186528135368c9003605e19018112610dc7578788fd5b610dd3848d8301610b87565b9685019693505090830190600101610da2565b50508094505050505061041a60c0830184610b46565b6000610e088286610cb1565b60c06080830152610e1c60c0830185610b87565b905060018060a01b03831660a0830152949350505050565b90815260200190565b6000808335601e19843603018112610e53578283fd5b830160208101925035905067ffffffffffffffff811115610e7357600080fd5b6020810236038313156106d357600080fd5b6001600160a01b0381168114610e9a57600080fd5b5056fea2646970667358221220353750a65747dce9ce88b45a9e5cb9f4d1f1f715e945a5a422c6fa2f2287a2b264736f6c634300060c0033
Deployed Bytecode Sourcemap
12853:4378:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13076:485;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14628:425;;;;;;:::i;:::-;;:::i;15490:485::-;;;;;;:::i;:::-;;:::i;13655:618::-;;;;;;:::i;:::-;;:::i;15111:277::-;;;;;;:::i;:::-;;:::i;16697:531::-;;;;;;:::i;:::-;;:::i;14320:217::-;;;;;;:::i;:::-;;:::i;16095:471::-;;;;;;:::i;:::-;;:::i;13076:485::-;13274:12;13337:69;13360:15;;;;:5;:15;:::i;:::-;13377:5;:11;;;12953:42;13337:22;:69::i;:::-;13483:70;;-1:-1:-1;;;13483:70:0;;12953:42;;13483:18;;13508:9;;13483:70;;13519:5;;13526:13;;13541:11;;13483:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13473:80;13076:485;-1:-1:-1;;;;13076:485:0:o;14628:425::-;14835:12;14859:13;14875:9;14859:25;;14905:45;14917:5;14924:13;14939:10;14905:11;:45::i;:::-;14895:55;;14961:9;-1:-1:-1;;;;;14961:22:0;;14984:10;15029:15;15008:9;14997:8;:20;15020:5;14997:28;14996:48;;;;;;14961:84;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14628:425;;;;;;;:::o;15490:485::-;15741:12;15765:13;15781:9;15765:25;;15811:61;15832:5;15839;;15846:13;;15861:10;15811:20;:61::i;:::-;15801:71;;15883:9;-1:-1:-1;;;;;15883:22:0;;15906:10;15951:15;15930:9;15919:8;:20;15942:5;15919:28;15918:48;;;;;;15883:84;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15490:485;;;;;;;;;;:::o;13655:618::-;13907:12;13970:69;13993:15;;;;:5;:15;:::i;:::-;14010:5;:11;;;12953:42;13970:22;:69::i;:::-;14116:149;;-1:-1:-1;;;14116:149:0;;12953:42;;14116:27;;14150:9;;14116:149;;14175:5;;14195;;;;14215:13;;;;14243:11;;14116:149;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14106:159;13655:618;-1:-1:-1;;;;;;;13655:618:0:o;15111:277::-;15288:12;15319:61;15340:5;15347;;15354:13;;15369:10;15319:20;:61::i;:::-;15312:68;15111:277;-1:-1:-1;;;;;;15111:277:0:o;16697:531::-;16993:12;17017:13;17033:9;17017:25;;17063:62;17084:5;17091;;17098:13;;17113:11;17063:20;:62::i;:::-;17053:72;;17136:9;-1:-1:-1;;;;;17136:22:0;;17159:10;17204:15;17183:9;17172:8;:20;17195:5;17172:28;17171:48;;;;;;17136:84;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16697:531;;;;;;;;;;;:::o;14320:217::-;14453:12;14484:45;14496:5;14503:13;14518:10;14484:11;:45::i;:::-;14477:52;;14320:217;;;;;:::o;16095:471::-;16347:12;16371:13;16387:9;16371:25;;16417:46;16429:5;16436:13;16451:11;16417;:46::i;:::-;16407:56;;16474:9;-1:-1:-1;;;;;16474:22:0;;16497:10;16542:15;16521:9;16510:8;:20;16533:5;16510:28;16509:48;;;;;;16474:84;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16095:471;;;;;;;;:::o;1845:335::-;1948:13;1954:6;1948:5;:13::i;:::-;1944:229;;;1999:7;1986:9;:20;1978:29;;;;;;1944:229;;;2079:9;:15;2071:24;;;;;;2110:51;;-1:-1:-1;;;2110:51:0;;-1:-1:-1;;;;;2110:19:0;;;;;:51;;2130:10;;2142:9;;2153:7;;2110:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1944:229;1845:335;;;:::o;3270:257::-;3322:4;-1:-1:-1;;;;;3355:28:0;;;;:73;;-1:-1:-1;;;;;;3400:28:0;;850:42;3400:28;3355:73;3338:182;;;-1:-1:-1;3461:4:0;3454:11;;3338:182;-1:-1:-1;3503:5:0;3338:182;3270:257;;;:::o;183:366:-1:-;;;327:3;320:4;312:6;308:17;304:27;294:2;;-1:-1;;335:12;294:2;-1:-1;365:20;;405:18;394:30;;391:2;;;-1:-1;;427:12;391:2;471:4;463:6;459:17;447:29;;522:3;471:4;;506:6;502:17;463:6;488:32;;485:41;482:2;;;539:1;;529:12;482:2;287:262;;;;;:::o;1357:158::-;1438:20;;1463:47;1438:20;1463:47;:::i;1568:167::-;;1688:2;1679:6;1674:3;1670:16;1666:25;1663:2;;;-1:-1;;1694:12;1663:2;-1:-1;1714:15;1656:79;-1:-1;1656:79::o;1780:160::-;;1892:3;1883:6;1878:3;1874:16;1870:26;1867:2;;;-1:-1;;1899:12;2225:269;;2343:2;2331:9;2322:7;2318:23;2314:32;2311:2;;;-1:-1;;2349:12;2311:2;1451:6;1438:20;1463:47;1504:5;1463:47;:::i;:::-;2401:77;2305:189;-1:-1;;;2305:189::o;2501:962::-;;;;;;2787:3;2775:9;2766:7;2762:23;2758:33;2755:2;;;-1:-1;;2794:12;2755:2;2856:81;2929:7;2905:22;2856:81;:::i;:::-;2846:91;;3002:3;2991:9;2987:19;2974:33;3027:18;;3019:6;3016:30;3013:2;;;-1:-1;;3049:12;3013:2;3087:94;3173:7;3164:6;3153:9;3149:22;3087:94;:::i;:::-;3069:112;;-1:-1;3069:112;-1:-1;3246:3;3231:19;;3218:33;;-1:-1;3260:30;;;3257:2;;;-1:-1;;3293:12;3257:2;;3331:116;3439:7;3430:6;3419:9;3415:22;3331:116;:::i;:::-;2749:714;;;;-1:-1;2749:714;;-1:-1;3313:134;;;2749:714;-1:-1;;;2749:714::o;3470:1104::-;;;;;;;3781:3;3769:9;3760:7;3756:23;3752:33;3749:2;;;-1:-1;;3788:12;3749:2;3850:81;3923:7;3899:22;3850:81;:::i;:::-;3840:91;;3996:3;3985:9;3981:19;3968:33;4021:18;;4013:6;4010:30;4007:2;;;-1:-1;;4043:12;4007:2;4081:94;4167:7;4158:6;4147:9;4143:22;4081:94;:::i;:::-;4063:112;;-1:-1;4063:112;-1:-1;4240:3;4225:19;;4212:33;;-1:-1;4254:30;;;4251:2;;;-1:-1;;4287:12;4251:2;;4325:116;4433:7;4424:6;4413:9;4409:22;4325:116;:::i;:::-;4307:134;;-1:-1;4307:134;-1:-1;;4478:3;4526:22;;80:20;105:41;80:20;105:41;:::i;:::-;4487:71;;;;3743:831;;;;;;;;:::o;4581:1392::-;;;;;;;;;4944:3;4932:9;4923:7;4919:23;4915:33;4912:2;;;-1:-1;;4951:12;4912:2;5013:81;5086:7;5062:22;5013:81;:::i;:::-;5003:91;;5159:3;5148:9;5144:19;5131:33;5184:18;;5176:6;5173:30;5170:2;;;-1:-1;;5206:12;5170:2;5244:94;5330:7;5321:6;5310:9;5306:22;5244:94;:::i;:::-;5226:112;;-1:-1;5226:112;-1:-1;5403:3;5388:19;;5375:33;;-1:-1;5417:30;;;5414:2;;;-1:-1;;5450:12;5414:2;;5488:116;5596:7;5587:6;5576:9;5572:22;5488:116;:::i;:::-;5470:134;;-1:-1;5470:134;-1:-1;;5641:3;5689:22;;80:20;105:41;80:20;105:41;:::i;:::-;5650:71;-1:-1;5758:3;5816:22;;1269:20;1294:51;1269:20;1294:51;:::i;:::-;5767:81;;;;5885:3;5929:9;5925:22;2014:20;5894:63;;4906:1067;;;;;;;;;;;:::o;5980:1250::-;;;;;;;;6318:3;6306:9;6297:7;6293:23;6289:33;6286:2;;;-1:-1;;6325:12;6286:2;6387:81;6460:7;6436:22;6387:81;:::i;:::-;6377:91;;6533:3;6522:9;6518:19;6505:33;6558:18;;6550:6;6547:30;6544:2;;;-1:-1;;6580:12;6544:2;6618:94;6704:7;6695:6;6684:9;6680:22;6618:94;:::i;:::-;6600:112;;-1:-1;6600:112;-1:-1;6777:3;6762:19;;6749:33;;-1:-1;6791:30;;;6788:2;;;-1:-1;;6824:12;6788:2;;6862:116;6970:7;6961:6;6950:9;6946:22;6862:116;:::i;:::-;6844:134;;-1:-1;6844:134;-1:-1;;7015:3;7073:22;;1269:20;1294:51;1269:20;1294:51;:::i;:::-;7024:81;;;;7142:3;7186:9;7182:22;2014:20;7151:63;;6280:950;;;;;;;;;;:::o;7237:582::-;;;7422:3;7410:9;7401:7;7397:23;7393:33;7390:2;;;-1:-1;;7429:12;7390:2;7491:81;7564:7;7540:22;7491:81;:::i;:::-;7481:91;;7637:3;7626:9;7622:19;7609:33;7662:18;7654:6;7651:30;7648:2;;;-1:-1;;7684:12;7648:2;7714:89;7795:7;7786:6;7775:9;7771:22;7714:89;:::i;:::-;7704:99;;;7384:435;;;;;:::o;7826:724::-;;;;8036:3;8024:9;8015:7;8011:23;8007:33;8004:2;;;-1:-1;;8043:12;8004:2;8105:81;8178:7;8154:22;8105:81;:::i;:::-;8095:91;;8251:3;8240:9;8236:19;8223:33;8276:18;8268:6;8265:30;8262:2;;;-1:-1;;8298:12;8262:2;8328:89;8409:7;8400:6;8389:9;8385:22;8328:89;:::i;:::-;8318:99;;;8454:3;8506:9;8502:22;80:20;105:41;140:5;105:41;:::i;:::-;8463:71;;;;7998:552;;;;;:::o;8557:1012::-;;;;;;8819:3;8807:9;8798:7;8794:23;8790:33;8787:2;;;-1:-1;;8826:12;8787:2;8888:81;8961:7;8937:22;8888:81;:::i;:::-;8878:91;;9034:3;9023:9;9019:19;9006:33;9059:18;9051:6;9048:30;9045:2;;;-1:-1;;9081:12;9045:2;9111:89;9192:7;9183:6;9172:9;9168:22;9111:89;:::i;:::-;9101:99;;;9237:3;9289:9;9285:22;80:20;105:41;140:5;105:41;:::i;:::-;9246:71;-1:-1;9354:3;9412:22;;1269:20;1294:51;1269:20;1294:51;:::i;:::-;8781:788;;;;-1:-1;8781:788;;9481:3;9521:22;2014:20;;8781:788;-1:-1;;8781:788::o;9576:870::-;;;;;9813:3;9801:9;9792:7;9788:23;9784:33;9781:2;;;-1:-1;;9820:12;9781:2;9882:81;9955:7;9931:22;9882:81;:::i;:::-;9872:91;;10028:3;10017:9;10013:19;10000:33;10053:18;10045:6;10042:30;10039:2;;;-1:-1;;10075:12;10039:2;10105:89;10186:7;10177:6;10166:9;10162:22;10105:89;:::i;:::-;10095:99;;;10231:3;10293:9;10289:22;1269:20;1294:51;1339:5;1294:51;:::i;:::-;9775:671;;;;-1:-1;10240:81;;10358:3;10398:22;2014:20;;-1:-1;;9775:671::o;10453:263::-;;10568:2;10556:9;10547:7;10543:23;10539:32;10536:2;;;-1:-1;;10574:12;10536:2;-1:-1;2162:13;;10530:186;-1:-1;10530:186::o;11170:201::-;-1:-1;;;;;29885:54;16723:73;;11360:4;11351:14;;11264:107::o;11830:137::-;-1:-1;;;;;29885:54;11917:45;;11911:56::o;15876:447::-;25369:19;;;15876:447;-1:-1;;;;;16104:78;;16101:2;;;-1:-1;;16185:12;16101:2;25418:4;16220:6;16216:17;31088:6;31083:3;25418:4;25413:3;25409:14;31065:30;31126:16;;;;25418:4;31126:16;31119:27;;;-1:-1;31126:16;;15998:325;-1:-1;15998:325::o;17044:1327::-;;17205:4;17200:3;17196:14;17296:100;17379:16;17372:5;17296:100;:::i;:::-;17205:4;17409:38;;25369:19;;;;13443:21;-1:-1;;25409:14;;;13470:360;13495:6;13492:1;13489:13;13470:360;;;25418:4;1104:6;1091:20;1116:56;1166:5;1116:56;:::i;:::-;-1:-1;;;;;29885:54;11917:45;;28638:12;;;;405:18;13510:9;;;;;11141:14;13470:360;;;25418:4;;;17694:88;25418:4;17769:5;17765:16;17758:5;17694:88;:::i;:::-;17818:14;;;17802;;;17795:38;25369:19;;;17660:122;-1:-1;17660:122;-1:-1;25409:14;;;12423:17;;;12414:27;;;;17660:122;-1:-1;12564:433;12589:6;12586:1;12583:13;12564:433;;;12641:20;;;25413:3;12645:4;12641:20;;12636:3;12629:33;28106:3;28093:17;28150:48;;28174:8;28158:14;28154:29;28150:48;28130:18;28126:73;28116:2;;-1:-1;;28203:12;28116:2;28232:33;;28287:19;;28357:18;28346:30;;28343:2;;;-1:-1;;28379:12;28343:2;28436:17;28158:14;28416:38;28406:8;28402:53;28399:2;;;-1:-1;;28458:12;28399:2;25381:6;25376:3;25369:19;31088:6;25418:4;28325:5;28321:16;25418:4;25413:3;25409:14;31065:30;31126:16;;;;;31119:27;;;12976:14;;;;31248:2;31228:14;31224:28;;;16586:39;;;;;;-1:-1;24810:14;;;;13517:1;12604:9;12564:433;;;12568:14;;18071:77;18142:4;18135:5;18131:16;18124:5;18071:77;:::i;:::-;18037:111;;;;18194:3;18188:4;18184:14;18142:4;18172:3;18168:14;18161:38;18214:119;18328:4;18314:12;18300;18214:119;:::i;:::-;18355:11;17178:1193;-1:-1;;;;;;;;;17178:1193::o;19876:967::-;1451:6;1438:20;1463:47;1504:5;1463:47;:::i;:::-;-1:-1;;;;;29885:54;;;16723:73;;28803:2;28794:12;;;2014:20;20408:14;;;20911:37;20547:4;20536:16;;1438:20;;1463:47;1438:20;1463:47;:::i;:::-;29885:54;20547:4;20621:14;;16723:73;28794:12;;;;2014:20;20807:14;;20911:37;19996:847::o;21080:460::-;-1:-1;;;;;29885:54;;;11760:58;;29885:54;;;;21443:2;21428:18;;11917:45;21526:2;21511:18;;20911:37;;;;21271:2;21256:18;;21242:298::o;21547:349::-;-1:-1;;;;;29885:54;;;;11760:58;;21882:2;21867:18;;20911:37;21710:2;21695:18;;21681:215::o;21903:1203::-;;22388:3;22377:9;22373:19;22403:125;22510:17;22501:6;22403:125;:::i;:::-;22388:3;22561;22550:9;22546:19;22539:49;22602:132;14066:86;14145:6;14140:3;14066:86;:::i;:::-;14059:93;;14251:21;;;-1:-1;14278:333;14303:6;14300:1;14297:13;14278:333;;;28803:2;14413:6;28794:12;14434:77;14507:3;28754:53;28794:12;14413:6;28754:53;:::i;:::-;14434:77;:::i;:::-;14518:86;;-1:-1;14427:84;-1:-1;14325:1;14318:9;14278:333;;;-1:-1;22773:20;;;22767:3;22752:19;;22745:49;25369:19;;;28803:2;25409:14;;;;-1:-1;15129:17;;;15120:27;;;;15268:21;-1:-1;15295:503;15320:6;15317:1;15314:13;15295:503;;;15372:20;;;-1:-1;;15372:20;15360:33;;28950:17;;29015:14;29011:29;;;-1:-1;;29007:48;28983:73;;28973:2;;-1:-1;;29060:12;28973:2;11551:116;11663:3;29113:8;29093:18;29089:33;11551:116;:::i;:::-;15777:14;;;;15506:142;-1:-1;;24810:14;;;;14325:1;15335:9;15295:503;;;15299:14;;22800:196;;;;;;;23007:89;23091:3;23080:9;23076:19;23067:6;23007:89;:::i;23113:775::-;;23451:125;23558:17;23549:6;23451:125;:::i;:::-;23436:3;23609;23598:9;23594:19;23587:49;23650:128;23436:3;23425:9;23421:19;23764:6;23650:128;:::i;:::-;23642:136;;405:18;;29896:42;;;29350:5;29885:54;23873:3;23862:9;23858:19;11917:45;23407:481;;;;;;:::o;23895:222::-;20911:37;;;24022:2;24007:18;;23993:124::o;26370:528::-;;;26521:3;26508:17;28150:48;;26589:8;26573:14;26569:29;26565:48;26545:18;26541:73;26531:2;;-1:-1;;26618:12;26531:2;26647:33;;26604:4;26736:16;;;-1:-1;26702:19;;-1:-1;26772:18;26761:30;;26758:2;;;26804:1;;26794:12;26758:2;26604:4;26855:6;26851:17;26573:14;26831:38;26821:8;26817:53;26814:2;;;26883:1;;26873:12;31265:133;-1:-1;;;;;29885:54;;31332:43;;31322:2;;31389:1;;31379:12;31322:2;31316:82;:::o
Swarm Source
ipfs://353750a65747dce9ce88b45a9e5cb9f4d1f1f715e945a5a422c6fa2f2287a2b2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.