Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ChainStorageContainer
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* Library Imports */ import { Lib_Buffer } from "../../libraries/utils/Lib_Buffer.sol"; import { Lib_AddressResolver } from "../../libraries/resolver/Lib_AddressResolver.sol"; /* Interface Imports */ import { IChainStorageContainer } from "./IChainStorageContainer.sol"; /** * @title ChainStorageContainer * @dev The Chain Storage Container provides its owner contract with read, write and delete * functionality. This provides gas efficiency gains by enabling it to overwrite storage slots which * can no longer be used in a fraud proof due to the fraud window having passed, and the associated * chain state or transactions being finalized. * Three distinct Chain Storage Containers will be deployed on Layer 1: * 1. Stores transaction batches for the Canonical Transaction Chain * 2. Stores queued transactions for the Canonical Transaction Chain * 3. Stores chain state batches for the State Commitment Chain * */ contract ChainStorageContainer is IChainStorageContainer, Lib_AddressResolver { /************* * Libraries * *************/ using Lib_Buffer for Lib_Buffer.Buffer; /************* * Variables * *************/ string public owner; Lib_Buffer.Buffer internal buffer; /*************** * Constructor * ***************/ /** * @param _libAddressManager Address of the Address Manager. * @param _owner Name of the contract that owns this container (will be resolved later). */ constructor(address _libAddressManager, string memory _owner) Lib_AddressResolver(_libAddressManager) { owner = _owner; } /********************** * Function Modifiers * **********************/ modifier onlyOwner() { require( msg.sender == resolve(owner), "ChainStorageContainer: Function can only be called by the owner." ); _; } /******************** * Public Functions * ********************/ /** * @inheritdoc IChainStorageContainer */ // slither-disable-next-line external-function function setGlobalMetadata(bytes27 _globalMetadata) public onlyOwner { return buffer.setExtraData(_globalMetadata); } /** * @inheritdoc IChainStorageContainer */ // slither-disable-next-line external-function function getGlobalMetadata() public view returns (bytes27) { return buffer.getExtraData(); } /** * @inheritdoc IChainStorageContainer */ // slither-disable-next-line external-function function length() public view returns (uint256) { return uint256(buffer.getLength()); } /** * @inheritdoc IChainStorageContainer */ // slither-disable-next-line external-function function push(bytes32 _object) public onlyOwner { buffer.push(_object); } /** * @inheritdoc IChainStorageContainer */ // slither-disable-next-line external-function function push(bytes32 _object, bytes27 _globalMetadata) public onlyOwner { buffer.push(_object, _globalMetadata); } /** * @inheritdoc IChainStorageContainer */ // slither-disable-next-line external-function function get(uint256 _index) public view returns (bytes32) { return buffer.get(uint40(_index)); } /** * @inheritdoc IChainStorageContainer */ // slither-disable-next-line external-function function deleteElementsAfterInclusive(uint256 _index) public onlyOwner { buffer.deleteElementsAfterInclusive(uint40(_index)); } /** * @inheritdoc IChainStorageContainer */ // slither-disable-next-line external-function function deleteElementsAfterInclusive(uint256 _index, bytes27 _globalMetadata) public onlyOwner { buffer.deleteElementsAfterInclusive(uint40(_index), _globalMetadata); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /** * @title Lib_Buffer * @dev This library implements a bytes32 storage array with some additional gas-optimized * functionality. In particular, it encodes its length as a uint40, and tightly packs this with an * overwritable "extra data" field so we can store more information with a single SSTORE. */ library Lib_Buffer { /************* * Libraries * *************/ using Lib_Buffer for Buffer; /*********** * Structs * ***********/ struct Buffer { bytes32 context; mapping(uint256 => bytes32) buf; } struct BufferContext { // Stores the length of the array. Uint40 is way more elements than we'll ever reasonably // need in an array and we get an extra 27 bytes of extra data to play with. uint40 length; // Arbitrary extra data that can be modified whenever the length is updated. Useful for // squeezing out some gas optimizations. bytes27 extraData; } /********************** * Internal Functions * **********************/ /** * Pushes a single element to the buffer. * @param _self Buffer to access. * @param _value Value to push to the buffer. * @param _extraData Global extra data. */ function push( Buffer storage _self, bytes32 _value, bytes27 _extraData ) internal { BufferContext memory ctx = _self.getContext(); _self.buf[ctx.length] = _value; // Bump the global index and insert our extra data, then save the context. ctx.length++; ctx.extraData = _extraData; _self.setContext(ctx); } /** * Pushes a single element to the buffer. * @param _self Buffer to access. * @param _value Value to push to the buffer. */ function push(Buffer storage _self, bytes32 _value) internal { BufferContext memory ctx = _self.getContext(); _self.push(_value, ctx.extraData); } /** * Retrieves an element from the buffer. * @param _self Buffer to access. * @param _index Element index to retrieve. * @return Value of the element at the given index. */ function get(Buffer storage _self, uint256 _index) internal view returns (bytes32) { BufferContext memory ctx = _self.getContext(); require(_index < ctx.length, "Index out of bounds."); return _self.buf[_index]; } /** * Deletes all elements after (and including) a given index. * @param _self Buffer to access. * @param _index Index of the element to delete from (inclusive). * @param _extraData Optional global extra data. */ function deleteElementsAfterInclusive( Buffer storage _self, uint40 _index, bytes27 _extraData ) internal { BufferContext memory ctx = _self.getContext(); require(_index < ctx.length, "Index out of bounds."); // Set our length and extra data, save the context. ctx.length = _index; ctx.extraData = _extraData; _self.setContext(ctx); } /** * Deletes all elements after (and including) a given index. * @param _self Buffer to access. * @param _index Index of the element to delete from (inclusive). */ function deleteElementsAfterInclusive(Buffer storage _self, uint40 _index) internal { BufferContext memory ctx = _self.getContext(); _self.deleteElementsAfterInclusive(_index, ctx.extraData); } /** * Retrieves the current global index. * @param _self Buffer to access. * @return Current global index. */ function getLength(Buffer storage _self) internal view returns (uint40) { BufferContext memory ctx = _self.getContext(); return ctx.length; } /** * Changes current global extra data. * @param _self Buffer to access. * @param _extraData New global extra data. */ function setExtraData(Buffer storage _self, bytes27 _extraData) internal { BufferContext memory ctx = _self.getContext(); ctx.extraData = _extraData; _self.setContext(ctx); } /** * Retrieves the current global extra data. * @param _self Buffer to access. * @return Current global extra data. */ function getExtraData(Buffer storage _self) internal view returns (bytes27) { BufferContext memory ctx = _self.getContext(); return ctx.extraData; } /** * Sets the current buffer context. * @param _self Buffer to access. * @param _ctx Current buffer context. */ function setContext(Buffer storage _self, BufferContext memory _ctx) internal { bytes32 context; uint40 length = _ctx.length; bytes27 extraData = _ctx.extraData; assembly { context := length context := or(context, extraData) } if (_self.context != context) { _self.context = context; } } /** * Retrieves the current buffer context. * @param _self Buffer to access. * @return Current buffer context. */ function getContext(Buffer storage _self) internal view returns (BufferContext memory) { bytes32 context = _self.context; uint40 length; bytes27 extraData; assembly { length := and( context, 0x000000000000000000000000000000000000000000000000000000FFFFFFFFFF ) extraData := and( context, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 ) } return BufferContext({ length: length, extraData: extraData }); } }
// SPDX-License-Identifier: MIT pragma solidity >0.5.0 <0.9.0; /** * @title IChainStorageContainer */ interface IChainStorageContainer { /******************** * Public Functions * ********************/ /** * Sets the container's global metadata field. We're using `bytes27` here because we use five * bytes to maintain the length of the underlying data structure, meaning we have an extra * 27 bytes to store arbitrary data. * @param _globalMetadata New global metadata to set. */ function setGlobalMetadata(bytes27 _globalMetadata) external; /** * Retrieves the container's global metadata field. * @return Container global metadata field. */ function getGlobalMetadata() external view returns (bytes27); /** * Retrieves the number of objects stored in the container. * @return Number of objects in the container. */ function length() external view returns (uint256); /** * Pushes an object into the container. * @param _object A 32 byte value to insert into the container. */ function push(bytes32 _object) external; /** * Pushes an object into the container. Function allows setting the global metadata since * we'll need to touch the "length" storage slot anyway, which also contains the global * metadata (it's an optimization). * @param _object A 32 byte value to insert into the container. * @param _globalMetadata New global metadata for the container. */ function push(bytes32 _object, bytes27 _globalMetadata) external; /** * Retrieves an object from the container. * @param _index Index of the particular object to access. * @return 32 byte object value. */ function get(uint256 _index) external view returns (bytes32); /** * Removes all objects after and including a given index. * @param _index Object index to delete from. */ function deleteElementsAfterInclusive(uint256 _index) external; /** * Removes all objects after and including a given index. Also allows setting the global * metadata field. * @param _index Object index to delete from. * @param _globalMetadata New global metadata for the container. */ function deleteElementsAfterInclusive(uint256 _index, bytes27 _globalMetadata) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* Library Imports */ import { Lib_AddressManager } from "./Lib_AddressManager.sol"; /** * @title Lib_AddressResolver */ abstract contract Lib_AddressResolver { /************* * Variables * *************/ Lib_AddressManager public libAddressManager; /*************** * Constructor * ***************/ /** * @param _libAddressManager Address of the Lib_AddressManager. */ constructor(address _libAddressManager) { libAddressManager = Lib_AddressManager(_libAddressManager); } /******************** * Public Functions * ********************/ /** * Resolves the address associated with a given name. * @param _name Name to resolve an address for. * @return Address associated with the given name. */ function resolve(string memory _name) public view returns (address) { return libAddressManager.getAddress(_name); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; /* External Imports */ import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; /** * @title Lib_AddressManager */ contract Lib_AddressManager is Ownable { /********** * Events * **********/ event AddressSet(string indexed _name, address _newAddress, address _oldAddress); /************* * Variables * *************/ mapping(bytes32 => address) private addresses; /******************** * Public Functions * ********************/ /** * Changes the address associated with a particular name. * @param _name String name to associate an address with. * @param _address Address to associate with the name. */ function setAddress(string memory _name, address _address) external onlyOwner { bytes32 nameHash = _getNameHash(_name); address oldAddress = addresses[nameHash]; addresses[nameHash] = _address; emit AddressSet(_name, _address, oldAddress); } /** * Retrieves the address associated with a given name. * @param _name Name to retrieve an address for. * @return Address associated with the given name. */ function getAddress(string memory _name) external view returns (address) { return addresses[_getNameHash(_name)]; } /********************** * Internal Functions * **********************/ /** * Computes the hash of a name. * @param _name Name to compute a hash for. * @return Hash of the given name. */ function _getNameHash(string memory _name) internal pure returns (bytes32) { return keccak256(abi.encodePacked(_name)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_libAddressManager","type":"address"},{"internalType":"string","name":"_owner","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"bytes27","name":"_globalMetadata","type":"bytes27"}],"name":"deleteElementsAfterInclusive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"deleteElementsAfterInclusive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"get","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalMetadata","outputs":[{"internalType":"bytes27","name":"","type":"bytes27"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"length","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"libAddressManager","outputs":[{"internalType":"contract Lib_AddressManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_object","type":"bytes32"},{"internalType":"bytes27","name":"_globalMetadata","type":"bytes27"}],"name":"push","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_object","type":"bytes32"}],"name":"push","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"}],"name":"resolve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes27","name":"_globalMetadata","type":"bytes27"}],"name":"setGlobalMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162000ca338038062000ca3833981016040819052620000349162000129565b600080546001600160a01b0319166001600160a01b0384161790558051620000649060019060208401906200006d565b50505062000266565b8280546200007b9062000229565b90600052602060002090601f0160209004810192826200009f5760008555620000ea565b82601f10620000ba57805160ff1916838001178555620000ea565b82800160010185558215620000ea579182015b82811115620000ea578251825591602001919060010190620000cd565b50620000f8929150620000fc565b5090565b5b80821115620000f85760008155600101620000fd565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156200013d57600080fd5b82516001600160a01b03811681146200015557600080fd5b602084810151919350906001600160401b03808211156200017557600080fd5b818601915086601f8301126200018a57600080fd5b8151818111156200019f576200019f62000113565b604051601f8201601f19908116603f01168101908382118183101715620001ca57620001ca62000113565b816040528281528986848701011115620001e357600080fd5b600093505b82841015620002075784840186015181850187015292850192620001e8565b82841115620002195760008684830101525b8096505050505050509250929050565b600181811c908216806200023e57607f821691505b602082108114156200026057634e487b7160e01b600052602260045260246000fd5b50919050565b610a2d80620002766000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063461a447811610071578063461a44781461012f5780634651d91e146101425780638da5cb5b146101555780639507d39a1461016a578063b298e36b1461017d578063ccf8f9691461019057600080fd5b8063167fd681146100ae5780631f7b6d32146100c35780632015276c146100de57806329061de2146100f1578063299ca47814610104575b600080fd5b6100c16100bc36600461077f565b6101af565b005b6100cb61028b565b6040519081526020015b60405180910390f35b6100c16100ec36600461077f565b6102a3565b6100c16100ff3660046107ab565b6102ef565b600054610117906001600160a01b031681565b6040516001600160a01b0390911681526020016100d5565b61011761013d3660046107e3565b61033d565b6100c1610150366004610894565b6103c4565b61015d61040f565b6040516100d591906108ad565b6100cb610178366004610894565b61049d565b6100c161018b366004610894565b6104b1565b6101986104fc565b60405164ffffffffff1990911681526020016100d5565b610242600180546101bf90610902565b80601f01602080910402602001604051908101604052809291908181526020018280546101eb90610902565b80156102385780601f1061020d57610100808354040283529160200191610238565b820191906000526020600020905b81548152906001019060200180831161021b57829003601f168201915b505050505061033d565b6001600160a01b0316336001600160a01b03161461027b5760405162461bcd60e51b81526004016102729061093d565b60405180910390fd5b6102876002838361050d565b5050565b6000610297600261059a565b64ffffffffff16905090565b6102b3600180546101bf90610902565b6001600160a01b0316336001600160a01b0316146102e35760405162461bcd60e51b81526004016102729061093d565b610287600283836105ae565b6102ff600180546101bf90610902565b6001600160a01b0316336001600160a01b03161461032f5760405162461bcd60e51b81526004016102729061093d565b61033a600282610606565b50565b6000805460405163bf40fac160e01b81526001600160a01b039091169063bf40fac19061036e9085906004016108ad565b60206040518083038186803b15801561038657600080fd5b505afa15801561039a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103be919061099b565b92915050565b6103d4600180546101bf90610902565b6001600160a01b0316336001600160a01b0316146104045760405162461bcd60e51b81526004016102729061093d565b61033a600282610630565b6001805461041c90610902565b80601f016020809104026020016040519081016040528092919081815260200182805461044890610902565b80156104955780601f1061046a57610100808354040283529160200191610495565b820191906000526020600020905b81548152906001019060200180831161047857829003601f168201915b505050505081565b60006103be600264ffffffffff8416610656565b6104c1600180546101bf90610902565b6001600160a01b0316336001600160a01b0316146104f15760405162461bcd60e51b81526004016102729061093d565b61033a6002826106cb565b600061050860026106f1565b905090565b600061051884610708565b9050806000015164ffffffffff168364ffffffffff16106105725760405162461bcd60e51b815260206004820152601460248201527324b73232bc1037baba1037b3103137bab732399760611b6044820152606401610272565b64ffffffffff8316815264ffffffffff19821660208201526105948482610744565b50505050565b6000806105a683610708565b519392505050565b60006105b984610708565b805164ffffffffff16600090815260018601602052604090208490558051909150816105e4826109c4565b64ffffffffff1690525064ffffffffff19821660208201526105948482610744565b600061061183610708565b64ffffffffff1983166020820152905061062b8382610744565b505050565b600061063b83610708565b905061062b8282602001518561050d9092919063ffffffff16565b60008061066284610708565b805190915064ffffffffff1683106106b35760405162461bcd60e51b815260206004820152601460248201527324b73232bc1037baba1037b3103137bab732399760611b6044820152606401610272565b50506000908152600191909101602052604090205490565b60006106d683610708565b905061062b828260200151856105ae9092919063ffffffff16565b6000806106fd83610708565b602001519392505050565b604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b805160208201518354818317929190831461075d578285555b5050505050565b803564ffffffffff198116811461077a57600080fd5b919050565b6000806040838503121561079257600080fd5b823591506107a260208401610764565b90509250929050565b6000602082840312156107bd57600080fd5b6107c682610764565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156107f557600080fd5b813567ffffffffffffffff8082111561080d57600080fd5b818401915084601f83011261082157600080fd5b813581811115610833576108336107cd565b604051601f8201601f19908116603f0116810190838211818310171561085b5761085b6107cd565b8160405282815287602084870101111561087457600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000602082840312156108a657600080fd5b5035919050565b600060208083528351808285015260005b818110156108da578581018301518582016040015282016108be565b818111156108ec576000604083870101525b50601f01601f1916929092016040019392505050565b600181811c9082168061091657607f821691505b6020821081141561093757634e487b7160e01b600052602260045260246000fd5b50919050565b602080825260409082018190527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e20908201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e606082015260800190565b6000602082840312156109ad57600080fd5b81516001600160a01b03811681146107c657600080fd5b600064ffffffffff808316818114156109ed57634e487b7160e01b600052601160045260246000fd5b600101939250505056fea26469706673582212203f93907b0eed4c7e0fcbb761dda4387c9f9f9de3202c7953b24792f8ad1de09064736f6c634300080900330000000000000000000000006968f3f16c3e64003f02e121cf0d5ccbf5625a420000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001943616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063461a447811610071578063461a44781461012f5780634651d91e146101425780638da5cb5b146101555780639507d39a1461016a578063b298e36b1461017d578063ccf8f9691461019057600080fd5b8063167fd681146100ae5780631f7b6d32146100c35780632015276c146100de57806329061de2146100f1578063299ca47814610104575b600080fd5b6100c16100bc36600461077f565b6101af565b005b6100cb61028b565b6040519081526020015b60405180910390f35b6100c16100ec36600461077f565b6102a3565b6100c16100ff3660046107ab565b6102ef565b600054610117906001600160a01b031681565b6040516001600160a01b0390911681526020016100d5565b61011761013d3660046107e3565b61033d565b6100c1610150366004610894565b6103c4565b61015d61040f565b6040516100d591906108ad565b6100cb610178366004610894565b61049d565b6100c161018b366004610894565b6104b1565b6101986104fc565b60405164ffffffffff1990911681526020016100d5565b610242600180546101bf90610902565b80601f01602080910402602001604051908101604052809291908181526020018280546101eb90610902565b80156102385780601f1061020d57610100808354040283529160200191610238565b820191906000526020600020905b81548152906001019060200180831161021b57829003601f168201915b505050505061033d565b6001600160a01b0316336001600160a01b03161461027b5760405162461bcd60e51b81526004016102729061093d565b60405180910390fd5b6102876002838361050d565b5050565b6000610297600261059a565b64ffffffffff16905090565b6102b3600180546101bf90610902565b6001600160a01b0316336001600160a01b0316146102e35760405162461bcd60e51b81526004016102729061093d565b610287600283836105ae565b6102ff600180546101bf90610902565b6001600160a01b0316336001600160a01b03161461032f5760405162461bcd60e51b81526004016102729061093d565b61033a600282610606565b50565b6000805460405163bf40fac160e01b81526001600160a01b039091169063bf40fac19061036e9085906004016108ad565b60206040518083038186803b15801561038657600080fd5b505afa15801561039a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103be919061099b565b92915050565b6103d4600180546101bf90610902565b6001600160a01b0316336001600160a01b0316146104045760405162461bcd60e51b81526004016102729061093d565b61033a600282610630565b6001805461041c90610902565b80601f016020809104026020016040519081016040528092919081815260200182805461044890610902565b80156104955780601f1061046a57610100808354040283529160200191610495565b820191906000526020600020905b81548152906001019060200180831161047857829003601f168201915b505050505081565b60006103be600264ffffffffff8416610656565b6104c1600180546101bf90610902565b6001600160a01b0316336001600160a01b0316146104f15760405162461bcd60e51b81526004016102729061093d565b61033a6002826106cb565b600061050860026106f1565b905090565b600061051884610708565b9050806000015164ffffffffff168364ffffffffff16106105725760405162461bcd60e51b815260206004820152601460248201527324b73232bc1037baba1037b3103137bab732399760611b6044820152606401610272565b64ffffffffff8316815264ffffffffff19821660208201526105948482610744565b50505050565b6000806105a683610708565b519392505050565b60006105b984610708565b805164ffffffffff16600090815260018601602052604090208490558051909150816105e4826109c4565b64ffffffffff1690525064ffffffffff19821660208201526105948482610744565b600061061183610708565b64ffffffffff1983166020820152905061062b8382610744565b505050565b600061063b83610708565b905061062b8282602001518561050d9092919063ffffffff16565b60008061066284610708565b805190915064ffffffffff1683106106b35760405162461bcd60e51b815260206004820152601460248201527324b73232bc1037baba1037b3103137bab732399760611b6044820152606401610272565b50506000908152600191909101602052604090205490565b60006106d683610708565b905061062b828260200151856105ae9092919063ffffffff16565b6000806106fd83610708565b602001519392505050565b604080518082019091526000808252602082015250546040805180820190915264ffffffffff8216815264ffffffffff19909116602082015290565b805160208201518354818317929190831461075d578285555b5050505050565b803564ffffffffff198116811461077a57600080fd5b919050565b6000806040838503121561079257600080fd5b823591506107a260208401610764565b90509250929050565b6000602082840312156107bd57600080fd5b6107c682610764565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156107f557600080fd5b813567ffffffffffffffff8082111561080d57600080fd5b818401915084601f83011261082157600080fd5b813581811115610833576108336107cd565b604051601f8201601f19908116603f0116810190838211818310171561085b5761085b6107cd565b8160405282815287602084870101111561087457600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000602082840312156108a657600080fd5b5035919050565b600060208083528351808285015260005b818110156108da578581018301518582016040015282016108be565b818111156108ec576000604083870101525b50601f01601f1916929092016040019392505050565b600181811c9082168061091657607f821691505b6020821081141561093757634e487b7160e01b600052602260045260246000fd5b50919050565b602080825260409082018190527f436861696e53746f72616765436f6e7461696e65723a2046756e6374696f6e20908201527f63616e206f6e6c792062652063616c6c656420627920746865206f776e65722e606082015260800190565b6000602082840312156109ad57600080fd5b81516001600160a01b03811681146107c657600080fd5b600064ffffffffff808316818114156109ed57634e487b7160e01b600052601160045260246000fd5b600101939250505056fea26469706673582212203f93907b0eed4c7e0fcbb761dda4387c9f9f9de3202c7953b24792f8ad1de09064736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006968f3f16c3e64003f02e121cf0d5ccbf5625a420000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001943616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000
-----Decoded View---------------
Arg [0] : _libAddressManager (address): 0x6968f3F16C3e64003F02E121cf0D5CCBf5625a42
Arg [1] : _owner (string): CanonicalTransactionChain
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000006968f3f16c3e64003f02e121cf0d5ccbf5625a42
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [3] : 43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.