コード例 #1
0
ファイル: test_oasis.py プロジェクト: cheaphunter/keeper
    def test_on_take(self):
        # given
        on_take_mock = Mock()
        self.otc.on_take(on_take_mock)

        # when
        self.otc.approve([self.token1], directly())
        self.otc.make(have_token=self.token1.address,
                      have_amount=Wad.from_number(1),
                      want_token=self.token2.address,
                      want_amount=Wad.from_number(2)).transact()

        # and
        self.otc.approve([self.token2], directly())
        self.otc.take(1, Wad.from_number(0.5)).transact()

        # then
        on_take = wait_until_mock_called(on_take_mock)[0]
        assert on_take.id == 1
        assert on_take.maker == self.our_address
        assert on_take.taker == self.our_address
        assert on_take.have_token == self.token1.address
        assert on_take.take_amount == Wad.from_number(0.5)
        assert on_take.want_token == self.token2.address
        assert on_take.give_amount == Wad.from_number(1)
        assert on_take.timestamp != 0
コード例 #2
0
def test_direct_approval_should_raise_exception_if_approval_fails():
    # given
    global web3, our_address, second_address, token
    token.approve = MagicMock(return_value=FailingTransact())

    # expect
    with pytest.raises(Exception):
        directly()(token, second_address, "some-name")
コード例 #3
0
def test_direct_approval():
    # given
    global web3, our_address, second_address, token

    # when
    directly()(token, second_address, "some-name")

    # then
    assert token.allowance_of(our_address, second_address) == Wad(2**256-1)
コード例 #4
0
def test_direct_approval_should_not_approve_if_already_approved():
    # given
    global web3, our_address, second_address, token
    token.approve(second_address, Wad(2**248+17)).transact()

    # when
    directly()(token, second_address, "some-name")

    # then
    assert token.allowance_of(our_address, second_address) == Wad(2**248+17)
コード例 #5
0
ファイル: test_oasis.py プロジェクト: cheaphunter/keeper
    def test_approve_and_make_and_getters(self):
        # given
        assert self.otc.get_last_offer_id() == 0

        # when
        self.otc.approve([self.token1], directly())
        self.otc.make(have_token=self.token1.address,
                      have_amount=Wad.from_number(1),
                      want_token=self.token2.address,
                      want_amount=Wad.from_number(2)).transact()

        # then
        assert self.otc.get_last_offer_id() == 1

        # and
        assert self.otc.get_offer(1).offer_id == 1
        assert self.otc.get_offer(1).sell_which_token == self.token1.address
        assert self.otc.get_offer(1).sell_how_much == Wad.from_number(1)
        assert self.otc.get_offer(1).buy_which_token == self.token2.address
        assert self.otc.get_offer(1).buy_how_much == Wad.from_number(2)
        assert self.otc.get_offer(1).owner == self.our_address
        assert self.otc.get_offer(1).timestamp != 0

        # and
        assert self.otc.active_offers() == [self.otc.get_offer(1)]
コード例 #6
0
ファイル: test_etherdelta.py プロジェクト: livnev/keeper
    def test_onchain_order_happy_path(self):
        # given
        self.etherdelta.approve([self.token1, self.token2], directly())
        self.etherdelta.deposit_token(self.token1.address, Wad.from_number(10)).transact()
        self.etherdelta.deposit_token(self.token2.address, Wad.from_number(10)).transact()

        # when
        self.etherdelta.place_order_onchain(token_get=self.token2.address, amount_get=Wad.from_number(4),
                                            token_give=self.token1.address, amount_give=Wad.from_number(2),
                                            expires=100000000).transact()

        # then
        assert len(self.etherdelta.active_onchain_orders()) == 1

        # and
        order = self.etherdelta.active_onchain_orders()[0]
        assert order.token_get == self.token2.address
        assert order.amount_get == Wad.from_number(4)
        assert order.token_give == self.token1.address
        assert order.amount_give == Wad.from_number(2)
        assert order.expires == 100000000
        assert order.user == self.our_address

        # and
        assert self.etherdelta.amount_available(order) == Wad.from_number(4)
        assert self.etherdelta.amount_filled(order) == Wad.from_number(0)

        # and
        assert self.etherdelta.can_trade(order, Wad.from_number(1.5))
        assert not self.etherdelta.can_trade(order, Wad.from_number(5.5))
