Contract 0xb17b674d9c5cb2e441f8e196a2f048a81355d031 2

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe12f25920fecefffadc22286de77eacf5e3ee6072005fb4971f908308f988d5fDeploy_metapool551441022023-01-24 13:48:103 days 14 hrs ago0xe191468e32443fa79e8ae8164c0c0b319ea704a4 IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.0001444
0x0b76e93b95b5b375387a415ff6ff9aa7fad7c91720a5e568dfe82398c9920944Deploy_metapool550437932023-01-24 1:53:034 days 2 hrs ago0x5f153a7d31b315167fe41da83acba1ca7f86e91d IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00014513
0x62281343f2afe1611282e5ad7a001081a0f59f48894a92d5adce15fd61d64b1dDeploy_metapool550435372023-01-24 1:50:414 days 2 hrs ago0x4dd06d3f05d573db027459e8dc942e37249d71a8 IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00015226
0x51d38a56bea8bb324eef9331cd80999418215628790f1f29b386b7c103a5af67Deploy_plain_poo...526025852023-01-12 17:24:5815 days 10 hrs ago0x7ea2bfbadd5bc500166482f7949e4d7f44f9d4ef IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00016647
0xf156fccb3c04992ef7d25d1d82c5c1572b831fbf0096ad31dcbe58d33a1391dfDeploy_plain_poo...509413462023-01-05 4:12:5622 days 23 hrs ago0x4a737d80648c85b39f563e3117d8de2f2b14dfa4 IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00013875
0x1b915e7d041d3fc0a9b035b0a1b6980408da4929c8026801f5f083cece11f3a6Deploy_metapool459085122022-12-13 19:40:3645 days 8 hrs ago0x5ef31854bd27c308305e87cbb09af526203c2ba4 IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00016541
0xe17befea31a998603a97b0a71280ee814323dc4f7d5994e0712e10c0304f3722Deploy_metapool459083892022-12-13 19:39:5845 days 8 hrs ago0x5ef31854bd27c308305e87cbb09af526203c2ba4 IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00016949
0x420afda7fc2a2a9dffb11fa747cfbd951f62c17e0c9517b9ba3d385483b12d01Deploy_metapool453947292022-12-11 21:48:4547 days 6 hrs ago0x8f613ba9aa96a57b090f423ebc614754e363b191 IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00038786
0xb151cf28fe7a1ea3311a7966501635e472cf1fbc62233d780ffe60f01ca4e961Deploy_metapool444615182022-12-07 22:59:4951 days 5 hrs ago0x86a10712ae34236062296e65f8fba858ddc88c78 IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00011981
0x7e021dc1212cd036276072f4ab0e3e55d4f8f0bf970e7d02a667ccd016a73529Deploy_plain_poo...444444792022-12-07 21:17:3651 days 6 hrs ago0x42875ae5766dfd4d70772a3a956842e4b708d59a IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00012786
0xf39af93c105889cfb48846c8a6185945a865abd44c59285423c0265291460eafDeploy_metapool435044692022-12-04 10:23:0554 days 17 hrs ago0x8a63cbcfb7cef9e5244eba935a87570189702c66 IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00011647
0x15d1dffd3ae4fa3101dcda0ba88f9a899ad766e849355f367bb1e2ec5c8365caDeploy_plain_poo...422432472022-11-29 19:28:4759 days 8 hrs ago0xb1fb86e3651f68aee7b7d8bf969f301771f4fc66 IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00124704
0xfcd498b1ac76bad9a5adeb355abb669c81ab80f86d5b54055055f323f3d37bceDeploy_plain_poo...421609942022-11-29 13:11:2759 days 14 hrs ago0xb1fb86e3651f68aee7b7d8bf969f301771f4fc66 IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00114564
0xd3fa48873369879a2f7bb511d73a148c5ddb64c8add35e7b80bff9ec5c6f27e5Deploy_metapool419780842022-11-28 20:51:5560 days 7 hrs ago0x85fa7d4d4d18c207bceb6042b382df03a6866009 IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00013332
0xe293c6972e93190a064a03c3649edb691d1db70d5bddf727eaa42197fe9e5f97Deploy_metapool419430542022-11-28 17:58:4260 days 10 hrs ago0x85fa7d4d4d18c207bceb6042b382df03a6866009 IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00015921
0x588b08c5850210d50f4eeac3a50b305650f6268a493b37be4dac6747a8732cdbDeploy_metapool404549752022-11-23 5:47:3965 days 22 hrs agoChromium Dollar: Deployer IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00012552
0x2381426b6a3c64f3555f07dfa0c95410b263df81f9d0fdc026c59ecc5f9a6712Deploy_metapool404544902022-11-23 5:45:0765 days 22 hrs ago0x2c3fa35aaae2839a630c5cc4f5001267b0a7d385 IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00012462
0xdea8bb3614ebf47c452419a1a581625f4c7a62baf8ef8bbdc9a7cee9f8f8d62dDeploy_metapool404482102022-11-23 5:09:4065 days 23 hrs ago0xdfa524ef073367d47f64e86d168a3cbba4803460 IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00012624
0x2447d2b6c87f2d2a1328f185175f5a87e07bf2b13a16734a65b54f628b8d3d64Deploy_metapool403619332022-11-22 21:13:5066 days 6 hrs ago0x46927ebcfb890b9dc6d0b81f9b2159f195f7dc9d IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00014512
0xd4e0e1159967b288246674c771122a21021e2bc0d1cca0829effafe5d8e6a1f1Deploy_metapool403612432022-11-22 21:10:4666 days 7 hrs ago0x46927ebcfb890b9dc6d0b81f9b2159f195f7dc9d IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00015412
0x6f59491c2854659c3077cd4e7166d10ce003acf9828030589010f580f8a2151eDeploy_metapool403301302022-11-22 18:48:5766 days 9 hrs ago0x46927ebcfb890b9dc6d0b81f9b2159f195f7dc9d IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.0001759
0x65912f506cd4a7df234fb096c60b15cf8da94f83115d2b943c4cc65f1eb58c49Deploy_metapool400787272022-11-21 22:52:2867 days 5 hrs ago0x23cd47fc74746622a677f599b63a260077651b3a IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00013053
0xa24d16a0d2b460cfae6e95ef59b39e5bcf554a6c4c80500e3690211decbb9ab2Deploy_metapool400780462022-11-21 22:48:4167 days 5 hrs ago0x23cd47fc74746622a677f599b63a260077651b3a IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00013532
0x88564605e8aa0f4f79e1f536a0418da8e1550118365cb137dbdf5cdecd2b4968Deploy_metapool395992812022-11-20 10:25:2468 days 17 hrs ago0x9c13258774d35cc349016fed49d72b1e993cad8f IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.00003266
0x606317ec6a27cd816f9d9b6cec89eaabbda957f858559aa75aa33fd07b635343Deploy_metapool395991102022-11-20 10:24:4068 days 17 hrs ago0x9c13258774d35cc349016fed49d72b1e993cad8f IN  0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH0.000033
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x3df8a53f7f192347d4a3e88010cb6c55bdaf0713c09e63f4af23ae817447407e558952922023-01-27 15:25:2712 hrs 45 mins ago 0x6af24637b183b3266c732e9879614a1f42b36b5e 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x46a78e40feee8f6f53afc086a74943cac310ae617aa4a20533eeb5467ef7c85a558880422023-01-27 14:52:4713 hrs 18 mins ago 0x6af24637b183b3266c732e9879614a1f42b36b5e 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x340954649b4cecbd72d3df8eb24fd5ca74e6ec9d29ba3178850ec62170e7a6d2558853622023-01-27 14:40:2513 hrs 30 mins ago 0x6af24637b183b3266c732e9879614a1f42b36b5e 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x5776446f1273bff6465586d4a736f46fcf4462205a426e7befec5e710183d1c7558773122023-01-27 14:01:3614 hrs 9 mins ago 0x6af24637b183b3266c732e9879614a1f42b36b5e 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0xe7bef334c6bce74835d7252fcf1d8f812bdd8017ebf2631469710843eee6e06c556632922023-01-26 18:10:211 day 10 hrs ago 0x6af24637b183b3266c732e9879614a1f42b36b5e 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0xd2eff6334fbec62badb0b07884c1b7d3b348b56a8370665c990926baf4e8ec0a556632922023-01-26 18:10:211 day 10 hrs ago 0x6af24637b183b3266c732e9879614a1f42b36b5e 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x4a69af57cf28bfb1e4eef20c5f049403e4f2a5c97425e1ac614290dea62f6535555006202023-01-26 2:04:042 days 2 hrs ago 0x3ccd107d72bc855d591df92d3b7c7e4e75f0957c 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0xc098e286e6e8d63b3ea97fbbb94e7b456341281ffa5ca4624d22e19b66c15d3a554974042023-01-26 1:49:242 days 2 hrs ago 0x3ccd107d72bc855d591df92d3b7c7e4e75f0957c 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0xf799762b50537008a218661bb21703cd38b0569309bb46c0be7b730dd78c98fe554838802023-01-26 0:35:232 days 3 hrs ago 0x3ccd107d72bc855d591df92d3b7c7e4e75f0957c 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0xc2b71e96759197ec576fb060ff05aeff80b1a72a009e1994a6b98cb53acfe13a554789902023-01-26 0:04:372 days 4 hrs ago 0x3ccd107d72bc855d591df92d3b7c7e4e75f0957c 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x21a311a3b5fc33d215cd15a578ab4fa7d41a0950d76f0c1a7c618d58cb72d8ea554701942023-01-25 23:09:402 days 5 hrs ago 0x3ccd107d72bc855d591df92d3b7c7e4e75f0957c 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x1c156955a620e16263b3388c2eb09f860644baf85b5a14854fbfc22e4c830cc0554659452023-01-25 22:48:152 days 5 hrs ago 0x6af24637b183b3266c732e9879614a1f42b36b5e 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0xc2c1cd29b87435266ecf9e8ed2bfd6e04b210af0385f1389a5272cfc82a6f1df554614532023-01-25 22:21:572 days 5 hrs ago 0x3ccd107d72bc855d591df92d3b7c7e4e75f0957c 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x7277528fe44ded6ab9bba6bc7df35a4fc2591c8f124cee438de37ee365ab732a554580102023-01-25 22:05:562 days 6 hrs ago 0x6af24637b183b3266c732e9879614a1f42b36b5e 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x020007d43a294a892ea4fbb95fbad970620fd09551f7bd76b146bf3a67e69042554175952023-01-25 18:12:292 days 9 hrs ago 0x3ccd107d72bc855d591df92d3b7c7e4e75f0957c 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x4bb21d4df9f5e24866e68496779628fdcfedcd8c6331ae0f603566571b913319553693932023-01-25 13:36:422 days 14 hrs ago 0x7c01b05dde0fbb38e2902a9fc3447beb877d9455 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x4bb21d4df9f5e24866e68496779628fdcfedcd8c6331ae0f603566571b913319553693932023-01-25 13:36:422 days 14 hrs ago 0x1da20ac34187b2d9c74f729b85acb225d3341b25 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x4bb21d4df9f5e24866e68496779628fdcfedcd8c6331ae0f603566571b913319553693932023-01-25 13:36:422 days 14 hrs ago 0x15a1c069fcf6f79a3d5bb5d4a8ba004fbf4fabac 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x4bb21d4df9f5e24866e68496779628fdcfedcd8c6331ae0f603566571b913319553693932023-01-25 13:36:422 days 14 hrs ago 0x305fc0a3eed959a3bbdc54300a1a140925b4b058 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x4bb21d4df9f5e24866e68496779628fdcfedcd8c6331ae0f603566571b913319553693932023-01-25 13:36:422 days 14 hrs ago 0xd39016475200ab8957e9c772c949ef54bda69111 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x9cf2314e39e1896957697af2355fd85b0d838e2f636807ed3f0fe2ef1384a2ef553693882023-01-25 13:36:402 days 14 hrs ago 0x5aa2a79293424bf39171d704a364fde3b641db25 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x9cf2314e39e1896957697af2355fd85b0d838e2f636807ed3f0fe2ef1384a2ef553693882023-01-25 13:36:402 days 14 hrs ago 0xe413f1611781f66b25af566276ee562d050e5fc4 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x9cf2314e39e1896957697af2355fd85b0d838e2f636807ed3f0fe2ef1384a2ef553693882023-01-25 13:36:402 days 14 hrs ago 0xe5042bbac35056f3f95bf0a79d9eb64dc0dafdb8 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x9cf2314e39e1896957697af2355fd85b0d838e2f636807ed3f0fe2ef1384a2ef553693882023-01-25 13:36:402 days 14 hrs ago 0xc9b8a3fdecb9d5b218d02555a8baf332e5b740d5 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
0x9cf2314e39e1896957697af2355fd85b0d838e2f636807ed3f0fe2ef1384a2ef553693882023-01-25 13:36:402 days 14 hrs ago 0x1cdaef9e69ada311bde095fd3be6752b6a626bc8 0xb17b674d9c5cb2e441f8e196a2f048a81355d0310 ETH
[ Download CSV Export 
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.

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.2.16

Optimization Enabled:
N/A

Other Settings:
, MIT license

Contract Source Code (Vyper language format)

# @version 0.2.16
"""
@title Curve Sidechain/L2 Factory
@license MIT
@author Curve.Fi
@notice Permissionless pool deployer and registry
"""

struct PoolArray:
    base_pool: address
    implementation: address
    liquidity_gauge: address
    coins: address[MAX_PLAIN_COINS]
    decimals: uint256[MAX_PLAIN_COINS]
    n_coins: uint256
    asset_type: uint256

struct BasePoolArray:
    implementations: address[10]
    lp_token: address
    fee_receiver: address
    coins: address[MAX_COINS]
    decimals: uint256
    n_coins: uint256
    asset_type: uint256


interface AddressProvider:
    def admin() -> address: view
    def get_registry() -> address: view

interface Registry:
    def get_lp_token(pool: address) -> address: view
    def get_n_coins(pool: address) -> uint256: view
    def get_coins(pool: address) -> address[MAX_COINS]: view
    def get_pool_from_lp_token(lp_token: address) -> address: view

interface ERC20:
    def balanceOf(_addr: address) -> uint256: view
    def decimals() -> uint256: view
    def totalSupply() -> uint256: view
    def approve(_spender: address, _amount: uint256): nonpayable

interface CurvePlainPool:
    def initialize(
        _name: String[32],
        _symbol: String[10],
        _coins: address[4],
        _rate_multipliers: uint256[4],
        _A: uint256,
        _fee: uint256,
    ): nonpayable

interface CurvePool:
    def A() -> uint256: view
    def fee() -> uint256: view
    def admin_fee() -> uint256: view
    def balances(i: uint256) -> uint256: view
    def admin_balances(i: uint256) -> uint256: view
    def get_virtual_price() -> uint256: view
    def initialize(
        _name: String[32],
        _symbol: String[10],
        _coin: address,
        _rate_multiplier: uint256,
        _A: uint256,
        _fee: uint256,
    ): nonpayable
    def exchange(
        i: int128,
        j: int128,
        dx: uint256,
        min_dy: uint256,
        _receiver: address,
    ) -> uint256: nonpayable

interface CurveFactoryMetapool:
    def coins(i :uint256) -> address: view
    def decimals() -> uint256: view

interface OldFactory:
    def get_coins(_pool: address) -> address[2]: view

interface LiquidityGauge:
    def initialize(_lp_token: address): nonpayable


event BasePoolAdded:
    base_pool: address

event PlainPoolDeployed:
    coins: address[MAX_PLAIN_COINS]
    A: uint256
    fee: uint256
    deployer: address

event MetaPoolDeployed:
    coin: address
    base_pool: address
    A: uint256
    fee: uint256
    deployer: address

event LiquidityGaugeDeployed:
    pool: address
    gauge: address


MAX_COINS: constant(int128) = 8
MAX_PLAIN_COINS: constant(int128) = 4  # max coins in a plain pool
ADDRESS_PROVIDER: constant(address) = 0x0000000022D53366457F9d5E68Ec105046FC4383

admin: public(address)
future_admin: public(address)
manager: public(address)

pool_list: public(address[4294967296])   # master list of pools
pool_count: public(uint256)              # actual length of pool_list
pool_data: HashMap[address, PoolArray]

base_pool_list: public(address[4294967296])   # master list of pools
base_pool_count: public(uint256)         # actual length of pool_list
base_pool_data: HashMap[address, BasePoolArray]

# number of coins -> implementation addresses
# for "plain pools" (as opposed to metapools), implementation contracts
# are organized according to the number of coins in the pool
plain_implementations: public(HashMap[uint256, address[10]])

# fee receiver for plain pools
fee_receiver: public(address)

gauge_implementation: public(address)

# mapping of coins -> pools for trading
# a mapping key is generated for each pair of addresses via
# `bitwise_xor(convert(a, uint256), convert(b, uint256))`
markets: HashMap[uint256, address[4294967296]]
market_counts: HashMap[uint256, uint256]


@external
def __init__(_fee_receiver: address):
    self.admin = msg.sender
    self.manager = msg.sender
    self.fee_receiver = _fee_receiver


# <--- Factory Getters --->

@view
@external
def metapool_implementations(_base_pool: address) -> address[10]:
    """
    @notice Get a list of implementation contracts for metapools targetting the given base pool
    @dev A base pool is the pool for the LP token contained within the metapool
    @param _base_pool Address of the base pool
    @return List of implementation contract addresses
    """
    return self.base_pool_data[_base_pool].implementations


@view
@external
def find_pool_for_coins(_from: address, _to: address, i: uint256 = 0) -> address:
    """
    @notice Find an available pool for exchanging two coins
    @param _from Address of coin to be sent
    @param _to Address of coin to be received
    @param i Index value. When multiple pools are available
            this value is used to return the n'th address.
    @return Pool address
    """
    key: uint256 = bitwise_xor(convert(_from, uint256), convert(_to, uint256))
    return self.markets[key][i]


# <--- Pool Getters --->

@view
@external
def get_base_pool(_pool: address) -> address:
    """
    @notice Get the base pool for a given factory metapool
    @param _pool Metapool address
    @return Address of base pool
    """
    return self.pool_data[_pool].base_pool


@view
@external
def get_n_coins(_pool: address) -> (uint256):
    """
    @notice Get the number of coins in a pool
    @param _pool Pool address
    @return Number of coins
    """
    return self.pool_data[_pool].n_coins


@view
@external
def get_meta_n_coins(_pool: address) -> (uint256, uint256):
    """
    @notice Get the number of coins in a metapool
    @param _pool Pool address
    @return Number of wrapped coins, number of underlying coins
    """
    base_pool: address = self.pool_data[_pool].base_pool
    return 2, self.base_pool_data[base_pool].n_coins + 1


@view
@external
def get_coins(_pool: address) -> address[MAX_PLAIN_COINS]:
    """
    @notice Get the coins within a pool
    @param _pool Pool address
    @return List of coin addresses
    """
    return self.pool_data[_pool].coins


@view
@external
def get_underlying_coins(_pool: address) -> address[MAX_COINS]:
    """
    @notice Get the underlying coins within a pool
    @dev Reverts if a pool does not exist or is not a metapool
    @param _pool Pool address
    @return List of coin addresses
    """
    coins: address[MAX_COINS] = empty(address[MAX_COINS])
    base_pool: address = self.pool_data[_pool].base_pool
    assert base_pool != ZERO_ADDRESS  # dev: pool is not metapool
    coins[0] = self.pool_data[_pool].coins[0]
    for i in range(1, MAX_COINS):
        coins[i] = self.base_pool_data[base_pool].coins[i - 1]
        if coins[i] == ZERO_ADDRESS:
            break

    return coins


@view
@external
def get_decimals(_pool: address) -> uint256[MAX_PLAIN_COINS]:
    """
    @notice Get decimal places for each coin within a pool
    @param _pool Pool address
    @return uint256 list of decimals
    """
    if self.pool_data[_pool].base_pool != ZERO_ADDRESS:
        decimals: uint256[MAX_PLAIN_COINS] = empty(uint256[MAX_PLAIN_COINS])
        decimals = self.pool_data[_pool].decimals
        decimals[1] = 18
        return decimals
    return self.pool_data[_pool].decimals


@view
@external
def get_underlying_decimals(_pool: address) -> uint256[MAX_COINS]:
    """
    @notice Get decimal places for each underlying coin within a pool
    @param _pool Pool address
    @return uint256 list of decimals
    """
    # decimals are tightly packed as a series of uint8 within a little-endian bytes32
    # the packed value is stored as uint256 to simplify unpacking via shift and modulo
    pool_decimals: uint256[MAX_PLAIN_COINS] = empty(uint256[MAX_PLAIN_COINS])
    pool_decimals = self.pool_data[_pool].decimals
    decimals: uint256[MAX_COINS] = empty(uint256[MAX_COINS])
    decimals[0] = pool_decimals[0]
    base_pool: address = self.pool_data[_pool].base_pool
    packed_decimals: uint256 = self.base_pool_data[base_pool].decimals
    for i in range(MAX_COINS):
        unpacked: uint256 = shift(packed_decimals, -8 * i) % 256
        if unpacked == 0:
            break
        decimals[i+1] = unpacked

    return decimals


@view
@external
def get_metapool_rates(_pool: address) -> uint256[2]:
    """
    @notice Get rates for coins within a metapool
    @param _pool Pool address
    @return Rates for each coin, precision normalized to 10**18
    """
    rates: uint256[2] = [10**18, 0]
    rates[1] = CurvePool(self.pool_data[_pool].base_pool).get_virtual_price()
    return rates


@view
@external
def get_balances(_pool: address) -> uint256[MAX_PLAIN_COINS]:
    """
    @notice Get balances for each coin within a pool
    @dev For pools using lending, these are the wrapped coin balances
    @param _pool Pool address
    @return uint256 list of balances
    """
    if self.pool_data[_pool].base_pool != ZERO_ADDRESS:
        return [CurvePool(_pool).balances(0), CurvePool(_pool).balances(1), 0, 0]
    n_coins: uint256 = self.pool_data[_pool].n_coins
    balances: uint256[MAX_PLAIN_COINS] = empty(uint256[MAX_PLAIN_COINS])
    for i in range(MAX_PLAIN_COINS):
        if i < n_coins:
            balances[i] = CurvePool(_pool).balances(i)
        else:
            balances[i] = 0
    return balances


@view
@external
def get_underlying_balances(_pool: address) -> uint256[MAX_COINS]:
    """
    @notice Get balances for each underlying coin within a metapool
    @param _pool Metapool address
    @return uint256 list of underlying balances
    """

    underlying_balances: uint256[MAX_COINS] = empty(uint256[MAX_COINS])
    underlying_balances[0] = CurvePool(_pool).balances(0)

    base_total_supply: uint256 = ERC20(self.pool_data[_pool].coins[1]).totalSupply()
    if base_total_supply > 0:
        underlying_pct: uint256 = CurvePool(_pool).balances(1) * 10**36 / base_total_supply
        base_pool: address = self.pool_data[_pool].base_pool
        assert base_pool != ZERO_ADDRESS  # dev: pool is not a metapool
        n_coins: uint256 = self.base_pool_data[base_pool].n_coins
        for i in range(MAX_COINS):
            if i == n_coins:
                break
            underlying_balances[i + 1] = CurvePool(base_pool).balances(i) * underlying_pct / 10**36

    return underlying_balances


@view
@external
def get_A(_pool: address) -> uint256:
    """
    @notice Get the amplfication co-efficient for a pool
    @param _pool Pool address
    @return uint256 A
    """
    return CurvePool(_pool).A()


@view
@external
def get_fees(_pool: address) -> (uint256, uint256):
    """
    @notice Get the fees for a pool
    @dev Fees are expressed as integers
    @return Pool fee and admin fee as uint256 with 1e10 precision
    """
    return CurvePool(_pool).fee(), CurvePool(_pool).admin_fee()


@view
@external
def get_admin_balances(_pool: address) -> uint256[MAX_PLAIN_COINS]:
    """
    @notice Get the current admin balances (uncollected fees) for a pool
    @param _pool Pool address
    @return List of uint256 admin balances
    """
    n_coins: uint256 = self.pool_data[_pool].n_coins
    admin_balances: uint256[MAX_PLAIN_COINS] = empty(uint256[MAX_PLAIN_COINS])
    for i in range(MAX_PLAIN_COINS):
        if i == n_coins:
            break
        admin_balances[i] = CurvePool(_pool).admin_balances(i)
    return admin_balances


@view
@external
def get_coin_indices(
    _pool: address,
    _from: address,
    _to: address
) -> (int128, int128, bool):
    """
    @notice Convert coin addresses to indices for use with pool methods
    @param _pool Pool address
    @param _from Coin address to be used as `i` within a pool
    @param _to Coin address to be used as `j` within a pool
    @return int128 `i`, int128 `j`, boolean indicating if `i` and `j` are underlying coins
    """
    coin: address = self.pool_data[_pool].coins[0]
    base_pool: address = self.pool_data[_pool].base_pool
    if coin in [_from, _to] and base_pool != ZERO_ADDRESS:
        base_lp_token: address = self.pool_data[_pool].coins[1]
        if base_lp_token in [_from, _to]:
            # True and False convert to 1 and 0 - a bit of voodoo that
            # works because we only ever have 2 non-underlying coins if base pool is ZERO_ADDRESS
            return convert(_to == coin, int128), convert(_from == coin, int128), False

    found_market: bool = False
    i: int128 = 0
    j: int128 = 0
    for x in range(MAX_COINS):
        if base_pool == ZERO_ADDRESS:
            if x >= MAX_PLAIN_COINS:
                raise "No available market"
            if x != 0:
                coin = self.pool_data[_pool].coins[x]
        else:
            if x != 0:
                coin = self.base_pool_data[base_pool].coins[x-1]
        if coin == ZERO_ADDRESS:
            raise "No available market"
        if coin == _from:
            i = x
        elif coin == _to:
            j = x
        else:
            continue
        if found_market:
            # the second time we find a match, break out of the loop
            break
        # the first time we find a match, set `found_market` to True
        found_market = True

    return i, j, base_pool != ZERO_ADDRESS


@view
@external
def get_gauge(_pool: address) -> address:
    """
    @notice Get the address of the liquidity gauge contract for a factory pool
    @dev Returns `ZERO_ADDRESS` if a gauge has not been deployed
    @param _pool Pool address
    @return Implementation contract address
    """
    return self.pool_data[_pool].liquidity_gauge


@view
@external
def get_implementation_address(_pool: address) -> address:
    """
    @notice Get the address of the implementation contract used for a factory pool
    @param _pool Pool address
    @return Implementation contract address
    """
    return self.pool_data[_pool].implementation


@view
@external
def is_meta(_pool: address) -> bool:
    """
    @notice Verify `_pool` is a metapool
    @param _pool Pool address
    @return True if `_pool` is a metapool
    """
    return self.pool_data[_pool].base_pool != ZERO_ADDRESS


@view
@external
def get_pool_asset_type(_pool: address) -> uint256:
    """
    @notice Query the asset type of `_pool`
    @dev 0 = USD, 1 = ETH, 2 = BTC, 3 = Other
    @param _pool Pool Address
    @return Integer indicating the pool asset type
    """
    base_pool: address = self.pool_data[_pool].base_pool
    if base_pool == ZERO_ADDRESS:
        return self.pool_data[_pool].asset_type
    else:
        return self.base_pool_data[base_pool].asset_type


@view
@external
def get_fee_receiver(_pool: address) -> address:
    base_pool: address = self.pool_data[_pool].base_pool
    if base_pool == ZERO_ADDRESS:
        return self.fee_receiver
    else:
        return self.base_pool_data[base_pool].fee_receiver


# <--- Pool Deployers --->

@external
def deploy_plain_pool(
    _name: String[32],
    _symbol: String[10],
    _coins: address[MAX_PLAIN_COINS],
    _A: uint256,
    _fee: uint256,
    _asset_type: uint256 = 0,
    _implementation_idx: uint256 = 0,
) -> address:
    """
    @notice Deploy a new plain pool
    @param _name Name of the new plain pool
    @param _symbol Symbol for the new plain pool - will be
                   concatenated with factory symbol
    @param _coins List of addresses of the coins being used in the pool.
    @param _A Amplification co-efficient - a lower value here means
              less tolerance for imbalance within the pool's assets.
              Suggested values include:
               * Uncollateralized algorithmic stablecoins: 5-10
               * Non-redeemable, collateralized assets: 100
               * Redeemable assets: 200-400
    @param _fee Trade fee, given as an integer with 1e10 precision. The
                minimum fee is 0.04% (4000000), the maximum is 1% (100000000).
                50% of the fee is distributed to veCRV holders.
    @param _asset_type Asset type for pool, as an integer
                       0 = USD, 1 = ETH, 2 = BTC, 3 = Other
    @param _implementation_idx Index of the implementation to use. All possible
                implementations for a pool of N_COINS can be publicly accessed
                via `plain_implementations(N_COINS)`
    @return Address of the deployed pool
    """
    # fee must be between 0.04% and 1%
    assert _fee >= 4000000 and _fee <= 100000000, "Invalid fee"

    n_coins: uint256 = MAX_PLAIN_COINS
    rate_multipliers: uint256[MAX_PLAIN_COINS] = empty(uint256[MAX_PLAIN_COINS])
    decimals: uint256[MAX_PLAIN_COINS] = empty(uint256[MAX_PLAIN_COINS])

    for i in range(MAX_PLAIN_COINS):
        coin: address = _coins[i]
        if coin == ZERO_ADDRESS:
            assert i > 1, "Insufficient coins"
            n_coins = i
            break

        if _coins[i] == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE:
            assert i == 0, "ETH must be first coin"
            decimals[0] = 18
        else:
            decimals[i] = ERC20(coin).decimals()
            assert decimals[i] < 19, "Max 18 decimals for coins"

        rate_multipliers[i] = 10 ** (36 - decimals[i])

        for x in range(i, i+MAX_PLAIN_COINS):
            if x+1 == MAX_PLAIN_COINS:
                break
            if _coins[x+1] == ZERO_ADDRESS:
                break
            assert coin != _coins[x+1], "Duplicate coins"

    implementation: address = self.plain_implementations[n_coins][_implementation_idx]
    assert implementation != ZERO_ADDRESS, "Invalid implementation index"
    pool: address = create_forwarder_to(implementation)
    CurvePlainPool(pool).initialize(_name, _symbol, _coins, rate_multipliers, _A, _fee)

    length: uint256 = self.pool_count
    self.pool_list[length] = pool
    self.pool_count = length + 1
    self.pool_data[pool].decimals = decimals
    self.pool_data[pool].n_coins = n_coins
    self.pool_data[pool].base_pool = ZERO_ADDRESS
    self.pool_data[pool].implementation = implementation
    if _asset_type != 0:
        self.pool_data[pool].asset_type = _asset_type

    for i in range(MAX_PLAIN_COINS):
        coin: address = _coins[i]
        if coin == ZERO_ADDRESS:
            break
        self.pool_data[pool].coins[i] = coin
        raw_call(
            coin,
            concat(
                method_id("approve(address,uint256)"),
                convert(pool, bytes32),
                convert(MAX_UINT256, bytes32)
            )
        )
        for j in range(MAX_PLAIN_COINS):
            if i < j:
                swappable_coin: address = _coins[j]
                key: uint256 = bitwise_xor(convert(coin, uint256), convert(swappable_coin, uint256))
                length = self.market_counts[key]
                self.markets[key][length] = pool
                self.market_counts[key] = length + 1

    log PlainPoolDeployed(_coins, _A, _fee, msg.sender)
    return pool


@external
def deploy_metapool(
    _base_pool: address,
    _name: String[32],
    _symbol: String[10],
    _coin: address,
    _A: uint256,
    _fee: uint256,
    _implementation_idx: uint256 = 0,
) -> address:
    """
    @notice Deploy a new metapool
    @param _base_pool Address of the base pool to use
                      within the metapool
    @param _name Name of the new metapool
    @param _symbol Symbol for the new metapool - will be
                   concatenated with the base pool symbol
    @param _coin Address of the coin being used in the metapool
    @param _A Amplification co-efficient - a higher value here means
              less tolerance for imbalance within the pool's assets.
              Suggested values include:
               * Uncollateralized algorithmic stablecoins: 5-10
               * Non-redeemable, collateralized assets: 100
               * Redeemable assets: 200-400
    @param _fee Trade fee, given as an integer with 1e10 precision. The
                minimum fee is 0.04% (4000000), the maximum is 1% (100000000).
                50% of the fee is distributed to veCRV holders.
    @param _implementation_idx Index of the implementation to use. All possible
                implementations for a BASE_POOL can be publicly accessed
                via `metapool_implementations(BASE_POOL)`
    @return Address of the deployed pool
    """
    # fee must be between 0.04% and 1%
    assert _fee >= 4000000 and _fee <= 100000000, "Invalid fee"

    implementation: address = self.base_pool_data[_base_pool].implementations[_implementation_idx]
    assert implementation != ZERO_ADDRESS, "Invalid implementation index"

    # things break if a token has >18 decimals
    decimals: uint256 = ERC20(_coin).decimals()
    assert decimals < 19, "Max 18 decimals for coins"

    pool: address = create_forwarder_to(implementation)
    CurvePool(pool).initialize(_name, _symbol, _coin, 10 ** (36 - decimals), _A, _fee)
    ERC20(_coin).approve(pool, MAX_UINT256)

    # add pool to pool_list
    length: uint256 = self.pool_count
    self.pool_list[length] = pool
    self.pool_count = length + 1

    base_lp_token: address = self.base_pool_data[_base_pool].lp_token

    self.pool_data[pool].decimals = [decimals, 0, 0, 0]
    self.pool_data[pool].n_coins = 2
    self.pool_data[pool].base_pool = _base_pool
    self.pool_data[pool].coins[0] = _coin
    self.pool_data[pool].coins[1] = self.base_pool_data[_base_pool].lp_token
    self.pool_data[pool].implementation = implementation

    is_finished: bool = False
    for i in range(MAX_COINS):
        swappable_coin: address = self.base_pool_data[_base_pool].coins[i]
        if swappable_coin == ZERO_ADDRESS:
            is_finished = True
            swappable_coin = base_lp_token

        key: uint256 = bitwise_xor(convert(_coin, uint256), convert(swappable_coin, uint256))
        length = self.market_counts[key]
        self.markets[key][length] = pool
        self.market_counts[key] = length + 1
        if is_finished:
            break

    log MetaPoolDeployed(_coin, _base_pool, _A, _fee, msg.sender)
    return pool


@external
def deploy_gauge(_pool: address) -> address:
    """
    @notice Deploy a liquidity gauge for a factory pool
    @param _pool Factory pool address to deploy a gauge for
    @return Address of the deployed gauge
    """
    assert self.pool_data[_pool].coins[0] != ZERO_ADDRESS, "Unknown pool"
    assert self.pool_data[_pool].liquidity_gauge == ZERO_ADDRESS, "Gauge already deployed"
    implementation: address = self.gauge_implementation
    assert implementation != ZERO_ADDRESS, "Gauge implementation not set"

    gauge: address = create_forwarder_to(implementation)
    LiquidityGauge(gauge).initialize(_pool)
    self.pool_data[_pool].liquidity_gauge = gauge

    log LiquidityGaugeDeployed(_pool, gauge)
    return gauge


# <--- Admin / Guarded Functionality --->

@external
def add_base_pool(
    _base_pool: address,
    _fee_receiver: address,
    _asset_type: uint256,
    _implementations: address[10],
):
    """
    @notice Add a base pool to the registry, which may be used in factory metapools
    @dev Only callable by admin
    @param _base_pool Pool address to add
    @param _fee_receiver Admin fee receiver address for metapools using this base pool
    @param _asset_type Asset type for pool, as an integer  0 = USD, 1 = ETH, 2 = BTC, 3 = Other
    @param _implementations List of implementation addresses that can be used with this base pool
    """
    assert msg.sender == self.admin  # dev: admin-only function
    assert self.base_pool_data[_base_pool].coins[0] == ZERO_ADDRESS  # dev: pool exists

    registry: address = AddressProvider(ADDRESS_PROVIDER).get_registry()
    n_coins: uint256 = Registry(registry).get_n_coins(_base_pool)
    assert n_coins > 0  # dev: pool not in registry

    # add pool to pool_list
    length: uint256 = self.base_pool_count
    self.base_pool_list[length] = _base_pool
    self.base_pool_count = length + 1
    self.base_pool_data[_base_pool].lp_token = Registry(registry).get_lp_token(_base_pool)
    self.base_pool_data[_base_pool].n_coins = n_coins
    self.base_pool_data[_base_pool].fee_receiver = _fee_receiver
    if _asset_type != 0:
        self.base_pool_data[_base_pool].asset_type = _asset_type

    for i in range(10):
        implementation: address = _implementations[i]
        if implementation == ZERO_ADDRESS:
            break
        self.base_pool_data[_base_pool].implementations[i] = implementation

    decimals: uint256 = 0
    coins: address[MAX_COINS] = Registry(registry).get_coins(_base_pool)
    for i in range(MAX_COINS):
        if i == n_coins:
            break
        coin: address = coins[i]
        self.base_pool_data[_base_pool].coins[i] = coin
        decimals += shift(ERC20(coin).decimals(), convert(i*8, int128))
    self.base_pool_data[_base_pool].decimals = decimals

    log BasePoolAdded(_base_pool)


@external
def set_metapool_implementations(
    _base_pool: address,
    _implementations: address[10],
):
    """
    @notice Set implementation contracts for a metapool
    @dev Only callable by admin
    @param _base_pool Pool address to add
    @param _implementations Implementation address to use when deploying metapools
    """
    assert msg.sender == self.admin  # dev: admin-only function
    assert self.base_pool_data[_base_pool].coins[0] != ZERO_ADDRESS  # dev: base pool does not exist

    for i in range(10):
        new_imp: address = _implementations[i]
        current_imp: address = self.base_pool_data[_base_pool].implementations[i]
        if new_imp == current_imp:
            if new_imp == ZERO_ADDRESS:
                break
        else:
            self.base_pool_data[_base_pool].implementations[i] = new_imp


@external
def set_plain_implementations(
    _n_coins: uint256,
    _implementations: address[10],
):
    assert msg.sender == self.admin  # dev: admin-only function

    for i in range(10):
        new_imp: address = _implementations[i]
        current_imp: address = self.plain_implementations[_n_coins][i]
        if new_imp == current_imp:
            if new_imp == ZERO_ADDRESS:
                break
        else:
            self.plain_implementations[_n_coins][i] = new_imp


@external
def set_gauge_implementation(_gauge_implementation: address):
    assert msg.sender == self.admin  # dev: admin-only function

    self.gauge_implementation = _gauge_implementation


@external
def set_gauge(_pool: address, _gauge: address):
    assert msg.sender == self.admin  # dev: admin-only function
    assert self.pool_data[_pool].coins[0] != ZERO_ADDRESS, "Unknown pool"

    self.pool_data[_pool].liquidity_gauge = _gauge
    log LiquidityGaugeDeployed(_pool, _gauge)


@external
def batch_set_pool_asset_type(_pools: address[32], _asset_types: uint256[32]):
    """
    @notice Batch set the asset type for factory pools
    @dev Used to modify asset types that were set incorrectly at deployment
    """
    assert msg.sender in [self.manager, self.admin]  # dev: admin-only function

    for i in range(32):
        if _pools[i] == ZERO_ADDRESS:
            break
        self.pool_data[_pools[i]].asset_type = _asset_types[i]


@external
def commit_transfer_ownership(_addr: address):
    """
    @notice Transfer ownership of this contract to `addr`
    @param _addr Address of the new owner
    """
    assert msg.sender == self.admin  # dev: admin only

    self.future_admin = _addr


@external
def accept_transfer_ownership():
    """
    @notice Accept a pending ownership transfer
    @dev Only callable by the new owner
    """
    _admin: address = self.future_admin
    assert msg.sender == _admin  # dev: future admin only

    self.admin = _admin
    self.future_admin = ZERO_ADDRESS


@external
def set_manager(_manager: address):
    """
    @notice Set the manager
    @dev Callable by the admin or existing manager
    @param _manager Manager address
    """
    assert msg.sender in [self.manager, self.admin]  # dev: admin-only function

    self.manager = _manager


@external
def set_fee_receiver(_base_pool: address, _fee_receiver: address):
    """
    @notice Set fee receiver for base and plain pools
    @param _base_pool Address of base pool to set fee receiver for.
                      For plain pools, leave as `ZERO_ADDRESS`.
    @param _fee_receiver Address that fees are sent to
    """
    assert msg.sender == self.admin  # dev: admin only
    if _base_pool == ZERO_ADDRESS:
        self.fee_receiver = _fee_receiver
    else:
        self.base_pool_data[_base_pool].fee_receiver = _fee_receiver


@external
def convert_metapool_fees() -> bool:
    """
    @notice Convert the fees of a metapool and transfer to
            the metapool's fee receiver
    @dev All fees are converted to LP token of base pool
    """
    base_pool: address = self.pool_data[msg.sender].base_pool
    assert base_pool != ZERO_ADDRESS  # dev: sender must be metapool
    coin: address = self.pool_data[msg.sender].coins[0]

    amount: uint256 = ERC20(coin).balanceOf(self)
    receiver: address = self.base_pool_data[base_pool].fee_receiver

    CurvePool(msg.sender).exchange(0, 1, amount, 0, receiver)
    return True

Contract ABI

[{"name":"BasePoolAdded","inputs":[{"name":"base_pool","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"PlainPoolDeployed","inputs":[{"name":"coins","type":"address[4]","indexed":false},{"name":"A","type":"uint256","indexed":false},{"name":"fee","type":"uint256","indexed":false},{"name":"deployer","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"MetaPoolDeployed","inputs":[{"name":"coin","type":"address","indexed":false},{"name":"base_pool","type":"address","indexed":false},{"name":"A","type":"uint256","indexed":false},{"name":"fee","type":"uint256","indexed":false},{"name":"deployer","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"LiquidityGaugeDeployed","inputs":[{"name":"pool","type":"address","indexed":false},{"name":"gauge","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_fee_receiver","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"metapool_implementations","inputs":[{"name":"_base_pool","type":"address"}],"outputs":[{"name":"","type":"address[10]"}],"gas":21716},{"stateMutability":"view","type":"function","name":"find_pool_for_coins","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"find_pool_for_coins","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"i","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_base_pool","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address"}],"gas":2663},{"stateMutability":"view","type":"function","name":"get_n_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":2699},{"stateMutability":"view","type":"function","name":"get_meta_n_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"gas":5201},{"stateMutability":"view","type":"function","name":"get_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address[4]"}],"gas":9164},{"stateMutability":"view","type":"function","name":"get_underlying_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address[8]"}],"gas":21345},{"stateMutability":"view","type":"function","name":"get_decimals","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[4]"}],"gas":20185},{"stateMutability":"view","type":"function","name":"get_underlying_decimals","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}],"gas":19730},{"stateMutability":"view","type":"function","name":"get_metapool_rates","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[2]"}],"gas":5281},{"stateMutability":"view","type":"function","name":"get_balances","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[4]"}],"gas":20435},{"stateMutability":"view","type":"function","name":"get_underlying_balances","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}],"gas":39733},{"stateMutability":"view","type":"function","name":"get_A","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3135},{"stateMutability":"view","type":"function","name":"get_fees","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"gas":5821},{"stateMutability":"view","type":"function","name":"get_admin_balances","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[4]"}],"gas":13535},{"stateMutability":"view","type":"function","name":"get_coin_indices","inputs":[{"name":"_pool","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"outputs":[{"name":"","type":"int128"},{"name":"","type":"int128"},{"name":"","type":"bool"}],"gas":33243},{"stateMutability":"view","type":"function","name":"get_gauge","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address"}],"gas":3089},{"stateMutability":"view","type":"function","name":"get_implementation_address","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address"}],"gas":3119},{"stateMutability":"view","type":"function","name":"is_meta","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"bool"}],"gas":3152},{"stateMutability":"view","type":"function","name":"get_pool_asset_type","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":5450},{"stateMutability":"view","type":"function","name":"get_fee_receiver","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address"}],"gas":5480},{"stateMutability":"nonpayable","type":"function","name":"deploy_plain_pool","inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_coins","type":"address[4]"},{"name":"_A","type":"uint256"},{"name":"_fee","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"deploy_plain_pool","inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_coins","type":"address[4]"},{"name":"_A","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_asset_type","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"deploy_plain_pool","inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_coins","type":"address[4]"},{"name":"_A","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_asset_type","type":"uint256"},{"name":"_implementation_idx","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"deploy_metapool","inputs":[{"name":"_base_pool","type":"address"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_coin","type":"address"},{"name":"_A","type":"uint256"},{"name":"_fee","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"deploy_metapool","inputs":[{"name":"_base_pool","type":"address"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_coin","type":"address"},{"name":"_A","type":"uint256"},{"name":"_fee","type":"uint256"},{"name":"_implementation_idx","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"deploy_gauge","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address"}],"gas":93401},{"stateMutability":"nonpayable","type":"function","name":"add_base_pool","inputs":[{"name":"_base_pool","type":"address"},{"name":"_fee_receiver","type":"address"},{"name":"_asset_type","type":"uint256"},{"name":"_implementations","type":"address[10]"}],"outputs":[],"gas":925811},{"stateMutability":"nonpayable","type":"function","name":"set_metapool_implementations","inputs":[{"name":"_base_pool","type":"address"},{"name":"_implementations","type":"address[10]"}],"outputs":[],"gas":382072},{"stateMutability":"nonpayable","type":"function","name":"set_plain_implementations","inputs":[{"name":"_n_coins","type":"uint256"},{"name":"_implementations","type":"address[10]"}],"outputs":[],"gas":379687},{"stateMutability":"nonpayable","type":"function","name":"set_gauge_implementation","inputs":[{"name":"_gauge_implementation","type":"address"}],"outputs":[],"gas":38355},{"stateMutability":"nonpayable","type":"function","name":"set_gauge","inputs":[{"name":"_pool","type":"address"},{"name":"_gauge","type":"address"}],"outputs":[],"gas":43210},{"stateMutability":"nonpayable","type":"function","name":"batch_set_pool_asset_type","inputs":[{"name":"_pools","type":"address[32]"},{"name":"_asset_types","type":"uint256[32]"}],"outputs":[],"gas":1139575},{"stateMutability":"nonpayable","type":"function","name":"commit_transfer_ownership","inputs":[{"name":"_addr","type":"address"}],"outputs":[],"gas":38445},{"stateMutability":"nonpayable","type":"function","name":"accept_transfer_ownership","inputs":[],"outputs":[],"gas":58396},{"stateMutability":"nonpayable","type":"function","name":"set_manager","inputs":[{"name":"_manager","type":"address"}],"outputs":[],"gas":41026},{"stateMutability":"nonpayable","type":"function","name":"set_fee_receiver","inputs":[{"name":"_base_pool","type":"address"},{"name":"_fee_receiver","type":"address"}],"outputs":[],"gas":38800},{"stateMutability":"nonpayable","type":"function","name":"convert_metapool_fees","inputs":[],"outputs":[{"name":"","type":"bool"}],"gas":12910},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3438},{"stateMutability":"view","type":"function","name":"future_admin","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3468},{"stateMutability":"view","type":"function","name":"manager","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3498},{"stateMutability":"view","type":"function","name":"pool_list","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":3573},{"stateMutability":"view","type":"function","name":"pool_count","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3558},{"stateMutability":"view","type":"function","name":"base_pool_list","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":3633},{"stateMutability":"view","type":"function","name":"base_pool_count","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3618},{"stateMutability":"view","type":"function","name":"plain_implementations","inputs":[{"name":"arg0","type":"uint256"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":3808},{"stateMutability":"view","type":"function","name":"fee_receiver","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3678},{"stateMutability":"view","type":"function","name":"gauge_implementation","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":3708}]

6f7fffffffffffffffffffffffffffffff6040526020612ef3610140396020612ef360c03960c05160a01c612eee5733600055336002556101405164020000000855612ed656600436101561000d57612e85565b600035601c526f7fffffffffffffffffffffffffffffff60405260005134612e8b5763970fa3f38114156100b95760043560a01c612e8b5764020000000660043560e05260c052604060c02080546101605260018101546101805260028101546101a05260038101546101c05260048101546101e05260058101546102005260068101546102205260078101546102405260088101546102605260098101546102805250610140610160f35b63a87df06c8114156100d0576000610140526100f1565b636982eb0b8114156100ec5760206044610140376000506100f1565b610144565b60043560a01c612e8b5760243560a01c612e8b576024356004351861016052600161014051640100000000811015612e8b570264020000000a6101605160e05260c052604060c020015460005260206000f35b636f20d6dd8114156101785760043560a01c612e8b5764010000000460043560e05260c052604060c0205460005260206000f35b63940494f18114156101af5760043560a01c612e8b57600b64010000000460043560e05260c052604060c020015460005260206000f35b63eb73f37d81141561021d5760043560a01c612e8b5764010000000460043560e05260c052604060c02054610140526101a06002815260156402000000066101405160e05260c052604060c020015460018181830110612e8b578082019050905081602001525060406101a0f35b639ac90d3d8114156102735760043560a01c612e8b57600364010000000460043560e05260c052604060c0200180546101605260018101546101805260028101546101a05260038101546101c052506080610160f35b63a77576ef8114156103665760043560a01c612e8b57610100366101403764010000000460043560e05260c052604060c02054610240526000610240511815612e8b57600364010000000460043560e05260c052604060c02001546101405261026060016007818352015b6001610260516001808210612e8b57808203905090506008811015612e8b5702600c6402000000066102405160e05260c052604060c020010154610140610260516008811015612e8b576020020152610140610260516008811015612e8b57602002015161034b5761035c565b5b81516001018083528114156102de575b5050610100610140f35b6352b515558114156104265760043560a01c612e8b57600064010000000460043560e05260c052604060c0205418156103e65760803661014037600764010000000460043560e05260c052604060c0200180546101405260018101546101605260028101546101805260038101546101a052506012610160526080610140f35b600764010000000460043560e05260c052604060c0200180546101605260018101546101805260028101546101a05260038101546101c052506080610160f35b634cb088f181141561058b5760043560a01c612e8b5760803661014037600764010000000460043560e05260c052604060c0200180546101405260018101546101605260028101546101805260038101546101a05250610100366101c037610140516101c05264010000000460043560e05260c052604060c020546102c05260146402000000066102c05160e05260c052604060c02001546102e05261030060006008818352015b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861030051808202821582848305141715612e8b57809050905090506000811215610521576102e051816000031c610528565b6102e051811b5b905061010080820690509050610320526103205161054557610581565b610320516101c06103005160018181830112612e8b57808201905090506008811015612e8b5760200201525b81516001018083528114156104ce575b50506101006101c0f35b6306d8f1608114156105fe5760043560a01c612e8b57670de0b6b3a76400006101405260006101605260206101e0600463bb7b8b806101805261019c64010000000460043560e05260c052604060c020545afa15612e8b57601f3d1115612e8b576000506101e051610160526040610140f35b6392e3cc2d8114156107805760043560a01c612e8b57600064010000000460043560e05260c052604060c0205418156106c25760206101c06024634903b0d16101405260006101605261015c6004355afa15612e8b57601f3d1115612e8b576000506101c0516101e05260206102806024634903b0d16102005260016102205261021c6004355afa15612e8b57601f3d1115612e8b57600050610280516102a0526101e0516102e0526102a0516103005260006103205260006103405260806102e0f35b600b64010000000460043560e05260c052604060c020015461014052608036610160376101e060006004818352015b610140516101e051101561074e5760206102806024634903b0d1610200526101e0516102205261021c6004355afa15612e8b57601f3d1115612e8b57600050610280516101606101e0516004811015612e8b576020020152610766565b60006101606101e0516004811015612e8b5760200201525b5b81516001018083528114156106f1575b50506080610160f35b6359f4f3518114156109a55760043560a01c612e8b57610100366101403760206102c06024634903b0d16102405260006102605261025c6004355afa15612e8b57601f3d1115612e8b576000506102c0516101405260206102c060046318160ddd6102605261027c6001600364010000000460043560e05260c052604060c0200101545afa15612e8b57601f3d1115612e8b576000506102c05161024052600061024051111561099d5760206103006024634903b0d16102805260016102a05261029c6004355afa15612e8b57601f3d1115612e8b57600050610300516ec097ce7bc90715b34b9f1000000000808202821582848304141715612e8b578090509050905061024051808015612e8b578204905090506102605264010000000460043560e05260c052604060c02054610280526000610280511815612e8b5760156402000000066102805160e05260c052604060c02001546102a0526102c060006008818352015b6102a0516102c05114156108fa5761099a565b60206103606024634903b0d16102e0526102c051610300526102fc610280515afa15612e8b57601f3d1115612e8b576000506103605161026051808202821582848304141715612e8b57809050905090506ec097ce7bc90715b34b9f1000000000808204905090506101406102c05160018181830110612e8b57808201905090506008811015612e8b5760200201525b81516001018083528114156108e7575b50505b610100610140f35b6355b30b198114156109f15760043560a01c612e8b5760206101a0600463f446c1d06101405261015c6004355afa15612e8b57601f3d1115612e8b576000506101a05160005260206000f35b637cdb72b0811415610a985760043560a01c612e8b5760206101a0600463ddca3f436101405261015c6004355afa15612e8b57601f3d1115612e8b576000506101a0516101c0526020610240600463fee3f7f96101e0526101fc6004355afa15612e8b57601f3d1115612e8b5760005061024051610260526102808080806101c051815250506020810190508080610260518152505060409050905060c05260c051610280f35b63c11e45b8811415610b545760043560a01c612e8b57600b64010000000460043560e05260c052604060c020015461014052608036610160376101e060006004818352015b610140516101e0511415610af057610b4b565b6020610280602463e2e7d264610200526101e0516102205261021c6004355afa15612e8b57601f3d1115612e8b57600050610280516101606101e0516004811015612e8b5760200201525b8151600101808352811415610add575b50506080610160f35b63eb85226d811415610ed05760043560a01c612e8b5760243560a01c612e8b5760443560a01c612e8b57600364010000000460043560e05260c052604060c02001546101405264010000000460043560e05260c052604060c0205461016052602435610200526044356102205260006101e0526101e061012060006002818352015b610120516020026102000151610140511415610bf55760018352610c06565b5b8151600101808352811415610bd6575b5050506101e05115610c1f576000610160511415610c22565b60005b15610cfb576001600364010000000460043560e05260c052604060c02001015461024052602435610280526044356102a05260006102605261026061012060006002818352015b610120516020026102800151610240511415610c885760018352610c99565b5b8151600101808352811415610c69575b5050506102605115610cfa5761014051604435146102c05261014051602435146102e0526103008080806102c0518152505060208101905080806102e05181525050602081019050808060008152505060609050905060c05260c051610300f35b5b606036610180376101e060006008818352015b61016051610da55760046101e05112610d66576308c379a06103605260206103805260136103a0527f4e6f20617661696c61626c65206d61726b6574000000000000000000000000006103c0526103a050606461037cfd5b60006101e0511815610da05760016101e0516004811015612e8b5702600364010000000460043560e05260c052604060c020010154610140525b610dfb565b60006101e0511815610dfa5760016101e051600180820380607f1d8160801d1415612e8b57809050905090506008811015612e8b5702600c6402000000066101605160e05260c052604060c020010154610140525b5b61014051610e48576308c379a06103605260206103805260136103a0527f4e6f20617661696c61626c65206d61726b6574000000000000000000000000006103c0526103a050606461037cfd5b602435610140511415610e62576101e0516101a052610e82565b604435610140511415610e7c576101e0516101c052610e81565b610e97565b5b6101805115610e9057610ea7565b6001610180525b8151600101808352811415610d0e575b50506103c06101a05181526101c0518160200152600061016051141581604001525060606103c0f35b63daf297b9811415610f075760043560a01c612e8b57600264010000000460043560e05260c052604060c020015460005260206000f35b63510d98a4811415610f3e5760043560a01c612e8b57600164010000000460043560e05260c052604060c020015460005260206000f35b63e4d332a9811415610f765760043560a01c612e8b57600064010000000460043560e05260c052604060c02054141560005260206000f35b6366d3966c811415610ff65760043560a01c612e8b5764010000000460043560e05260c052604060c020546101405261014051610fd257600c64010000000460043560e05260c052604060c020015460005260206000f3610ff4565b60166402000000066101405160e05260c052604060c020015460005260206000f35b005b63154aa8f58114156110655760043560a01c612e8b5764010000000460043560e05260c052604060c020546101405261014051611041576402000000085460005260206000f3611063565b600b6402000000066101405160e05260c052604060c020015460005260206000f35b005b63cd419bb5811415611082576000610200526000610220526110d0565b635c16487b8114156110a5576000610220526020610104610200376000506110d0565b6352f2db698114156110cb576020610104610200376020610124610220376000506110d0565b611a14565b60406004356004016101403760206004356004013511612e8b57602a6024356004016101a037600a6024356004013511612e8b5760443560a01c612e8b5760643560a01c612e8b5760843560a01c612e8b5760a43560a01c612e8b57623d090060e43510611147576305f5e10060e435111561114a565b60005b611193576308c379a061024052602061026052600b610280527f496e76616c6964206665650000000000000000000000000000000000000000006102a05261028050606461025cfd5b600461024052610100366102603761036060006004818352015b6044610360516004811015612e8b576020020135610380526103805161122a576001610360511161121d576308c379a06103a05260206103c05260126103e0527f496e73756666696369656e7420636f696e730000000000000000000000000000610400526103e05060646103bcfd5b61036051610240526114ba565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6044610360516004811015612e8b57602002013514156112b25761036051156112a7576308c379a06103a05260206103c05260166103e0527f455448206d75737420626520666972737420636f696e00000000000000000000610400526103e05060646103bcfd5b60126102e052611357565b6020610400600463313ce5676103a0526103bc610380515afa15612e8b57601f3d1115612e8b57600050610400516102e0610360516004811015612e8b57602002015260136102e0610360516004811015612e8b57602002015110611356576308c379a06103a05260206103c05260196103e0527f4d617820313820646563696d616c7320666f7220636f696e7300000000000000610400526103e05060646103bcfd5b5b604e60246102e0610360516004811015612e8b576020020151808210612e8b57808203905090501015612e8b5760246102e0610360516004811015612e8b576020020151808210612e8b5780820390509050600a0a610260610360516004811015612e8b5760200201526103a0610360516004818352015b60046103a05160018181830110612e8b578082019050905014156113f2576114a7565b60446103a05160018181830110612e8b57808201905090506004811015612e8b576020020135611421576114a7565b60446103a05160018181830110612e8b57808201905090506004811015612e8b576020020135610380511415611496576308c379a06103c05260206103e052600f610400527f4475706c696361746520636f696e730000000000000000000000000000000000610420526104005060646103dcfd5b5b81516001018083528114156113cf575b50505b81516001018083528114156111ad575b5050600161022051600a811015612e8b57026402000000076102405160e05260c052604060c0200154610360526000610360511415611538576308c379a06103805260206103a052601c6103c0527f496e76616c696420696d706c656d656e746174696f6e20696e646578000000006103e0526103c050606461039cfd5b7f602d3d8160093d39f3363d3d373d3d3d363d73000000000000000000000000006103a0526103605160601b6103b3527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006103c75260366103a06000f061038052610380513b15612e8b576000600061020461018063a461b3c86103a052806103c05261014080805160200180846103c0018284600060045af115612e8b5750508051820160206001820306601f8201039050602001915050806103e0526101a080805160200180846103c0018284600060045af115612e8b575050506044803561040052806020013561042052806040013561044052806060013561046052506102605161048052610280516104a0526102a0516104c0526102c0516104e052604060c4610500376103bc90506000610380515af115612e8b57640100000003546103a0526103805160016103a051640100000000811015612e8b5702600301556103a05160018181830110612e8b57808201905090506401000000035560076401000000046103805160e05260c052604060c020016102e05181556103005160018201556103205160028201556103405160038201555061024051600b6401000000046103805160e05260c052604060c020015560006401000000046103805160e05260c052604060c020556103605160016401000000046103805160e05260c052604060c0200155600061020051181561176d5761020051600c6401000000046103805160e05260c052604060c02001555b6103c060006004818352015b60446103c0516004811015612e8b5760200201356103e0526103e05161179e57611971565b6103e05160016103c0516004811015612e8b570260036401000000046103805160e05260c052604060c02001015560006004610400527f095ea7b3000000000000000000000000000000000000000000000000000000006104205261040060048060208461046001018260208501600060045af1505080518201915050610380516020826104600101526020810190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602082610460010152602081019050806104605261046090508051602001806105008284600060045af115612e8b575050600060006105005161052060006103e0515af115612e8b5761040060006004818352015b610400516103c051101561194d576044610400516004811015612e8b57602002013561042052610420516103e051186104405264020000000b6104405160e05260c052604060c020546103a0526103805160016103a051640100000000811015612e8b570264020000000a6104405160e05260c052604060c02001556103a05160018181830110612e8b578082019050905064020000000b6104405160e05260c052604060c020555b5b81516001018083528114156118a4575b50505b8151600101808352811415611779575b50507f5b4a28c940282b5bf183df6a046b8119cf6edeb62859f75e835eb7ba834cce8d6103c0808080808060443581525050602081019050808060643581525050602081019050808060843581525050602081019050808060a435815250505050608081019050808060c43581525050602081019050808060e435815250506020810190508080338152505060e0905090506103c0a16103805160005260206000f35b63e339eb4f811415611a2b57600061020052611a4c565b63de7fe3bf811415611a4757602060c461020037600050611a4c565b61202b565b60043560a01c612e8b5760406024356004016101403760206024356004013511612e8b57602a6044356004016101a037600a6044356004013511612e8b5760643560a01c612e8b57623d090060a43510611aaf576305f5e10060a4351115611ab2565b60005b611afb576308c379a061022052602061024052600b610260527f496e76616c6964206665650000000000000000000000000000000000000000006102805261026050606461023cfd5b600161020051600a811015612e8b570264020000000660043560e05260c052604060c0200154610220526000610220511415611b76576308c379a061024052602061026052601c610280527f496e76616c696420696d706c656d656e746174696f6e20696e646578000000006102a05261028050606461025cfd5b60206102c0600463313ce5676102605261027c6064355afa15612e8b57601f3d1115612e8b576000506102c0516102405260136102405110611bf7576308c379a06102605260206102805260196102a0527f4d617820313820646563696d616c7320666f7220636f696e73000000000000006102c0526102a050606461027cfd5b7f602d3d8160093d39f3363d3d373d3d3d363d7300000000000000000000000000610280526102205160601b610293527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006102a75260366102806000f061026052610260513b15612e8b576000600061014460c06398094be061028052806102a05261014080805160200180846102a0018284600060045af115612e8b5750508051820160206001820306601f8201039050602001915050806102c0526101a080805160200180846102a0018284600060045af115612e8b575050506064356102e052604e602461024051808210612e8b57808203905090501015612e8b57602461024051808210612e8b5780820390509050600a0a61030052604060846103203761029c90506000610260515af115612e8b576064353b15612e8b5760006000604463095ea7b361028052610260516102a0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6102c05261029c60006064355af115612e8b57640100000003546102805261026051600161028051640100000000811015612e8b5702600301556102805160018181830110612e8b578082019050905064010000000355600a64020000000660043560e05260c052604060c02001546102a05260076401000000046102605160e05260c052604060c02001610240518155600060018201556000600282015560006003820155506002600b6401000000046102605160e05260c052604060c02001556004356401000000046102605160e05260c052604060c0205560643560036401000000046102605160e05260c052604060c0200155600a64020000000660043560e05260c052604060c0200154600160036401000000046102605160e05260c052604060c0200101556102205160016401000000046102605160e05260c052604060c020015560006102c0526102e060006008818352015b60016102e0516008811015612e8b5702600c64020000000660043560e05260c052604060c0200101546103005261030051611f0a5760016102c0526102a051610300525b61030051606435186103205264020000000b6103205160e05260c052604060c020546102805261026051600161028051640100000000811015612e8b570264020000000a6103205160e05260c052604060c02001556102805160018181830110612e8b578082019050905064020000000b6103205160e05260c052604060c020556102c05115611f9957611faa565b5b8151600101808352811415611ec6575b50507f01f31cd2abdeb4e5e10ba500f2db0f937d9e8c735ab04681925441b4ea37eda56102e080808060643581525050602081019050808060043581525050602081019050808060843581525050602081019050808060a435815250506020810190508080338152505060a0905090506102e0a16102605160005260206000f35b6396bebb348114156122665760043560a01c612e8b576000600364010000000460043560e05260c052604060c020015414156120a6576308c379a061014052602061016052600c610180527f556e6b6e6f776e20706f6f6c00000000000000000000000000000000000000006101a05261018050606461015cfd5b600264010000000460043560e05260c052604060c020015415612108576308c379a0610140526020610160526016610180527f476175676520616c7265616479206465706c6f796564000000000000000000006101a05261018050606461015cfd5b64020000000954610140526000610140511415612164576308c379a061016052602061018052601c6101a0527f476175676520696d706c656d656e746174696f6e206e6f7420736574000000006101c0526101a050606461017cfd5b7f602d3d8160093d39f3363d3d373d3d3d363d7300000000000000000000000000610180526101405160601b610193527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006101a75260366101806000f061016052610160513b15612e8b5760006000602463c4d66de8610180526004356101a05261019c6000610160515af115612e8b5761016051600264010000000460043560e05260c052604060c02001557f656bb34c20491970a8c163f3bd62ead82022b379c3924960ec60f6dbfc5aab3b6101808080806004358152505060208101905080806101605181525050604090509050610180a16101605160005260206000f35b632fc056538114156126c45760043560a01c612e8b5760243560a01c612e8b576000610120525b610120516064013560a01c612e8b5760206101205101610120526101406101205110156122b95761228d565b600054331415612e8b57600c64020000000660043560e05260c052604060c0200154612e8b5760206101c0600463a262904b6101605261017c6f22d53366457f9d5e68ec105046fc43835afa15612e8b57601f3d1115612e8b576000506101c051610140526020610200602463940494f1610180526004356101a05261019c610140515afa15612e8b57601f3d1115612e8b5760005061020051610160526000610160511115612e8b576402000000055461018052600435600161018051640100000000811015612e8b570264010000000501556101805160018181830110612e8b5780820190509050640200000005556020610220602463379510496101a0526004356101c0526101bc610140515afa15612e8b57601f3d1115612e8b5760005061022051600a64020000000660043560e05260c052604060c020015561016051601564020000000660043560e05260c052604060c0200155602435600b64020000000660043560e05260c052604060c02001556000604435181561245557604435601664020000000660043560e05260c052604060c02001555b6101a06000600a818352015b60646101a051600a811015612e8b5760200201356101c0526101c051612486576124c1565b6101c05160016101a051600a811015612e8b570264020000000660043560e05260c052604060c02001555b8151600101808352811415612461575b505060006101a0526101006103406024639ac90d3d6102c0526004356102e0526102dc610140515afa15612e8b5760ff3d1115612e8b5760005061034080516101c05280602001516101e0528060400151610200528060600151610220528060800151610240528060a00151610260528060c00151610280528060e001516102a052506102c060006008818352015b610160516102c05114156125635761266c565b6101c06102c0516008811015612e8b5760200201516102e0526102e05160016102c0516008811015612e8b5702600c64020000000660043560e05260c052604060c0200101556101a080516102c0516008808202821582848304141715612e8b57809050905090506040518111612e8b576000811215612615576020610360600463313ce5676103005261031c6102e0515afa15612e8b57601f3d1115612e8b5760005061036051816000031c612646565b6020610360600463313ce5676103005261031c6102e0515afa15612e8b57601f3d1115612e8b5760005061036051811b5b90508181830110612e8b57808201905090508152505b8151600101808352811415612550575b50506101a051601464020000000660043560e05260c052604060c02001557fcc6afdfec79da6be08142ecee25cf14b665961e25d30d8eba45959be9547635f6102c0808080600435815250506020905090506102c0a1005b63cb956b468114156127e55760043560a01c612e8b576000610120525b610120516024013560a01c612e8b57602061012051016101205261014061012051101561270d576126e1565b600054331415612e8b576000600c64020000000660043560e05260c052604060c02001541815612e8b576101406000600a818352015b602461014051600a811015612e8b57602002013561016052600161014051600a811015612e8b570264020000000660043560e05260c052604060c020015461018052610180516101605114156127a557610160516127a0576127e1565b6127d0565b61016051600161014051600a811015612e8b570264020000000660043560e05260c052604060c02001555b5b8151600101808352811415612743575b5050005b639ddbf4b98114156128dc576000610120525b610120516024013560a01c612e8b576020610120510161012052610140610120511015612824576127f8565b600054331415612e8b576101406000600a818352015b602461014051600a811015612e8b57602002013561016052600161014051600a811015612e8b570264020000000760043560e05260c052604060c0200154610180526101805161016051141561289c5761016051612897576128d8565b6128c7565b61016051600161014051600a811015612e8b570264020000000760043560e05260c052604060c02001555b5b815160010180835281141561283a575b5050005b638f03182c8114156129085760043560a01c612e8b57600054331415612e8b5760043564020000000955005b630b2a46438114156129fb5760043560a01c612e8b5760243560a01c612e8b57600054331415612e8b576000600364010000000460043560e05260c052604060c02001541415612997576308c379a061014052602061016052600c610180527f556e6b6e6f776e20706f6f6c00000000000000000000000000000000000000006101a05261018050606461015cfd5b602435600264010000000460043560e05260c052604060c02001557f656bb34c20491970a8c163f3bd62ead82022b379c3924960ec60f6dbfc5aab3b61014080808060043581525050602081019050808060243581525050604090509050610140a1005b637542f078811415612b12576000610120525b610120516004013560a01c612e8b576020610120510161012052610400610120511015612a3a57612a0e565b600254610160526000546101805260006101405261014061012060006002818352015b610120516020026101600151331415612a795760018352612a8a565b5b8151600101808352811415612a5d575b5050506101405115612e8b5761014060006020818352015b6004610140516020811015612e8b576020020135612abf57612b0e565b610404610140516020811015612e8b576020020135600c6401000000046004610140516020811015612e8b57602002013560e05260c052604060c02001555b8151600101808352811415612aa2575b5050005b636b441a40811415612b3a5760043560a01c612e8b57600054331415612e8b57600435600155005b63e5ea47b8811415612b66576001546101405261014051331415612e8b57610140516000556000600155005b639aece83e811415612be05760043560a01c612e8b57600254610160526000546101805260006101405261014061012060006002818352015b610120516020026101600151331415612bbb5760018352612bcc565b5b8151600101808352811415612b9f575b5050506101405115612e8b57600435600255005b6336d2b77a811415612c3e5760043560a01c612e8b5760243560a01c612e8b57600054331415612e8b57600435612c205760243564020000000855612c3c565b602435600b64020000000660043560e05260c052604060c02001555b005b63bcc981d2811415612d35576401000000043360e05260c052604060c02054610140526000610140511815612e8b5760036401000000043360e05260c052604060c020015461016052602061022060246370a082316101a052306101c0526101bc610160515afa15612e8b57601f3d1115612e8b576000506102205161018052600b6402000000066101405160e05260c052604060c02001546101a05260206102c060a463ddc1f59d6101c05260006101e05260016102005261018051610220526000610240526101a051610260526101dc6000335af115612e8b57601f3d1115612e8b576000506102c050600160005260206000f35b63f851a440811415612d4d5760005460005260206000f35b6317f7182a811415612d655760015460005260206000f35b63481c6a75811415612d7d5760025460005260206000f35b633a1d5d8e811415612da9576001600435640100000000811015612e8b57026003015460005260206000f35b63956aae3a811415612dc5576401000000035460005260206000f35b6322fe5671811415612df5576001600435640100000000811015612e8b5702640100000005015460005260206000f35b63de5e4a3b811415612e11576402000000055460005260206000f35b6331a4f865811415612e4b576001602435600a811015612e8b570264020000000760043560e05260c052604060c020015460005260206000f35b63cab4d3db811415612e67576402000000085460005260206000f35b638df24207811415612e83576402000000095460005260206000f35b505b60006000fd5b600080fd5b610046612ed603610046600039610046612ed6036000f35b600080fd0000000000000000000000007eeac6cddbd1d0b8af061742d41877d7f707289a

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007eeac6cddbd1d0b8af061742d41877d7f707289a

-----Decoded View---------------
Arg [0] : _fee_receiver (address): 0x7eeac6cddbd1d0b8af061742d41877d7f707289a

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007eeac6cddbd1d0b8af061742d41877d7f707289a


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.