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")
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)
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)
def approve(self): """Approve EtherDelta to access our SAI, so we can deposit it with the exchange""" self.etherdelta.approve([self.sai], directly())
def approve(self): self.tub.approve(directly())
def approve(self): """Approve all components that need to access our balances""" self.tub.approve(directly()) self.lpc.approve(directly())
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())
def approve(self): """Approve OasisDEX to access our balances, so we can place orders""" self.otc.approve([self.gem, self.sai], directly())