Overview
ETH Balance
ETH Value
$0.00Latest 5 from a total of 5 transactions
Latest 25 internal transactions (View All)
Cross-Chain Transactions
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.15;
import "@openzeppelin/contracts/access/Ownable.sol";
import "./IVault.sol";
contract ReleaseRegistry is Ownable {
/// @notice Number of vault releases in this registry.
uint256 public numReleases;
/// @notice Address of a given vault release index.
mapping(uint256 => address) public releases;
event NewRelease(
uint256 indexed releaseId,
address template,
string apiVersion
);
event NewClone(address indexed vault);
/**
@notice Returns the api version of the latest release.
@dev Throws if no releases are registered yet.
@return The api version of the latest release.
*/
function latestRelease() external view returns (string memory) {
return IVault(releases[numReleases - 1]).apiVersion(); // dev: no release
}
/**
@notice
Add a previously deployed Vault as the template contract for the latest release,
to be used by further "forwarder-style" delegatecall proxy contracts that can be
deployed from the registry through other methods (to save gas).
@dev
Throws if caller isn't owner.
Throws if the api version is the same as the previous release.
Emits a NewRelease event.
@param _vault The vault that will be used as the template contract for the next release.
*/
function newRelease(address _vault) external onlyOwner {
// Check if the release is different from the current one
// NOTE: This doesn't check for strict semver-style linearly increasing release versions
uint256 releaseId = numReleases; // Next id in series
if (releaseId > 0) {
require(
keccak256(
bytes(IVault(releases[releaseId - 1]).apiVersion())
) != keccak256(bytes(IVault(_vault).apiVersion())),
"same api version"
);
}
// Update latest release
releases[releaseId] = _vault;
numReleases = releaseId + 1;
// Log the release for external listeners (e.g. Graph)
emit NewRelease(releaseId, _vault, IVault(_vault).apiVersion());
}
function _newProxyVault(
address _token,
address _governance,
address _rewards,
address _guardian,
string memory _name,
string memory _symbol,
uint256 _releaseTarget
) internal returns (address) {
address vault;
{
address release = releases[_releaseTarget];
require(release != address(0), "unknown release");
vault = _clone(release);
emit NewClone(vault);
}
// NOTE: Must initialize the Vault atomically with deploying it
IVault(vault).initialize(
_token,
_governance,
_rewards,
_name,
_symbol,
_guardian
);
return vault;
}
/// @notice Deploy a new vault with the latest vault release.
/// @dev See other newVault() function for more details.
function newVault(
address _token,
address _guardian,
address _rewards,
string calldata _name,
string calldata _symbol
) external returns (address) {
return
newVault(
_token,
msg.sender,
_guardian,
_rewards,
_name,
_symbol,
0
);
}
/**
@notice
Create a new vault for the given token using the latest release in the registry,
as a simple "forwarder-style" delegatecall proxy to the latest release.
@dev
Throws if no releases are registered yet. Note that this vault will not be automatically endorsed.
@param _token The token that may be deposited into the new Vault.
@param _governance vault governance
@param _guardian The address authorized for guardian interactions in the new Vault.
@param _rewards The address to use for collecting rewards in the new Vault
@param _name Specify a custom Vault name. Set to empty string for default choice.
@param _symbol Specify a custom Vault symbol name. Set to empty string for default choice.
@param _releaseDelta Specify the number of releases prior to the latest to use as a target. Default is latest.
@return The address of the newly-deployed vault
*/
function newVault(
address _token,
address _governance,
address _guardian,
address _rewards,
string calldata _name,
string calldata _symbol,
uint256 _releaseDelta
) public returns (address) {
// NOTE: Underflow if no releases created yet, or targeting prior to release history
uint256 releaseTarget = numReleases - 1 - _releaseDelta; // dev: no releases
address vault = _newProxyVault(
_token,
_governance,
_rewards,
_guardian,
_name,
_symbol,
releaseTarget
);
return vault;
}
function _clone(address _target) internal returns (address _newVault) {
// Copied from https://github.com/optionality/clone-factory/blob/master/contracts/CloneFactory.sol
bytes20 addressBytes = bytes20(address(_target));
assembly {
// EIP-1167 bytecode
let clone_code := mload(0x40)
mstore(
clone_code,
0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000
)
mstore(add(clone_code, 0x14), addressBytes)
mstore(
add(clone_code, 0x28),
0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000
)
_newVault := create(0, clone_code, 0x37)
}
}
}// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.15;
interface IVault {
function token() external view returns (address);
function apiVersion() external view returns (string memory);
function governance() external view returns (address);
function initialize(
address _token,
address _governance,
address _rewards,
string calldata _name,
string calldata _symbol,
address _guardian
) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
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() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
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 {
_transferOwnership(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");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
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",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vault","type":"address"}],"name":"NewClone","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"releaseId","type":"uint256"},{"indexed":false,"internalType":"address","name":"template","type":"address"},{"indexed":false,"internalType":"string","name":"apiVersion","type":"string"}],"name":"NewRelease","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"latestRelease","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"newRelease","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_guardian","type":"address"},{"internalType":"address","name":"_rewards","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"newVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_guardian","type":"address"},{"internalType":"address","name":"_rewards","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_releaseDelta","type":"uint256"}],"name":"newVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"numReleases","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"releases","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610be08061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80637be0ca5e116100665780637be0ca5e146100fc5780638da5cb5b14610111578063b6a9f40f14610122578063e1c6ba5d1461014b578063f2fde38b1461015e57600080fd5b8063108ca11e1461009857806333990d4b146100c857806356e0a94b146100dd578063715018a6146100f4575b600080fd5b6100ab6100a6366004610824565b610171565b6040516001600160a01b0390911681526020015b60405180910390f35b6100db6100d63660046108c6565b610191565b005b6100e660015481565b6040519081526020016100bf565b6100db6103cd565b6101046103e1565b6040516100bf9190610938565b6000546001600160a01b03166100ab565b6100ab61013036600461094b565b6002602052600090815260409020546001600160a01b031681565b6100ab610159366004610964565b610481565b6100db61016c3660046108c6565b61053b565b600061018588338989898989896000610481565b98975050505050505050565b6101996105b4565b60015480156102f257816001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101e0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102089190810190610a34565b80516020909101206002600061021f600185610af7565b815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa15801561027e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102a69190810190610a34565b80519060200120036102f25760405162461bcd60e51b815260206004820152601060248201526f39b0b6b29030b834903b32b939b4b7b760811b60448201526064015b60405180910390fd5b600081815260026020526040902080546001600160a01b0319166001600160a01b038416179055610324816001610b10565b600181905550807fa6fbd216b6734f34092f1be6b7247e1551a6d4f2d5000c53721cfdc119a5b7cf83846001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa15801561038b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103b39190810190610a34565b6040516103c1929190610b23565b60405180910390a25050565b6103d56105b4565b6103df600061060e565b565b606060026000600180546103f59190610af7565b815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610454573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047c9190810190610a34565b905090565b60008082600180546104939190610af7565b61049d9190610af7565b9050600061052b8c8c8b8d8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b925061065e915050565b9c9b505050505050505050505050565b6105436105b4565b6001600160a01b0381166105a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102e9565b6105b18161060e565b50565b6000546001600160a01b031633146103df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102e9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008181526002602052604081205481906001600160a01b0316806106b75760405162461bcd60e51b815260206004820152600f60248201526e756e6b6e6f776e2072656c6561736560881b60448201526064016102e9565b6106c08161076d565b6040519092506001600160a01b038316907fcc1e9c890bc4f4943c457abb8d17f97703b9f7144e1f4a69e50c6e4988ef38b790600090a25060405163a5b81fdf60e01b81526001600160a01b0382169063a5b81fdf9061072e908c908c908c908b908b908e90600401610b4f565b600060405180830381600087803b15801561074857600080fd5b505af115801561075c573d6000803e3d6000fd5b50929b9a5050505050505050505050565b6000808260601b9050604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528160148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f0949350505050565b80356001600160a01b03811681146107d657600080fd5b919050565b60008083601f8401126107ed57600080fd5b50813567ffffffffffffffff81111561080557600080fd5b60208301915083602082850101111561081d57600080fd5b9250929050565b600080600080600080600060a0888a03121561083f57600080fd5b610848886107bf565b9650610856602089016107bf565b9550610864604089016107bf565b9450606088013567ffffffffffffffff8082111561088157600080fd5b61088d8b838c016107db565b909650945060808a01359150808211156108a657600080fd5b506108b38a828b016107db565b989b979a50959850939692959293505050565b6000602082840312156108d857600080fd5b6108e1826107bf565b9392505050565b60005b838110156109035781810151838201526020016108eb565b50506000910152565b600081518084526109248160208601602086016108e8565b601f01601f19169290920160200192915050565b6020815260006108e1602083018461090c565b60006020828403121561095d57600080fd5b5035919050565b600080600080600080600080600060e08a8c03121561098257600080fd5b61098b8a6107bf565b985061099960208b016107bf565b97506109a760408b016107bf565b96506109b560608b016107bf565b955060808a013567ffffffffffffffff808211156109d257600080fd5b6109de8d838e016107db565b909750955060a08c01359150808211156109f757600080fd5b50610a048c828d016107db565b9a9d999c50979a9699959894979660c00135949350505050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215610a4657600080fd5b815167ffffffffffffffff80821115610a5e57600080fd5b818401915084601f830112610a7257600080fd5b815181811115610a8457610a84610a1e565b604051601f8201601f19908116603f01168101908382118183101715610aac57610aac610a1e565b81604052828152876020848701011115610ac557600080fd5b610ad68360208301602088016108e8565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b0a57610b0a610ae1565b92915050565b80820180821115610b0a57610b0a610ae1565b6001600160a01b0383168152604060208201819052600090610b479083018461090c565b949350505050565b600060018060a01b0380891683528088166020840152808716604084015260c06060840152610b8160c084018761090c565b8381036080850152610b93818761090c565b92505080841660a08401525097965050505050505056fea2646970667358221220f68f6fb7886dbe9729f00d30ef9239e7c850df0be048bad139411d37c520791064736f6c63430008110033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100935760003560e01c80637be0ca5e116100665780637be0ca5e146100fc5780638da5cb5b14610111578063b6a9f40f14610122578063e1c6ba5d1461014b578063f2fde38b1461015e57600080fd5b8063108ca11e1461009857806333990d4b146100c857806356e0a94b146100dd578063715018a6146100f4575b600080fd5b6100ab6100a6366004610824565b610171565b6040516001600160a01b0390911681526020015b60405180910390f35b6100db6100d63660046108c6565b610191565b005b6100e660015481565b6040519081526020016100bf565b6100db6103cd565b6101046103e1565b6040516100bf9190610938565b6000546001600160a01b03166100ab565b6100ab61013036600461094b565b6002602052600090815260409020546001600160a01b031681565b6100ab610159366004610964565b610481565b6100db61016c3660046108c6565b61053b565b600061018588338989898989896000610481565b98975050505050505050565b6101996105b4565b60015480156102f257816001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101e0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102089190810190610a34565b80516020909101206002600061021f600185610af7565b815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa15801561027e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102a69190810190610a34565b80519060200120036102f25760405162461bcd60e51b815260206004820152601060248201526f39b0b6b29030b834903b32b939b4b7b760811b60448201526064015b60405180910390fd5b600081815260026020526040902080546001600160a01b0319166001600160a01b038416179055610324816001610b10565b600181905550807fa6fbd216b6734f34092f1be6b7247e1551a6d4f2d5000c53721cfdc119a5b7cf83846001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa15801561038b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103b39190810190610a34565b6040516103c1929190610b23565b60405180910390a25050565b6103d56105b4565b6103df600061060e565b565b606060026000600180546103f59190610af7565b815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031663258294106040518163ffffffff1660e01b8152600401600060405180830381865afa158015610454573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047c9190810190610a34565b905090565b60008082600180546104939190610af7565b61049d9190610af7565b9050600061052b8c8c8b8d8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b925061065e915050565b9c9b505050505050505050505050565b6105436105b4565b6001600160a01b0381166105a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102e9565b6105b18161060e565b50565b6000546001600160a01b031633146103df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102e9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008181526002602052604081205481906001600160a01b0316806106b75760405162461bcd60e51b815260206004820152600f60248201526e756e6b6e6f776e2072656c6561736560881b60448201526064016102e9565b6106c08161076d565b6040519092506001600160a01b038316907fcc1e9c890bc4f4943c457abb8d17f97703b9f7144e1f4a69e50c6e4988ef38b790600090a25060405163a5b81fdf60e01b81526001600160a01b0382169063a5b81fdf9061072e908c908c908c908b908b908e90600401610b4f565b600060405180830381600087803b15801561074857600080fd5b505af115801561075c573d6000803e3d6000fd5b50929b9a5050505050505050505050565b6000808260601b9050604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528160148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f0949350505050565b80356001600160a01b03811681146107d657600080fd5b919050565b60008083601f8401126107ed57600080fd5b50813567ffffffffffffffff81111561080557600080fd5b60208301915083602082850101111561081d57600080fd5b9250929050565b600080600080600080600060a0888a03121561083f57600080fd5b610848886107bf565b9650610856602089016107bf565b9550610864604089016107bf565b9450606088013567ffffffffffffffff8082111561088157600080fd5b61088d8b838c016107db565b909650945060808a01359150808211156108a657600080fd5b506108b38a828b016107db565b989b979a50959850939692959293505050565b6000602082840312156108d857600080fd5b6108e1826107bf565b9392505050565b60005b838110156109035781810151838201526020016108eb565b50506000910152565b600081518084526109248160208601602086016108e8565b601f01601f19169290920160200192915050565b6020815260006108e1602083018461090c565b60006020828403121561095d57600080fd5b5035919050565b600080600080600080600080600060e08a8c03121561098257600080fd5b61098b8a6107bf565b985061099960208b016107bf565b97506109a760408b016107bf565b96506109b560608b016107bf565b955060808a013567ffffffffffffffff808211156109d257600080fd5b6109de8d838e016107db565b909750955060a08c01359150808211156109f757600080fd5b50610a048c828d016107db565b9a9d999c50979a9699959894979660c00135949350505050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215610a4657600080fd5b815167ffffffffffffffff80821115610a5e57600080fd5b818401915084601f830112610a7257600080fd5b815181811115610a8457610a84610a1e565b604051601f8201601f19908116603f01168101908382118183101715610aac57610aac610a1e565b81604052828152876020848701011115610ac557600080fd5b610ad68360208301602088016108e8565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b0a57610b0a610ae1565b92915050565b80820180821115610b0a57610b0a610ae1565b6001600160a01b0383168152604060208201819052600090610b479083018461090c565b949350505050565b600060018060a01b0380891683528088166020840152808716604084015260c06060840152610b8160c084018761090c565b8381036080850152610b93818761090c565b92505080841660a08401525097965050505050505056fea2646970667358221220f68f6fb7886dbe9729f00d30ef9239e7c850df0be048bad139411d37c520791064736f6c63430008110033
Deployed Bytecode Sourcemap
140:5763:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3107:422;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1659:32:4;;;1641:51;;1629:2;1614:18;3107:422:3;;;;;;;;1397:808;;;;;;:::i;:::-;;:::i;:::-;;241:26;;;;;;;;;2040:25:4;;;2028:2;2013:18;241:26:3;1894:177:4;1831:101:0;;;:::i;717:152:3:-;;;:::i;:::-;;;;;;;:::i;1201:85:0:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;1201:85;;330:43:3;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;330:43:3;;;4473:665;;;;;;:::i;:::-;;:::i;2081:198:0:-;;;;;;:::i;:::-;;:::i;3107:422:3:-;3290:7;3328:194;3354:6;3378:10;3406:9;3433:8;3459:5;;3482:7;;3507:1;3328:8;:194::i;:::-;3309:213;3107:422;-1:-1:-1;;;;;;;;3107:422:3:o;1397:808::-;1094:13:0;:11;:13::i;:::-;1645:11:3::1;::::0;1691:13;;1687:268:::1;;1872:6;-1:-1:-1::0;;;;;1865:25:3::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;1865:27:3::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;1849:45:::0;;::::1;::::0;;::::1;::::0;1789:8:::1;:23;1798:13;1810:1;1798:9:::0;:13:::1;:::i;:::-;1789:23;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;1789:23:3::1;-1:-1:-1::0;;;;;1782:42:3::1;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;1782:44:3::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;1745:100;;;;;;:149:::0;1720:224:::1;;;::::0;-1:-1:-1;;;1720:224:3;;5612:2:4;1720:224:3::1;::::0;::::1;5594:21:4::0;5651:2;5631:18;;;5624:30;-1:-1:-1;;;5670:18:4;;;5663:46;5726:18;;1720:224:3::1;;;;;;;;;1997:19;::::0;;;:8:::1;:19;::::0;;;;:28;;-1:-1:-1;;;;;;1997:28:3::1;-1:-1:-1::0;;;;;1997:28:3;::::1;;::::0;;2049:13:::1;1997:19:::0;-1:-1:-1;2049:13:3::1;:::i;:::-;2035:11;:27;;;;2151:9;2140:58;2162:6;2177;-1:-1:-1::0;;;;;2170:25:3::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;2170:27:3::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;2140:58;;;;;;;:::i;:::-;;;;;;;;1452:753;1397:808:::0;:::o;1831:101:0:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;717:152:3:-;765:13;804:8;:25;827:1;813:11;;:15;;;;:::i;:::-;804:25;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;804:25:3;-1:-1:-1;;;;;797:44:3;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;797:46:3;;;;;;;;;;;;:::i;:::-;790:53;;717:152;:::o;4473:665::-;4714:7;4826:21;4868:13;4864:1;4850:11;;:15;;;;:::i;:::-;:31;;;;:::i;:::-;4826:55;;4911:13;4927:181;4955:6;4975:11;5000:8;5022:9;5045:5;;4927:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5064:7;;4927:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5085:13:3;;-1:-1:-1;4927:14:3;;-1:-1:-1;;4927:181:3:i;:::-;4911:197;4473:665;-1:-1:-1;;;;;;;;;;;;4473:665:3:o;2081:198:0:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:0;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:0;;6409:2:4;2161:73:0::1;::::0;::::1;6391:21:4::0;6448:2;6428:18;;;6421:30;6487:34;6467:18;;;6460:62;-1:-1:-1;;;6538:18:4;;;6531:36;6584:19;;2161:73:0::1;6207:402:4::0;2161:73:0::1;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;1359:130::-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;719:10:1;1422:23:0;1414:68;;;;-1:-1:-1;;;1414:68:0;;6816:2:4;1414:68:0;;;6798:21:4;;;6835:18;;;6828:30;6894:34;6874:18;;;6867:62;6946:18;;1414:68:0;6614:356:4;2433:187:0;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:0;;;-1:-1:-1;;;;;;2541:17:0;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;2211:763:3:-;2457:7;2531:24;;;:8;:24;;;;;;2457:7;;-1:-1:-1;;;;;2531:24:3;;2569:49;;;;-1:-1:-1;;;2569:49:3;;7177:2:4;2569:49:3;;;7159:21:4;7216:2;7196:18;;;7189:30;-1:-1:-1;;;7235:18:4;;;7228:45;7290:18;;2569:49:3;6975:339:4;2569:49:3;2640:15;2647:7;2640:6;:15::i;:::-;2674;;2632:23;;-1:-1:-1;;;;;;2674:15:3;;;;;;;;-1:-1:-1;2781:164:3;;-1:-1:-1;;;2781:164:3;;-1:-1:-1;;;;;2781:24:3;;;;;:164;;2819:6;;2839:11;;2864:8;;2886:5;;2905:7;;2926:9;;2781:164;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2962:5:3;;2211:763;-1:-1:-1;;;;;;;;;;;2211:763:3:o;5144:757::-;5195:17;5331:20;5370:7;5354:25;;5331:48;;5470:4;5464:11;-1:-1:-1;;;5512:10:3;5488:132;5663:12;5656:4;5644:10;5640:21;5633:43;-1:-1:-1;;;5729:4:3;5717:10;5713:21;5689:143;5880:4;5868:10;5865:1;5858:27;5845:40;5144:757;-1:-1:-1;;;;5144:757:3:o;14:173:4:-;82:20;;-1:-1:-1;;;;;131:31:4;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:348::-;244:8;254:6;308:3;301:4;293:6;289:17;285:27;275:55;;326:1;323;316:12;275:55;-1:-1:-1;349:20:4;;392:18;381:30;;378:50;;;424:1;421;414:12;378:50;461:4;453:6;449:17;437:29;;513:3;506:4;497:6;489;485:19;481:30;478:39;475:59;;;530:1;527;520:12;475:59;192:348;;;;;:::o;545:945::-;664:6;672;680;688;696;704;712;765:3;753:9;744:7;740:23;736:33;733:53;;;782:1;779;772:12;733:53;805:29;824:9;805:29;:::i;:::-;795:39;;853:38;887:2;876:9;872:18;853:38;:::i;:::-;843:48;;910:38;944:2;933:9;929:18;910:38;:::i;:::-;900:48;;999:2;988:9;984:18;971:32;1022:18;1063:2;1055:6;1052:14;1049:34;;;1079:1;1076;1069:12;1049:34;1118:59;1169:7;1160:6;1149:9;1145:22;1118:59;:::i;:::-;1196:8;;-1:-1:-1;1092:85:4;-1:-1:-1;1284:3:4;1269:19;;1256:33;;-1:-1:-1;1301:16:4;;;1298:36;;;1330:1;1327;1320:12;1298:36;;1369:61;1422:7;1411:8;1400:9;1396:24;1369:61;:::i;:::-;545:945;;;;-1:-1:-1;545:945:4;;-1:-1:-1;545:945:4;;;;1343:87;;-1:-1:-1;;;545:945:4:o;1703:186::-;1762:6;1815:2;1803:9;1794:7;1790:23;1786:32;1783:52;;;1831:1;1828;1821:12;1783:52;1854:29;1873:9;1854:29;:::i;:::-;1844:39;1703:186;-1:-1:-1;;;1703:186:4:o;2076:250::-;2161:1;2171:113;2185:6;2182:1;2179:13;2171:113;;;2261:11;;;2255:18;2242:11;;;2235:39;2207:2;2200:10;2171:113;;;-1:-1:-1;;2318:1:4;2300:16;;2293:27;2076:250::o;2331:271::-;2373:3;2411:5;2405:12;2438:6;2433:3;2426:19;2454:76;2523:6;2516:4;2511:3;2507:14;2500:4;2493:5;2489:16;2454:76;:::i;:::-;2584:2;2563:15;-1:-1:-1;;2559:29:4;2550:39;;;;2591:4;2546:50;;2331:271;-1:-1:-1;;2331:271:4:o;2607:220::-;2756:2;2745:9;2738:21;2719:4;2776:45;2817:2;2806:9;2802:18;2794:6;2776:45;:::i;2832:180::-;2891:6;2944:2;2932:9;2923:7;2919:23;2915:32;2912:52;;;2960:1;2957;2950:12;2912:52;-1:-1:-1;2983:23:4;;2832:180;-1:-1:-1;2832:180:4:o;3017:1089::-;3154:6;3162;3170;3178;3186;3194;3202;3210;3218;3271:3;3259:9;3250:7;3246:23;3242:33;3239:53;;;3288:1;3285;3278:12;3239:53;3311:29;3330:9;3311:29;:::i;:::-;3301:39;;3359:38;3393:2;3382:9;3378:18;3359:38;:::i;:::-;3349:48;;3416:38;3450:2;3439:9;3435:18;3416:38;:::i;:::-;3406:48;;3473:38;3507:2;3496:9;3492:18;3473:38;:::i;:::-;3463:48;;3562:3;3551:9;3547:19;3534:33;3586:18;3627:2;3619:6;3616:14;3613:34;;;3643:1;3640;3633:12;3613:34;3682:59;3733:7;3724:6;3713:9;3709:22;3682:59;:::i;:::-;3760:8;;-1:-1:-1;3656:85:4;-1:-1:-1;3848:3:4;3833:19;;3820:33;;-1:-1:-1;3865:16:4;;;3862:36;;;3894:1;3891;3884:12;3862:36;;3933:61;3986:7;3975:8;3964:9;3960:24;3933:61;:::i;:::-;3017:1089;;;;-1:-1:-1;3017:1089:4;;;;;;;;4013:8;4095:3;4080:19;4067:33;;3017:1089;-1:-1:-1;;;;3017:1089:4:o;4111:127::-;4172:10;4167:3;4163:20;4160:1;4153:31;4203:4;4200:1;4193:15;4227:4;4224:1;4217:15;4243:897;4323:6;4376:2;4364:9;4355:7;4351:23;4347:32;4344:52;;;4392:1;4389;4382:12;4344:52;4425:9;4419:16;4454:18;4495:2;4487:6;4484:14;4481:34;;;4511:1;4508;4501:12;4481:34;4549:6;4538:9;4534:22;4524:32;;4594:7;4587:4;4583:2;4579:13;4575:27;4565:55;;4616:1;4613;4606:12;4565:55;4645:2;4639:9;4667:2;4663;4660:10;4657:36;;;4673:18;;:::i;:::-;4748:2;4742:9;4716:2;4802:13;;-1:-1:-1;;4798:22:4;;;4822:2;4794:31;4790:40;4778:53;;;4846:18;;;4866:22;;;4843:46;4840:72;;;4892:18;;:::i;:::-;4932:10;4928:2;4921:22;4967:2;4959:6;4952:18;5007:7;5002:2;4997;4993;4989:11;4985:20;4982:33;4979:53;;;5028:1;5025;5018:12;4979:53;5041:68;5106:2;5101;5093:6;5089:15;5084:2;5080;5076:11;5041:68;:::i;:::-;5128:6;4243:897;-1:-1:-1;;;;;;;4243:897:4:o;5145:127::-;5206:10;5201:3;5197:20;5194:1;5187:31;5237:4;5234:1;5227:15;5261:4;5258:1;5251:15;5277:128;5344:9;;;5365:11;;;5362:37;;;5379:18;;:::i;:::-;5277:128;;;;:::o;5755:125::-;5820:9;;;5841:10;;;5838:36;;;5854:18;;:::i;5885:317::-;-1:-1:-1;;;;;6062:32:4;;6044:51;;6131:2;6126;6111:18;;6104:30;;;-1:-1:-1;;6151:45:4;;6177:18;;6169:6;6151:45;:::i;:::-;6143:53;5885:317;-1:-1:-1;;;;5885:317:4:o;7319:745::-;7591:4;7637:1;7633;7628:3;7624:11;7620:19;7678:2;7670:6;7666:15;7655:9;7648:34;7730:2;7722:6;7718:15;7713:2;7702:9;7698:18;7691:43;7782:2;7774:6;7770:15;7765:2;7754:9;7750:18;7743:43;7822:3;7817:2;7806:9;7802:18;7795:31;7849:46;7890:3;7879:9;7875:19;7867:6;7849:46;:::i;:::-;7944:9;7936:6;7932:22;7926:3;7915:9;7911:19;7904:51;7972:33;7998:6;7990;7972:33;:::i;:::-;7964:41;;;8054:2;8046:6;8042:15;8036:3;8025:9;8021:19;8014:44;;7319:745;;;;;;;;;:::o
Swarm Source
ipfs://f68f6fb7886dbe9729f00d30ef9239e7c850df0be048bad139411d37c5207910
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.