Beispiel #1
0
    def transferOCEAN(self, dst_wallet, amt: float) -> None:
        assert isinstance(dst_wallet, AgentWallet) or \
            isinstance(dst_wallet, BurnWallet)
        dst_address = dst_wallet._address

        amt_base = toBase18(amt)
        assert amt_base >= 0
        if amt_base == 0:
            return

        OCEAN_base = self._OCEAN_base()
        if OCEAN_base == 0:
            raise ValueError("no funds to transfer from")

        tol = 1e-12
        if (1.0 - tol) <= amt / fromBase18(OCEAN_base) <= (1.0 + tol):
            amt_base = OCEAN_base

        if amt_base > OCEAN_base:
            raise ValueError("transfer amt (%s) exceeds OCEAN holdings (%s)" %
                             (fromBase18(amt_base), fromBase18(OCEAN_base)))

        globaltokens.OCEANtoken().transfer(dst_address, amt_base,
                                           self._web3wallet)

        dst_wallet._total_OCEAN_in += amt
        self.resetCachedInfo()
        dst_wallet.resetCachedInfo()
Beispiel #2
0
 def _datatokenAddress(self):
     addrs = self._pool.getCurrentTokens()
     assert len(addrs) == 2
     OCEAN_addr = globaltokens.OCEANtoken().address
     for addr in addrs:
         if addr != OCEAN_addr:
             return addr
     raise AssertionError("should never get here")
Beispiel #3
0
 def stakeOCEAN(self, OCEAN_stake: float, pool: bpool.BPool):
     OCEAN = globaltokens.OCEANtoken()
     OCEAN.approve(pool.address,
                   toBase18(OCEAN_stake),
                   from_wallet=self._web3wallet)
     pool.joinswapExternAmountIn(
         tokenIn_address=globaltokens.OCEAN_address(),
         tokenAmountIn_base=toBase18(OCEAN_stake),
         minPoolAmountOut_base=toBase18(0.0),
         from_wallet=self._web3wallet)
     self.resetCachedInfo()
def test_OCEAN():
    wallet = web3wallet.randomWeb3Wallet()

    OCEAN_base = web3util.toBase18(3.0)
    globaltokens.mintOCEAN(address=wallet.address, value_base=OCEAN_base)
    OCEAN_token = globaltokens.OCEANtoken()
    assert isinstance(OCEAN_token, datatoken.Datatoken)
    assert OCEAN_token.symbol() == 'OCEAN'
    assert OCEAN_token.balanceOf_base(wallet.address) == OCEAN_base

    globaltokens.mintOCEAN(address=wallet.address, value_base=OCEAN_base)
    assert OCEAN_token.balanceOf_base(wallet.address) == OCEAN_base * 2
Beispiel #5
0
def _createPool(DT:datatoken.Datatoken, web3_w:web3wallet.Web3Wallet):
    OCEAN = globaltokens.OCEANtoken()
    
    #Create OCEAN-DT pool
    p_address = bfactory.BFactory().newBPool(from_wallet=web3_w)
    pool = bpool.BPool(p_address)

    DT.approve(pool.address, toBase18(_DT_STAKE), from_wallet=web3_w)
    OCEAN.approve(pool.address, toBase18(_OCEAN_STAKE),from_wallet=web3_w)

    pool.bind(DT.address, toBase18(_DT_STAKE),
              toBase18(POOL_WEIGHT_DT), from_wallet=web3_w)
    pool.bind(OCEAN.address, toBase18(_OCEAN_STAKE),
              toBase18(POOL_WEIGHT_OCEAN), from_wallet=web3_w)

    pool.finalize(from_wallet=web3_w)
    
    return pool
Beispiel #6
0
    def _createPoolAgent(self, state) -> PoolAgent:
        assert self.OCEAN() > 0.0, "should not call if no OCEAN"
        wallet = self._wallet._web3wallet
        OCEAN = globaltokens.OCEANtoken()

        #name
        pool_i = len(state.agents.filterToPool())
        dt_name = f'DT{pool_i}'
        pool_agent_name = f'pool{pool_i}'

        #new DT
        DT = self._createDatatoken(dt_name, mint_amt=1000.0)  #magic number

        #new pool
        pool_address = bfactory.BFactory().newBPool(from_wallet=wallet)
        pool = bpool.BPool(pool_address)

        #bind tokens & add initial liquidity
        OCEAN_bind_amt = self.OCEAN()  #magic number: use all the OCEAN
        DT_bind_amt = 20.0  #magic number

        DT.approve(pool.address, toBase18(DT_bind_amt), from_wallet=wallet)
        OCEAN.approve(pool.address,
                      toBase18(OCEAN_bind_amt),
                      from_wallet=wallet)

        pool.bind(DT.address,
                  toBase18(DT_bind_amt),
                  toBase18(POOL_WEIGHT_DT),
                  from_wallet=wallet)
        pool.bind(OCEAN.address,
                  toBase18(OCEAN_bind_amt),
                  toBase18(POOL_WEIGHT_OCEAN),
                  from_wallet=wallet)

        pool.finalize(from_wallet=wallet)

        #create agent
        pool_agent = PoolAgent(pool_agent_name, pool)
        state.addAgent(pool_agent)
        self._wallet.resetCachedInfo()

        return pool_agent
Beispiel #7
0
 def _OCEAN_base(self) -> int:
     if self._cached_OCEAN_base is None:
         self._cached_OCEAN_base = globaltokens.OCEANtoken().balanceOf_base(
             self._address)
     return self._cached_OCEAN_base