| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 31228477 | 8 mins ago | 9,990.56031796 FRAX | ||||
| 31225361 | 1 hr ago | 3.78711293 FRAX | ||||
| 31225361 | 1 hr ago | 3.78711293 FRAX | ||||
| 31212829 | 8 hrs ago | 2 FRAX | ||||
| 31199668 | 16 hrs ago | 0.07933405 FRAX | ||||
| 31188723 | 22 hrs ago | 100 FRAX | ||||
| 31160560 | 37 hrs ago | 6.5 FRAX | ||||
| 31160525 | 37 hrs ago | 6.5 FRAX | ||||
| 31159441 | 38 hrs ago | 0.59411787 FRAX | ||||
| 31152245 | 42 hrs ago | 100 FRAX | ||||
| 31152221 | 42 hrs ago | 100 FRAX | ||||
| 31109279 | 2 days ago | 7.16081686 FRAX | ||||
| 31109279 | 2 days ago | 7.16081686 FRAX | ||||
| 31104262 | 2 days ago | 20 FRAX | ||||
| 31084302 | 3 days ago | 5.35516031 FRAX | ||||
| 31084302 | 3 days ago | 5.35516031 FRAX | ||||
| 31075116 | 3 days ago | 99.61446276 FRAX | ||||
| 31075116 | 3 days ago | 99.61446276 FRAX | ||||
| 31070123 | 3 days ago | 100 FRAX | ||||
| 31054053 | 4 days ago | 1 FRAX | ||||
| 31054053 | 4 days ago | 1 FRAX | ||||
| 31053395 | 4 days ago | 2,350 FRAX | ||||
| 31053338 | 4 days ago | 2,332.90911562 FRAX | ||||
| 31053338 | 4 days ago | 2,332.90911562 FRAX | ||||
| 31032300 | 4 days ago | 46.37090853 FRAX |
Cross-Chain Transactions
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x9f2Fa770...28f0Ef2db The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
CurveRouterNgPoolsOnly v1.1
Compiler Version
vyper:0.3.10
Contract Source Code (Vyper language format)
# @version 0.3.10
"""
@title CurveRouterNgPoolsOnly v1.1
@author Curve.Fi
@license Copyright (c) Curve.Fi, 2020-2024 - all rights reserved
@notice Performs up to 5 swaps in a single transaction, can do estimations with get_dy and get_dx
"""
version: public(constant(String[8])) = "1.1.0" # ng pools
from vyper.interfaces import ERC20
interface StableNgPool:
def get_dy(i: int128, j: int128, in_amount: uint256) -> uint256: view
def get_dx(i: int128, j: int128, out_amount: uint256) -> uint256: view
def exchange(i: int128, j: int128, dx: uint256, min_dy: uint256): nonpayable
def calc_token_amount(_amounts: DynArray[uint256, 8], _is_deposit: bool) -> uint256: view
def add_liquidity(_amounts: DynArray[uint256, 8], _min_mint_amount: uint256) -> uint256: nonpayable
def calc_withdraw_one_coin(token_amount: uint256, i: int128) -> uint256: view
def remove_liquidity_one_coin(token_amount: uint256, i: int128, min_amount: uint256): nonpayable
interface StableNgMetaPool:
def BASE_POOL() -> address: view
def get_dy_underlying(i: int128, j: int128, amount: uint256) -> uint256: view
def get_dx_underlying(i: int128, j: int128, amount: uint256) -> uint256: view
def exchange_underlying(i: int128, j: int128, dx: uint256, min_dy: uint256): nonpayable
interface CryptoNgPool:
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 exchange(i: uint256, j: uint256, dx: uint256, min_dy: uint256): nonpayable
def calc_withdraw_one_coin(token_amount: uint256, i: uint256) -> uint256: view
def remove_liquidity_one_coin(token_amount: uint256, i: uint256, min_amount: uint256): nonpayable
interface TwoCryptoNgPool:
def calc_token_amount(amounts: uint256[2], is_deposit: bool) -> uint256: view
def add_liquidity(amounts: uint256[2], min_mint_amount: uint256) -> uint256: nonpayable
interface TriCryptoNgPool:
def calc_token_amount(amounts: uint256[3], is_deposit: bool) -> uint256: view
def add_liquidity(amounts: uint256[3], min_mint_amount: uint256) -> uint256: nonpayable
interface WETH:
def deposit(): payable
def withdraw(_amount: uint256): nonpayable
event Exchange:
sender: indexed(address)
receiver: indexed(address)
route: address[11]
swap_params: uint256[4][5]
in_amount: uint256
out_amount: uint256
ETH_ADDRESS: constant(address) = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE
WETH_ADDRESS: immutable(address)
is_approved: HashMap[address, HashMap[address, bool]]
@external
@payable
def __default__():
pass
@external
def __init__( _weth: address):
WETH_ADDRESS = _weth
@external
@payable
@nonreentrant('lock')
def exchange(
_route: address[11],
_swap_params: uint256[4][5],
_amount: uint256,
_min_dy: uint256,
_receiver: address=msg.sender
) -> uint256:
"""
@notice Performs up to 5 swaps in a single transaction.
@dev Routing and swap params must be determined off-chain. This
functionality is designed for gas efficiency over ease-of-use.
@param _route Array of [initial token, pool, token, pool, token, ...]
The array is iterated until a pool address of 0x00, then the last
given token is transferred to `_receiver`
@param _swap_params Multidimensional array of [i, j, swap_type, pool_type] where
i is the index of input token
j is the index of output token
The swap_type should be:
1. for `exchange`,
2. for `exchange_underlying` (stable-ng metapools),
3. -- legacy --
4. for coin -> LP token "exchange" (actually `add_liquidity`),
5. -- legacy --
6. for LP token -> coin "exchange" (actually `remove_liquidity_one_coin`)
7. -- legacy --
8. for ETH <-> WETH
pool_type: 10 - stable-ng, 20 - twocrypto-ng, 30 - tricrypto-ng, 4 - llamma
@param _amount The amount of input token (`_route[0]`) to be sent.
@param _min_dy The minimum amount received after the final swap.
@param _receiver Address to transfer the final output token to.
@return Received amount of the final output token.
"""
input_token: address = _route[0]
output_token: address = empty(address)
amount: uint256 = _amount
# validate / transfer initial token
if input_token == ETH_ADDRESS:
assert msg.value == amount
else:
assert msg.value == 0
assert ERC20(input_token).transferFrom(msg.sender, self, amount, default_return_value=True)
for i in range(5):
# 5 rounds of iteration to perform up to 5 swaps
swap: address = _route[i * 2 + 1]
output_token = _route[(i + 1) * 2]
params: uint256[4] = _swap_params[i] # i, j, swap_type, pool_type
# store the initial balance of the output_token
output_token_initial_balance: uint256 = self.balance
if output_token != ETH_ADDRESS:
output_token_initial_balance = ERC20(output_token).balanceOf(self)
if not self.is_approved[input_token][swap]:
assert ERC20(input_token).approve(swap, max_value(uint256), default_return_value=True, skip_contract_check=True)
self.is_approved[input_token][swap] = True
# perform the swap according to the swap type
if params[2] == 1:
if params[3] == 10: # stable-ng
StableNgPool(swap).exchange(convert(params[0], int128), convert(params[1], int128), amount, 0)
else: # twocrypto-ng, tricrypto-ng, llamma
CryptoNgPool(swap).exchange(params[0], params[1], amount, 0)
elif params[2] == 2: # stable-ng metapools
StableNgMetaPool(swap).exchange_underlying(convert(params[0], int128), convert(params[1], int128), amount, 0)
elif params[2] == 4:
if params[3] == 10: # stable-ng
amounts: DynArray[uint256, 8] = [0, 0, 0, 0, 0, 0, 0, 0]
amounts[params[0]] = amount
StableNgPool(swap).add_liquidity(amounts, 0)
elif params[3] == 20: # twocrypto-ng
amounts: uint256[2] = [0, 0]
amounts[params[0]] = amount
TwoCryptoNgPool(swap).add_liquidity(amounts, 0)
elif params[3] == 30: # tricrypto-ng
amounts: uint256[3] = [0, 0, 0]
amounts[params[0]] = amount
TriCryptoNgPool(swap).add_liquidity(amounts, 0)
elif params[2] == 6:
if params[3] == 10: # stable-ng
StableNgPool(swap).remove_liquidity_one_coin(amount, convert(params[1], int128), 0)
else: # twocrypto-ng, tricrypto-ng
CryptoNgPool(swap).remove_liquidity_one_coin(amount, params[1], 0)
elif params[2] == 8:
if input_token == ETH_ADDRESS and output_token == WETH_ADDRESS:
WETH(swap).deposit(value=amount)
elif input_token == WETH_ADDRESS and output_token == ETH_ADDRESS:
WETH(swap).withdraw(amount)
else:
raise "Swap type 8 is only for ETH <-> WETH"
else:
raise "Bad swap type"
# update the amount received
if output_token == ETH_ADDRESS:
amount = self.balance
else:
amount = ERC20(output_token).balanceOf(self)
# sanity check, if the routing data is incorrect we will have a 0 balance change and that is bad
assert amount - output_token_initial_balance != 0, "Received nothing"
# check if this was the last swap
if i == 4 or _route[i * 2 + 3] == empty(address):
break
# if there is another swap, the output token becomes the input for the next round
input_token = output_token
amount -= 1 # Change non-zero -> non-zero costs less gas than zero -> non-zero
assert amount >= _min_dy, "Slippage"
# transfer the final token to the receiver
if output_token == ETH_ADDRESS:
raw_call(_receiver, b"", value=amount)
else:
assert ERC20(output_token).transfer(_receiver, amount, default_return_value=True)
log Exchange(msg.sender, _receiver, _route, _swap_params, _amount, amount)
return amount
@view
@external
def get_dy(
_route: address[11],
_swap_params: uint256[4][5],
_amount: uint256,
) -> uint256:
"""
@notice Get amount of the final output token received in an exchange
@dev Routing and swap params must be determined off-chain. This
functionality is designed for gas efficiency over ease-of-use.
@param _route Array of [initial token, pool, token, pool, token, ...]
The array is iterated until a pool address of 0x00, then the last
given token is transferred to `_receiver`
@param _swap_params Multidimensional array of [i, j, swap_type, pool_type] where
i is the index of input token
j is the index of output token
The swap_type should be:
1. for `exchange`,
2. for `exchange_underlying` (stable-ng metapools),
3. -- legacy --
4. for coin -> LP token "exchange" (actually `add_liquidity`),
5. -- legacy --
6. for LP token -> coin "exchange" (actually `remove_liquidity_one_coin`)
7. -- legacy --
8. for ETH <-> WETH
pool_type: 10 - stable-ng, 20 - twocrypto-ng, 30 - tricrypto-ng, 4 - llamma
@param _amount The amount of input token (`_route[0]`) to be sent.
@return Expected amount of the final output token.
"""
amount: uint256 = _amount
for i in range(5):
# 5 rounds of iteration to perform up to 5 swaps
swap: address = _route[i * 2 + 1]
params: uint256[4] = _swap_params[i] # i, j, swap_type, pool_type
# Calc output amount according to the swap type
if params[2] == 1:
if params[3] == 10: # stable_ng
amount = StableNgPool(swap).get_dy(convert(params[0], int128), convert(params[1], int128), amount)
else: # twocrypto-ng, tricrypto-ng, llamma
amount = CryptoNgPool(swap).get_dy(params[0], params[1], amount)
elif params[2] == 2: # stable-ng metapools
amount = StableNgMetaPool(swap).get_dy_underlying(convert(params[0], int128), convert(params[1], int128), amount)
elif params[2] == 4:
if params[3] == 10: # stable-ng
amounts: DynArray[uint256, 8] = [0, 0, 0, 0, 0, 0, 0, 0]
amounts[params[0]] = amount
amount = StableNgPool(swap).calc_token_amount(amounts, True)
elif params[3] == 20: # twocrypto-ng
amounts: uint256[2] = [0, 0]
amounts[params[0]] = amount
amount = TwoCryptoNgPool(swap).calc_token_amount(amounts, True)
elif params[3] == 30: # tricrypto-ng
amounts: uint256[3] = [0, 0, 0]
amounts[params[0]] = amount
amount = TriCryptoNgPool(swap).calc_token_amount(amounts, True)
elif params[2] == 6:
if params[3] == 10: # stable-ng
amount = StableNgPool(swap).calc_withdraw_one_coin(amount, convert(params[1], int128))
else: # twocrypto-ng, tricrypto-ng
amount = CryptoNgPool(swap).calc_withdraw_one_coin(amount, params[1])
elif params[2] == 8:
# ETH <--> WETH rate is 1:1
pass
else:
raise "Bad swap type"
# check if this was the last swap
if i == 4 or _route[i * 2 + 3] == empty(address):
break
return amount - 1
@view
@external
def get_dx(
_route: address[11],
_swap_params: uint256[4][5],
_out_amount: uint256,
) -> uint256:
"""
@notice Calculate the input amount required to receive the desired output amount.
This method is NOT PRECISE for swap_type = 4 and 6.
@dev Routing and swap params must be determined off-chain. This
functionality is designed for gas efficiency over ease-of-use.
@param _route Array of [initial token, pool, token, pool, token, ...]
The array is iterated until a pool address of 0x00, then the last
given token is transferred to `_receiver`
@param _swap_params Multidimensional array of [i, j, swap_type, pool_type] where
i is the index of input token
j is the index of output token
The swap_type should be:
1. for `exchange`,
2. for `exchange_underlying` (stable-ng metapools),
3. -- legacy --
4. for coin -> LP token "exchange" (actually `add_liquidity`),
5. -- legacy --
6. for LP token -> coin "exchange" (actually `remove_liquidity_one_coin`)
7. -- legacy --
8. for ETH <-> WETH
pool_type: 10 - stable-ng, 20 - twocrypto-ng, 30 - tricrypto-ng, 4 - llamma
@param _out_amount The desired amount of output coin to receive.
@return Required amount of input token to send.
"""
amount: uint256 = _out_amount
for _i in range(5):
# 5 rounds of iteration to perform up to 5 swaps
i: uint256 = 4 - _i
swap: address = _route[i * 2 + 1]
if swap == empty(address):
continue
params: uint256[4] = _swap_params[i] # i, j, swap_type, pool_type
# Calc a required input amount according to the swap type
if params[2] == 1:
if params[3] == 10: # stable-ng
amount = StableNgPool(swap).get_dx(convert(params[0], int128), convert(params[1], int128), amount)
else: # twocrypto-ng, tricrypto-ng, llamma
amount = CryptoNgPool(swap).get_dx(params[0], params[1], amount)
elif params[2] == 2: # stable-ng metapool
_n: int128 = convert(params[0], int128)
_k: int128 = convert(params[1], int128)
if _n > 0 and _k > 0:
base_pool: address = StableNgMetaPool(swap).BASE_POOL()
amount = StableNgPool(base_pool).get_dx(_n - 1, _k - 1, amount)
else:
amount = StableNgMetaPool(swap).get_dx_underlying(_n, _k, amount)
elif params[2] == 4:
# This is not correct. Should be something like calc_add_one_coin. But tests say that it's precise enough.
if params[3] == 10: # stable_ng
amount = StableNgPool(swap).calc_withdraw_one_coin(amount, convert(params[0], int128))
else: # twocrypto-ng, tricrypto-ng
amount = CryptoNgPool(swap).calc_withdraw_one_coin(amount, params[0])
elif params[2] == 6:
if params[3] == 10: # stable-ng
amounts: DynArray[uint256, 8] = [0, 0, 0, 0, 0, 0, 0, 0]
amounts[params[1]] = amount
amount = StableNgPool(swap).calc_token_amount(amounts, False)
elif params[3] == 20: # twocrypto-ng
amounts: uint256[2] = [0, 0]
amounts[params[1]] = amount
amount = TwoCryptoNgPool(swap).calc_token_amount(amounts, False)
elif params[3] == 30: # tricrypto-ng
amounts: uint256[3] = [0, 0, 0]
amounts[params[1]] = amount
amount = TriCryptoNgPool(swap).calc_token_amount(amounts, False)
elif params[2] == 8:
# ETH <--> WETH rate is 1:1
pass
else:
raise "Bad swap type"
return amountContract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"name":"Exchange","inputs":[{"name":"sender","type":"address","indexed":true},{"name":"receiver","type":"address","indexed":true},{"name":"route","type":"address[11]","indexed":false},{"name":"swap_params","type":"uint256[4][5]","indexed":false},{"name":"in_amount","type":"uint256","indexed":false},{"name":"out_amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_weth","type":"address"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[4][5]"},{"name":"_amount","type":"uint256"},{"name":"_min_dy","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[4][5]"},{"name":"_amount","type":"uint256"},{"name":"_min_dy","type":"uint256"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dy","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[4][5]"},{"name":"_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[4][5]"},{"name":"_out_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string"}]}]Contract Creation Code
0x61196d5150346100365760206119bc5f395f518060a01c6100365760405260405161196d5261196d61003a6100003961198d610000f35b5f80fd5f3560e01c60026003821660011b61196501601e395f51565b6354fd4d50811861009657346119615760208060805260056040527f312e312e3000000000000000000000000000000000000000000000000000000060605260408160800181518152602082015160208201528051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506080f35b63fd44959c811861195f5761044336111561196157610424358060a01c611961576101a0525b6004358060a01c611961576040526024358060a01c611961576060526044358060a01c611961576080526064358060a01c6119615760a0526084358060a01c6119615760c05260a4358060a01c6119615760e05260c4358060a01c611961576101005260e4358060a01c6119615761012052610104358060a01c6119615761014052610124358060a01c6119615761016052610144358060a01c61196157610180525f546002146119615760025f556040516101c0525f6101e0526103e4356102005273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101c051186101ac5761020051341861196157610226565b34611961576101c0516323b872dd610220523361024052306102605261020051610280526020610220606461023c5f855af16101ea573d5f5f3e3d5ffd5b3d61020157803b156119615760016102a05261021a565b60203d1061196157610220518060011c611961576102a0525b6102a090505115611961575b5f6005905b8061022052610220518060011b818160011c1861196157905060018101818110611961579050600a81116119615760051b604001516102405261022051600181018181106119615790508060011b818160011c18611961579050600a81116119615760051b604001516101e05261022051600481116119615760071b6101640180356102605260208101356102805260408101356102a05260608101356102c05250476102e05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101e0511461032e576101e0516370a082316103005230610320526020610300602461031c845afa61031b573d5f5f3e3d5ffd5b60203d10611961576103009050516102e0525b60016101c0516020525f5260405f2080610240516020525f5260405f209050546103f5576101c05163095ea7b36103005261024051610320527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610340526020610300604461031c5f855af16103a6573d5f5f3e3d5ffd5b3d6103b6576001610360526103c7565b610300518060011c61196157610360525b6103609050511561196157600160016101c0516020525f5260405f2080610240516020525f5260405f209050555b60016102a051186104bb57600a6102c0511861046b5761024051633df02124610300526102605180607f1c61196157610320526102805180607f1c611961576103405261020051610360525f61038052803b15611961575f610300608461031c5f855af1610465573d5f5f3e3d5ffd5b50610982565b61024051635b41b908610300526102605161032052610280516103405261020051610360525f61038052803b15611961575f610300608461031c5f855af16104b5573d5f5f3e3d5ffd5b50610982565b60026102a05118610526576102405163a6417ed6610300526102605180607f1c61196157610320526102805180607f1c611961576103405261020051610360525f61038052803b15611961575f610300608461031c5f855af1610520573d5f5f3e3d5ffd5b50610982565b60046102a051186106f557600a6102c051186105fd5761010036610320376008610300526102005161026051610300518110156119615760051b61032001526102405163b72df5de610420526040806104405280610440015f610300518083528060051b5f82600881116119615780156105ba57905b8060051b61032001518160051b60208801015260010181811861059c575b505082016020019150509050810190505f6104605250602061042061016461043c5f855af16105eb573d5f5f3e3d5ffd5b60203d10611961576104205050610982565b60146102c0511861067557604036610300376102005161026051600181116119615760051b610300015261024051630b4c7e4d61034052610300516103605261032051610380525f6103a0526020610340606461035c5f855af1610663573d5f5f3e3d5ffd5b60203d10611961576103405050610982565b601e6102c0511861098257606036610300376102005161026051600281116119615760051b610300015261024051634515cef3610360526103005161038052610320516103a052610340516103c0525f6103e0526020610360608461037c5f855af16106e3573d5f5f3e3d5ffd5b60203d10611961576103605050610982565b60066102a051186107a357600a6102c0511861075b5761024051631a4d01d26103005261020051610320526102805180607f1c61196157610340525f61036052803b15611961575f610300606461031c5f855af1610755573d5f5f3e3d5ffd5b50610982565b6102405163f1dc3cc961030052610200516103205261028051610340525f61036052803b15611961575f610300606461031c5f855af161079d573d5f5f3e3d5ffd5b50610982565b60086102a0511861091d5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101c051186107e057602061196d5f395f516101e05118156107e2565b5f5b6108e757602061196d5f395f516101c051186108185773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101e051181561081a565b5f5b6108ac576024610300527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e20610320527f57455448000000000000000000000000000000000000000000000000000000006103405261030050610300518061032001601f825f031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd610982565b61024051632e1a7d4d610300526102005161032052803b15611961575f610300602461031c5f855af16108e1573d5f5f3e3d5ffd5b50610982565b6102405163d0e30db061030052803b15611961575f610300600461031c61020051855af1610917573d5f5f3e3d5ffd5b50610982565b600d610300527f42616420737761702074797065000000000000000000000000000000000000006103205261030050610300518061032001601f825f031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101e051186109aa5747610200526109e8565b6101e0516370a082316103005230610320526020610300602461031c845afa6109d5573d5f5f3e3d5ffd5b60203d1061196157610300905051610200525b610200516102e0518082038281116119615790509050610a67576010610300527f5265636569766564206e6f7468696e67000000000000000000000000000000006103205261030050610300518061032001601f825f031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd5b60046102205118610a79576001610aab565b610220518060011b818160011c1861196157905060038101818110611961579050600a81116119615760051b60400151155b15610ab557610ac8565b6101e0516101c05260010181811861022b575b505061020051600181038181116119615790506102005261040435610200511015610b52576008610220527f536c6970706167650000000000000000000000000000000000000000000000006102405261022050610220518061024001601f825f031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101e05118610ba5576101a051610200515a5f61022052610220505f5f61022051610240858786f1905090509050610c18573d5f5f3e3d5ffd610c18565b6101e05163a9059cbb610220526101a0516102405261020051610260526020610220604461023c5f855af1610bdc573d5f5f3e3d5ffd5b3d610bf357803b1561196157600161028052610c0c565b60203d1061196157610220518060011c61196157610280525b61028090505115611961575b6101a051337f6324485a21bc5138ec352d4949d0adc75d8e1382a687e1aa1ce6863f40c9e463610160610220610160604060045afa5060806101646103803760806101e46104003760806102646104803760806102e4610500376080610364610580376103e435610600526102005161062052610420610220a3602061020060035f55f361195f565b63aad348a28118610cc05761042336111561196157336101a0526100bc565b6311e21386811861195f5761040436103417611961576004358060a01c611961576040526024358060a01c611961576060526044358060a01c611961576080526064358060a01c6119615760a0526084358060a01c6119615760c05260a4358060a01c6119615760e05260c4358060a01c611961576101005260e4358060a01c6119615761012052610104358060a01c6119615761014052610124358060a01c6119615761016052610144358060a01c61196157610180526103e4356101a0525f6005905b806101c0526101c0518060011b818160011c1861196157905060018101818110611961579050600a81116119615760051b604001516101e0526101c051600481116119615760071b610164018035610200526020810135610220526040810135610240526060810135610260525060016102405118610ec357600a6102605118610e6e576101e051635e0d443f610280526102005180607f1c611961576102a0526102205180607f1c611961576102c0526101a0516102e0526020610280606461029c845afa610e57573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b6101e05163556d6e9f61028052610200516102a052610220516102c0526101a0516102e0526020610280606461029c845afa610eac573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b60026102405118610f33576101e0516307211ef7610280526102005180607f1c611961576102a0526102205180607f1c611961576102c0526101a0516102e0526020610280606461029c845afa610f1c573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b6004610240511861111157600a610260511861100f57610100366102a0376008610280526101a05161020051610280518110156119615760051b6102a001526101e051633db06dd86103a0526040806103c052806103c0015f610280518083528060051b5f8260088111611961578015610fc757905b8060051b6102a001518160051b602088010152600101818118610fa9575b5050820160200191505090508101905060016103e0525060206103a06101646103bc845afa610ff8573d5f5f3e3d5ffd5b60203d10611961576103a09050516101a05261123e565b6014610260511861108c57604036610280376101a05161020051600181116119615760051b61028001526101e05163ed8e84f36102c052610280516102e0526102a0516103005260016103205260206102c060646102dc845afa611075573d5f5f3e3d5ffd5b60203d10611961576102c09050516101a05261123e565b601e610260511861123e57606036610280376101a05161020051600281116119615760051b61028001526101e051633883e1196102e05261028051610300526102a051610320526102c0516103405260016103605260206102e060846102fc845afa6110fa573d5f5f3e3d5ffd5b60203d10611961576102e09050516101a05261123e565b600661024051186111c957600a610260511861117c576101e05163cc2b27d7610280526101a0516102a0526102205180607f1c611961576102c0526020610280604461029c845afa611165573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b6101e051634fb08c5e610280526101a0516102a052610220516102c0526020610280604461029c845afa6111b2573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b600861024051186111d95761123e565b600d610280527f42616420737761702074797065000000000000000000000000000000000000006102a0526102805061028051806102a001601f825f031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b60046101c05118611250576001611282565b6101c0518060011b818160011c1861196157905060038101818110611961579050600a81116119615760051b60400151155b1561128c57611297565b600101818118610d85575b50506101a051600181038181116119615790506101c05260206101c0f361195f565b637b5e2c7b811861195f5761040436103417611961576004358060a01c611961576040526024358060a01c611961576060526044358060a01c611961576080526064358060a01c6119615760a0526084358060a01c6119615760c05260a4358060a01c6119615760e05260c4358060a01c611961576101005260e4358060a01c6119615761012052610104358060a01c6119615761014052610124358060a01c6119615761016052610144358060a01c61196157610180526103e4356101a0525f6005905b806101c0526101c05180600403600481116119615790506101e0526101e0518060011b818160011c1861196157905060018101818110611961579050600a81116119615760051b6040015161020052610200516113da57611943565b6101e051600481116119615760071b6101640180356102205260208101356102405260408101356102605260608101356102805250600161026051186114df57600a610280511861148a57610200516367df02ca6102a0526102205180607f1c611961576102c0526102405180607f1c611961576102e0526101a0516103005260206102a060646102bc845afa611473573d5f5f3e3d5ffd5b60203d10611961576102a09050516101a052611943565b610200516337ed3a7a6102a052610220516102c052610240516102e0526101a0516103005260206102a060646102bc845afa6114c8573d5f5f3e3d5ffd5b60203d10611961576102a09050516101a052611943565b6002610260511861163b576102205180607f1c611961576102a0526102405180607f1c611961576102c05260016102a051121561151c575f611525565b60016102c05112155b61157e5761020051630e71d1b96102e0526102a051610300526102c051610320526101a0516103405260206102e060646102fc845afa611567573d5f5f3e3d5ffd5b60203d10611961576102e09050516101a052611943565b610200516371511a5e610300526020610300600461031c845afa6115a4573d5f5f3e3d5ffd5b60203d1061196157610300518060a01c61196157610340526103409050516102e0526102e0516367df02ca610300526102a0516001810380600f0b8118611961579050610320526102c0516001810380600f0b8118611961579050610340526101a051610360526020610300606461031c845afa611624573d5f5f3e3d5ffd5b60203d10611961576103009050516101a052611943565b600461026051186116f357600a61028051186116a6576102005163cc2b27d76102a0526101a0516102c0526102205180607f1c611961576102e05260206102a060446102bc845afa61168f573d5f5f3e3d5ffd5b60203d10611961576102a09050516101a052611943565b61020051634fb08c5e6102a0526101a0516102c052610220516102e05260206102a060446102bc845afa6116dc573d5f5f3e3d5ffd5b60203d10611961576102a09050516101a052611943565b600661026051186118ce57600a61028051186117ce57610100366102c03760086102a0526101a051610240516102a0518110156119615760051b6102c0015261020051633db06dd86103c0526040806103e052806103e0015f6102a0518083528060051b5f826008811161196157801561178757905b8060051b6102c001518160051b602088010152600101818118611769575b505082016020019150509050810190505f610400525060206103c06101646103dc845afa6117b7573d5f5f3e3d5ffd5b60203d10611961576103c09050516101a052611943565b6014610280511861184a576040366102a0376101a05161024051600181116119615760051b6102a001526102005163ed8e84f36102e0526102a051610300526102c051610320525f6103405260206102e060646102fc845afa611833573d5f5f3e3d5ffd5b60203d10611961576102e09050516101a052611943565b601e6102805118611943576060366102a0376101a05161024051600281116119615760051b6102a0015261020051633883e119610300526102a051610320526102c051610340526102e051610360525f610380526020610300608461031c845afa6118b7573d5f5f3e3d5ffd5b60203d10611961576103009050516101a052611943565b600861026051186118de57611943565b600d6102a0527f42616420737761702074797065000000000000000000000000000000000000006102c0526102a0506102a051806102c001601f825f031636823750506308c379a061026052602061028052601f19601f6102a051011660440161027cfd5b60010181811861137e57505060206101a0f361195f5661195f565b5b005b5f80fd0018195e0ca112b98419196d81081820a16576797065728300030a0015000000000000000000000000fc00000000000000000000000000000000000002
Deployed Bytecode
0x5f3560e01c60026003821660011b61196501601e395f51565b6354fd4d50811861009657346119615760208060805260056040527f312e312e3000000000000000000000000000000000000000000000000000000060605260408160800181518152602082015160208201528051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506080f35b63fd44959c811861195f5761044336111561196157610424358060a01c611961576101a0525b6004358060a01c611961576040526024358060a01c611961576060526044358060a01c611961576080526064358060a01c6119615760a0526084358060a01c6119615760c05260a4358060a01c6119615760e05260c4358060a01c611961576101005260e4358060a01c6119615761012052610104358060a01c6119615761014052610124358060a01c6119615761016052610144358060a01c61196157610180525f546002146119615760025f556040516101c0525f6101e0526103e4356102005273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101c051186101ac5761020051341861196157610226565b34611961576101c0516323b872dd610220523361024052306102605261020051610280526020610220606461023c5f855af16101ea573d5f5f3e3d5ffd5b3d61020157803b156119615760016102a05261021a565b60203d1061196157610220518060011c611961576102a0525b6102a090505115611961575b5f6005905b8061022052610220518060011b818160011c1861196157905060018101818110611961579050600a81116119615760051b604001516102405261022051600181018181106119615790508060011b818160011c18611961579050600a81116119615760051b604001516101e05261022051600481116119615760071b6101640180356102605260208101356102805260408101356102a05260608101356102c05250476102e05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101e0511461032e576101e0516370a082316103005230610320526020610300602461031c845afa61031b573d5f5f3e3d5ffd5b60203d10611961576103009050516102e0525b60016101c0516020525f5260405f2080610240516020525f5260405f209050546103f5576101c05163095ea7b36103005261024051610320527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610340526020610300604461031c5f855af16103a6573d5f5f3e3d5ffd5b3d6103b6576001610360526103c7565b610300518060011c61196157610360525b6103609050511561196157600160016101c0516020525f5260405f2080610240516020525f5260405f209050555b60016102a051186104bb57600a6102c0511861046b5761024051633df02124610300526102605180607f1c61196157610320526102805180607f1c611961576103405261020051610360525f61038052803b15611961575f610300608461031c5f855af1610465573d5f5f3e3d5ffd5b50610982565b61024051635b41b908610300526102605161032052610280516103405261020051610360525f61038052803b15611961575f610300608461031c5f855af16104b5573d5f5f3e3d5ffd5b50610982565b60026102a05118610526576102405163a6417ed6610300526102605180607f1c61196157610320526102805180607f1c611961576103405261020051610360525f61038052803b15611961575f610300608461031c5f855af1610520573d5f5f3e3d5ffd5b50610982565b60046102a051186106f557600a6102c051186105fd5761010036610320376008610300526102005161026051610300518110156119615760051b61032001526102405163b72df5de610420526040806104405280610440015f610300518083528060051b5f82600881116119615780156105ba57905b8060051b61032001518160051b60208801015260010181811861059c575b505082016020019150509050810190505f6104605250602061042061016461043c5f855af16105eb573d5f5f3e3d5ffd5b60203d10611961576104205050610982565b60146102c0511861067557604036610300376102005161026051600181116119615760051b610300015261024051630b4c7e4d61034052610300516103605261032051610380525f6103a0526020610340606461035c5f855af1610663573d5f5f3e3d5ffd5b60203d10611961576103405050610982565b601e6102c0511861098257606036610300376102005161026051600281116119615760051b610300015261024051634515cef3610360526103005161038052610320516103a052610340516103c0525f6103e0526020610360608461037c5f855af16106e3573d5f5f3e3d5ffd5b60203d10611961576103605050610982565b60066102a051186107a357600a6102c0511861075b5761024051631a4d01d26103005261020051610320526102805180607f1c61196157610340525f61036052803b15611961575f610300606461031c5f855af1610755573d5f5f3e3d5ffd5b50610982565b6102405163f1dc3cc961030052610200516103205261028051610340525f61036052803b15611961575f610300606461031c5f855af161079d573d5f5f3e3d5ffd5b50610982565b60086102a0511861091d5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101c051186107e057602061196d5f395f516101e05118156107e2565b5f5b6108e757602061196d5f395f516101c051186108185773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101e051181561081a565b5f5b6108ac576024610300527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e20610320527f57455448000000000000000000000000000000000000000000000000000000006103405261030050610300518061032001601f825f031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd610982565b61024051632e1a7d4d610300526102005161032052803b15611961575f610300602461031c5f855af16108e1573d5f5f3e3d5ffd5b50610982565b6102405163d0e30db061030052803b15611961575f610300600461031c61020051855af1610917573d5f5f3e3d5ffd5b50610982565b600d610300527f42616420737761702074797065000000000000000000000000000000000000006103205261030050610300518061032001601f825f031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101e051186109aa5747610200526109e8565b6101e0516370a082316103005230610320526020610300602461031c845afa6109d5573d5f5f3e3d5ffd5b60203d1061196157610300905051610200525b610200516102e0518082038281116119615790509050610a67576010610300527f5265636569766564206e6f7468696e67000000000000000000000000000000006103205261030050610300518061032001601f825f031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd5b60046102205118610a79576001610aab565b610220518060011b818160011c1861196157905060038101818110611961579050600a81116119615760051b60400151155b15610ab557610ac8565b6101e0516101c05260010181811861022b575b505061020051600181038181116119615790506102005261040435610200511015610b52576008610220527f536c6970706167650000000000000000000000000000000000000000000000006102405261022050610220518061024001601f825f031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101e05118610ba5576101a051610200515a5f61022052610220505f5f61022051610240858786f1905090509050610c18573d5f5f3e3d5ffd610c18565b6101e05163a9059cbb610220526101a0516102405261020051610260526020610220604461023c5f855af1610bdc573d5f5f3e3d5ffd5b3d610bf357803b1561196157600161028052610c0c565b60203d1061196157610220518060011c61196157610280525b61028090505115611961575b6101a051337f6324485a21bc5138ec352d4949d0adc75d8e1382a687e1aa1ce6863f40c9e463610160610220610160604060045afa5060806101646103803760806101e46104003760806102646104803760806102e4610500376080610364610580376103e435610600526102005161062052610420610220a3602061020060035f55f361195f565b63aad348a28118610cc05761042336111561196157336101a0526100bc565b6311e21386811861195f5761040436103417611961576004358060a01c611961576040526024358060a01c611961576060526044358060a01c611961576080526064358060a01c6119615760a0526084358060a01c6119615760c05260a4358060a01c6119615760e05260c4358060a01c611961576101005260e4358060a01c6119615761012052610104358060a01c6119615761014052610124358060a01c6119615761016052610144358060a01c61196157610180526103e4356101a0525f6005905b806101c0526101c0518060011b818160011c1861196157905060018101818110611961579050600a81116119615760051b604001516101e0526101c051600481116119615760071b610164018035610200526020810135610220526040810135610240526060810135610260525060016102405118610ec357600a6102605118610e6e576101e051635e0d443f610280526102005180607f1c611961576102a0526102205180607f1c611961576102c0526101a0516102e0526020610280606461029c845afa610e57573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b6101e05163556d6e9f61028052610200516102a052610220516102c0526101a0516102e0526020610280606461029c845afa610eac573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b60026102405118610f33576101e0516307211ef7610280526102005180607f1c611961576102a0526102205180607f1c611961576102c0526101a0516102e0526020610280606461029c845afa610f1c573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b6004610240511861111157600a610260511861100f57610100366102a0376008610280526101a05161020051610280518110156119615760051b6102a001526101e051633db06dd86103a0526040806103c052806103c0015f610280518083528060051b5f8260088111611961578015610fc757905b8060051b6102a001518160051b602088010152600101818118610fa9575b5050820160200191505090508101905060016103e0525060206103a06101646103bc845afa610ff8573d5f5f3e3d5ffd5b60203d10611961576103a09050516101a05261123e565b6014610260511861108c57604036610280376101a05161020051600181116119615760051b61028001526101e05163ed8e84f36102c052610280516102e0526102a0516103005260016103205260206102c060646102dc845afa611075573d5f5f3e3d5ffd5b60203d10611961576102c09050516101a05261123e565b601e610260511861123e57606036610280376101a05161020051600281116119615760051b61028001526101e051633883e1196102e05261028051610300526102a051610320526102c0516103405260016103605260206102e060846102fc845afa6110fa573d5f5f3e3d5ffd5b60203d10611961576102e09050516101a05261123e565b600661024051186111c957600a610260511861117c576101e05163cc2b27d7610280526101a0516102a0526102205180607f1c611961576102c0526020610280604461029c845afa611165573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b6101e051634fb08c5e610280526101a0516102a052610220516102c0526020610280604461029c845afa6111b2573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b600861024051186111d95761123e565b600d610280527f42616420737761702074797065000000000000000000000000000000000000006102a0526102805061028051806102a001601f825f031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b60046101c05118611250576001611282565b6101c0518060011b818160011c1861196157905060038101818110611961579050600a81116119615760051b60400151155b1561128c57611297565b600101818118610d85575b50506101a051600181038181116119615790506101c05260206101c0f361195f565b637b5e2c7b811861195f5761040436103417611961576004358060a01c611961576040526024358060a01c611961576060526044358060a01c611961576080526064358060a01c6119615760a0526084358060a01c6119615760c05260a4358060a01c6119615760e05260c4358060a01c611961576101005260e4358060a01c6119615761012052610104358060a01c6119615761014052610124358060a01c6119615761016052610144358060a01c61196157610180526103e4356101a0525f6005905b806101c0526101c05180600403600481116119615790506101e0526101e0518060011b818160011c1861196157905060018101818110611961579050600a81116119615760051b6040015161020052610200516113da57611943565b6101e051600481116119615760071b6101640180356102205260208101356102405260408101356102605260608101356102805250600161026051186114df57600a610280511861148a57610200516367df02ca6102a0526102205180607f1c611961576102c0526102405180607f1c611961576102e0526101a0516103005260206102a060646102bc845afa611473573d5f5f3e3d5ffd5b60203d10611961576102a09050516101a052611943565b610200516337ed3a7a6102a052610220516102c052610240516102e0526101a0516103005260206102a060646102bc845afa6114c8573d5f5f3e3d5ffd5b60203d10611961576102a09050516101a052611943565b6002610260511861163b576102205180607f1c611961576102a0526102405180607f1c611961576102c05260016102a051121561151c575f611525565b60016102c05112155b61157e5761020051630e71d1b96102e0526102a051610300526102c051610320526101a0516103405260206102e060646102fc845afa611567573d5f5f3e3d5ffd5b60203d10611961576102e09050516101a052611943565b610200516371511a5e610300526020610300600461031c845afa6115a4573d5f5f3e3d5ffd5b60203d1061196157610300518060a01c61196157610340526103409050516102e0526102e0516367df02ca610300526102a0516001810380600f0b8118611961579050610320526102c0516001810380600f0b8118611961579050610340526101a051610360526020610300606461031c845afa611624573d5f5f3e3d5ffd5b60203d10611961576103009050516101a052611943565b600461026051186116f357600a61028051186116a6576102005163cc2b27d76102a0526101a0516102c0526102205180607f1c611961576102e05260206102a060446102bc845afa61168f573d5f5f3e3d5ffd5b60203d10611961576102a09050516101a052611943565b61020051634fb08c5e6102a0526101a0516102c052610220516102e05260206102a060446102bc845afa6116dc573d5f5f3e3d5ffd5b60203d10611961576102a09050516101a052611943565b600661026051186118ce57600a61028051186117ce57610100366102c03760086102a0526101a051610240516102a0518110156119615760051b6102c0015261020051633db06dd86103c0526040806103e052806103e0015f6102a0518083528060051b5f826008811161196157801561178757905b8060051b6102c001518160051b602088010152600101818118611769575b505082016020019150509050810190505f610400525060206103c06101646103dc845afa6117b7573d5f5f3e3d5ffd5b60203d10611961576103c09050516101a052611943565b6014610280511861184a576040366102a0376101a05161024051600181116119615760051b6102a001526102005163ed8e84f36102e0526102a051610300526102c051610320525f6103405260206102e060646102fc845afa611833573d5f5f3e3d5ffd5b60203d10611961576102e09050516101a052611943565b601e6102805118611943576060366102a0376101a05161024051600281116119615760051b6102a0015261020051633883e119610300526102a051610320526102c051610340526102e051610360525f610380526020610300608461031c845afa6118b7573d5f5f3e3d5ffd5b60203d10611961576103009050516101a052611943565b600861026051186118de57611943565b600d6102a0527f42616420737761702074797065000000000000000000000000000000000000006102c0526102a0506102a051806102c001601f825f031636823750506308c379a061026052602061028052601f19601f6102a051011660440161027cfd5b60010181811861137e57505060206101a0f361195f5661195f565b5b005b5f80fd0018195e0ca112b9000000000000000000000000fc00000000000000000000000000000000000002
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.