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:
SyntheticTokenV1
Compiler Version
v0.5.16+commit.9c3226ce
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.5.16; pragma experimental ABIEncoderV2; import {IERC20} from "../token/IERC20.sol"; import {SafeMath} from "../lib/SafeMath.sol"; import {Amount} from "../lib/Amount.sol"; import {SyntheticStorage} from "./SyntheticStorage.sol"; import {Adminable} from "../lib/Adminable.sol"; contract SyntheticTokenV1 is Adminable, SyntheticStorage, IERC20 { using SafeMath for uint256; using Amount for Amount.Principal; /* ========== Events ========== */ event MinterAdded(address _minter, uint256 _limit); event MinterRemoved(address _minter); event MinterLimitUpdated(address _minter, uint256 _limit); event MetadataChanged(); /* ========== Modifiers ========== */ modifier onlyMinter() { require( _minters[msg.sender] == true, "SyntheticToken: only callable by minter" ); _; } /* ========== Init Function ========== */ /** * @dev Initialise the synthetic token * * @param name The name of the token * @param symbol The symbol of the token * @param version The version number of this token */ function init( string memory name, string memory symbol, uint8 version ) public onlyAdmin { _name = name; _symbol = symbol; _version = version; } /* ========== View Functions ========== */ function name() external view returns (string memory) { return _name; } function symbol() external view returns (string memory) { return _symbol; } function decimals() external pure returns (uint8) { return 18; } function version() external view returns (uint8) { return _version; } function totalSupply() public view returns (uint256) { return _totalSupply; } function balanceOf( address account ) public view returns (uint256) { return _balances[account]; } function allowance( address owner, address spender ) public view returns (uint256) { return _allowances[owner][spender]; } function getAllMinters() external view returns (address[] memory) { return _mintersArray; } function isValidMinter( address _minter ) external view returns (bool) { return _minters[_minter]; } function getMinterIssued( address _minter ) external view returns (Amount.Principal memory) { return _minterIssued[_minter]; } function getMinterLimit( address _minter ) external view returns (uint256) { return _minterLimits[_minter]; } /* ========== Admin Functions ========== */ /** * @dev Add a new minter to the synthetic token. * * @param _minter The address of the minter to add * @param _limit The starting limit for how much this synth can mint */ function addMinter( address _minter, uint256 _limit ) external onlyAdmin { require( _minters[_minter] != true, "Minter already exists" ); _mintersArray.push(_minter); _minters[_minter] = true; _minterLimits[_minter] = _limit; emit MinterAdded(_minter, _limit); } /** * @dev Remove a minter from the synthetic token * * @param _minter Address to remove the minter */ function removeMinter( address _minter ) external onlyAdmin { require( _minters[_minter] == true, "Minter does not exist" ); for (uint i = 0; i < _mintersArray.length; i++) { if (address(_mintersArray[i]) == _minter) { delete _mintersArray[i]; _mintersArray[i] = _mintersArray[_mintersArray.length - 1]; _mintersArray.length--; break; } } delete _minters[_minter]; delete _minterLimits[_minter]; emit MinterRemoved(_minter); } /** * @dev Update the limit of the minter * * @param _minter The address of the minter to set * @param _limit The new limit to set for this address */ function updateMinterLimit( address _minter, uint256 _limit ) public onlyAdmin { require( _minters[_minter] == true, "Minter does not exist" ); _minterLimits[_minter] = _limit; emit MinterLimitUpdated(_minter, _limit); } /* ========== Minter Functions ========== */ /** * @dev Mint synthetic tokens * * @notice Can only be called by a valid minter. * * @param to The destination to mint the synth to * @param value The amount of synths to mint */ function mint( address to, uint256 value ) external onlyMinter { Amount.Principal memory issuedAmount = _minterIssued[msg.sender].add( Amount.Principal({ sign: true, value: value }) ); require( issuedAmount.value <= _minterLimits[msg.sender] || issuedAmount.sign == false, "Minter limit reached" ); _minterIssued[msg.sender] = issuedAmount; _mint(to, value); } /** * @dev Burn synthetic tokens * * @notice Can only be called by a valid minter. * * @param from The destination to burn the synth from * @param value The amount of the synth to burn */ function burn( address from, uint256 value ) external onlyMinter { _minterIssued[msg.sender] = _minterIssued[msg.sender].sub( Amount.Principal({ sign: true, value: value }) ); _burn(from, value); } /** * @dev Transfer any collateral held to another address * * @param token The address of the token to transfer * @param to The destination to send the collateral to * @param value The amount of the tokens to transfer */ function transferCollateral( address token, address to, uint256 value ) external onlyMinter returns (bool) { return IERC20(token).transfer( to, value ); } /* ========== ERC20 Functions ========== */ function transfer( address recipient, uint256 amount ) public returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function approve( address spender, uint256 amount ) public returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public returns (bool) { _transfer(sender, recipient, amount); _approve( sender, msg.sender, _allowances[sender][msg.sender].sub(amount) ); return true; } /* ========== Internal Functions ========== */ function _transfer( address sender, address recipient, uint256 amount ) internal { require( sender != address(0), "ERC20: transfer from the zero address" ); require( recipient != address(0), "ERC20: transfer to the zero address" ); _balances[sender] = _balances[sender].sub(amount); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint( address account, uint256 amount ) internal { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn( address account, uint256 amount ) internal { require(account != address(0), "ERC20: burn from the zero address"); _balances[account] = _balances[account].sub(amount); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.5.16; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer( address recipient, uint256 amount ) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve( address spender, uint256 amount ) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer( address indexed from, address indexed to, uint256 value ); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); }
pragma solidity ^0.5.16; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); uint256 c = a - b; return c; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.5.16; pragma experimental ABIEncoderV2; import {SafeMath} from "../lib/SafeMath.sol"; import {Math} from "../lib/Math.sol"; library Amount { using Math for uint256; using SafeMath for uint256; // ============ Constants ============ uint256 constant BASE = 10**18; // A Principal Amount is an amount that's been adjusted by an index struct Principal { bool sign; // true if positive uint256 value; } function zero() internal pure returns (Principal memory) { return Principal({ sign: false, value: 0 }); } function sub( Principal memory a, Principal memory b ) internal pure returns (Principal memory) { return add(a, negative(b)); } function add( Principal memory a, Principal memory b ) internal pure returns (Principal memory) { Principal memory result; if (a.sign == b.sign) { result.sign = a.sign; result.value = SafeMath.add(a.value, b.value); } else { if (a.value >= b.value) { result.sign = a.sign; result.value = SafeMath.sub(a.value, b.value); } else { result.sign = b.sign; result.value = SafeMath.sub(b.value, a.value); } } return result; } function equals( Principal memory a, Principal memory b ) internal pure returns (bool) { if (a.value == b.value) { if (a.value == 0) { return true; } return a.sign == b.sign; } return false; } function negative( Principal memory a ) internal pure returns (Principal memory) { return Principal({ sign: !a.sign, value: a.value }); } function calculateAdjusted( Principal memory a, uint256 index ) internal pure returns (uint256) { return Math.getPartial(a.value, index, BASE); } function calculatePrincipal( uint256 value, uint256 index, bool sign ) internal pure returns (Principal memory) { return Principal({ sign: sign, value: Math.getPartial(value, BASE, index) }); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.5.16; pragma experimental ABIEncoderV2; import {SafeMath} from "./SafeMath.sol"; /** * @title Math * * Library for non-standard Math functions */ library Math { using SafeMath for uint256; // ============ Library Functions ============ /* * Return target * (numerator / denominator). */ function getPartial( uint256 target, uint256 numerator, uint256 denominator ) internal pure returns (uint256) { return target.mul(numerator).div(denominator); } function to128( uint256 number ) internal pure returns (uint128) { uint128 result = uint128(number); require( result == number, "Math: Unsafe cast to uint128" ); return result; } function min( uint256 a, uint256 b ) internal pure returns (uint256) { return a < b ? a : b; } function max( uint256 a, uint256 b ) internal pure returns (uint256) { return a > b ? a : b; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.5.16; pragma experimental ABIEncoderV2; import {Amount} from "../lib/Amount.sol"; contract SyntheticStorageV1 { /** * @dev ERC20 Properties */ uint8 internal _version; string internal _name; string internal _symbol; uint256 internal _totalSupply; mapping (address => uint256) internal _balances; mapping (address => mapping (address => uint256)) internal _allowances; /** * @dev Minter Properties */ address[] internal _mintersArray; mapping(address => bool) internal _minters; mapping(address => uint256) internal _minterLimits; mapping(address => Amount.Principal) internal _minterIssued; } contract SyntheticStorage is SyntheticStorageV1 { /* solium-disable-line no-empty-blocks */ }
// SPDX-License-Identifier: MIT pragma solidity ^0.5.16; pragma experimental ABIEncoderV2; import { Storage } from "./Storage.sol"; /** * @title Adminable * @author dYdX * * @dev EIP-1967 Proxy Admin contract. */ contract Adminable { /** * @dev Storage slot with the admin of the contract. * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1. */ bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; /** * @dev Modifier to check whether the `msg.sender` is the admin. * If it is, it will run the function. Otherwise, it will revert. */ modifier onlyAdmin() { require( msg.sender == getAdmin(), "Adminable: caller is not admin" ); _; } /** * @return The EIP-1967 proxy admin */ function getAdmin() public view returns (address) { return address(uint160(uint256(Storage.load(ADMIN_SLOT)))); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.5.16; pragma experimental ABIEncoderV2; library Storage { /** * @dev Performs an SLOAD and returns the data in the slot. */ function load( bytes32 slot ) internal view returns (bytes32) { bytes32 result; /* solium-disable-next-line security/no-inline-assembly */ assembly { result := sload(slot) } return result; } /** * @dev Performs an SSTORE to save the value to the slot. */ function store( bytes32 slot, bytes32 value ) internal { /* solium-disable-next-line security/no-inline-assembly */ assembly { sstore(slot, value) } } }
{ "metadata": { "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"MetadataChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"MinterLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_minter","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"_minter","type":"address"},{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAllMinters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"getMinterIssued","outputs":[{"components":[{"internalType":"bool","name":"sign","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct Amount.Principal","name":"","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"getMinterLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"version","type":"uint8"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"isValidMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"removeMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferCollateral","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_minter","type":"address"},{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"updateMinterLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50611a1e806100206000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806383ba6b59116100b8578063b67e9df71161007c578063b67e9df714610283578063ca1f908c14610296578063cb70ea6f146102a9578063cd60f59f146102c9578063dd62ed3e146102dc578063f57b0182146102ef57610142565b806383ba6b591461022d57806395d89b41146102405780639dc29fac14610248578063a045442c1461025b578063a9059cbb1461027057610142565b8063313ce5671161010a578063313ce567146101c257806340c10f19146101d757806354fd4d50146101ea5780636e9960c3146101f257806370a0823114610207578063761248b41461021a57610142565b806306fdde0314610147578063095ea7b31461016557806318160ddd1461018557806323b872dd1461019a5780633092afd5146101ad575b600080fd5b61014f610302565b60405161015c91906117d8565b60405180910390f35b6101786101733660046112bf565b610398565b60405161015c91906117ca565b61018d6103af565b60405161015c91906118c7565b6101786101a8366004611272565b6103b5565b6101c06101bb36600461121a565b61040d565b005b6101ca6105db565b60405161015c91906118d5565b6101c06101e53660046112bf565b6105e0565b6101ca6106e3565b6101fa6106ec565b60405161015c9190611790565b61018d61021536600461121a565b61071c565b6101c06102283660046112bf565b610737565b61018d61023b36600461121a565b61085a565b61014f610875565b6101c06102563660046112bf565b6108d3565b61026361098a565b60405161015c91906117b9565b61017861027e3660046112bf565b6109eb565b61017861029136600461121a565b6109f8565b6101c06102a43660046112bf565b610a16565b6102bc6102b736600461121a565b610ad8565b60405161015c91906118b9565b6101786102d7366004611272565b610b18565b61018d6102ea366004611238565b610bd4565b6101c06102fd36600461130d565b610bff565b60018054604080516020601f6002600019610100878916150201909516949094049384018190048102820181019092528281526060939092909183018282801561038d5780601f106103625761010080835404028352916020019161038d565b820191906000526020600020905b81548152906001019060200180831161037057829003601f168201915b505050505090505b90565b60006103a5338484610c77565b5060015b92915050565b60035490565b60006103c2848484610d2b565b6001600160a01b0384166000908152600560209081526040808320338085529252909120546104029186916103fd908663ffffffff610e2716565b610c77565b5060015b9392505050565b6104156106ec565b6001600160a01b0316336001600160a01b03161461044e5760405162461bcd60e51b815260040161044590611849565b60405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16151560011461048b5760405162461bcd60e51b815260040161044590611829565b60005b60065481101561057257816001600160a01b0316600682815481106104af57fe5b6000918252602090912001546001600160a01b0316141561056a57600681815481106104d757fe5b600091825260209091200180546001600160a01b031916905560068054600019810190811061050257fe5b600091825260209091200154600680546001600160a01b03909216918390811061052857fe5b600091825260209091200180546001600160a01b0319166001600160a01b039290921691909117905560068054906105649060001983016110c7565b50610572565b60010161048e565b506001600160a01b0381166000908152600760209081526040808320805460ff19169055600890915280822091909155517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb66692906105d0908390611790565b60405180910390a150565b601290565b3360009081526007602052604090205460ff1615156001146106145760405162461bcd60e51b815260040161044590611879565b61061c6110eb565b60408051808201825260018082526020808301869052336000908152600982528490208451808601909552805460ff16151585529091015490830152610668919063ffffffff610e4f16565b336000908152600860209081526040909120549082015191925010158061068e57508051155b6106aa5760405162461bcd60e51b815260040161044590611859565b3360009081526009602090815260409091208251815460ff1916901515178155908201516001909101556106de8383610ee1565b505050565b60005460ff1690565b60006107177fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103610fa1565b905090565b6001600160a01b031660009081526004602052604090205490565b61073f6106ec565b6001600160a01b0316336001600160a01b03161461076f5760405162461bcd60e51b815260040161044590611849565b6001600160a01b03821660009081526007602052604090205460ff161515600114156107ad5760405162461bcd60e51b815260040161044590611819565b6006805460018082019092557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b0385169081179091556000908152600760209081526040808320805460ff191690941790935560089052819020829055517f96c1d7caf640fe379bdec5a79548e10ba60accd05456f6505c11bc85a3a7b59d9061084e908490849061179e565b60405180910390a15050565b6001600160a01b031660009081526008602052604090205490565b60028054604080516020601f600019610100600187161502019094168590049384018190048102820181019092528281526060939092909183018282801561038d5780601f106103625761010080835404028352916020019161038d565b3360009081526007602052604090205460ff1615156001146109075760405162461bcd60e51b815260040161044590611879565b60408051808201825260018082526020808301859052336000908152600982528490208451808601909552805460ff16151585529091015490830152610953919063ffffffff610fa516565b3360009081526009602090815260409091208251815460ff19169015151781559101516001909101556109868282610fbf565b5050565b6060600680548060200260200160405190810160405280929190818152602001828054801561038d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109c4575050505050905090565b60006103a5338484610d2b565b6001600160a01b031660009081526007602052604090205460ff1690565b610a1e6106ec565b6001600160a01b0316336001600160a01b031614610a4e5760405162461bcd60e51b815260040161044590611849565b6001600160a01b03821660009081526007602052604090205460ff161515600114610a8b5760405162461bcd60e51b815260040161044590611829565b6001600160a01b03821660009081526008602052604090819020829055517fb42794da95e8b03e4d501f15cb1325391cceb50ad6d6b0dcc76abe4bdaab610c9061084e908490849061179e565b610ae06110eb565b506001600160a01b03166000908152600960209081526040918290208251808401909352805460ff1615158352600101549082015290565b3360009081526007602052604081205460ff161515600114610b4c5760405162461bcd60e51b815260040161044590611879565b60405163a9059cbb60e01b81526001600160a01b0385169063a9059cbb90610b7a908690869060040161179e565b602060405180830381600087803b158015610b9457600080fd5b505af1158015610ba8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bcc91908101906112ef565b949350505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b610c076106ec565b6001600160a01b0316336001600160a01b031614610c375760405162461bcd60e51b815260040161044590611849565b8251610c4a906001906020860190611102565b508151610c5e906002906020850190611102565b506000805460ff191660ff929092169190911790555050565b6001600160a01b038316610c9d5760405162461bcd60e51b815260040161044590611899565b6001600160a01b038216610cc35760405162461bcd60e51b8152600401610445906117f9565b6001600160a01b0380841660008181526005602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d1e9085906118c7565b60405180910390a3505050565b6001600160a01b038316610d515760405162461bcd60e51b815260040161044590611889565b6001600160a01b038216610d775760405162461bcd60e51b8152600401610445906117e9565b6001600160a01b038316600090815260046020526040902054610da0908263ffffffff610e2716565b6001600160a01b038085166000908152600460205260408082209390935590841681522054610dd5908263ffffffff61107b16565b6001600160a01b0380841660008181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d1e9085906118c7565b600082821115610e495760405162461bcd60e51b815260040161044590611839565b50900390565b610e576110eb565b610e5f6110eb565b8251845115159015151415610e925783511515815260208085015190840151610e88919061107b565b6020820152610406565b8260200151846020015110610ebb5783511515815260208085015190840151610e889190610e27565b82511515815260208084015190850151610ed59190610e27565b60208201529392505050565b6001600160a01b038216610f075760405162461bcd60e51b8152600401610445906118a9565b600354610f1a908263ffffffff61107b16565b6003556001600160a01b038216600090815260046020526040902054610f46908263ffffffff61107b16565b6001600160a01b0383166000818152600460205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f959085906118c7565b60405180910390a35050565b5490565b610fad6110eb565b61040683610fba846110a0565b610e4f565b6001600160a01b038216610fe55760405162461bcd60e51b815260040161044590611869565b6001600160a01b03821660009081526004602052604090205461100e908263ffffffff610e2716565b6001600160a01b03831660009081526004602052604090205560035461103a908263ffffffff610e2716565b6003556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f959085906118c7565b6000828201838110156104065760405162461bcd60e51b815260040161044590611809565b6110a86110eb565b5060408051808201909152815115815260208083015190820152919050565b8154818355818111156106de576000838152602090206106de918101908301611180565b604080518082019091526000808252602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061114357805160ff1916838001178555611170565b82800160010185558215611170579182015b82811115611170578251825591602001919060010190611155565b5061117c929150611180565b5090565b61039591905b8082111561117c5760008155600101611186565b80356103a9816119a9565b80516103a9816119c0565b600082601f8301126111c157600080fd5b81356111d46111cf8261190a565b6118e3565b915080825260208301602083018583830111156111f057600080fd5b6111fb838284611967565b50505092915050565b80356103a9816119c9565b80356103a9816119d2565b60006020828403121561122c57600080fd5b6000610bcc848461119a565b6000806040838503121561124b57600080fd5b6000611257858561119a565b92505060206112688582860161119a565b9150509250929050565b60008060006060848603121561128757600080fd5b6000611293868661119a565b93505060206112a48682870161119a565b92505060406112b586828701611204565b9150509250925092565b600080604083850312156112d257600080fd5b60006112de858561119a565b925050602061126885828601611204565b60006020828403121561130157600080fd5b6000610bcc84846111a5565b60008060006060848603121561132257600080fd5b833567ffffffffffffffff81111561133957600080fd5b611345868287016111b0565b935050602084013567ffffffffffffffff81111561136257600080fd5b61136e868287016111b0565b92505060406112b58682870161120f565b600061138b8383611393565b505060200190565b61139c81611945565b82525050565b60006113ad82611938565b6113b7818561193c565b93506113c283611932565b8060005b838110156113f05781516113da888261137f565b97506113e583611932565b9250506001016113c6565b509495945050505050565b61139c81611950565b600061140f82611938565b611419818561193c565b9350611429818560208601611973565b6114328161199f565b9093019392505050565b600061144960238361193c565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b602082015260400192915050565b600061148e60228361193c565b7f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b602082015260400192915050565b60006114d2601b8361193c565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061150b60158361193c565b744d696e74657220616c72656164792065786973747360581b815260200192915050565b600061153c60158361193c565b74135a5b9d195c88191bd95cc81b9bdd08195e1a5cdd605a1b815260200192915050565b600061156d601e8361193c565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815260200192915050565b60006115a6601e8361193c565b7f41646d696e61626c653a2063616c6c6572206973206e6f742061646d696e0000815260200192915050565b60006115df60148361193c565b73135a5b9d195c881b1a5b5a5d081c995858da195960621b815260200192915050565b600061160f60218361193c565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265738152607360f81b602082015260400192915050565b600061165260278361193c565b7f53796e746865746963546f6b656e3a206f6e6c792063616c6c61626c652062798152661036b4b73a32b960c91b602082015260400192915050565b600061169b60258361193c565b7f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b602082015260400192915050565b60006116e260248361193c565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b602082015260400192915050565b6000611728601f8361193c565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300815260200192915050565b8051604083019061176584826113fb565b506020820151611778602085018261177e565b50505050565b61139c81610395565b61139c81611961565b602081016103a98284611393565b604081016117ac8285611393565b610406602083018461177e565b6020808252810161040681846113a2565b602081016103a982846113fb565b602080825281016104068184611404565b602080825281016103a98161143c565b602080825281016103a981611481565b602080825281016103a9816114c5565b602080825281016103a9816114fe565b602080825281016103a98161152f565b602080825281016103a981611560565b602080825281016103a981611599565b602080825281016103a9816115d2565b602080825281016103a981611602565b602080825281016103a981611645565b602080825281016103a98161168e565b602080825281016103a9816116d5565b602080825281016103a98161171b565b604081016103a98284611754565b602081016103a9828461177e565b602081016103a98284611787565b60405181810167ffffffffffffffff8111828210171561190257600080fd5b604052919050565b600067ffffffffffffffff82111561192157600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b60006103a982611955565b151590565b6001600160a01b031690565b60ff1690565b82818337506000910152565b60005b8381101561198e578181015183820152602001611976565b838111156117785750506000910152565b601f01601f191690565b6119b281611945565b81146119bd57600080fd5b50565b6119b281611950565b6119b281610395565b6119b28161196156fea365627a7a72315820a68b23b15e91324aa8a91c5123c1f05640e6aa828fa9f38324bfd5b9214accd36c6578706572696d656e74616cf564736f6c63430005100040
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101425760003560e01c806383ba6b59116100b8578063b67e9df71161007c578063b67e9df714610283578063ca1f908c14610296578063cb70ea6f146102a9578063cd60f59f146102c9578063dd62ed3e146102dc578063f57b0182146102ef57610142565b806383ba6b591461022d57806395d89b41146102405780639dc29fac14610248578063a045442c1461025b578063a9059cbb1461027057610142565b8063313ce5671161010a578063313ce567146101c257806340c10f19146101d757806354fd4d50146101ea5780636e9960c3146101f257806370a0823114610207578063761248b41461021a57610142565b806306fdde0314610147578063095ea7b31461016557806318160ddd1461018557806323b872dd1461019a5780633092afd5146101ad575b600080fd5b61014f610302565b60405161015c91906117d8565b60405180910390f35b6101786101733660046112bf565b610398565b60405161015c91906117ca565b61018d6103af565b60405161015c91906118c7565b6101786101a8366004611272565b6103b5565b6101c06101bb36600461121a565b61040d565b005b6101ca6105db565b60405161015c91906118d5565b6101c06101e53660046112bf565b6105e0565b6101ca6106e3565b6101fa6106ec565b60405161015c9190611790565b61018d61021536600461121a565b61071c565b6101c06102283660046112bf565b610737565b61018d61023b36600461121a565b61085a565b61014f610875565b6101c06102563660046112bf565b6108d3565b61026361098a565b60405161015c91906117b9565b61017861027e3660046112bf565b6109eb565b61017861029136600461121a565b6109f8565b6101c06102a43660046112bf565b610a16565b6102bc6102b736600461121a565b610ad8565b60405161015c91906118b9565b6101786102d7366004611272565b610b18565b61018d6102ea366004611238565b610bd4565b6101c06102fd36600461130d565b610bff565b60018054604080516020601f6002600019610100878916150201909516949094049384018190048102820181019092528281526060939092909183018282801561038d5780601f106103625761010080835404028352916020019161038d565b820191906000526020600020905b81548152906001019060200180831161037057829003601f168201915b505050505090505b90565b60006103a5338484610c77565b5060015b92915050565b60035490565b60006103c2848484610d2b565b6001600160a01b0384166000908152600560209081526040808320338085529252909120546104029186916103fd908663ffffffff610e2716565b610c77565b5060015b9392505050565b6104156106ec565b6001600160a01b0316336001600160a01b03161461044e5760405162461bcd60e51b815260040161044590611849565b60405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff16151560011461048b5760405162461bcd60e51b815260040161044590611829565b60005b60065481101561057257816001600160a01b0316600682815481106104af57fe5b6000918252602090912001546001600160a01b0316141561056a57600681815481106104d757fe5b600091825260209091200180546001600160a01b031916905560068054600019810190811061050257fe5b600091825260209091200154600680546001600160a01b03909216918390811061052857fe5b600091825260209091200180546001600160a01b0319166001600160a01b039290921691909117905560068054906105649060001983016110c7565b50610572565b60010161048e565b506001600160a01b0381166000908152600760209081526040808320805460ff19169055600890915280822091909155517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb66692906105d0908390611790565b60405180910390a150565b601290565b3360009081526007602052604090205460ff1615156001146106145760405162461bcd60e51b815260040161044590611879565b61061c6110eb565b60408051808201825260018082526020808301869052336000908152600982528490208451808601909552805460ff16151585529091015490830152610668919063ffffffff610e4f16565b336000908152600860209081526040909120549082015191925010158061068e57508051155b6106aa5760405162461bcd60e51b815260040161044590611859565b3360009081526009602090815260409091208251815460ff1916901515178155908201516001909101556106de8383610ee1565b505050565b60005460ff1690565b60006107177fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103610fa1565b905090565b6001600160a01b031660009081526004602052604090205490565b61073f6106ec565b6001600160a01b0316336001600160a01b03161461076f5760405162461bcd60e51b815260040161044590611849565b6001600160a01b03821660009081526007602052604090205460ff161515600114156107ad5760405162461bcd60e51b815260040161044590611819565b6006805460018082019092557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b0385169081179091556000908152600760209081526040808320805460ff191690941790935560089052819020829055517f96c1d7caf640fe379bdec5a79548e10ba60accd05456f6505c11bc85a3a7b59d9061084e908490849061179e565b60405180910390a15050565b6001600160a01b031660009081526008602052604090205490565b60028054604080516020601f600019610100600187161502019094168590049384018190048102820181019092528281526060939092909183018282801561038d5780601f106103625761010080835404028352916020019161038d565b3360009081526007602052604090205460ff1615156001146109075760405162461bcd60e51b815260040161044590611879565b60408051808201825260018082526020808301859052336000908152600982528490208451808601909552805460ff16151585529091015490830152610953919063ffffffff610fa516565b3360009081526009602090815260409091208251815460ff19169015151781559101516001909101556109868282610fbf565b5050565b6060600680548060200260200160405190810160405280929190818152602001828054801561038d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109c4575050505050905090565b60006103a5338484610d2b565b6001600160a01b031660009081526007602052604090205460ff1690565b610a1e6106ec565b6001600160a01b0316336001600160a01b031614610a4e5760405162461bcd60e51b815260040161044590611849565b6001600160a01b03821660009081526007602052604090205460ff161515600114610a8b5760405162461bcd60e51b815260040161044590611829565b6001600160a01b03821660009081526008602052604090819020829055517fb42794da95e8b03e4d501f15cb1325391cceb50ad6d6b0dcc76abe4bdaab610c9061084e908490849061179e565b610ae06110eb565b506001600160a01b03166000908152600960209081526040918290208251808401909352805460ff1615158352600101549082015290565b3360009081526007602052604081205460ff161515600114610b4c5760405162461bcd60e51b815260040161044590611879565b60405163a9059cbb60e01b81526001600160a01b0385169063a9059cbb90610b7a908690869060040161179e565b602060405180830381600087803b158015610b9457600080fd5b505af1158015610ba8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bcc91908101906112ef565b949350505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b610c076106ec565b6001600160a01b0316336001600160a01b031614610c375760405162461bcd60e51b815260040161044590611849565b8251610c4a906001906020860190611102565b508151610c5e906002906020850190611102565b506000805460ff191660ff929092169190911790555050565b6001600160a01b038316610c9d5760405162461bcd60e51b815260040161044590611899565b6001600160a01b038216610cc35760405162461bcd60e51b8152600401610445906117f9565b6001600160a01b0380841660008181526005602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d1e9085906118c7565b60405180910390a3505050565b6001600160a01b038316610d515760405162461bcd60e51b815260040161044590611889565b6001600160a01b038216610d775760405162461bcd60e51b8152600401610445906117e9565b6001600160a01b038316600090815260046020526040902054610da0908263ffffffff610e2716565b6001600160a01b038085166000908152600460205260408082209390935590841681522054610dd5908263ffffffff61107b16565b6001600160a01b0380841660008181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d1e9085906118c7565b600082821115610e495760405162461bcd60e51b815260040161044590611839565b50900390565b610e576110eb565b610e5f6110eb565b8251845115159015151415610e925783511515815260208085015190840151610e88919061107b565b6020820152610406565b8260200151846020015110610ebb5783511515815260208085015190840151610e889190610e27565b82511515815260208084015190850151610ed59190610e27565b60208201529392505050565b6001600160a01b038216610f075760405162461bcd60e51b8152600401610445906118a9565b600354610f1a908263ffffffff61107b16565b6003556001600160a01b038216600090815260046020526040902054610f46908263ffffffff61107b16565b6001600160a01b0383166000818152600460205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f959085906118c7565b60405180910390a35050565b5490565b610fad6110eb565b61040683610fba846110a0565b610e4f565b6001600160a01b038216610fe55760405162461bcd60e51b815260040161044590611869565b6001600160a01b03821660009081526004602052604090205461100e908263ffffffff610e2716565b6001600160a01b03831660009081526004602052604090205560035461103a908263ffffffff610e2716565b6003556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f959085906118c7565b6000828201838110156104065760405162461bcd60e51b815260040161044590611809565b6110a86110eb565b5060408051808201909152815115815260208083015190820152919050565b8154818355818111156106de576000838152602090206106de918101908301611180565b604080518082019091526000808252602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061114357805160ff1916838001178555611170565b82800160010185558215611170579182015b82811115611170578251825591602001919060010190611155565b5061117c929150611180565b5090565b61039591905b8082111561117c5760008155600101611186565b80356103a9816119a9565b80516103a9816119c0565b600082601f8301126111c157600080fd5b81356111d46111cf8261190a565b6118e3565b915080825260208301602083018583830111156111f057600080fd5b6111fb838284611967565b50505092915050565b80356103a9816119c9565b80356103a9816119d2565b60006020828403121561122c57600080fd5b6000610bcc848461119a565b6000806040838503121561124b57600080fd5b6000611257858561119a565b92505060206112688582860161119a565b9150509250929050565b60008060006060848603121561128757600080fd5b6000611293868661119a565b93505060206112a48682870161119a565b92505060406112b586828701611204565b9150509250925092565b600080604083850312156112d257600080fd5b60006112de858561119a565b925050602061126885828601611204565b60006020828403121561130157600080fd5b6000610bcc84846111a5565b60008060006060848603121561132257600080fd5b833567ffffffffffffffff81111561133957600080fd5b611345868287016111b0565b935050602084013567ffffffffffffffff81111561136257600080fd5b61136e868287016111b0565b92505060406112b58682870161120f565b600061138b8383611393565b505060200190565b61139c81611945565b82525050565b60006113ad82611938565b6113b7818561193c565b93506113c283611932565b8060005b838110156113f05781516113da888261137f565b97506113e583611932565b9250506001016113c6565b509495945050505050565b61139c81611950565b600061140f82611938565b611419818561193c565b9350611429818560208601611973565b6114328161199f565b9093019392505050565b600061144960238361193c565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647281526265737360e81b602082015260400192915050565b600061148e60228361193c565b7f45524332303a20617070726f766520746f20746865207a65726f206164647265815261737360f01b602082015260400192915050565b60006114d2601b8361193c565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b600061150b60158361193c565b744d696e74657220616c72656164792065786973747360581b815260200192915050565b600061153c60158361193c565b74135a5b9d195c88191bd95cc81b9bdd08195e1a5cdd605a1b815260200192915050565b600061156d601e8361193c565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815260200192915050565b60006115a6601e8361193c565b7f41646d696e61626c653a2063616c6c6572206973206e6f742061646d696e0000815260200192915050565b60006115df60148361193c565b73135a5b9d195c881b1a5b5a5d081c995858da195960621b815260200192915050565b600061160f60218361193c565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265738152607360f81b602082015260400192915050565b600061165260278361193c565b7f53796e746865746963546f6b656e3a206f6e6c792063616c6c61626c652062798152661036b4b73a32b960c91b602082015260400192915050565b600061169b60258361193c565b7f45524332303a207472616e736665722066726f6d20746865207a65726f206164815264647265737360d81b602082015260400192915050565b60006116e260248361193c565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164648152637265737360e01b602082015260400192915050565b6000611728601f8361193c565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300815260200192915050565b8051604083019061176584826113fb565b506020820151611778602085018261177e565b50505050565b61139c81610395565b61139c81611961565b602081016103a98284611393565b604081016117ac8285611393565b610406602083018461177e565b6020808252810161040681846113a2565b602081016103a982846113fb565b602080825281016104068184611404565b602080825281016103a98161143c565b602080825281016103a981611481565b602080825281016103a9816114c5565b602080825281016103a9816114fe565b602080825281016103a98161152f565b602080825281016103a981611560565b602080825281016103a981611599565b602080825281016103a9816115d2565b602080825281016103a981611602565b602080825281016103a981611645565b602080825281016103a98161168e565b602080825281016103a9816116d5565b602080825281016103a98161171b565b604081016103a98284611754565b602081016103a9828461177e565b602081016103a98284611787565b60405181810167ffffffffffffffff8111828210171561190257600080fd5b604052919050565b600067ffffffffffffffff82111561192157600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b60006103a982611955565b151590565b6001600160a01b031690565b60ff1690565b82818337506000910152565b60005b8381101561198e578181015183820152602001611976565b838111156117785750506000910152565b601f01601f191690565b6119b281611945565b81146119bd57600080fd5b50565b6119b281611950565b6119b281610395565b6119b28161196156fea365627a7a72315820a68b23b15e91324aa8a91c5123c1f05640e6aa828fa9f38324bfd5b9214accd36c6578706572696d656e74616cf564736f6c63430005100040
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.