コード例 #7
0
ファイル: test_oasis.py プロジェクト: cheaphunter/keeper
    def test_take_complete(self):
        # given
        self.otc.approve([self.token1], directly())
        self.otc.make(have_token=self.token1.address,
                      have_amount=Wad.from_number(1),
                      want_token=self.token2.address,
                      want_amount=Wad.from_number(2)).transact()

        # when
        self.otc.approve([self.token2], directly())
        self.otc.take(1, Wad.from_number(1)).transact()

        # then
        assert self.otc.get_offer(1) is None
        assert self.otc.active_offers() == []
        assert self.otc.get_last_offer_id() == 1
コード例 #8
0
ファイル: test_oasis.py プロジェクト: cheaphunter/keeper
    def test_take_partial(self):
        # given
        self.otc.approve([self.token1], directly())
        self.otc.make(have_token=self.token1.address,
                      have_amount=Wad.from_number(1),
                      want_token=self.token2.address,
                      want_amount=Wad.from_number(2)).transact()

        # when
        self.otc.approve([self.token2], directly())
        self.otc.take(1, Wad.from_number(0.25)).transact()

        # then
        assert self.otc.get_offer(1).sell_how_much == Wad.from_number(0.75)
        assert self.otc.get_offer(1).buy_how_much == Wad.from_number(1.5)
        assert self.otc.active_offers() == [self.otc.get_offer(1)]
        assert self.otc.get_last_offer_id() == 1
コード例 #9
0
ファイル: test_transact.py プロジェクト: livnev/keeper
    def test_execute(self):
        # given
        self.tx.approve([self.token1], directly())

        # when
        self.tx.execute([self.token1.address],
                        [self.token1.transfer(self.other_address, Wad.from_number(500)).invocation()]).transact()

        # then
        assert self.token1.balance_of(self.our_address) == Wad.from_number(999500)
        assert self.token1.balance_of(self.other_address) == Wad.from_number(500)
コード例 #10
0
ファイル: test_transact.py プロジェクト: livnev/keeper
    def test_approve(self):
        # given
        assert self.token1.allowance_of(self.our_address, self.tx.address) == Wad(0)
        assert self.token2.allowance_of(self.our_address, self.tx.address) == Wad(0)

        # when
        self.tx.approve([self.token1, self.token2], directly())

        # then
        assert self.token1.allowance_of(self.our_address, self.tx.address) == Wad(2**256-1)
        assert self.token2.allowance_of(self.our_address, self.tx.address) == Wad(2**256-1)
コード例 #11
0
ファイル: test_oasis.py プロジェクト: cheaphunter/keeper
    def test_past_take(self):
        # when
        self.otc.approve([self.token1], directly())
        self.otc.make(have_token=self.token1.address,
                      have_amount=Wad.from_number(1),
                      want_token=self.token2.address,
                      want_amount=Wad.from_number(2)).transact()

        # and
        self.otc.approve([self.token2], directly())
        self.otc.take(1, Wad.from_number(0.5)).transact()

        # then
        past_take = self.otc.past_take(PAST_BLOCKS)
        assert len(past_take) == 1
        assert past_take[0].id == 1
        assert past_take[0].maker == self.our_address
        assert past_take[0].taker == self.our_address
        assert past_take[0].have_token == self.token1.address
        assert past_take[0].take_amount == Wad.from_number(0.5)
        assert past_take[0].want_token == self.token2.address
        assert past_take[0].give_amount == Wad.from_number(1)
        assert past_take[0].timestamp != 0
