Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 9 from a total of 9 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Confirm | 190718 | 93 days ago | IN | 0 S | 0.00018225 | ||||
Create | 190711 | 93 days ago | IN | 0 S | 0.00118723 | ||||
Confirm | 190659 | 93 days ago | IN | 0 S | 0.00014085 | ||||
Create | 190653 | 93 days ago | IN | 0 S | 0.00117711 | ||||
Confirm | 190637 | 93 days ago | IN | 0 S | 0.0004978 | ||||
Create | 190630 | 93 days ago | IN | 0 S | 0.00121191 | ||||
Confirm | 190572 | 93 days ago | IN | 0 S | 0.00021098 | ||||
Create | 190566 | 93 days ago | IN | 0 S | 0.00117411 | ||||
Create | 190530 | 93 days ago | IN | 0 S | 0.00117373 |
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
190476 | 93 days ago | Contract Creation | 0 S |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x91fFc68D...0aC271F0b The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
AvoMultisigAdmin
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
Yes with 10000000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract AvoMultisigAdminStructs { /// @notice Transaction represents a executeable transaction and it's multisig status struct Transaction { /// @notice The hash of the transaction, keccak(encodePacked(target, data))) bytes30 hash; /// @notice The number of confirmations for the transaction uint8 confirmation; /// @notice The number of revokes for the transaction uint8 revoke; } } contract AvoMultisigAdminErrors { /// @notice Error if input params are invalid error AvoMultisigAdmin__InvalidParams(); /// @notice Error if msg.sender is not authorized error AvoMultisigAdmin__Unauthorized(); /// @notice Error if signer is not a signer error AvoMultisigAdmin__InvalidSigner(); /// @notice Error if transaction is already created error AvoMultisigAdmin__TransactionAlreadyCreated(); /// @notice Error if transaction is already confirmed by the signer error AvoMultisigAdmin__TransactionAlreadyConfirmed(); /// @notice Error if transaction is already revoked by the signer error AvoMultisigAdmin__TransactionAlreadyRevoked(); /// @notice Error if transaction is already confirmed or revoked error AvoMultisigAdmin__TransactionError(); /// @notice Error if transaction is not found error AvoMultisigAdmin__TransactionNotFoundError(); } abstract contract AvoMultisigAdminConstants is AvoMultisigAdminErrors { /// @notice The number of signers required to confirm a transaction uint256 public immutable REQUIRED_CONFIRMATIONS; /// @notice Addresses for the signers address public immutable SIGNER_1; address public immutable SIGNER_2; address public immutable SIGNER_3; address public immutable SIGNER_4; address public immutable SIGNER_5; address public immutable SIGNER_6; /// @notice sets up the immutable vars: signers and required confirmations. constructor( address signer1_, address signer2_, address signer3_, address signer4_, address signer5_, address signer6_, uint256 requiredConfirmations_ ) { if ( signer1_ == address(0) || signer2_ == address(0) || signer3_ == address(0) || signer4_ == address(0) || signer5_ == address(0) || signer6_ == address(0) ) { revert AvoMultisigAdmin__InvalidParams(); } if (requiredConfirmations_ == 0 || requiredConfirmations_ > 6) { revert AvoMultisigAdmin__InvalidParams(); } SIGNER_1 = signer1_; SIGNER_2 = signer2_; SIGNER_3 = signer3_; SIGNER_4 = signer4_; SIGNER_5 = signer5_; SIGNER_6 = signer6_; REQUIRED_CONFIRMATIONS = requiredConfirmations_; } } contract AvoMultisigAdminVariables { /// @notice The mapping of the hash of (targetAddress, data, salt) to the transaction mapping(bytes30 => AvoMultisigAdminStructs.Transaction) public hashToTransaction; /// @notice The mapping of signer to transaction hash to whether or not they've confirmed mapping(address => mapping(bytes30 => bool)) public signedTx; /// @notice The mapping of signer to transaction hash to whether or not they've revoked mapping(address => mapping(bytes30 => bool)) public revokeTx; } contract AvoMultisigAdminEvents { /// @notice Emitted when a transaction is created event TransactionCreated(bytes30 indexed hash, address indexed creator, address target, bytes data, bytes32 salt); /// @notice Emitted when a transaction is confirmed event TransactionConfirmed(bytes30 indexed hash, address indexed confirmator, uint8 newConfirmationCount); /// @notice Emitted when a transaction is revoked event TransactionRevoked(bytes30 indexed hash, address indexed revoker, uint8 newConfirmationCount); /// @notice Emitted when a transaction is executed event TransactionExecuted(bytes30 indexed hash, address indexed executor); /// @notice Emitted when a transaction fails event TransactionFailed(bytes30 indexed hash, address indexed executor, bytes returnData); } /// @title Static Multisignature Wallet Contract /// @notice This contract represents a multisignature wallet with a static configuration of hardcoded addresses for confirmation. /// Each address can confirm or revoke a transaction on-chain. contract AvoMultisigAdmin is AvoMultisigAdminStructs, AvoMultisigAdminErrors, AvoMultisigAdminConstants, AvoMultisigAdminVariables, AvoMultisigAdminEvents { modifier onlySigner() { if ( msg.sender != SIGNER_1 && msg.sender != SIGNER_2 && msg.sender != SIGNER_3 && msg.sender != SIGNER_4 && msg.sender != SIGNER_5 && msg.sender != SIGNER_6 ) revert AvoMultisigAdmin__InvalidSigner(); _; } /// @notice constructor sets up the immutable vars: signers and required confirmations. constructor( address signer1_, address signer2_, address signer3_, address signer4_, address signer5_, address signer6_, uint256 requiredConfirmations_ ) AvoMultisigAdminConstants(signer1_, signer2_, signer3_, signer4_, signer5_, signer6_, requiredConfirmations_) {} /// @notice Create a new transaction /// @param target_ The address of the target contract or account for the transaction /// @param data_ The data payload of the transaction /// @param salt_ The salt used to make the transaction hash unique function create(address target_, bytes memory data_, bytes32 salt_) external onlySigner { bytes30 txHash_ = hashTransactionData(target_, data_, salt_); if (hashToTransaction[txHash_].hash != bytes30(0)) revert AvoMultisigAdmin__TransactionAlreadyCreated(); hashToTransaction[txHash_] = Transaction(txHash_, 1, 0); signedTx[msg.sender][txHash_] = true; emit TransactionCreated(txHash_, msg.sender, target_, data_, salt_); } /// @notice Confirm a transaction /// @dev Confirming is not allowed if `confirmation` or `revoke` is already 3 (transaction executed or cancelled). /// @param target_ The address of the target contract or account for the transaction /// @param data_ The data payload of the transaction /// @param salt_ The salt used to make the transaction hash unique function confirm(address target_, bytes memory data_, bytes32 salt_) external onlySigner { bytes30 txHash_ = hashTransactionData(target_, data_, salt_); if (hashToTransaction[txHash_].hash == bytes30(0)) revert AvoMultisigAdmin__TransactionNotFoundError(); if (signedTx[msg.sender][txHash_]) revert AvoMultisigAdmin__TransactionAlreadyConfirmed(); Transaction memory txInfo_ = hashToTransaction[txHash_]; if (txInfo_.confirmation == REQUIRED_CONFIRMATIONS || txInfo_.revoke == REQUIRED_CONFIRMATIONS) revert AvoMultisigAdmin__TransactionError(); signedTx[msg.sender][txHash_] = true; hashToTransaction[txHash_].confirmation = ++txInfo_.confirmation; if (txInfo_.confirmation == REQUIRED_CONFIRMATIONS) { // Execute the transaction bool success_; bytes memory retData_; (success_, retData_) = target_.call(data_); if (success_) { emit TransactionExecuted(txHash_, msg.sender); } else { emit TransactionFailed(txHash_, msg.sender, retData_); } } emit TransactionConfirmed(txHash_, msg.sender, txInfo_.confirmation); } /// @notice Revoke a transaction confirmation. /// @dev Revoking is not allowed if `confirmation` or `revoke` is already 3 (transaction executed or cancelled). /// @param target_ The address of the target contract or account for the transaction /// @param data_ The data payload of the transaction /// @param salt_ The salt used to make the transaction hash unique function revoke(address target_, bytes memory data_, bytes32 salt_) external onlySigner { bytes30 txHash_ = hashTransactionData(target_, data_, salt_); if (hashToTransaction[txHash_].hash == bytes30(0)) revert AvoMultisigAdmin__TransactionNotFoundError(); Transaction memory txInfo_ = hashToTransaction[txHash_]; if (txInfo_.confirmation == REQUIRED_CONFIRMATIONS || txInfo_.revoke == REQUIRED_CONFIRMATIONS) revert AvoMultisigAdmin__TransactionError(); hashToTransaction[txHash_].revoke = ++txInfo_.revoke; if (revokeTx[msg.sender][txInfo_.hash] == false) { revokeTx[msg.sender][txInfo_.hash] = true; } else { revert AvoMultisigAdmin__TransactionAlreadyRevoked(); } emit TransactionRevoked(txHash_, msg.sender, txInfo_.revoke); } /// @notice Hashes the transaction data /// @param target_ The address of the target contract or account for the transaction /// @param data_ The data payload of the transaction /// @param salt_ The salt used to make the transaction hash unique /// @return hash_ The unique hash representing this transaction function hashTransactionData( address target_, bytes memory data_, bytes32 salt_ ) public pure returns (bytes30 hash_) { hash_ = bytes30(keccak256(abi.encodePacked(target_, data_, salt_))); } // Code for Multicall below directly taken from https://github.com/mds1/multicall/blob/main/src/Multicall3.sol#L98 // Copyright (c) 2023 Matt Solomon struct Call3 { address target; bool allowFailure; bytes callData; } struct Result { bool success; bytes returnData; } /// @notice Aggregate calls, ensuring each returns success if required. Can only be called by self. /// @param calls An array of Call3 structs /// @return returnData An array of Result structs function aggregate3(Call3[] calldata calls) public returns (Result[] memory returnData) { // @dev check for only self is added to original code if (msg.sender != address(this)) { revert AvoMultisigAdmin__Unauthorized(); } uint256 length = calls.length; returnData = new Result[](length); Call3 calldata calli; for (uint256 i = 0; i < length; ) { Result memory result = returnData[i]; calli = calls[i]; (result.success, result.returnData) = calli.target.call(calli.callData); assembly { // Revert if the call fails and failure is not allowed // `allowFailure := calldataload(add(calli, 0x20))` and `success := mload(result)` if iszero(or(calldataload(add(calli, 0x20)), mload(result))) { // set "Error(string)" signature: bytes32(bytes4(keccak256("Error(string)"))) mstore(0x00, 0x08c379a000000000000000000000000000000000000000000000000000000000) // set data offset mstore(0x04, 0x0000000000000000000000000000000000000000000000000000000000000020) // set length of revert string mstore(0x24, 0x0000000000000000000000000000000000000000000000000000000000000017) // set revert string: bytes32(abi.encodePacked("Multicall3: call failed")) mstore(0x44, 0x4d756c746963616c6c333a2063616c6c206661696c6564000000000000000000) revert(0x00, 0x64) } } unchecked { ++i; } } } }
{ "optimizer": { "enabled": true, "runs": 10000000 }, "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"signer1_","type":"address"},{"internalType":"address","name":"signer2_","type":"address"},{"internalType":"address","name":"signer3_","type":"address"},{"internalType":"address","name":"signer4_","type":"address"},{"internalType":"address","name":"signer5_","type":"address"},{"internalType":"address","name":"signer6_","type":"address"},{"internalType":"uint256","name":"requiredConfirmations_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AvoMultisigAdmin__InvalidParams","type":"error"},{"inputs":[],"name":"AvoMultisigAdmin__InvalidSigner","type":"error"},{"inputs":[],"name":"AvoMultisigAdmin__TransactionAlreadyConfirmed","type":"error"},{"inputs":[],"name":"AvoMultisigAdmin__TransactionAlreadyCreated","type":"error"},{"inputs":[],"name":"AvoMultisigAdmin__TransactionAlreadyRevoked","type":"error"},{"inputs":[],"name":"AvoMultisigAdmin__TransactionError","type":"error"},{"inputs":[],"name":"AvoMultisigAdmin__TransactionNotFoundError","type":"error"},{"inputs":[],"name":"AvoMultisigAdmin__Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes30","name":"hash","type":"bytes30"},{"indexed":true,"internalType":"address","name":"confirmator","type":"address"},{"indexed":false,"internalType":"uint8","name":"newConfirmationCount","type":"uint8"}],"name":"TransactionConfirmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes30","name":"hash","type":"bytes30"},{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"TransactionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes30","name":"hash","type":"bytes30"},{"indexed":true,"internalType":"address","name":"executor","type":"address"}],"name":"TransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes30","name":"hash","type":"bytes30"},{"indexed":true,"internalType":"address","name":"executor","type":"address"},{"indexed":false,"internalType":"bytes","name":"returnData","type":"bytes"}],"name":"TransactionFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes30","name":"hash","type":"bytes30"},{"indexed":true,"internalType":"address","name":"revoker","type":"address"},{"indexed":false,"internalType":"uint8","name":"newConfirmationCount","type":"uint8"}],"name":"TransactionRevoked","type":"event"},{"inputs":[],"name":"REQUIRED_CONFIRMATIONS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SIGNER_1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SIGNER_2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SIGNER_3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SIGNER_4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SIGNER_5","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SIGNER_6","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"allowFailure","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct AvoMultisigAdmin.Call3[]","name":"calls","type":"tuple[]"}],"name":"aggregate3","outputs":[{"components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"internalType":"struct AvoMultisigAdmin.Result[]","name":"returnData","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target_","type":"address"},{"internalType":"bytes","name":"data_","type":"bytes"},{"internalType":"bytes32","name":"salt_","type":"bytes32"}],"name":"confirm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target_","type":"address"},{"internalType":"bytes","name":"data_","type":"bytes"},{"internalType":"bytes32","name":"salt_","type":"bytes32"}],"name":"create","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes30","name":"","type":"bytes30"}],"name":"hashToTransaction","outputs":[{"internalType":"bytes30","name":"hash","type":"bytes30"},{"internalType":"uint8","name":"confirmation","type":"uint8"},{"internalType":"uint8","name":"revoke","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target_","type":"address"},{"internalType":"bytes","name":"data_","type":"bytes"},{"internalType":"bytes32","name":"salt_","type":"bytes32"}],"name":"hashTransactionData","outputs":[{"internalType":"bytes30","name":"hash_","type":"bytes30"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"target_","type":"address"},{"internalType":"bytes","name":"data_","type":"bytes"},{"internalType":"bytes32","name":"salt_","type":"bytes32"}],"name":"revoke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes30","name":"","type":"bytes30"}],"name":"revokeTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes30","name":"","type":"bytes30"}],"name":"signedTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806382ad56cb11610097578063bd5da16811610066578063bd5da168146102d0578063e9d68520146102f7578063f74f19291461033b578063f8c401eb1461034e57600080fd5b806382ad56cb14610261578063998e323714610281578063aa16aa0314610296578063b009345a146102a957600080fd5b80636096e8fa116100d35780636096e8fa146101a757806363ecbd40146101e55780636f728fd11461020c5780636fef4db91461023a57600080fd5b80630da82f3d146100fa57806350901a891461014b578063587d812714610172575b600080fd5b6101217f000000000000000000000000ca5872f6d6942320146f0c353857aa7952533e9081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101217f000000000000000000000000ca5872f6d6942320146f0c353857aa7952533e9081565b6101997f000000000000000000000000000000000000000000000000000000000000000281565b604051908152602001610142565b6101d56101b53660046115e3565b600160209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610142565b6101217f0000000000000000000000009800020b610194dba52cf606e8aa142f9f25616681565b6101d561021a3660046115e3565b600260209081526000928352604080842090915290825290205460ff1681565b6101217f0000000000000000000000009f60699ce23f1ab86ec3e095b477ff79d4f409ad81565b61027461026f366004611616565b610401565b60405161014291906116f9565b61029461028f3660046117bc565b6105f2565b005b6102946102a43660046117bc565b6109a5565b6101217f000000000000000000000000910e413dbf3f6276fe8213ff656726bdc142e08e81565b6101217f000000000000000000000000910e413dbf3f6276fe8213ff656726bdc142e08e81565b61030a6103053660046117bc565b611036565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009091168152602001610142565b6102946103493660046117bc565b61106c565b6103bf61035c3660046118a5565b600060208190529081526040902054601081901b9060ff7e0100000000000000000000000000000000000000000000000000000000000082048116917f010000000000000000000000000000000000000000000000000000000000000090041683565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909416845260ff9283166020850152911690820152606001610142565b606033301461043c576040517f08a7543600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818067ffffffffffffffff8111156104565761045661178d565b60405190808252806020026020018201604052801561049c57816020015b6040805180820190915260008152606060208201528152602001906001900390816104745790505b5091503660005b828110156105e95760008482815181106104bf576104bf6118c7565b602002602001015190508686838181106104db576104db6118c7565b90506020028101906104ed91906118f6565b92506104fc6020840184611934565b73ffffffffffffffffffffffffffffffffffffffff1661051f604085018561194f565b60405161052d9291906119bb565b6000604051808303816000865af19150503d806000811461056a576040519150601f19603f3d011682016040523d82523d6000602084013e61056f565b606091505b5060208084019190915290151580835290840135176105e0577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b506001016104a3565b50505092915050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ca5872f6d6942320146f0c353857aa7952533e90161480159061066e57503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000910e413dbf3f6276fe8213ff656726bdc142e08e1614155b80156106b057503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000009800020b610194dba52cf606e8aa142f9f2561661614155b80156106f257503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000009f60699ce23f1ab86ec3e095b477ff79d4f409ad1614155b801561073457503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ca5872f6d6942320146f0c353857aa7952533e901614155b801561077657503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000910e413dbf3f6276fe8213ff656726bdc142e08e1614155b156107ad576040517fef4c5ee900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107ba848484611036565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000080821660009081526020819052604090205491925060109190911b161561082e576040517f6c58f7cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516060810182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00008316808252600160208084018281526000858701818152858252818452878220965187549351915160109190911c7fff00000000000000000000000000000000000000000000000000000000000000909416939093177e0100000000000000000000000000000000000000000000000000000000000060ff92831602177effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0100000000000000000000000000000000000000000000000000000000000000919093160291909117909455338085528282528585208486529091529284902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117905591519091907fa724cdca3f5a488f820d8dd1e6b7fe700fa485891df4a3fa4043c1182cb3be8b90610997908890889088906119cb565b60405180910390a350505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ca5872f6d6942320146f0c353857aa7952533e901614801590610a2157503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000910e413dbf3f6276fe8213ff656726bdc142e08e1614155b8015610a6357503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000009800020b610194dba52cf606e8aa142f9f2561661614155b8015610aa557503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000009f60699ce23f1ab86ec3e095b477ff79d4f409ad1614155b8015610ae757503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ca5872f6d6942320146f0c353857aa7952533e901614155b8015610b2957503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000910e413dbf3f6276fe8213ff656726bdc142e08e1614155b15610b60576040517fef4c5ee900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b6d848484611036565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000080821660009081526020819052604090205491925060109190911b16610be0576040517fd528864400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526001602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00008516845290915290205460ff1615610c57576040517f44d7d3fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00008082166000908152602081815260409182902082516060810184529054601081901b909416815260ff7e01000000000000000000000000000000000000000000000000000000000000850481169282018390527f0100000000000000000000000000000000000000000000000000000000000000909404909316918301919091527f00000000000000000000000000000000000000000000000000000000000000021480610d4c57507f0000000000000000000000000000000000000000000000000000000000000002816040015160ff16145b15610d83576040517ff9ed57d500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526001602081815260408084207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000087168552825290922080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909117905581018051610df590611a0a565b60ff908116918290527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000841660009081526020818152604090912080547fff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e0100000000000000000000000000000000000000000000000000000000000090940293909317909255908201517f0000000000000000000000000000000000000000000000000000000000000002911603610fcd57600060608673ffffffffffffffffffffffffffffffffffffffff1686604051610ed39190611a50565b6000604051808303816000865af19150503d8060008114610f10576040519150601f19603f3d011682016040523d82523d6000602084013e610f15565b606091505b5090925090508115610f755760405133907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00008616907f55a64b85796ea394dde2a8833e289d982ecca7f690a0154d4144980270a5251c90600090a3610fca565b3373ffffffffffffffffffffffffffffffffffffffff168461ffff19167ffdd0f27c4147583f33e21059b14f8d4be73b91944862f54cbf7359883a8fe63083604051610fc19190611a62565b60405180910390a35b50505b60208181015160405160ff909116815233917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00008516917f82d42e37c41a74cf8e0d9362307c07a49bf37f19417315df22b5daf3b8bfeb4f91015b60405180910390a35050505050565b600083838360405160200161104d93929190611a75565b6040516020818303038152906040528051906020012090509392505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ca5872f6d6942320146f0c353857aa7952533e9016148015906110e857503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000910e413dbf3f6276fe8213ff656726bdc142e08e1614155b801561112a57503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000009800020b610194dba52cf606e8aa142f9f2561661614155b801561116c57503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000009f60699ce23f1ab86ec3e095b477ff79d4f409ad1614155b80156111ae57503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ca5872f6d6942320146f0c353857aa7952533e901614155b80156111f057503373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000910e413dbf3f6276fe8213ff656726bdc142e08e1614155b15611227576040517fef4c5ee900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611234848484611036565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000080821660009081526020819052604090205491925060109190911b166112a7576040517fd528864400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00008082166000908152602081815260409182902082516060810184529054601081901b909416815260ff7e01000000000000000000000000000000000000000000000000000000000000850481169282018390527f0100000000000000000000000000000000000000000000000000000000000000909404909316918301919091527f0000000000000000000000000000000000000000000000000000000000000002148061139c57507f0000000000000000000000000000000000000000000000000000000000000002816040015160ff16145b156113d3576040517ff9ed57d500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060400180516113e290611a0a565b60ff908116918290527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000084811660009081526020818152604080832080547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0100000000000000000000000000000000000000000000000000000000000000909702969096179095553382526002815284822086519093168252919091529182205416151590036114f95733600090815260026020908152604080832084517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561152b565b6040517f8a1644dc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080820151905160ff909116815233907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00008416907fa3ecce907670135c6cae05217f61effd6e4f814d8237b08ec889c26696d79cb990602001611027565b803573ffffffffffffffffffffffffffffffffffffffff811681146115ae57600080fd5b919050565b80357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000811681146115ae57600080fd5b600080604083850312156115f657600080fd5b6115ff8361158a565b915061160d602084016115b3565b90509250929050565b6000806020838503121561162957600080fd5b823567ffffffffffffffff8082111561164157600080fd5b818501915085601f83011261165557600080fd5b81358181111561166457600080fd5b8660208260051b850101111561167957600080fd5b60209290920196919550909350505050565b60005b838110156116a657818101518382015260200161168e565b50506000910152565b600081518084526116c781602086016020860161168b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561177f578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0018552815180511515845287015187840187905261176c878501826116af565b9588019593505090860190600101611720565b509098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156117d157600080fd5b6117da8461158a565b9250602084013567ffffffffffffffff808211156117f757600080fd5b818601915086601f83011261180b57600080fd5b81358181111561181d5761181d61178d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156118635761186361178d565b8160405282815289602084870101111561187c57600080fd5b826020860160208301376000602084830101528096505050505050604084013590509250925092565b6000602082840312156118b757600080fd5b6118c0826115b3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261192a57600080fd5b9190910192915050565b60006020828403121561194657600080fd5b6118c08261158a565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261198457600080fd5b83018035915067ffffffffffffffff82111561199f57600080fd5b6020019150368190038213156119b457600080fd5b9250929050565b8183823760009101908152919050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006119fa60608301856116af565b9050826040830152949350505050565b600060ff821660ff8103611a47577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60010192915050565b6000825161192a81846020870161168b565b6020815260006118c060208301846116af565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008460601b16815260008351611ab281601485016020880161168b565b6014920191820192909252603401939250505056fea2646970667358221220396d0366b95dcfae28e5e8ad5f21a960766eb46bdf30717ed74985c3742ffcea64736f6c63430008120033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.