Overview
ETH Balance
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
PayloadsControllerDataHelper
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {PayloadsControllerUtils} from '../payloads/PayloadsControllerUtils.sol'; import {IPayloadsController} from '../payloads/interfaces/IPayloadsController.sol'; import {IPayloadsControllerCore} from '../payloads/interfaces/IPayloadsControllerCore.sol'; import {IPayloadsControllerDataHelper} from './interfaces/IPayloadsControllerDataHelper.sol'; /** * @title PayloadsControllerDataHelper * @author BGD Labs * @notice this contract contains the logic to get the payloads and to retreive the executor configs. */ contract PayloadsControllerDataHelper is IPayloadsControllerDataHelper { /// @inheritdoc IPayloadsControllerDataHelper function getPayloadsData( IPayloadsController payloadsController, uint40[] calldata payloadsIds ) external view returns (Payload[] memory) { Payload[] memory payloads = new Payload[](payloadsIds.length); IPayloadsController.Payload memory payload; for (uint256 i = 0; i < payloadsIds.length; i++) { payload = payloadsController.getPayloadById(payloadsIds[i]); payloads[i] = Payload({id: payloadsIds[i], data: payload}); } return payloads; } /// @inheritdoc IPayloadsControllerDataHelper function getExecutorConfigs( IPayloadsController payloadsController, PayloadsControllerUtils.AccessControl[] calldata accessLevels ) external view returns (ExecutorConfig[] memory) { ExecutorConfig[] memory executorConfigs = new ExecutorConfig[]( accessLevels.length ); IPayloadsControllerCore.ExecutorConfig memory executorConfig; for (uint256 i = 0; i < accessLevels.length; i++) { executorConfig = payloadsController.getExecutorSettingsByAccessControl( accessLevels[i] ); executorConfigs[i] = ExecutorConfig({ accessLevel: accessLevels[i], config: executorConfig }); } return executorConfigs; } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.0; library PayloadsControllerUtils { /// @notice enum with supported access levels enum AccessControl { Level_null, // to not use 0 Level_1, // LEVEL_1 - short executor before, listing assets, changes of assets params, updates of the protocol etc Level_2 // LEVEL_2 - long executor before, payloads controller updates } /** * @notice Object containing the necessary payload information. * @param chain * @param accessLevel * @param payloadsController * @param payloadId */ struct Payload { uint256 chain; AccessControl accessLevel; address payloadsController; // address which holds the logic to execute after success proposal voting uint40 payloadId; // number of the payload placed to payloadsController, max is: ~10¹² } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {IBaseReceiverPortal} from 'aave-delivery-infrastructure/contracts/interfaces/IBaseReceiverPortal.sol'; import {IPayloadsControllerCore} from './IPayloadsControllerCore.sol'; import {PayloadsControllerUtils} from '../PayloadsControllerUtils.sol'; /** * @title IPayloadsController * @author BGD Labs * @notice interface containing the objects, events and methods definitions of the PayloadsController contract */ interface IPayloadsController is IBaseReceiverPortal, IPayloadsControllerCore { /** * @notice get contract address from where the messages come * @return address of the message registry */ function CROSS_CHAIN_CONTROLLER() external view returns (address); /** * @notice get chain id of the message originator network * @return chain id of the originator network */ function ORIGIN_CHAIN_ID() external view returns (uint256); /** * @notice get address of the message sender in originator network * @return address of the originator contract */ function MESSAGE_ORIGINATOR() external view returns (address); /** * @notice method to decode a message from from governance chain * @param message encoded message with message type * @return payloadId, accessLevel, proposalVoteActivationTimestamp from the decoded message */ function decodeMessage( bytes memory message ) external pure returns (uint40, PayloadsControllerUtils.AccessControl, uint40); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {IRescuable} from 'solidity-utils/contracts/utils/interfaces/IRescuable.sol'; import {PayloadsControllerUtils} from '../PayloadsControllerUtils.sol'; /** * @title IPayloadsControllerCore * @author BGD Labs * @notice interface containing the objects, events and methods definitions of the IPayloadsControllerCore contract */ interface IPayloadsControllerCore is IRescuable { /** * @notice Enum indicating the possible payload states * @dev PayloadState enum defines the state machine of a payload, so the order on which the state is defined is important. Check logic correctness if new states are added / removed */ enum PayloadState { None, // state 0 left as empty Created, Queued, Executed, Cancelled, Expired } /** * @notice holds configuration of the executor * @param executor address of the executor * @param delay time in seconds between queuing and execution */ struct ExecutorConfig { address executor; uint40 delay; } /** * @notice Object containing the information necessary to set a new executor * @param accessLevel level of access that the executor will be assigned to * @param executorConfig object containing the configurations for the accessLevel specified */ struct UpdateExecutorInput { PayloadsControllerUtils.AccessControl accessLevel; ExecutorConfig executorConfig; } /** * @notice Object containing the information necessary to define a payload action * @param target address of the contract that needs to be executed * @param withDelegateCall boolean indicating if execution needs to be delegated * @param accessLevel access level of the executor needed for the execution * @param value value amount that needs to be sent to the executeTransaction method * @param signature method signature that will be executed * @param callData data needed for the execution of the signature */ struct ExecutionAction { address target; bool withDelegateCall; PayloadsControllerUtils.AccessControl accessLevel; uint256 value; string signature; bytes callData; } /** * @notice Object containing a payload information * @param creator address of the createPayload method caller * @param maximumAccessLevelRequired min level needed to be able to execute all actions * @param state indicates the current state of the payload * @param createdAt time indicating when payload has been created. In seconds // max is: 1.099511628×10¹² (ie 34'865 years) * @param queuedAt time indicating when payload has been queued. In seconds // max is: 1.099511628×10¹² (ie 34'865 years) * @param executedAt time indicating when a payload has been executed. In seconds // max is: 1.099511628×10¹² (ie 34'865 years) * @param cancelledAt time indicating when the payload has been cancelled. In seconds * @param expirationTime time indicating when the Payload will expire * @param delay time in seconds that a payload must remain queued before execution * @param gracePeriod time in seconds that a payload has to be executed * @param actions array of actions to be executed */ struct Payload { address creator; PayloadsControllerUtils.AccessControl maximumAccessLevelRequired; PayloadState state; uint40 createdAt; uint40 queuedAt; uint40 executedAt; uint40 cancelledAt; uint40 expirationTime; uint40 delay; uint40 gracePeriod; ExecutionAction[] actions; } /** * @notice Event emitted when an executor has been set for a determined access level * @param accessLevel level of access that the executor will be set to * @param executor address that will be set for the determined access level * @param delay time in seconds between queuing and execution */ event ExecutorSet( PayloadsControllerUtils.AccessControl indexed accessLevel, address indexed executor, uint40 delay ); /** * @notice Event emitted when a payload has been created * @param payloadId id of the payload created * @param creator address pertaining to the caller of the method createPayload * @param actions array of the actions conforming the payload * @param maximumAccessLevelRequired maximum level of the access control */ event PayloadCreated( uint40 indexed payloadId, address indexed creator, ExecutionAction[] actions, PayloadsControllerUtils.AccessControl indexed maximumAccessLevelRequired ); /** * @notice emitted when a cross chain message gets received * @param originSender address that sent the message on the origin chain * @param originChainId id of the chain where the message originated * @param delivered flag indicating if message has been delivered * @param message bytes containing the necessary information to queue the bridged payload id * @param reason bytes with the revert information */ event PayloadExecutionMessageReceived( address indexed originSender, uint256 indexed originChainId, bool indexed delivered, bytes message, bytes reason ); /** * @notice Event emitted when a payload has been executed * @param payloadId id of the payload being enqueued */ event PayloadExecuted(uint40 payloadId); /** * @notice Event emitted when a payload has been queued * @param payloadId id of the payload being enqueued */ event PayloadQueued(uint40 payloadId); /** * @notice Event emitted when cancelling a payload * @param payloadId id of the cancelled payload */ event PayloadCancelled(uint40 payloadId); /** * @notice method to initialize the contract with starter params. Only callable by proxy * @param owner address of the owner of the contract. with permissions to call certain methods * @param guardian address of the guardian. With permissions to call certain methods * @param executors array of executor configurations */ function initialize( address owner, address guardian, UpdateExecutorInput[] calldata executors ) external; /** * @notice get the expiration delay of a payload * @return expiration delay in seconds */ function EXPIRATION_DELAY() external view returns (uint40); /** * @notice get the maximum time in seconds that a proposal must spend being queued * @return max delay in seconds */ function MAX_EXECUTION_DELAY() external view returns (uint40); /** * @notice get the minimum time in seconds that a proposal must spend being queued * @return min delay in seconds */ function MIN_EXECUTION_DELAY() external view returns (uint40); /** * @notice time in seconds where the proposal can be executed (from executionTime) before it expires * @return grace period in seconds */ function GRACE_PERIOD() external view returns (uint40); /** * @notice get a previously created payload object * @param payloadId id of the payload to retrieve * @return payload information */ function getPayloadById( uint40 payloadId ) external view returns (Payload memory); /** * @notice get the current state of a payload * @param payloadId id of the payload to retrieve the state from * @return payload state */ function getPayloadState( uint40 payloadId ) external view returns (PayloadState); /** * @notice get the total count of payloads created * @return number of payloads */ function getPayloadsCount() external view returns (uint40); /** * @notice method that will create a Payload object for every action sent * @param actions array of actions which this proposal payload will contain * @return id of the created payload */ function createPayload( ExecutionAction[] calldata actions ) external returns (uint40); /** * @notice method to execute a payload * @param payloadId id of the payload that needs to be executed */ function executePayload(uint40 payloadId) external payable; /** * @notice method to cancel a payload * @param payloadId id of the payload that needs to be canceled */ function cancelPayload(uint40 payloadId) external; /** * @notice method to add executors and its configuration * @param executors array of UpdateExecutorInput objects */ function updateExecutors(UpdateExecutorInput[] calldata executors) external; /** * @notice method to get the executor configuration assigned to the specified level * @param accessControl level of which we want to get the executor configuration from * @return executor configuration */ function getExecutorSettingsByAccessControl( PayloadsControllerUtils.AccessControl accessControl ) external view returns (ExecutorConfig memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {PayloadsControllerUtils} from '../../payloads/PayloadsControllerUtils.sol'; import {IPayloadsController} from '../../payloads/interfaces/IPayloadsController.sol'; import {IPayloadsControllerCore} from '../../payloads/interfaces/IPayloadsControllerCore.sol'; /** * @title IPayloadsControllerDataHelper * @author BGD Labs * @notice interface containing the objects, events and methods definitions of the PayloadsControllerDataHelper contract */ interface IPayloadsControllerDataHelper { /** * @notice Object storing the payload data along with its id * @param id identifier of the payload * @param payloadData payload body */ struct Payload { uint256 id; IPayloadsController.Payload data; } /** * @notice Object storing the config of the executor * @param accessLevel access level * @param config executor config */ struct ExecutorConfig { PayloadsControllerUtils.AccessControl accessLevel; IPayloadsControllerCore.ExecutorConfig config; } /** * @notice method to get proposals list * @param payloadsController instance of the payloads controller * @param payloadsIds list of the ids of payloads to get * @return list of the payloads */ function getPayloadsData( IPayloadsController payloadsController, uint40[] calldata payloadsIds ) external view returns (Payload[] memory); /** * @notice method to get executor configs for certain accessLevels * @param payloadsController instance of the payloads controller * @param accessLevels list of the accessLevels for which configs should be returned * @return list of the executor configs */ function getExecutorConfigs( IPayloadsController payloadsController, PayloadsControllerUtils.AccessControl[] calldata accessLevels ) external view returns (ExecutorConfig[] memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title IBaseReceiverPortal * @author BGD Labs * @notice interface defining the method that needs to be implemented by all receiving portals, as its the one that will be called when a received message gets confirmed */ interface IBaseReceiverPortal { /** * @notice method called by CrossChainController when a message has been confirmed * @param originSender address of the sender of the bridged message * @param originChainId id of the chain where the message originated * @param message bytes bridged containing the desired information */ function receiveCrossChainMessage( address originSender, uint256 originChainId, bytes memory message ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.8; /** * @title IRescuable * @author BGD Labs * @notice interface containing the objects, events and methods definitions of the Rescuable contract */ interface IRescuable { /** * @notice emitted when erc20 tokens get rescued * @param caller address that triggers the rescue * @param token address of the rescued token * @param to address that will receive the rescued tokens * @param amount quantity of tokens rescued */ event ERC20Rescued( address indexed caller, address indexed token, address indexed to, uint256 amount ); /** * @notice emitted when native tokens get rescued * @param caller address that triggers the rescue * @param to address that will receive the rescued tokens * @param amount quantity of tokens rescued */ event NativeTokensRescued(address indexed caller, address indexed to, uint256 amount); /** * @notice method called to rescue tokens sent erroneously to the contract. Only callable by owner * @param erc20Token address of the token to rescue * @param to address to send the tokens * @param amount of tokens to rescue */ function emergencyTokenTransfer(address erc20Token, address to, uint256 amount) external; /** * @notice method called to rescue ether sent erroneously to the contract. Only callable by owner * @param to address to send the eth * @param amount of eth to rescue */ function emergencyEtherTransfer(address to, uint256 amount) external; /** * @notice method that defines the address that is allowed to rescue tokens * @return the allowed address */ function whoCanRescue() external view returns (address); }
{ "remappings": [ "solidity-utils/=lib/solidity-utils/src/", "aave-token-v3/=lib/aave-token-v3/src/", "aave-address-book/=lib/aave-address-book/src/", "aave-delivery-infrastructure/=lib/aave-delivery-infrastructure/src/", "aave-delivery-infrastructure-scripts/=lib/aave-delivery-infrastructure/scripts/", "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "@aave/core-v3/=lib/aave-address-book/lib/aave-v3-core/", "@aave/periphery-v3/=lib/aave-address-book/lib/aave-v3-periphery/", "@openzeppelin/=lib/aave-delivery-infrastructure/lib/openzeppelin-contracts/", "aave-helpers/=lib/aave-delivery-infrastructure/lib/aave-helpers/", "aave-token-v2/=lib/aave-token-v3/lib/aave-token-v2/contracts/", "aave-v3-core/=lib/aave-address-book/lib/aave-v3-core/", "aave-v3-periphery/=lib/aave-address-book/lib/aave-v3-periphery/", "era-contracts/=lib/aave-delivery-infrastructure/lib/era-contracts/l1-contracts/contracts/zksync/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "fx-portal/=lib/aave-delivery-infrastructure/lib/fx-portal/contracts/", "governance-crosschain-bridges/=lib/aave-delivery-infrastructure/lib/aave-helpers/lib/governance-crosschain-bridges/", "hyperlane-monorepo/=lib/aave-delivery-infrastructure/lib/hyperlane-monorepo/solidity/contracts/", "nitro-contracts/=lib/aave-delivery-infrastructure/lib/nitro-contracts/src/", "openzeppelin/=lib/openzeppelin-contracts/contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IPayloadsController","name":"payloadsController","type":"address"},{"internalType":"enum PayloadsControllerUtils.AccessControl[]","name":"accessLevels","type":"uint8[]"}],"name":"getExecutorConfigs","outputs":[{"components":[{"internalType":"enum PayloadsControllerUtils.AccessControl","name":"accessLevel","type":"uint8"},{"components":[{"internalType":"address","name":"executor","type":"address"},{"internalType":"uint40","name":"delay","type":"uint40"}],"internalType":"struct IPayloadsControllerCore.ExecutorConfig","name":"config","type":"tuple"}],"internalType":"struct IPayloadsControllerDataHelper.ExecutorConfig[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPayloadsController","name":"payloadsController","type":"address"},{"internalType":"uint40[]","name":"payloadsIds","type":"uint40[]"}],"name":"getPayloadsData","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"components":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"enum PayloadsControllerUtils.AccessControl","name":"maximumAccessLevelRequired","type":"uint8"},{"internalType":"enum IPayloadsControllerCore.PayloadState","name":"state","type":"uint8"},{"internalType":"uint40","name":"createdAt","type":"uint40"},{"internalType":"uint40","name":"queuedAt","type":"uint40"},{"internalType":"uint40","name":"executedAt","type":"uint40"},{"internalType":"uint40","name":"cancelledAt","type":"uint40"},{"internalType":"uint40","name":"expirationTime","type":"uint40"},{"internalType":"uint40","name":"delay","type":"uint40"},{"internalType":"uint40","name":"gracePeriod","type":"uint40"},{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"withDelegateCall","type":"bool"},{"internalType":"enum PayloadsControllerUtils.AccessControl","name":"accessLevel","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"signature","type":"string"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct IPayloadsControllerCore.ExecutionAction[]","name":"actions","type":"tuple[]"}],"internalType":"struct IPayloadsControllerCore.Payload","name":"data","type":"tuple"}],"internalType":"struct IPayloadsControllerDataHelper.Payload[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50610d63806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063d4e8e7821461003b578063fd5315e214610064575b600080fd5b61004e610049366004610507565b610084565b60405161005b9190610586565b60405180910390f35b610077610072366004610507565b610218565b60405161005b9190610707565b606060008267ffffffffffffffff8111156100a1576100a161087c565b6040519080825280602002602001820160405280156100da57816020015b6100c761045f565b8152602001906001900390816100bf5790505b50604080518082019091526000808252602082015290915060005b8481101561020d57866001600160a01b031663f80281fb87878481811061011e5761011e610892565b905060200201602081019061013391906108b5565b6040518263ffffffff1660e01b815260040161014f91906108d9565b6040805180830381865afa15801561016b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061018f9190610999565b915060405180604001604052808787848181106101ae576101ae610892565b90506020020160208101906101c391906108b5565b60028111156101d4576101d461055c565b8152602001838152508382815181106101ef576101ef610892565b60200260200101819052508080610205906109f8565b9150506100f5565b509095945050505050565b606060008267ffffffffffffffff8111156102355761023561087c565b6040519080825280602002602001820160405280156102dc57816020015b6102c960405180604001604052806000815260200161049e604080516101608101909152600080825260208201908152602001600081526000602082018190526040820181905260608083018290526080830182905260a0830182905260c0830182905260e08301919091526101009091015290565b8152602001906001900390816102535790505b509050610340604080516101608101909152600080825260208201908152602001600081526000602082018190526040820181905260608083018290526080830182905260a0830182905260c0830182905260e08301919091526101009091015290565b60005b8481101561020d57866001600160a01b03166358007a4e87878481811061036c5761036c610892565b90506020020160208101906103819190610a1f565b6040516001600160e01b031960e084901b16815264ffffffffff9091166004820152602401600060405180830381865afa1580156103c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103eb9190810190610c0f565b9150604051806040016040528087878481811061040a5761040a610892565b905060200201602081019061041f9190610a1f565b64ffffffffff1681526020018381525083828151811061044157610441610892565b60200260200101819052508080610457906109f8565b915050610343565b60408051808201909152806000815260200161049e604051806040016040528060006001600160a01b03168152602001600064ffffffffff1681525090565b905290565b6001600160a01b03811681146104b857600080fd5b50565b60008083601f8401126104cd57600080fd5b50813567ffffffffffffffff8111156104e557600080fd5b6020830191508360208260051b850101111561050057600080fd5b9250929050565b60008060006040848603121561051c57600080fd5b8335610527816104a3565b9250602084013567ffffffffffffffff81111561054357600080fd5b61054f868287016104bb565b9497909650939450505050565b634e487b7160e01b600052602160045260246000fd5b600381106105825761058261055c565b9052565b602080825282518282018190526000919060409081850190868401855b828110156105ea5781516105b8858251610572565b86015180516001600160a01b03168588015286015164ffffffffff1685850152606090930192908501906001016105a3565b5091979650505050505050565b600681106105825761058261055c565b60005b8381101561062257818101518382015260200161060a565b50506000910152565b60008151808452610643816020860160208601610607565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b858110156105ea578284038952815180516001600160a01b031685528581015115158686015260408082015160c091906106b182890182610572565b5050606080830151818801525060808083015182828901526106d58389018261062b565b9250505060a080830151925086820381880152506106f3818361062b565b9a87019a9550505090840190600101610675565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561086e57603f1989840301855281518051845287015187840187905280516001600160a01b03168785015287810151606061076f81870183610572565b8883015191506080610783818801846105f7565b90830151915060a09061079e8783018464ffffffffff169052565b830151915060c06107b78782018464ffffffffff169052565b90830151915060e0906107d28783018464ffffffffff169052565b83015191506101006107ec8782018464ffffffffff169052565b908301519150610120906108088783018464ffffffffff169052565b83015191506101406108228782018464ffffffffff169052565b9083015191506101609061083e8783018464ffffffffff169052565b92909201516101808601929092525061085b6101a0850182610657565b958801959350509086019060010161072e565b509098975050505050505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600381106104b857600080fd5b6000602082840312156108c757600080fd5b81356108d2816108a8565b9392505050565b602081016108e78284610572565b92915050565b60405160c0810167ffffffffffffffff811182821017156109105761091061087c565b60405290565b604051610160810167ffffffffffffffff811182821017156109105761091061087c565b604051601f8201601f1916810167ffffffffffffffff811182821017156109635761096361087c565b604052919050565b8051610976816104a3565b919050565b64ffffffffff811681146104b857600080fd5b80516109768161097b565b6000604082840312156109ab57600080fd5b6040516040810181811067ffffffffffffffff821117156109ce576109ce61087c565b60405282516109dc816104a3565b815260208301516109ec8161097b565b60208201529392505050565b600060018201610a1857634e487b7160e01b600052601160045260246000fd5b5060010190565b600060208284031215610a3157600080fd5b81356108d28161097b565b8051610976816108a8565b80516006811061097657600080fd5b8051801515811461097657600080fd5b600082601f830112610a7757600080fd5b815167ffffffffffffffff811115610a9157610a9161087c565b610aa4601f8201601f191660200161093a565b818152846020838601011115610ab957600080fd5b610aca826020830160208701610607565b949350505050565b600082601f830112610ae357600080fd5b8151602067ffffffffffffffff80831115610b0057610b0061087c565b8260051b610b0f83820161093a565b9384528581018301938381019088861115610b2957600080fd5b84880192505b85831015610c0357825184811115610b475760008081fd5b880160c0818b03601f1901811315610b5f5760008081fd5b610b676108ed565b610b7288840161096b565b81526040610b81818501610a56565b898301526060610b92818601610a3c565b828401526080915081850151818401525060a08085015189811115610bb75760008081fd5b610bc58f8c83890101610a66565b8484015250928401519288841115610bdf57600091508182fd5b610bed8e8b86880101610a66565b9083015250845250509184019190840190610b2f565b98975050505050505050565b600060208284031215610c2157600080fd5b815167ffffffffffffffff80821115610c3957600080fd5b908301906101608286031215610c4e57600080fd5b610c56610916565b610c5f8361096b565b8152610c6d60208401610a3c565b6020820152610c7e60408401610a47565b6040820152610c8f6060840161098e565b6060820152610ca06080840161098e565b6080820152610cb160a0840161098e565b60a0820152610cc260c0840161098e565b60c0820152610cd360e0840161098e565b60e0820152610100610ce681850161098e565b90820152610120610cf884820161098e565b908201526101408381015183811115610d1057600080fd5b610d1c88828701610ad2565b91830191909152509594505050505056fea26469706673582212203f0c66f70a2e8b8272d22d24a18e21471efef4f7a5e5addee8bce3c7625e96e064736f6c63430008130033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063d4e8e7821461003b578063fd5315e214610064575b600080fd5b61004e610049366004610507565b610084565b60405161005b9190610586565b60405180910390f35b610077610072366004610507565b610218565b60405161005b9190610707565b606060008267ffffffffffffffff8111156100a1576100a161087c565b6040519080825280602002602001820160405280156100da57816020015b6100c761045f565b8152602001906001900390816100bf5790505b50604080518082019091526000808252602082015290915060005b8481101561020d57866001600160a01b031663f80281fb87878481811061011e5761011e610892565b905060200201602081019061013391906108b5565b6040518263ffffffff1660e01b815260040161014f91906108d9565b6040805180830381865afa15801561016b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061018f9190610999565b915060405180604001604052808787848181106101ae576101ae610892565b90506020020160208101906101c391906108b5565b60028111156101d4576101d461055c565b8152602001838152508382815181106101ef576101ef610892565b60200260200101819052508080610205906109f8565b9150506100f5565b509095945050505050565b606060008267ffffffffffffffff8111156102355761023561087c565b6040519080825280602002602001820160405280156102dc57816020015b6102c960405180604001604052806000815260200161049e604080516101608101909152600080825260208201908152602001600081526000602082018190526040820181905260608083018290526080830182905260a0830182905260c0830182905260e08301919091526101009091015290565b8152602001906001900390816102535790505b509050610340604080516101608101909152600080825260208201908152602001600081526000602082018190526040820181905260608083018290526080830182905260a0830182905260c0830182905260e08301919091526101009091015290565b60005b8481101561020d57866001600160a01b03166358007a4e87878481811061036c5761036c610892565b90506020020160208101906103819190610a1f565b6040516001600160e01b031960e084901b16815264ffffffffff9091166004820152602401600060405180830381865afa1580156103c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103eb9190810190610c0f565b9150604051806040016040528087878481811061040a5761040a610892565b905060200201602081019061041f9190610a1f565b64ffffffffff1681526020018381525083828151811061044157610441610892565b60200260200101819052508080610457906109f8565b915050610343565b60408051808201909152806000815260200161049e604051806040016040528060006001600160a01b03168152602001600064ffffffffff1681525090565b905290565b6001600160a01b03811681146104b857600080fd5b50565b60008083601f8401126104cd57600080fd5b50813567ffffffffffffffff8111156104e557600080fd5b6020830191508360208260051b850101111561050057600080fd5b9250929050565b60008060006040848603121561051c57600080fd5b8335610527816104a3565b9250602084013567ffffffffffffffff81111561054357600080fd5b61054f868287016104bb565b9497909650939450505050565b634e487b7160e01b600052602160045260246000fd5b600381106105825761058261055c565b9052565b602080825282518282018190526000919060409081850190868401855b828110156105ea5781516105b8858251610572565b86015180516001600160a01b03168588015286015164ffffffffff1685850152606090930192908501906001016105a3565b5091979650505050505050565b600681106105825761058261055c565b60005b8381101561062257818101518382015260200161060a565b50506000910152565b60008151808452610643816020860160208601610607565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b858110156105ea578284038952815180516001600160a01b031685528581015115158686015260408082015160c091906106b182890182610572565b5050606080830151818801525060808083015182828901526106d58389018261062b565b9250505060a080830151925086820381880152506106f3818361062b565b9a87019a9550505090840190600101610675565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561086e57603f1989840301855281518051845287015187840187905280516001600160a01b03168785015287810151606061076f81870183610572565b8883015191506080610783818801846105f7565b90830151915060a09061079e8783018464ffffffffff169052565b830151915060c06107b78782018464ffffffffff169052565b90830151915060e0906107d28783018464ffffffffff169052565b83015191506101006107ec8782018464ffffffffff169052565b908301519150610120906108088783018464ffffffffff169052565b83015191506101406108228782018464ffffffffff169052565b9083015191506101609061083e8783018464ffffffffff169052565b92909201516101808601929092525061085b6101a0850182610657565b958801959350509086019060010161072e565b509098975050505050505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600381106104b857600080fd5b6000602082840312156108c757600080fd5b81356108d2816108a8565b9392505050565b602081016108e78284610572565b92915050565b60405160c0810167ffffffffffffffff811182821017156109105761091061087c565b60405290565b604051610160810167ffffffffffffffff811182821017156109105761091061087c565b604051601f8201601f1916810167ffffffffffffffff811182821017156109635761096361087c565b604052919050565b8051610976816104a3565b919050565b64ffffffffff811681146104b857600080fd5b80516109768161097b565b6000604082840312156109ab57600080fd5b6040516040810181811067ffffffffffffffff821117156109ce576109ce61087c565b60405282516109dc816104a3565b815260208301516109ec8161097b565b60208201529392505050565b600060018201610a1857634e487b7160e01b600052601160045260246000fd5b5060010190565b600060208284031215610a3157600080fd5b81356108d28161097b565b8051610976816108a8565b80516006811061097657600080fd5b8051801515811461097657600080fd5b600082601f830112610a7757600080fd5b815167ffffffffffffffff811115610a9157610a9161087c565b610aa4601f8201601f191660200161093a565b818152846020838601011115610ab957600080fd5b610aca826020830160208701610607565b949350505050565b600082601f830112610ae357600080fd5b8151602067ffffffffffffffff80831115610b0057610b0061087c565b8260051b610b0f83820161093a565b9384528581018301938381019088861115610b2957600080fd5b84880192505b85831015610c0357825184811115610b475760008081fd5b880160c0818b03601f1901811315610b5f5760008081fd5b610b676108ed565b610b7288840161096b565b81526040610b81818501610a56565b898301526060610b92818601610a3c565b828401526080915081850151818401525060a08085015189811115610bb75760008081fd5b610bc58f8c83890101610a66565b8484015250928401519288841115610bdf57600091508182fd5b610bed8e8b86880101610a66565b9083015250845250509184019190840190610b2f565b98975050505050505050565b600060208284031215610c2157600080fd5b815167ffffffffffffffff80821115610c3957600080fd5b908301906101608286031215610c4e57600080fd5b610c56610916565b610c5f8361096b565b8152610c6d60208401610a3c565b6020820152610c7e60408401610a47565b6040820152610c8f6060840161098e565b6060820152610ca06080840161098e565b6080820152610cb160a0840161098e565b60a0820152610cc260c0840161098e565b60c0820152610cd360e0840161098e565b60e0820152610100610ce681850161098e565b90820152610120610cf884820161098e565b908201526101408381015183811115610d1057600080fd5b610d1c88828701610ad2565b91830191909152509594505050505056fea26469706673582212203f0c66f70a2e8b8272d22d24a18e21471efef4f7a5e5addee8bce3c7625e96e064736f6c63430008130033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.