Source Code
Overview
S Balance
S Value
$0.00Latest 10 internal transactions
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 11206421 | 329 days ago | Contract Creation | 0 S | |||
| 11206421 | 329 days ago | Contract Creation | 0 S | |||
| 11206378 | 329 days ago | Contract Creation | 0 S | |||
| 11206378 | 329 days ago | Contract Creation | 0 S | |||
| 11206335 | 329 days ago | Contract Creation | 0 S | |||
| 11206335 | 329 days ago | Contract Creation | 0 S | |||
| 11206291 | 329 days ago | Contract Creation | 0 S | |||
| 11206291 | 329 days ago | Contract Creation | 0 S | |||
| 11206249 | 329 days ago | Contract Creation | 0 S | |||
| 11206249 | 329 days ago | Contract Creation | 0 S |
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x30D1859D...b12933993 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
OneWayLendingFactory
Compiler Version
vyper:0.3.10
Contract Source Code (Vyper language format)
# @version 0.3.10
# pragma optimize codesize
# pragma evm-version shanghai
"""
@title OneWayLendingFactory
@notice Factory of non-rehypothecated lending vaults: collateral is not being lent out.
Although Vault.vy allows both, we should have this simpler version and rehypothecating version.
This version is for L2s: it does not create gauges by itself but uses Gauge Factory to read gauge info.
@author Curve.fi
@license Copyright (c) Curve.Fi, 2020-2024 - all rights reserved
"""
interface Vault:
def initialize(
amm_impl: address,
controller_impl: address,
borrowed_token: address,
collateral_token: address,
A: uint256,
fee: uint256,
price_oracle: address,
monetary_policy: address,
loan_discount: uint256,
liquidation_discount: uint256
) -> (address, address): nonpayable
def amm() -> address: view
def controller() -> address: view
def borrowed_token() -> address: view
def collateral_token() -> address: view
def price_oracle() -> address: view
def set_max_supply(_value: uint256): nonpayable
interface Controller:
def monetary_policy() -> address: view
interface AMM:
def get_dy(i: uint256, j: uint256, in_amount: uint256) -> uint256: view
def get_dx(i: uint256, j: uint256, out_amount: uint256) -> uint256: view
def get_dydx(i: uint256, j: uint256, out_amount: uint256) -> (uint256, uint256): view
def exchange(i: uint256, j: uint256, in_amount: uint256, min_amount: uint256, _for: address) -> uint256[2]: nonpayable
def exchange_dy(i: uint256, j: uint256, out_amount: uint256, max_amount: uint256, _for: address) -> uint256[2]: nonpayable
interface Pool:
def price_oracle(i: uint256 = 0) -> uint256: view # Universal method!
def coins(i: uint256) -> address: view
interface GaugeFactory:
def get_gauge_from_lp_token(addr: address) -> address: view
event SetImplementations:
amm: address
controller: address
vault: address
price_oracle: address
monetary_policy: address
gauge_factory: address
event SetDefaultRates:
min_rate: uint256
max_rate: uint256
event SetAdmin:
admin: address
event NewVault:
id: indexed(uint256)
collateral_token: indexed(address)
borrowed_token: indexed(address)
vault: address
controller: address
amm: address
price_oracle: address
monetary_policy: address
STABLECOIN: public(immutable(address))
# These are limits for default borrow rates, NOT actual min and max rates.
# Even governance cannot go beyond these rates before a new code is shipped
MIN_RATE: public(constant(uint256)) = 10**15 / (365 * 86400) # 0.1%
MAX_RATE: public(constant(uint256)) = 10**19 / (365 * 86400) # 1000%
# Implementations which can be changed by governance
amm_impl: public(address)
controller_impl: public(address)
vault_impl: public(address)
pool_price_oracle_impl: public(address)
monetary_policy_impl: public(address)
# Actual min/max borrow rates when creating new markets
# for example, 0.5% -> 50% is a good choice
min_default_borrow_rate: public(uint256)
max_default_borrow_rate: public(uint256)
# Admin is supposed to be the DAO
admin: public(address)
# Vaults can only be created but not removed
vaults: public(Vault[10**18])
amms: public(AMM[10**18])
_vaults_index: HashMap[Vault, uint256]
market_count: public(uint256)
# Index to find vaults by a non-crvUSD token
token_to_vaults: public(HashMap[address, Vault[10**18]])
token_market_count: public(HashMap[address, uint256])
names: public(HashMap[uint256, String[64]])
gauge_factory: public(GaugeFactory)
@external
def __init__(
stablecoin: address,
amm: address,
controller: address,
vault: address,
pool_price_oracle: address,
monetary_policy: address,
gauge_factory: GaugeFactory,
admin: address):
"""
@notice Factory which creates one-way lending vaults (e.g. collateral is non-borrowable)
@param stablecoin Address of crvUSD. Only crvUSD-containing markets are allowed
@param amm Address of AMM implementation
@param controller Address of Controller implementation
@param pool_price_oracle Address of implementation for price oracle factory (prices from pools)
@param monetary_policy Address for implementation of monetary policy
@param gauge_factory Address for gauge factory on this L2
@param admin Admin address (DAO)
"""
STABLECOIN = stablecoin
self.amm_impl = amm
self.controller_impl = controller
self.vault_impl = vault
self.pool_price_oracle_impl = pool_price_oracle
self.monetary_policy_impl = monetary_policy
self.gauge_factory = gauge_factory
self.min_default_borrow_rate = 5 * 10**15 / (365 * 86400)
self.max_default_borrow_rate = 50 * 10**16 / (365 * 86400)
self.admin = admin
@internal
def _create(
borrowed_token: address,
collateral_token: address,
A: uint256,
fee: uint256,
loan_discount: uint256,
liquidation_discount: uint256,
price_oracle: address,
name: String[64],
min_borrow_rate: uint256,
max_borrow_rate: uint256
) -> Vault:
"""
@notice Internal method for creation of the vault
"""
assert borrowed_token != collateral_token, "Same token"
assert borrowed_token == STABLECOIN or collateral_token == STABLECOIN
vault: Vault = Vault(create_minimal_proxy_to(self.vault_impl))
min_rate: uint256 = self.min_default_borrow_rate
max_rate: uint256 = self.max_default_borrow_rate
if min_borrow_rate > 0:
min_rate = min_borrow_rate
if max_borrow_rate > 0:
max_rate = max_borrow_rate
assert min_rate >= MIN_RATE and max_rate <= MAX_RATE and min_rate <= max_rate, "Wrong rates"
monetary_policy: address = create_from_blueprint(
self.monetary_policy_impl, borrowed_token, min_rate, max_rate, code_offset=3)
controller: address = empty(address)
amm: address = empty(address)
controller, amm = vault.initialize(
self.amm_impl, self.controller_impl,
borrowed_token, collateral_token,
A, fee,
price_oracle,
monetary_policy,
loan_discount, liquidation_discount
)
market_count: uint256 = self.market_count
log NewVault(market_count, collateral_token, borrowed_token, vault.address, controller, amm, price_oracle, monetary_policy)
self.vaults[market_count] = vault
self.amms[market_count] = AMM(amm)
self._vaults_index[vault] = market_count + 2**128
self.names[market_count] = name
self.market_count = market_count + 1
token: address = borrowed_token
if borrowed_token == STABLECOIN:
token = collateral_token
market_count = self.token_market_count[token]
self.token_to_vaults[token][market_count] = vault
self.token_market_count[token] = market_count + 1
return vault
@external
@nonreentrant('lock')
def create(
borrowed_token: address,
collateral_token: address,
A: uint256,
fee: uint256,
loan_discount: uint256,
liquidation_discount: uint256,
price_oracle: address,
name: String[64],
min_borrow_rate: uint256 = 0,
max_borrow_rate: uint256 = 0,
supply_limit: uint256 = max_value(uint256)
) -> Vault:
"""
@notice Creation of the vault using user-supplied price oracle contract
@param borrowed_token Token which is being borrowed
@param collateral_token Token used for collateral
@param A Amplification coefficient: band size is ~1/A
@param fee Fee for swaps in AMM (for ETH markets found to be 0.6%)
@param loan_discount Maximum discount. LTV = sqrt(((A - 1) / A) ** 4) - loan_discount
@param liquidation_discount Liquidation discount. LT = sqrt(((A - 1) / A) ** 4) - liquidation_discount
@param price_oracle Custom price oracle contract
@param name Human-readable market name
@param min_borrow_rate Custom minimum borrow rate (otherwise min_default_borrow_rate)
@param max_borrow_rate Custom maximum borrow rate (otherwise max_default_borrow_rate)
@param supply_limit Supply cap
"""
vault: Vault = self._create(borrowed_token, collateral_token, A, fee, loan_discount, liquidation_discount,
price_oracle, name, min_borrow_rate, max_borrow_rate)
if supply_limit < max_value(uint256):
vault.set_max_supply(supply_limit)
return vault
@external
@nonreentrant('lock')
def create_from_pool(
borrowed_token: address,
collateral_token: address,
A: uint256,
fee: uint256,
loan_discount: uint256,
liquidation_discount: uint256,
pool: address,
name: String[64],
min_borrow_rate: uint256 = 0,
max_borrow_rate: uint256 = 0,
supply_limit: uint256 = max_value(uint256)
) -> Vault:
"""
@notice Creation of the vault using existing oraclized Curve pool as a price oracle
@param borrowed_token Token which is being borrowed
@param collateral_token Token used for collateral
@param A Amplification coefficient: band size is ~1/A
@param fee Fee for swaps in AMM (for ETH markets found to be 0.6%)
@param loan_discount Maximum discount. LTV = sqrt(((A - 1) / A) ** 4) - loan_discount
@param liquidation_discount Liquidation discount. LT = sqrt(((A - 1) / A) ** 4) - liquidation_discount
@param pool Curve tricrypto-ng, twocrypto-ng or stableswap-ng pool which has non-manipulatable price_oracle().
Must contain both collateral_token and borrowed_token.
@param name Human-readable market name
@param min_borrow_rate Custom minimum borrow rate (otherwise min_default_borrow_rate)
@param max_borrow_rate Custom maximum borrow rate (otherwise max_default_borrow_rate)
@param supply_limit Supply cap
"""
# Find coins in the pool
borrowed_ix: uint256 = 100
collateral_ix: uint256 = 100
N: uint256 = 0
for i in range(10):
success: bool = False
res: Bytes[32] = empty(Bytes[32])
success, res = raw_call(
pool,
_abi_encode(i, method_id=method_id("coins(uint256)")),
max_outsize=32, is_static_call=True, revert_on_failure=False)
coin: address = convert(res, address)
if not success or coin == empty(address):
break
N += 1
if coin == borrowed_token:
borrowed_ix = i
elif coin == collateral_token:
collateral_ix = i
if collateral_ix == 100 or borrowed_ix == 100:
raise "Tokens not in pool"
price_oracle: address = create_from_blueprint(
self.pool_price_oracle_impl, pool, N, borrowed_ix, collateral_ix, code_offset=3)
vault: Vault = self._create(borrowed_token, collateral_token, A, fee, loan_discount, liquidation_discount,
price_oracle, name, min_borrow_rate, max_borrow_rate)
if supply_limit < max_value(uint256):
vault.set_max_supply(supply_limit)
return vault
@view
@external
def controllers(n: uint256) -> address:
return self.vaults[n].controller()
@view
@external
def borrowed_tokens(n: uint256) -> address:
return self.vaults[n].borrowed_token()
@view
@external
def collateral_tokens(n: uint256) -> address:
return self.vaults[n].collateral_token()
@view
@external
def price_oracles(n: uint256) -> address:
return self.vaults[n].price_oracle()
@view
@external
def monetary_policies(n: uint256) -> address:
return Controller(self.vaults[n].controller()).monetary_policy()
@view
@external
def vaults_index(vault: Vault) -> uint256:
return self._vaults_index[vault] - 2**128
@view
@external
def gauge_for_vault(vault: address) -> address:
out: address = self.gauge_factory.get_gauge_from_lp_token(vault)
assert out != empty(address)
return out
@view
@external
def gauges(vault_id: uint256) -> address:
return self.gauge_factory.get_gauge_from_lp_token(self.vaults[vault_id].address)
@external
@nonreentrant('lock')
def set_implementations(controller: address, amm: address, vault: address,
pool_price_oracle: address, monetary_policy: address, gauge_factory: address):
"""
@notice Set new implementations (blueprints) for controller, amm, vault, pool price oracle and monetary polcy.
Doesn't change existing ones
@param controller Address of the controller blueprint
@param amm Address of the AMM blueprint
@param vault Address of the Vault template
@param pool_price_oracle Address of the pool price oracle blueprint
@param monetary_policy Address of the monetary policy blueprint
@param gauge_factory Address for gauge factory
"""
assert msg.sender == self.admin
if controller != empty(address):
self.controller_impl = controller
if amm != empty(address):
self.amm_impl = amm
if vault != empty(address):
self.vault_impl = vault
if pool_price_oracle != empty(address):
self.pool_price_oracle_impl = pool_price_oracle
if monetary_policy != empty(address):
self.monetary_policy_impl = monetary_policy
if gauge_factory != empty(address):
self.gauge_factory = GaugeFactory(gauge_factory)
log SetImplementations(amm, controller, vault, pool_price_oracle, monetary_policy, gauge_factory)
@external
@nonreentrant('lock')
def set_default_rates(min_rate: uint256, max_rate: uint256):
"""
@notice Change min and max default borrow rates for creating new markets
@param min_rate Minimal borrow rate (0 utilization)
@param max_rate Maxumum borrow rate (100% utilization)
"""
assert msg.sender == self.admin
assert min_rate >= MIN_RATE
assert max_rate <= MAX_RATE
assert max_rate >= min_rate
self.min_default_borrow_rate = min_rate
self.max_default_borrow_rate = max_rate
log SetDefaultRates(min_rate, max_rate)
@external
@nonreentrant('lock')
def set_admin(admin: address):
"""
@notice Set admin of the factory (should end up with DAO)
@param admin Address of the admin
"""
assert msg.sender == self.admin
self.admin = admin
log SetAdmin(admin)
@external
@view
def coins(vault_id: uint256) -> address[2]:
vault: Vault = self.vaults[vault_id]
return [vault.borrowed_token(), vault.collateral_token()]Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"name":"SetImplementations","inputs":[{"name":"amm","type":"address","indexed":false},{"name":"controller","type":"address","indexed":false},{"name":"vault","type":"address","indexed":false},{"name":"price_oracle","type":"address","indexed":false},{"name":"monetary_policy","type":"address","indexed":false},{"name":"gauge_factory","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetDefaultRates","inputs":[{"name":"min_rate","type":"uint256","indexed":false},{"name":"max_rate","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetAdmin","inputs":[{"name":"admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewVault","inputs":[{"name":"id","type":"uint256","indexed":true},{"name":"collateral_token","type":"address","indexed":true},{"name":"borrowed_token","type":"address","indexed":true},{"name":"vault","type":"address","indexed":false},{"name":"controller","type":"address","indexed":false},{"name":"amm","type":"address","indexed":false},{"name":"price_oracle","type":"address","indexed":false},{"name":"monetary_policy","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"stablecoin","type":"address"},{"name":"amm","type":"address"},{"name":"controller","type":"address"},{"name":"vault","type":"address"},{"name":"pool_price_oracle","type":"address"},{"name":"monetary_policy","type":"address"},{"name":"gauge_factory","type":"address"},{"name":"admin","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"create","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"price_oracle","type":"address"},{"name":"name","type":"string"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"price_oracle","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"price_oracle","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"},{"name":"max_borrow_rate","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"price_oracle","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"},{"name":"max_borrow_rate","type":"uint256"},{"name":"supply_limit","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create_from_pool","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"pool","type":"address"},{"name":"name","type":"string"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create_from_pool","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"pool","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create_from_pool","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"pool","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"},{"name":"max_borrow_rate","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create_from_pool","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"pool","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"},{"name":"max_borrow_rate","type":"uint256"},{"name":"supply_limit","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"controllers","inputs":[{"name":"n","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"borrowed_tokens","inputs":[{"name":"n","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"collateral_tokens","inputs":[{"name":"n","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"price_oracles","inputs":[{"name":"n","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"monetary_policies","inputs":[{"name":"n","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"vaults_index","inputs":[{"name":"vault","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"gauge_for_vault","inputs":[{"name":"vault","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"gauges","inputs":[{"name":"vault_id","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"set_implementations","inputs":[{"name":"controller","type":"address"},{"name":"amm","type":"address"},{"name":"vault","type":"address"},{"name":"pool_price_oracle","type":"address"},{"name":"monetary_policy","type":"address"},{"name":"gauge_factory","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_default_rates","inputs":[{"name":"min_rate","type":"uint256"},{"name":"max_rate","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_admin","inputs":[{"name":"admin","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"coins","inputs":[{"name":"vault_id","type":"uint256"}],"outputs":[{"name":"","type":"address[2]"}]},{"stateMutability":"view","type":"function","name":"STABLECOIN","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"MIN_RATE","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"MAX_RATE","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"amm_impl","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"controller_impl","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"vault_impl","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"pool_price_oracle_impl","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"monetary_policy_impl","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"min_default_borrow_rate","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"max_default_borrow_rate","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"vaults","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"amms","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"market_count","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"token_to_vaults","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"token_market_count","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"names","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"gauge_factory","inputs":[],"outputs":[{"name":"","type":"address"}]}]Contract Creation Code
0x6113855150346101085760206114ae5f395f518060a01c6101085760405260206114ce5f395f518060a01c6101085760605260206114ee5f395f518060a01c61010857608052602061150e5f395f518060a01c6101085760a052602061152e5f395f518060a01c6101085760c052602061154e5f395f518060a01c6101085760e052602061156e5f395f518060a01c6101085761010052602061158e5f395f518060a01c61010857610120526040516113855260605160015560805160025560a05160035560c05160045560e05160055561010051671bc16d674ec8000e5563097343df6006556403b10683776007556101205160085561138561010c610000396113a5610000f35b5f80fd5f3560e01c60056005600383160261124101601b395f5160088160ff16838360181c0260181c0660031b8260081c61ffff1601601839505f51818160201c14600336111661004c57610d5e565b8061fffe1636103482600116021761123d578060101c61ffff16565b602061138560403960206040f35b6301e3da5f60405260206040f35b6449d482455d60405260206040f35b60015460405260206040f35b60025460405260206040f35b60035460405260206040f35b60045460405260206040f35b60055460405260206040f35b60065460405260206040f35b60075460405260206040f35b60085460405260206040f35b600435670de0b6b3a763ffff811161123d576009015460405260206040f35b600435670de0b6b3a763ffff811161123d57670de0b6b3a7640009015460405260206040f35b671bc16d674ec8000a5460405260206040f35b6004358060a01c61123d57604052671bc16d674ec8000b6040516020525f5260405f20602435670de0b6b3a763ffff811161123d57810190505460605260206060f35b6004358060a01c61123d57604052671bc16d674ec8000c6040516020525f5260405f205460605260206060f35b602080604052671bc16d674ec8000d6004356020525f5260405f208160400160208254015f81601f0160051c6003811161123d57801561020d57905b808501548160051b8501526001018181186101f7575b5050508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506040f35b671bc16d674ec8000e5460405260206040f35b6040366104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526102f3565b610104356104e0525f610500527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526102f3565b60406101046104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526102f3565b60606101046104e0375b6004358060a01c61123d57610420526024358060a01c61123d576104405260c4358060a01c61123d576104605260e435600401604081351161123d57602081350180826104803750505f5460021461123d5760025f55610420516040526104405160605260806044608037610460516101005260206104805101806101208261048060045afa50506104e05161018052610500516101a052610396610560610d62565b61056051610540527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61052051146103ff5761054051638a938f2f610560526105205161058052803b1561123d575f610560602461057c5f855af16103fd573d5f5f3e3d5ffd5b505b602061054060035f55f35b6040366104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526104af565b610104356104e0525f610500527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526104af565b60406101046104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526104af565b60606101046104e0375b6004358060a01c61123d57610420526024358060a01c61123d576104405260c4358060a01c61123d576104605260e435600401604081351161123d57602081350180826104803750505f5460021461123d5760025f556064610540526064610560525f610580525f600a905b806105a0526040366105c037610460515a63c66106576106245260046105a05161064452602001610620526106205060206106a0610620516106408585fa905090506105c0523d602081183d60201002186106805261068080516105e05260208101516106005250610600516105e05160200360031b1c8060a01c61123d57610620526105c0516105ad5760016105b3565b61062051155b156105bd5761060d565b610580516001810181811061123d579050610580526104205161062051186105ec576105a05161054052610602565b610440516106205118610602576105a051610560525b60010181811861051b575b50506064610560511861062157600161062a565b60646105405118155b156106945760126105a0527f546f6b656e73206e6f7420696e20706f6f6c00000000000000000000000000006105c0526105a0506105a051806105c001601f825f031636823750506308c379a061056052602061058052601f19601f6105a051011660440161057cfd5b600454610460516105c0526105c05161064052610580516105e0526105e05161066052610540516106005261060051610680526105605161062052610620516106a05260806003823b03596001821261123d5781600382863c81810183818561064060045afa5050828201815ff0801561123d5790509050905090506105a0526104205160405261044051606052608060446080376105a0516101005260206104805101806101208261048060045afa50506104e05161018052610500516101a0526107616105e0610d62565b6105e0516105c0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61052051146107ca576105c051638a938f2f6105e0526105205161060052803b1561123d575f6105e060246105fc5f855af16107c8573d5f5f3e3d5ffd5b505b60206105c060035f55f35b6020600435670de0b6b3a763ffff811161123d576009015463f77c4791604052602060406004605c845afa61080c573d5f5f3e3d5ffd5b60203d1061123d576040518060a01c61123d5760805260809050f35b6020600435670de0b6b3a763ffff811161123d576009015463765337b6604052602060406004605c845afa61085f573d5f5f3e3d5ffd5b60203d1061123d576040518060a01c61123d5760805260809050f35b6020600435670de0b6b3a763ffff811161123d5760090154632621db2f604052602060406004605c845afa6108b2573d5f5f3e3d5ffd5b60203d1061123d576040518060a01c61123d5760805260809050f35b6020600435670de0b6b3a763ffff811161123d57600901546386fc88d3604052602060406004605c845afa610905573d5f5f3e3d5ffd5b60203d1061123d576040518060a01c61123d5760805260809050f35b6020600435670de0b6b3a763ffff811161123d576009015463f77c4791604052602060406004605c845afa610958573d5f5f3e3d5ffd5b60203d1061123d576040518060a01c61123d57608052608090505163adfae4ce60a052602060a0600460bc845afa610992573d5f5f3e3d5ffd5b60203d1061123d5760a0518060a01c61123d5760e05260e09050f35b6004358060a01c61123d57604052671bc16d674ec800096040516020525f5260405f2054700100000000000000000000000000000000810381811161123d57905060605260206060f35b6004358060a01c61123d57604052671bc16d674ec8000e54635d95c65e60805260405160a052602060806024609c845afa610a35573d5f5f3e3d5ffd5b60203d1061123d576080518060a01c61123d5760c05260c09050516060526060511561123d5760206060f35b6020671bc16d674ec8000e54635d95c65e604052600435670de0b6b3a763ffff811161123d5760090154606052602060406024605c845afa610aa5573d5f5f3e3d5ffd5b60203d1061123d576040518060a01c61123d5760805260809050f35b6004358060a01c61123d576040526024358060a01c61123d576060526044358060a01c61123d576080526064358060a01c61123d5760a0526084358060a01c61123d5760c05260a4358060a01c61123d5760e0525f5460021461123d5760025f55600854331861123d5760405115610b3a576040516002555b60605115610b49576060516001555b60805115610b58576080516003555b60a05115610b675760a0516004555b60c05115610b765760c0516005555b60e05115610b8c5760e051671bc16d674ec8000e555b7f91d63b24386eae580bbbe65f3f50fd736c41031f36d85641bc13e74ac0cb95bb60605161010052604051610120526080516101405260a0516101605260c0516101805260e0516101a05260c0610100a160035f55005b5f5460021461123d5760025f55600854331861123d576301e3da5f6004351061123d576449d482455d6024351161123d576004356024351061123d576004356006556024356007557f279f1fe0f91b15d983792d0305a146961875690054db0d81bec8d1582461fc656040600460403760406040a160035f55005b6004358060a01c61123d576040525f5460021461123d5760025f55600854331861123d576040516008557f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a160405160605260206060a160035f55005b600435670de0b6b3a763ffff811161123d576009015460405260405163765337b6606052602060606004607c845afa610cf5573d5f5f3e3d5ffd5b60203d1061123d576060518060a01c61123d5760a05260a090505161012052604051632621db2f60c052602060c0600460dc845afa610d36573d5f5f3e3d5ffd5b60203d1061123d5760c0518060a01c61123d5761010052610100905051610140526040610120f35b5f5ffd5b60605160405118610dd257600a6101c0527f53616d6520746f6b656e000000000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f825f031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b60206113855f395f5160405118610dea576001610df9565b60206113855f395f5160605118155b1561123d577f602d3d8160093d39f3363d3d373d3d3d363d73000000000000000000000000006101e05260035460601b6101f3527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006102075260366101e05ff0801561123d576101c0526006546101e052600754610200526101805115610e8357610180516101e0525b6101a05115610e95576101a051610200525b6301e3da5f6101e0511015610eaa575f610ecb565b6449d482455d610200511115610ec0575f610ecb565b610200516101e05111155b610f3457600b610220527f57726f6e672072617465730000000000000000000000000000000000000000006102405261022050610220518061024001601f825f031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b60055460405161024052610240516102a0526101e05161026052610260516102c0526102005161028052610280516102e05260606003823b03596001821261123d5781600382863c8181018381856102a060045afa5050828201815ff0801561123d57905090509050905061022052604036610240376101c0516343687bba610280526001546102a0526002546102c0526040516102e052606051610300526080516103205260a051610340526101005161036052610220516103805260c0516103a05260e0516103c052604061028061014461029c5f855af161101a573d5f5f3e3d5ffd5b60403d1061123d57610280518060a01c61123d576103e0526102a0518060a01c61123d57610400526103e0905080516102405260208101516102605250671bc16d674ec8000a5461028052604051606051610280517f2a854a597908740dff5f0846840f167547ea0d7614c43bde3ea49be2e68c07ec6101c0516102a052610240516102c052610260516102e0526101005161030052610220516103205260a06102a0a46101c05161028051670de0b6b3a763ffff811161123d57600901556102605161028051670de0b6b3a763ffff811161123d57670de0b6b3a7640009015561028051700100000000000000000000000000000000810181811061123d579050671bc16d674ec800096101c0516020525f5260405f205560206101205101671bc16d674ec8000d610280516020525f5260405f205f82601f0160051c6003811161123d57801561118057905b8060051b610120015181840155600101818118611168575b50505050610280516001810181811061123d579050671bc16d674ec8000a556040516102a05260206113855f395f51604051186111bf576060516102a0525b671bc16d674ec8000c6102a0516020525f5260405f2054610280526101c051671bc16d674ec8000b6102a0516020525f5260405f2061028051670de0b6b3a763ffff811161123d578101905055610280516001810181811061123d579050671bc16d674ec8000c6102a0516020525f5260405f20556101c051815250565b5f80fd0a3b132d0b0009130505000312550995f7129d0d9c3b70a6024e012593a397760068000599d0b1ba00db0005762e7b9209210025e8980c6e023b0005e5f260ba018e0025e94b0dd207d500258c64ea4a00f3002550c1163a09f80025e9333fab0c5e0025b05391870a610025a8acf8df014b0045d819bfef00760005bcf75a8f09ae00256c15eadf0ac100c56677b28700ab00055673683f02b601654622ab0301bb0025c66106570cba00256fe4501f082800250b91bd2700b700054351e30b04a50185c6f2a81d08ce0025041622b500930005d984d2a1040a0125c24dbebd008400056c3a55e502e90185fd775c780138000586a8cdbc01120025247ec87800c3000549b89984087b0025a74fcf900be30045f851a44000e70005168819c0009f00055904e8dc027f014573edeb30043b0145bccc056c047201653cfd3d8c00cf000584191385851418481868182818581820a16576797065728300030a001d0000000000000000000000007fff4c4a827c84e32c5e175052834111b2ccd2700000000000000000000000003d78f8b0fe665efbe0e16215e1ffa2f4adec0af3000000000000000000000000999b8c22e35c7bc8764c89ef21828652d7ebf55400000000000000000000000086751b5641a8875961733797328ee9cddcc648220000000000000000000000009a295d57c2844aad74d22818b06b5c79c2056807000000000000000000000000d094fcf9d65341770a2458f38b9010c39c813642000000000000000000000000f3a431008396df8a8b2df492c913706bdb0874ef0000000000000000000000006c9578402a3ace046a12839f45f84aa5448e9c30
Deployed Bytecode
0x5f3560e01c60056005600383160261124101601b395f5160088160ff16838360181c0260181c0660031b8260081c61ffff1601601839505f51818160201c14600336111661004c57610d5e565b8061fffe1636103482600116021761123d578060101c61ffff16565b602061138560403960206040f35b6301e3da5f60405260206040f35b6449d482455d60405260206040f35b60015460405260206040f35b60025460405260206040f35b60035460405260206040f35b60045460405260206040f35b60055460405260206040f35b60065460405260206040f35b60075460405260206040f35b60085460405260206040f35b600435670de0b6b3a763ffff811161123d576009015460405260206040f35b600435670de0b6b3a763ffff811161123d57670de0b6b3a7640009015460405260206040f35b671bc16d674ec8000a5460405260206040f35b6004358060a01c61123d57604052671bc16d674ec8000b6040516020525f5260405f20602435670de0b6b3a763ffff811161123d57810190505460605260206060f35b6004358060a01c61123d57604052671bc16d674ec8000c6040516020525f5260405f205460605260206060f35b602080604052671bc16d674ec8000d6004356020525f5260405f208160400160208254015f81601f0160051c6003811161123d57801561020d57905b808501548160051b8501526001018181186101f7575b5050508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506040f35b671bc16d674ec8000e5460405260206040f35b6040366104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526102f3565b610104356104e0525f610500527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526102f3565b60406101046104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526102f3565b60606101046104e0375b6004358060a01c61123d57610420526024358060a01c61123d576104405260c4358060a01c61123d576104605260e435600401604081351161123d57602081350180826104803750505f5460021461123d5760025f55610420516040526104405160605260806044608037610460516101005260206104805101806101208261048060045afa50506104e05161018052610500516101a052610396610560610d62565b61056051610540527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61052051146103ff5761054051638a938f2f610560526105205161058052803b1561123d575f610560602461057c5f855af16103fd573d5f5f3e3d5ffd5b505b602061054060035f55f35b6040366104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526104af565b610104356104e0525f610500527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526104af565b60406101046104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526104af565b60606101046104e0375b6004358060a01c61123d57610420526024358060a01c61123d576104405260c4358060a01c61123d576104605260e435600401604081351161123d57602081350180826104803750505f5460021461123d5760025f556064610540526064610560525f610580525f600a905b806105a0526040366105c037610460515a63c66106576106245260046105a05161064452602001610620526106205060206106a0610620516106408585fa905090506105c0523d602081183d60201002186106805261068080516105e05260208101516106005250610600516105e05160200360031b1c8060a01c61123d57610620526105c0516105ad5760016105b3565b61062051155b156105bd5761060d565b610580516001810181811061123d579050610580526104205161062051186105ec576105a05161054052610602565b610440516106205118610602576105a051610560525b60010181811861051b575b50506064610560511861062157600161062a565b60646105405118155b156106945760126105a0527f546f6b656e73206e6f7420696e20706f6f6c00000000000000000000000000006105c0526105a0506105a051806105c001601f825f031636823750506308c379a061056052602061058052601f19601f6105a051011660440161057cfd5b600454610460516105c0526105c05161064052610580516105e0526105e05161066052610540516106005261060051610680526105605161062052610620516106a05260806003823b03596001821261123d5781600382863c81810183818561064060045afa5050828201815ff0801561123d5790509050905090506105a0526104205160405261044051606052608060446080376105a0516101005260206104805101806101208261048060045afa50506104e05161018052610500516101a0526107616105e0610d62565b6105e0516105c0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61052051146107ca576105c051638a938f2f6105e0526105205161060052803b1561123d575f6105e060246105fc5f855af16107c8573d5f5f3e3d5ffd5b505b60206105c060035f55f35b6020600435670de0b6b3a763ffff811161123d576009015463f77c4791604052602060406004605c845afa61080c573d5f5f3e3d5ffd5b60203d1061123d576040518060a01c61123d5760805260809050f35b6020600435670de0b6b3a763ffff811161123d576009015463765337b6604052602060406004605c845afa61085f573d5f5f3e3d5ffd5b60203d1061123d576040518060a01c61123d5760805260809050f35b6020600435670de0b6b3a763ffff811161123d5760090154632621db2f604052602060406004605c845afa6108b2573d5f5f3e3d5ffd5b60203d1061123d576040518060a01c61123d5760805260809050f35b6020600435670de0b6b3a763ffff811161123d57600901546386fc88d3604052602060406004605c845afa610905573d5f5f3e3d5ffd5b60203d1061123d576040518060a01c61123d5760805260809050f35b6020600435670de0b6b3a763ffff811161123d576009015463f77c4791604052602060406004605c845afa610958573d5f5f3e3d5ffd5b60203d1061123d576040518060a01c61123d57608052608090505163adfae4ce60a052602060a0600460bc845afa610992573d5f5f3e3d5ffd5b60203d1061123d5760a0518060a01c61123d5760e05260e09050f35b6004358060a01c61123d57604052671bc16d674ec800096040516020525f5260405f2054700100000000000000000000000000000000810381811161123d57905060605260206060f35b6004358060a01c61123d57604052671bc16d674ec8000e54635d95c65e60805260405160a052602060806024609c845afa610a35573d5f5f3e3d5ffd5b60203d1061123d576080518060a01c61123d5760c05260c09050516060526060511561123d5760206060f35b6020671bc16d674ec8000e54635d95c65e604052600435670de0b6b3a763ffff811161123d5760090154606052602060406024605c845afa610aa5573d5f5f3e3d5ffd5b60203d1061123d576040518060a01c61123d5760805260809050f35b6004358060a01c61123d576040526024358060a01c61123d576060526044358060a01c61123d576080526064358060a01c61123d5760a0526084358060a01c61123d5760c05260a4358060a01c61123d5760e0525f5460021461123d5760025f55600854331861123d5760405115610b3a576040516002555b60605115610b49576060516001555b60805115610b58576080516003555b60a05115610b675760a0516004555b60c05115610b765760c0516005555b60e05115610b8c5760e051671bc16d674ec8000e555b7f91d63b24386eae580bbbe65f3f50fd736c41031f36d85641bc13e74ac0cb95bb60605161010052604051610120526080516101405260a0516101605260c0516101805260e0516101a05260c0610100a160035f55005b5f5460021461123d5760025f55600854331861123d576301e3da5f6004351061123d576449d482455d6024351161123d576004356024351061123d576004356006556024356007557f279f1fe0f91b15d983792d0305a146961875690054db0d81bec8d1582461fc656040600460403760406040a160035f55005b6004358060a01c61123d576040525f5460021461123d5760025f55600854331861123d576040516008557f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a160405160605260206060a160035f55005b600435670de0b6b3a763ffff811161123d576009015460405260405163765337b6606052602060606004607c845afa610cf5573d5f5f3e3d5ffd5b60203d1061123d576060518060a01c61123d5760a05260a090505161012052604051632621db2f60c052602060c0600460dc845afa610d36573d5f5f3e3d5ffd5b60203d1061123d5760c0518060a01c61123d5761010052610100905051610140526040610120f35b5f5ffd5b60605160405118610dd257600a6101c0527f53616d6520746f6b656e000000000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f825f031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b60206113855f395f5160405118610dea576001610df9565b60206113855f395f5160605118155b1561123d577f602d3d8160093d39f3363d3d373d3d3d363d73000000000000000000000000006101e05260035460601b6101f3527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006102075260366101e05ff0801561123d576101c0526006546101e052600754610200526101805115610e8357610180516101e0525b6101a05115610e95576101a051610200525b6301e3da5f6101e0511015610eaa575f610ecb565b6449d482455d610200511115610ec0575f610ecb565b610200516101e05111155b610f3457600b610220527f57726f6e672072617465730000000000000000000000000000000000000000006102405261022050610220518061024001601f825f031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b60055460405161024052610240516102a0526101e05161026052610260516102c0526102005161028052610280516102e05260606003823b03596001821261123d5781600382863c8181018381856102a060045afa5050828201815ff0801561123d57905090509050905061022052604036610240376101c0516343687bba610280526001546102a0526002546102c0526040516102e052606051610300526080516103205260a051610340526101005161036052610220516103805260c0516103a05260e0516103c052604061028061014461029c5f855af161101a573d5f5f3e3d5ffd5b60403d1061123d57610280518060a01c61123d576103e0526102a0518060a01c61123d57610400526103e0905080516102405260208101516102605250671bc16d674ec8000a5461028052604051606051610280517f2a854a597908740dff5f0846840f167547ea0d7614c43bde3ea49be2e68c07ec6101c0516102a052610240516102c052610260516102e0526101005161030052610220516103205260a06102a0a46101c05161028051670de0b6b3a763ffff811161123d57600901556102605161028051670de0b6b3a763ffff811161123d57670de0b6b3a7640009015561028051700100000000000000000000000000000000810181811061123d579050671bc16d674ec800096101c0516020525f5260405f205560206101205101671bc16d674ec8000d610280516020525f5260405f205f82601f0160051c6003811161123d57801561118057905b8060051b610120015181840155600101818118611168575b50505050610280516001810181811061123d579050671bc16d674ec8000a556040516102a05260206113855f395f51604051186111bf576060516102a0525b671bc16d674ec8000c6102a0516020525f5260405f2054610280526101c051671bc16d674ec8000b6102a0516020525f5260405f2061028051670de0b6b3a763ffff811161123d578101905055610280516001810181811061123d579050671bc16d674ec8000c6102a0516020525f5260405f20556101c051815250565b5f80fd0a3b132d0b0009130505000312550995f7129d0d9c3b70a6024e012593a397760068000599d0b1ba00db0005762e7b9209210025e8980c6e023b0005e5f260ba018e0025e94b0dd207d500258c64ea4a00f3002550c1163a09f80025e9333fab0c5e0025b05391870a610025a8acf8df014b0045d819bfef00760005bcf75a8f09ae00256c15eadf0ac100c56677b28700ab00055673683f02b601654622ab0301bb0025c66106570cba00256fe4501f082800250b91bd2700b700054351e30b04a50185c6f2a81d08ce0025041622b500930005d984d2a1040a0125c24dbebd008400056c3a55e502e90185fd775c780138000586a8cdbc01120025247ec87800c3000549b89984087b0025a74fcf900be30045f851a44000e70005168819c0009f00055904e8dc027f014573edeb30043b0145bccc056c047201653cfd3d8c00cf00050000000000000000000000007fff4c4a827c84e32c5e175052834111b2ccd270
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in S
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
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.