コード例 #12
0
ファイル: test_etherdelta.py プロジェクト: livnev/keeper
    def test_deposit_and_withdraw_token(self):
        # given
        self.etherdelta.approve([self.token1], directly())

        # when
        self.etherdelta.deposit_token(self.token1.address, Wad.from_number(1.5)).transact()

        # then
        assert self.etherdelta.balance_of_token(self.token1.address, self.our_address) == Wad.from_number(1.5)

        # when
        self.etherdelta.withdraw_token(self.token1.address, Wad.from_number(0.2)).transact()

        # then
        assert self.etherdelta.balance_of_token(self.token1.address, self.our_address) == Wad.from_number(1.3)
コード例 #13
0
def new_sai() -> SaiDeployment:
    def deploy(web3, contract_name, args=None):
        contract_factory = web3.eth.contract(
            abi=json.loads(
                pkg_resources.resource_string('keeper.api.feed',
                                              f'abi/{contract_name}.abi')),
            bytecode=pkg_resources.resource_string('keeper.api.feed',
                                                   f'abi/{contract_name}.bin'))
        tx_hash = contract_factory.deploy(args=args)
        receipt = web3.eth.getTransactionReceipt(tx_hash)
        return receipt['contractAddress']

    web3 = Web3(EthereumTesterProvider())
    web3.eth.defaultAccount = web3.eth.accounts[0]
    our_address = Address(web3.eth.defaultAccount)
    sai = DSToken.deploy(web3, 'SAI')
    sin = DSToken.deploy(web3, 'SIN')
    gem = DSToken.deploy(web3, 'ETH')
    pip = DSValue.deploy(web3)
    skr = DSToken.deploy(web3, 'SKR')
    pot = DSVault.deploy(web3)
    pit = DSVault.deploy(web3)
    tip = deploy(web3, 'Tip')
    dad = DSGuard.deploy(web3)
    jug = deploy(web3, 'SaiJug', [sai.address.address, sin.address.address])
    jar = deploy(
        web3, 'SaiJar',
        [skr.address.address, gem.address.address, pip.address.address])

    tub = Tub.deploy(web3, Address(jar), Address(jug), pot.address,
                     pit.address, Address(tip))
    tap = Tap.deploy(web3, tub.address, pit.address)
    top = Top.deploy(web3, tub.address, tap.address)

    # set permissions
    dad.permit(DSGuard.ANY, DSGuard.ANY, DSGuard.ANY).transact()
    tub.set_authority(dad.address)
    for auth in [sai, sin, skr, pot, pit, tap, top]:
        auth.set_authority(dad.address).transact()

    # approve, mint some GEMs
    tub.approve(directly())
    gem.mint(Wad.from_number(1000000)).transact()

    web3.currentProvider.rpc_methods.evm_snapshot()
    return SaiDeployment(web3, our_address, gem, sai, sin, skr, tub, tap, top)
コード例 #14
0
ファイル: test_oasis.py プロジェクト: cheaphunter/keeper
    def test_offer_comparison(self):
        # when
        self.otc.approve([self.token1], directly())
        self.otc.make(have_token=self.token1.address,
                      have_amount=Wad.from_number(1),
                      want_token=self.token2.address,
                      want_amount=Wad.from_number(2)).transact()

        # and
        self.otc.make(have_token=self.token1.address,
                      have_amount=Wad.from_number(3),
                      want_token=self.token2.address,
                      want_amount=Wad.from_number(4)).transact()

        # then
        assert self.otc.get_last_offer_id() == 2
        assert self.otc.get_offer(1) == self.otc.get_offer(1)
        assert self.otc.get_offer(1) != self.otc.get_offer(2)
コード例 #15
0
 def approve(self):
     """Approve EtherDelta to access our SAI, so we can deposit it with the exchange"""
     self.etherdelta.approve([self.sai], directly())
コード例 #16
0
 def approve(self):
     """Approve OasisDEX to access our balances, so we can place orders."""
     self.otc.approve([self.gem, self.sai], directly())
コード例 #17
0
ファイル: sai_top_up.py プロジェクト: cheaphunter/keeper
 def approve(self):
     self.tub.approve(directly())