Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
LiveTradingProcessorData
Compiler Version
v0.8.20+commit.a1b79de6
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.20;
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "../../utils/proxy/ProxyOwned.sol";
import "../../utils/proxy/ProxyPausable.sol";
import "../../interfaces/ILiveTradingProcessor.sol";
contract LiveTradingProcessorData is Initializable, ProxyOwned, ProxyPausable {
/* ========== STRUCT VARIABLES ========== */
struct RequestData {
address user;
bytes32 requestId;
address ticketId;
bool isFulfilled;
uint timestamp;
uint maturityTimestamp;
string gameId;
uint16 sportId;
uint16 typeId;
int24 line;
uint8 position;
uint buyInAmount;
uint expectedQuote;
uint additionalSlippage;
address referrer;
address collateral;
}
/* ========== STATE VARIABLES ========== */
ILiveTradingProcessor public liveTradingProcessor;
function initialize(address _owner, ILiveTradingProcessor _liveTradingProcessor) external initializer {
setOwner(_owner);
liveTradingProcessor = _liveTradingProcessor;
}
/**
* @notice Retrieves requests data within a paginated range.
* @dev Fetches requests data in batches.
* @param _startIndex The starting index for pagination.
* @param _pageSize The number of entries to fetch in the current page.
* @return requestsData Requests data.
*/
function getRequestsData(uint _startIndex, uint _pageSize) external view returns (RequestData[] memory requestsData) {
uint requestsSize = liveTradingProcessor.requestCounter();
requestsData = new RequestData[](_pageSize);
_pageSize = _pageSize > requestsSize - _startIndex ? requestsSize - _startIndex : _pageSize;
for (uint i = _startIndex; i < (_startIndex + _pageSize); i++) {
bytes32 requestId = liveTradingProcessor.counterToRequestId(i);
address requester = liveTradingProcessor.requestIdToRequester(requestId);
address ticketId = liveTradingProcessor.requestIdToTicketId(requestId);
uint timestampPerRequest = liveTradingProcessor.timestampPerRequest(requestId);
ILiveTradingProcessor.LiveTradeData memory liveTradeData = liveTradingProcessor.getTradeData(requestId);
requestsData[i] = RequestData({
user: requester,
requestId: requestId,
ticketId: ticketId,
isFulfilled: liveTradingProcessor.requestIdFulfilled(requestId),
timestamp: timestampPerRequest,
maturityTimestamp: timestampPerRequest + liveTradingProcessor.maxAllowedExecutionDelay(),
gameId: liveTradeData._gameId,
sportId: liveTradeData._sportId,
typeId: liveTradeData._typeId,
line: liveTradeData._line,
position: liveTradeData._position,
buyInAmount: liveTradeData._buyInAmount,
expectedQuote: liveTradeData._expectedQuote,
additionalSlippage: liveTradeData._additionalSlippage,
referrer: liveTradeData._referrer,
collateral: liveTradeData._collateral
});
}
}
/**
* @notice Retrieves latest live requests data for a specific user within search range.
* @dev Fetches latest requests data for a specific user by iterating all requests backwards inside provided range.
* @param user The address of the user.
* @param _batchSize The number of latest requests to iterate.
* @param _maxSize The max number of requests to fetch for a user.
* @return requestsData Requests data.
*/
function getLatestRequestsDataPerUser(
address user,
uint _batchSize,
uint _maxSize
) external view returns (RequestData[] memory requestsData) {
uint count = 0;
uint requestsSize = liveTradingProcessor.requestCounter();
requestsData = new RequestData[](_maxSize);
_batchSize = _batchSize > requestsSize ? 0 : requestsSize - _batchSize;
// iterate backwards in order to fetch most recent data
for (uint i = requestsSize; i > _batchSize; --i) {
bytes32 requestId = liveTradingProcessor.counterToRequestId(i - 1);
address requester = liveTradingProcessor.requestIdToRequester(requestId);
address ticketId = liveTradingProcessor.requestIdToTicketId(requestId);
if (requester != user) continue;
uint timestampPerRequest = liveTradingProcessor.timestampPerRequest(requestId);
ILiveTradingProcessor.LiveTradeData memory liveTradeData = liveTradingProcessor.getTradeData(requestId);
requestsData[count] = RequestData({
user: requester,
requestId: requestId,
ticketId: ticketId,
isFulfilled: liveTradingProcessor.requestIdFulfilled(requestId),
timestamp: timestampPerRequest,
maturityTimestamp: timestampPerRequest + liveTradingProcessor.maxAllowedExecutionDelay(),
gameId: liveTradeData._gameId,
sportId: liveTradeData._sportId,
typeId: liveTradeData._typeId,
line: liveTradeData._line,
position: liveTradeData._position,
buyInAmount: liveTradeData._buyInAmount,
expectedQuote: liveTradeData._expectedQuote,
additionalSlippage: liveTradeData._additionalSlippage,
referrer: liveTradeData._referrer,
collateral: liveTradeData._collateral
});
count++;
if (count == _maxSize) break;
}
}
function setLiveTradingProcessor(ILiveTradingProcessor _liveTradingProcessor) external onlyOwner {
liveTradingProcessor = _liveTradingProcessor;
emit LiveTradingProcessorChanged(address(_liveTradingProcessor));
}
event LiveTradingProcessorChanged(address liveTradingProcessor);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)
pragma solidity ^0.8.20;
/**
* @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
* behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an
* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
*
* The initialization functions use a version number. Once a version number is used, it is consumed and cannot be
* reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in
* case an upgrade adds a module that needs to be initialized.
*
* For example:
*
* [.hljs-theme-light.nopadding]
* ```solidity
* contract MyToken is ERC20Upgradeable {
* function initialize() initializer public {
* __ERC20_init("MyToken", "MTK");
* }
* }
*
* contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {
* function initializeV2() reinitializer(2) public {
* __ERC20Permit_init("MyToken");
* }
* }
* ```
*
* TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
* possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
*
* CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
* that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
*
* [CAUTION]
* ====
* Avoid leaving a contract uninitialized.
*
* An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation
* contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke
* the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:
*
* [.hljs-theme-light.nopadding]
* ```
* /// @custom:oz-upgrades-unsafe-allow constructor
* constructor() {
* _disableInitializers();
* }
* ```
* ====
*/
abstract contract Initializable {
/**
* @dev Storage of the initializable contract.
*
* It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions
* when using with upgradeable contracts.
*
* @custom:storage-location erc7201:openzeppelin.storage.Initializable
*/
struct InitializableStorage {
/**
* @dev Indicates that the contract has been initialized.
*/
uint64 _initialized;
/**
* @dev Indicates that the contract is in the process of being initialized.
*/
bool _initializing;
}
// keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;
/**
* @dev The contract is already initialized.
*/
error InvalidInitialization();
/**
* @dev The contract is not initializing.
*/
error NotInitializing();
/**
* @dev Triggered when the contract has been initialized or reinitialized.
*/
event Initialized(uint64 version);
/**
* @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,
* `onlyInitializing` functions can be used to initialize parent contracts.
*
* Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any
* number of times. This behavior in the constructor can be useful during testing and is not expected to be used in
* production.
*
* Emits an {Initialized} event.
*/
modifier initializer() {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
// Cache values to avoid duplicated sloads
bool isTopLevelCall = !$._initializing;
uint64 initialized = $._initialized;
// Allowed calls:
// - initialSetup: the contract is not in the initializing state and no previous version was
// initialized
// - construction: the contract is initialized at version 1 (no reininitialization) and the
// current contract is just being deployed
bool initialSetup = initialized == 0 && isTopLevelCall;
bool construction = initialized == 1 && address(this).code.length == 0;
if (!initialSetup && !construction) {
revert InvalidInitialization();
}
$._initialized = 1;
if (isTopLevelCall) {
$._initializing = true;
}
_;
if (isTopLevelCall) {
$._initializing = false;
emit Initialized(1);
}
}
/**
* @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the
* contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be
* used to initialize parent contracts.
*
* A reinitializer may be used after the original initialization step. This is essential to configure modules that
* are added through upgrades and that require initialization.
*
* When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`
* cannot be nested. If one is invoked in the context of another, execution will revert.
*
* Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in
* a contract, executing them in the right order is up to the developer or operator.
*
* WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.
*
* Emits an {Initialized} event.
*/
modifier reinitializer(uint64 version) {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
if ($._initializing || $._initialized >= version) {
revert InvalidInitialization();
}
$._initialized = version;
$._initializing = true;
_;
$._initializing = false;
emit Initialized(version);
}
/**
* @dev Modifier to protect an initialization function so that it can only be invoked by functions with the
* {initializer} and {reinitializer} modifiers, directly or indirectly.
*/
modifier onlyInitializing() {
_checkInitializing();
_;
}
/**
* @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.
*/
function _checkInitializing() internal view virtual {
if (!_isInitializing()) {
revert NotInitializing();
}
}
/**
* @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.
* Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized
* to any version. It is recommended to use this to lock implementation contracts that are designed to be called
* through proxies.
*
* Emits an {Initialized} event the first time it is successfully executed.
*/
function _disableInitializers() internal virtual {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
if ($._initializing) {
revert InvalidInitialization();
}
if ($._initialized != type(uint64).max) {
$._initialized = type(uint64).max;
emit Initialized(type(uint64).max);
}
}
/**
* @dev Returns the highest version that has been initialized. See {reinitializer}.
*/
function _getInitializedVersion() internal view returns (uint64) {
return _getInitializableStorage()._initialized;
}
/**
* @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.
*/
function _isInitializing() internal view returns (bool) {
return _getInitializableStorage()._initializing;
}
/**
* @dev Returns a pointer to the storage namespace.
*/
// solhint-disable-next-line var-name-mixedcase
function _getInitializableStorage() private pure returns (InitializableStorage storage $) {
assembly {
$.slot := INITIALIZABLE_STORAGE
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface ILiveTradingProcessor {
struct LiveTradeData {
string _gameId;
uint16 _sportId;
uint16 _typeId;
int24 _line;
uint8 _position;
uint _buyInAmount;
uint _expectedQuote;
uint _additionalSlippage;
address _referrer;
address _collateral;
}
function maxAllowedExecutionDelay() external view returns (uint);
function requestCounter() external view returns (uint);
function counterToRequestId(uint _counter) external view returns (bytes32);
function requestIdToRequester(bytes32 _requestId) external view returns (address);
function requestIdToTicketId(bytes32 _requestId) external view returns (address);
function requestIdFulfilled(bytes32 _requestId) external view returns (bool);
function timestampPerRequest(bytes32 _requestId) external view returns (uint);
function getTradeData(bytes32 _requestId) external view returns (LiveTradeData memory);
function fulfillLiveTrade(bytes32 _requestId, bool allow, uint approvedAmount) external;
function requestLiveTrade(LiveTradeData calldata _liveTradeData) external returns (bytes32);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
// Clone of syntetix contract without constructor
contract ProxyOwned {
address public owner;
address public nominatedOwner;
bool private _initialized;
bool private _transferredAtInit;
function setOwner(address _owner) public {
require(_owner != address(0), "Owner address cannot be 0");
require(!_initialized, "Already initialized, use nominateNewOwner");
_initialized = true;
owner = _owner;
emit OwnerChanged(address(0), _owner);
}
function nominateNewOwner(address _owner) external onlyOwner {
nominatedOwner = _owner;
emit OwnerNominated(_owner);
}
function acceptOwnership() external {
require(msg.sender == nominatedOwner, "You must be nominated before you can accept ownership");
emit OwnerChanged(owner, nominatedOwner);
owner = nominatedOwner;
nominatedOwner = address(0);
}
function transferOwnershipAtInit(address proxyAddress) external onlyOwner {
require(proxyAddress != address(0), "Invalid address");
require(!_transferredAtInit, "Already transferred");
owner = proxyAddress;
_transferredAtInit = true;
emit OwnerChanged(owner, proxyAddress);
}
modifier onlyOwner() {
_onlyOwner();
_;
}
function _onlyOwner() private view {
require(msg.sender == owner, "Only the contract owner may perform this action");
}
event OwnerNominated(address newOwner);
event OwnerChanged(address oldOwner, address newOwner);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
// Inheritance
import "./ProxyOwned.sol";
// Clone of syntetix contract without constructor
contract ProxyPausable is ProxyOwned {
uint public lastPauseTime;
bool public paused;
/**
* @notice Change the paused state of the contract
* @dev Only the contract owner may call this.
*/
function setPaused(bool _paused) external onlyOwner {
// Ensure we're actually changing the state before we do anything
if (_paused == paused) {
return;
}
// Set our paused state.
paused = _paused;
// If applicable, set the last pause time.
if (paused) {
lastPauseTime = block.timestamp;
}
// Let everyone know that our pause state has changed.
emit PauseChanged(paused);
}
event PauseChanged(bool isPaused);
modifier notPaused() {
require(!paused, "This action cannot be performed while the contract is paused");
_;
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"liveTradingProcessor","type":"address"}],"name":"LiveTradingProcessorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isPaused","type":"bool"}],"name":"PauseChanged","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"_batchSize","type":"uint256"},{"internalType":"uint256","name":"_maxSize","type":"uint256"}],"name":"getLatestRequestsDataPerUser","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes32","name":"requestId","type":"bytes32"},{"internalType":"address","name":"ticketId","type":"address"},{"internalType":"bool","name":"isFulfilled","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"maturityTimestamp","type":"uint256"},{"internalType":"string","name":"gameId","type":"string"},{"internalType":"uint16","name":"sportId","type":"uint16"},{"internalType":"uint16","name":"typeId","type":"uint16"},{"internalType":"int24","name":"line","type":"int24"},{"internalType":"uint8","name":"position","type":"uint8"},{"internalType":"uint256","name":"buyInAmount","type":"uint256"},{"internalType":"uint256","name":"expectedQuote","type":"uint256"},{"internalType":"uint256","name":"additionalSlippage","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"address","name":"collateral","type":"address"}],"internalType":"struct LiveTradingProcessorData.RequestData[]","name":"requestsData","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startIndex","type":"uint256"},{"internalType":"uint256","name":"_pageSize","type":"uint256"}],"name":"getRequestsData","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes32","name":"requestId","type":"bytes32"},{"internalType":"address","name":"ticketId","type":"address"},{"internalType":"bool","name":"isFulfilled","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"maturityTimestamp","type":"uint256"},{"internalType":"string","name":"gameId","type":"string"},{"internalType":"uint16","name":"sportId","type":"uint16"},{"internalType":"uint16","name":"typeId","type":"uint16"},{"internalType":"int24","name":"line","type":"int24"},{"internalType":"uint8","name":"position","type":"uint8"},{"internalType":"uint256","name":"buyInAmount","type":"uint256"},{"internalType":"uint256","name":"expectedQuote","type":"uint256"},{"internalType":"uint256","name":"additionalSlippage","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"address","name":"collateral","type":"address"}],"internalType":"struct LiveTradingProcessorData.RequestData[]","name":"requestsData","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"contract ILiveTradingProcessor","name":"_liveTradingProcessor","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastPauseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liveTradingProcessor","outputs":[{"internalType":"contract ILiveTradingProcessor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nominatedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ILiveTradingProcessor","name":"_liveTradingProcessor","type":"address"}],"name":"setLiveTradingProcessor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proxyAddress","type":"address"}],"name":"transferOwnershipAtInit","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b5061190d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80635c975abb1161008c57806391b4ded91161006657806391b4ded9146101dd57806394bd2313146101f4578063c3b83f5f14610207578063f90e73431461021a57600080fd5b80635c975abb146101a557806379ba5097146101c25780638da5cb5b146101ca57600080fd5b806316c38b3c116100c857806316c38b3c1461014c5780633b0e6e3e1461015f578063485cc9551461017f57806353a47bb71461019257600080fd5b806304de96c5146100ef57806313af4035146101245780631627540c14610139575b600080fd5b6003546101079061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610137610132366004611384565b61022d565b005b610137610147366004611384565b610363565b61013761015a3660046113b6565b6103b9565b61017261016d3660046113d3565b61042b565b60405161011b9190611445565b61013761018d366004611587565b610971565b600154610107906001600160a01b031681565b6003546101b29060ff1681565b604051901515815260200161011b565b610137610aa2565b600054610107906001600160a01b031681565b6101e660025481565b60405190815260200161011b565b610137610202366004611384565b610b8c565b610137610215366004611384565b610bea565b6101726102283660046115c0565b610cf3565b6001600160a01b0381166102885760405162461bcd60e51b815260206004820152601960248201527f4f776e657220616464726573732063616e6e6f7420626520300000000000000060448201526064015b60405180910390fd5b600154600160a01b900460ff16156102f45760405162461bcd60e51b815260206004820152602960248201527f416c726561647920696e697469616c697a65642c20757365206e6f6d696e617460448201526832a732bba7bbb732b960b91b606482015260840161027f565b6001805460ff60a01b1916600160a01b179055600080546001600160a01b0383166001600160a01b0319909116811782556040805192835260208301919091527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91015b60405180910390a150565b61036b611278565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2290602001610358565b6103c1611278565b60035460ff16151581151514610428576003805460ff191682151590811790915560ff16156103ef57426002555b60035460405160ff909116151581527f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec590602001610358565b50565b60606000600360019054906101000a90046001600160a01b03166001600160a01b031663973a814e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a691906115f5565b90508267ffffffffffffffff8111156104c1576104c161160e565b6040519080825280602002602001820160405280156104fa57816020015b6104e76112ec565b8152602001906001900390816104df5790505b509150610507848261163a565b8311610513578261051d565b61051d848261163a565b9250835b61052b8486611653565b8110156109695760035460405163241086df60e21b81526004810183905260009161010090046001600160a01b0316906390421b7c90602401602060405180830381865afa158015610581573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a591906115f5565b600354604051637ff39d2960e01b8152600481018390529192506000916101009091046001600160a01b031690637ff39d2990602401602060405180830381865afa1580156105f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061c9190611676565b60035460405163bfc69e8360e01b8152600481018590529192506000916101009091046001600160a01b03169063bfc69e8390602401602060405180830381865afa15801561066f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106939190611676565b600354604051630ca6631f60e31b8152600481018690529192506000916101009091046001600160a01b03169063653318f890602401602060405180830381865afa1580156106e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a91906115f5565b600354604051632afdebb160e01b8152600481018790529192506000916101009091046001600160a01b031690632afdebb190602401600060405180830381865afa15801561075d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610785919081019061177a565b60408051610200810182526001600160a01b0380881682526020820189905286811682840152600354925162a195f960e11b8152600481018a9052939450909260608401926101009004909116906301432bf290602401602060405180830381865afa1580156107f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081d9190611874565b15158152602001838152602001600360019054906101000a90046001600160a01b03166001600160a01b03166383223eb56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561087d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a191906115f5565b6108ab9085611653565b815260200182600001518152602001826020015161ffff168152602001826040015161ffff168152602001826060015160020b8152602001826080015160ff1681526020018260a0015181526020018260c0015181526020018260e0015181526020018261010001516001600160a01b031681526020018261012001516001600160a01b031681525088878151811061094657610946611891565b602002602001018190525050505050508080610961906118a7565b915050610521565b505092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156109b75750825b905060008267ffffffffffffffff1660011480156109d45750303b155b9050811580156109e2575080155b15610a005760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2a57845460ff60401b1916600160401b1785555b610a338761022d565b60038054610100600160a81b0319166101006001600160a01b038916021790558315610a9957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6001546001600160a01b03163314610b1a5760405162461bcd60e51b815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527402063616e20616363657074206f776e65727368697605c1b606482015260840161027f565b600054600154604080516001600160a01b0393841681529290911660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b610b94611278565b60038054610100600160a81b0319166101006001600160a01b038416908102919091179091556040519081527fb6d32e867ecb1156e3f98524d07ea4ce425a686c9e4f8960af24ce6b045fbcfd90602001610358565b610bf2611278565b6001600160a01b038116610c3a5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015260640161027f565b600154600160a81b900460ff1615610c8a5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481d1c985b9cd9995c9c9959606a1b604482015260640161027f565b600080546001600160a01b0383166001600160a01b031990911681179091556001805460ff60a81b1916600160a81b1790556040805182815260208101929092527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9101610358565b6060600080600360019054906101000a90046001600160a01b03166001600160a01b031663973a814e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6f91906115f5565b90508367ffffffffffffffff811115610d8a57610d8a61160e565b604051908082528060200260200182016040528015610dc357816020015b610db06112ec565b815260200190600190039081610da85790505b509250808511610ddc57610dd7858261163a565b610ddf565b60005b9450805b8581111561126e5760035460009061010090046001600160a01b03166390421b7c610e0f60018561163a565b6040518263ffffffff1660e01b8152600401610e2d91815260200190565b602060405180830381865afa158015610e4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6e91906115f5565b600354604051637ff39d2960e01b8152600481018390529192506000916101009091046001600160a01b031690637ff39d2990602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee59190611676565b60035460405163bfc69e8360e01b8152600481018590529192506000916101009091046001600160a01b03169063bfc69e8390602401602060405180830381865afa158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190611676565b9050896001600160a01b0316826001600160a01b031614610f7f5750505061125e565b600354604051630ca6631f60e31b81526004810185905260009161010090046001600160a01b03169063653318f890602401602060405180830381865afa158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff291906115f5565b600354604051632afdebb160e01b8152600481018790529192506000916101009091046001600160a01b031690632afdebb190602401600060405180830381865afa158015611045573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261106d919081019061177a565b60408051610200810182526001600160a01b0380881682526020820189905286811682840152600354925162a195f960e11b8152600481018a9052939450909260608401926101009004909116906301432bf290602401602060405180830381865afa1580156110e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111059190611874565b15158152602001838152602001600360019054906101000a90046001600160a01b03166001600160a01b03166383223eb56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611165573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118991906115f5565b6111939085611653565b815260200182600001518152602001826020015161ffff168152602001826040015161ffff168152602001826060015160020b8152602001826080015160ff1681526020018260a0015181526020018260c0015181526020018260e0015181526020018261010001516001600160a01b031681526020018261012001516001600160a01b031681525089898151811061122e5761122e611891565b60200260200101819052508780611244906118a7565b98505089880361125857505050505061126e565b50505050505b611267816118c0565b9050610de3565b5050509392505050565b6000546001600160a01b031633146112ea5760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201526e37b936903a3434b99030b1ba34b7b760891b606482015260840161027f565b565b604080516102008101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6001600160a01b038116811461042857600080fd5b60006020828403121561139657600080fd5b81356113a18161136f565b9392505050565b801515811461042857600080fd5b6000602082840312156113c857600080fd5b81356113a1816113a8565b600080604083850312156113e657600080fd5b50508035926020909101359150565b60005b838110156114105781810151838201526020016113f8565b50506000910152565b600081518084526114318160208601602086016113f5565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561157957603f19898403018552815180516001600160a01b03908116855288820151898601528782015116878501526060808201511515908501526080808201519085015260a0808201519085015260c08082015161020082870181905291906114dc83880182611419565b9250505060e0808301516114f58288018261ffff169052565b50506101008281015161ffff16908601526101208083015160020b908601526101408083015160ff1690860152610160808301519086015261018080830151908601526101a080830151908601526101c0808301516001600160a01b03908116918701919091526101e092830151169190940152938601939086019060010161146c565b509098975050505050505050565b6000806040838503121561159a57600080fd5b82356115a58161136f565b915060208301356115b58161136f565b809150509250929050565b6000806000606084860312156115d557600080fd5b83356115e08161136f565b95602085013595506040909401359392505050565b60006020828403121561160757600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561164d5761164d611624565b92915050565b8082018082111561164d5761164d611624565b80516116718161136f565b919050565b60006020828403121561168857600080fd5b81516113a18161136f565b604051610140810167ffffffffffffffff811182821017156116b7576116b761160e565b60405290565b600082601f8301126116ce57600080fd5b815167ffffffffffffffff808211156116e9576116e961160e565b604051601f8301601f19908116603f011681019082821181831017156117115761171161160e565b8160405283815286602085880101111561172a57600080fd5b61173b8460208301602089016113f5565b9695505050505050565b805161ffff8116811461167157600080fd5b8051600281900b811461167157600080fd5b805160ff8116811461167157600080fd5b60006020828403121561178c57600080fd5b815167ffffffffffffffff808211156117a457600080fd5b9083019061014082860312156117b957600080fd5b6117c1611693565b8251828111156117d057600080fd5b6117dc878286016116bd565b8252506117eb60208401611745565b60208201526117fc60408401611745565b604082015261180d60608401611757565b606082015261181e60808401611769565b608082015260a083015160a082015260c083015160c082015260e083015160e08201526101009150611851828401611666565b828201526101209150611865828401611666565b91810191909152949350505050565b60006020828403121561188657600080fd5b81516113a1816113a8565b634e487b7160e01b600052603260045260246000fd5b6000600182016118b9576118b9611624565b5060010190565b6000816118cf576118cf611624565b50600019019056fea26469706673582212206116ed1fb86c2a843bcdabbe3cd6734bf6d4a44d5330406b509fa2a483372f1e64736f6c63430008140033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80635c975abb1161008c57806391b4ded91161006657806391b4ded9146101dd57806394bd2313146101f4578063c3b83f5f14610207578063f90e73431461021a57600080fd5b80635c975abb146101a557806379ba5097146101c25780638da5cb5b146101ca57600080fd5b806316c38b3c116100c857806316c38b3c1461014c5780633b0e6e3e1461015f578063485cc9551461017f57806353a47bb71461019257600080fd5b806304de96c5146100ef57806313af4035146101245780631627540c14610139575b600080fd5b6003546101079061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610137610132366004611384565b61022d565b005b610137610147366004611384565b610363565b61013761015a3660046113b6565b6103b9565b61017261016d3660046113d3565b61042b565b60405161011b9190611445565b61013761018d366004611587565b610971565b600154610107906001600160a01b031681565b6003546101b29060ff1681565b604051901515815260200161011b565b610137610aa2565b600054610107906001600160a01b031681565b6101e660025481565b60405190815260200161011b565b610137610202366004611384565b610b8c565b610137610215366004611384565b610bea565b6101726102283660046115c0565b610cf3565b6001600160a01b0381166102885760405162461bcd60e51b815260206004820152601960248201527f4f776e657220616464726573732063616e6e6f7420626520300000000000000060448201526064015b60405180910390fd5b600154600160a01b900460ff16156102f45760405162461bcd60e51b815260206004820152602960248201527f416c726561647920696e697469616c697a65642c20757365206e6f6d696e617460448201526832a732bba7bbb732b960b91b606482015260840161027f565b6001805460ff60a01b1916600160a01b179055600080546001600160a01b0383166001600160a01b0319909116811782556040805192835260208301919091527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91015b60405180910390a150565b61036b611278565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2290602001610358565b6103c1611278565b60035460ff16151581151514610428576003805460ff191682151590811790915560ff16156103ef57426002555b60035460405160ff909116151581527f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec590602001610358565b50565b60606000600360019054906101000a90046001600160a01b03166001600160a01b031663973a814e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a691906115f5565b90508267ffffffffffffffff8111156104c1576104c161160e565b6040519080825280602002602001820160405280156104fa57816020015b6104e76112ec565b8152602001906001900390816104df5790505b509150610507848261163a565b8311610513578261051d565b61051d848261163a565b9250835b61052b8486611653565b8110156109695760035460405163241086df60e21b81526004810183905260009161010090046001600160a01b0316906390421b7c90602401602060405180830381865afa158015610581573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a591906115f5565b600354604051637ff39d2960e01b8152600481018390529192506000916101009091046001600160a01b031690637ff39d2990602401602060405180830381865afa1580156105f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061c9190611676565b60035460405163bfc69e8360e01b8152600481018590529192506000916101009091046001600160a01b03169063bfc69e8390602401602060405180830381865afa15801561066f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106939190611676565b600354604051630ca6631f60e31b8152600481018690529192506000916101009091046001600160a01b03169063653318f890602401602060405180830381865afa1580156106e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a91906115f5565b600354604051632afdebb160e01b8152600481018790529192506000916101009091046001600160a01b031690632afdebb190602401600060405180830381865afa15801561075d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610785919081019061177a565b60408051610200810182526001600160a01b0380881682526020820189905286811682840152600354925162a195f960e11b8152600481018a9052939450909260608401926101009004909116906301432bf290602401602060405180830381865afa1580156107f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081d9190611874565b15158152602001838152602001600360019054906101000a90046001600160a01b03166001600160a01b03166383223eb56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561087d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a191906115f5565b6108ab9085611653565b815260200182600001518152602001826020015161ffff168152602001826040015161ffff168152602001826060015160020b8152602001826080015160ff1681526020018260a0015181526020018260c0015181526020018260e0015181526020018261010001516001600160a01b031681526020018261012001516001600160a01b031681525088878151811061094657610946611891565b602002602001018190525050505050508080610961906118a7565b915050610521565b505092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156109b75750825b905060008267ffffffffffffffff1660011480156109d45750303b155b9050811580156109e2575080155b15610a005760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2a57845460ff60401b1916600160401b1785555b610a338761022d565b60038054610100600160a81b0319166101006001600160a01b038916021790558315610a9957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6001546001600160a01b03163314610b1a5760405162461bcd60e51b815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527402063616e20616363657074206f776e65727368697605c1b606482015260840161027f565b600054600154604080516001600160a01b0393841681529290911660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b610b94611278565b60038054610100600160a81b0319166101006001600160a01b038416908102919091179091556040519081527fb6d32e867ecb1156e3f98524d07ea4ce425a686c9e4f8960af24ce6b045fbcfd90602001610358565b610bf2611278565b6001600160a01b038116610c3a5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015260640161027f565b600154600160a81b900460ff1615610c8a5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481d1c985b9cd9995c9c9959606a1b604482015260640161027f565b600080546001600160a01b0383166001600160a01b031990911681179091556001805460ff60a81b1916600160a81b1790556040805182815260208101929092527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9101610358565b6060600080600360019054906101000a90046001600160a01b03166001600160a01b031663973a814e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6f91906115f5565b90508367ffffffffffffffff811115610d8a57610d8a61160e565b604051908082528060200260200182016040528015610dc357816020015b610db06112ec565b815260200190600190039081610da85790505b509250808511610ddc57610dd7858261163a565b610ddf565b60005b9450805b8581111561126e5760035460009061010090046001600160a01b03166390421b7c610e0f60018561163a565b6040518263ffffffff1660e01b8152600401610e2d91815260200190565b602060405180830381865afa158015610e4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6e91906115f5565b600354604051637ff39d2960e01b8152600481018390529192506000916101009091046001600160a01b031690637ff39d2990602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee59190611676565b60035460405163bfc69e8360e01b8152600481018590529192506000916101009091046001600160a01b03169063bfc69e8390602401602060405180830381865afa158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190611676565b9050896001600160a01b0316826001600160a01b031614610f7f5750505061125e565b600354604051630ca6631f60e31b81526004810185905260009161010090046001600160a01b03169063653318f890602401602060405180830381865afa158015610fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff291906115f5565b600354604051632afdebb160e01b8152600481018790529192506000916101009091046001600160a01b031690632afdebb190602401600060405180830381865afa158015611045573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261106d919081019061177a565b60408051610200810182526001600160a01b0380881682526020820189905286811682840152600354925162a195f960e11b8152600481018a9052939450909260608401926101009004909116906301432bf290602401602060405180830381865afa1580156110e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111059190611874565b15158152602001838152602001600360019054906101000a90046001600160a01b03166001600160a01b03166383223eb56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611165573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118991906115f5565b6111939085611653565b815260200182600001518152602001826020015161ffff168152602001826040015161ffff168152602001826060015160020b8152602001826080015160ff1681526020018260a0015181526020018260c0015181526020018260e0015181526020018261010001516001600160a01b031681526020018261012001516001600160a01b031681525089898151811061122e5761122e611891565b60200260200101819052508780611244906118a7565b98505089880361125857505050505061126e565b50505050505b611267816118c0565b9050610de3565b5050509392505050565b6000546001600160a01b031633146112ea5760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201526e37b936903a3434b99030b1ba34b7b760891b606482015260840161027f565b565b604080516102008101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081019190915290565b6001600160a01b038116811461042857600080fd5b60006020828403121561139657600080fd5b81356113a18161136f565b9392505050565b801515811461042857600080fd5b6000602082840312156113c857600080fd5b81356113a1816113a8565b600080604083850312156113e657600080fd5b50508035926020909101359150565b60005b838110156114105781810151838201526020016113f8565b50506000910152565b600081518084526114318160208601602086016113f5565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561157957603f19898403018552815180516001600160a01b03908116855288820151898601528782015116878501526060808201511515908501526080808201519085015260a0808201519085015260c08082015161020082870181905291906114dc83880182611419565b9250505060e0808301516114f58288018261ffff169052565b50506101008281015161ffff16908601526101208083015160020b908601526101408083015160ff1690860152610160808301519086015261018080830151908601526101a080830151908601526101c0808301516001600160a01b03908116918701919091526101e092830151169190940152938601939086019060010161146c565b509098975050505050505050565b6000806040838503121561159a57600080fd5b82356115a58161136f565b915060208301356115b58161136f565b809150509250929050565b6000806000606084860312156115d557600080fd5b83356115e08161136f565b95602085013595506040909401359392505050565b60006020828403121561160757600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561164d5761164d611624565b92915050565b8082018082111561164d5761164d611624565b80516116718161136f565b919050565b60006020828403121561168857600080fd5b81516113a18161136f565b604051610140810167ffffffffffffffff811182821017156116b7576116b761160e565b60405290565b600082601f8301126116ce57600080fd5b815167ffffffffffffffff808211156116e9576116e961160e565b604051601f8301601f19908116603f011681019082821181831017156117115761171161160e565b8160405283815286602085880101111561172a57600080fd5b61173b8460208301602089016113f5565b9695505050505050565b805161ffff8116811461167157600080fd5b8051600281900b811461167157600080fd5b805160ff8116811461167157600080fd5b60006020828403121561178c57600080fd5b815167ffffffffffffffff808211156117a457600080fd5b9083019061014082860312156117b957600080fd5b6117c1611693565b8251828111156117d057600080fd5b6117dc878286016116bd565b8252506117eb60208401611745565b60208201526117fc60408401611745565b604082015261180d60608401611757565b606082015261181e60808401611769565b608082015260a083015160a082015260c083015160c082015260e083015160e08201526101009150611851828401611666565b828201526101209150611865828401611666565b91810191909152949350505050565b60006020828403121561188657600080fd5b81516113a1816113a8565b634e487b7160e01b600052603260045260246000fd5b6000600182016118b9576118b9611624565b5060010190565b6000816118cf576118cf611624565b50600019019056fea26469706673582212206116ed1fb86c2a843bcdabbe3cd6734bf6d4a44d5330406b509fa2a483372f1e64736f6c63430008140033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
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.