def test_direct_approval_should_raise_exception_if_approval_fails():
    # given
    global web3, our_address, second_address, token
    token.approve = MagicMock(return_value=None)

    # expect
    with pytest.raises(Exception):
        directly()(token, second_address, "some-name")
Esempio n. 2
0
 def approve(self):
     """Approve all components that need to access our balances"""
     approval_method = via_tx_manager(
         self.tx_manager) if self.tx_manager else directly()
     self.tub.approve(approval_method)
     self.otc.approve([self.gem, self.sai, self.skr], approval_method)
     if self.tx_manager:
         self.tx_manager.approve([self.gem, self.sai, self.skr], directly())
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)
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))

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

    # then
    assert token.allowance_of(our_address, second_address) == Wad(2**248 + 17)
    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)
    def test_execute(self):
        # given
        self.tx.approve([self.token1], directly())

        # when
        self.tx.execute([self.token1.address], [
            Invocation(
                self.token1.address,
                self.token1.transfer_calldata(self.other_address,
                                              Wad.from_number(500)))
        ])

        # 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)
Esempio n. 7
0
def new_sai() -> SaiDeployment:
    def deploy(web3, contract_name, args=None):
        contract_factory = web3.eth.contract(
            abi=json.loads(
                pkg_resources.resource_string('api.feed',
                                              f'abi/{contract_name}.abi')),
            bytecode=pkg_resources.resource_string('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)
    for auth in [sai, sin, skr, pot, pit, tub, tap, top]:
        auth.set_authority(dad.address)

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

    web3.currentProvider.rpc_methods.evm_snapshot()
    return SaiDeployment(web3, our_address, gem, sai, skr, tub, tap, top)
Esempio n. 8
0
 def approve(self):
     """Approve EtherDelta to access our SAI, so we can deposit it with the exchange"""
     self.etherdelta.approve([self.sai], directly())
Esempio n. 9
0
 def approve(self):
     self.tub.approve(directly())
Esempio n. 10
0
 def approve(self):
     """Approve all components that need to access our balances"""
     self.tub.approve(directly())
     self.lpc.approve(directly())
Esempio n. 11
0
web3 = Web3(HTTPProvider(endpoint_uri=f"http://localhost:8545"))  #kovan
web3.eth.defaultAccount = '0x002ca7F9b416B2304cDd20c26882d1EF5c53F611'

our_address = Address(web3.eth.defaultAccount)

# etherdelta_address = Address('0x8d12A197cB00D4747a1fe03395095ce2A5CC6819') #mainnet
etherdelta_address = Address(
    '0xF4Ff487adA7bb29603077216082DA7f4bA989854')  #kovan
etherdelta = EtherDelta(web3, etherdelta_address)

sai = ERC20Token(web3=web3,
                 address=Address('0xb3e5b1e7fa92f827bdb79063df9173fefd07689d'))
gem = ERC20Token(web3=web3,
                 address=Address('0x53eccc9246c1e537d79199d0c7231e425a40f896'))

etherdelta.approve([sai, gem], directly())

# print(len(etherdelta.active_onchain_orders()))
# exit(-1)
#
# etherdelta.deposit_token(sai.address, Wad.from_number(0.5))
# etherdelta.withdraw_token(sai.address, Wad.from_number(0.4))
# logging.info(etherdelta.balance_of_token(sai.address, our_address))

# etherdelta.deposit(Wad.from_number(0.1))
# etherdelta.withdraw(Wad.from_number(0.01))
# logging.info(etherdelta.balance_of(our_address))

logging.info(etherdelta.admin())
logging.info(etherdelta.fee_account())
logging.info(etherdelta.fee_make())
Esempio n. 12
0
 def approve(self):
     """Approve OasisDEX to access our balances, so we can place orders"""
     self.otc.approve([self.gem, self.sai], directly())