def test_exchange_wrapper__fill_order( accounts, exchange_wrapper, # pylint: disable=redefined-outer-name ganache_provider, weth_asset_data, zrx_asset_data, ): """Test filling an order.""" taker = accounts[0] maker = accounts[1] exchange_address = exchange_wrapper.contract_address order = create_test_order(maker, 1, weth_asset_data, 1, zrx_asset_data) order_hash = generate_order_hash_hex(order=order, exchange_address=exchange_address, chain_id=1337) order_signature = sign_hash(ganache_provider, maker, order_hash) web3 = Web3(ganache_provider) web3.eth.setGasPriceStrategy( # pylint: disable=no-member rpc_gas_price_strategy) fill_results = exchange_wrapper.fill_order.call( order=order, taker_asset_fill_amount=order["takerAssetAmount"], signature=order_signature, tx_params=TxParams( from_=taker, value=web3.eth.generateGasPrice() # pylint: disable=no-member * 150000, ), ) assert fill_results["makerAssetFilledAmount"] == 1 assert fill_results["takerAssetFilledAmount"] == 1 assert fill_results["makerFeePaid"] == 0 assert fill_results["takerFeePaid"] == 0 assert (fill_results["protocolFeePaid"] == web3.eth.generateGasPrice() * 150000 # pylint: disable=no-member ) tx_hash = exchange_wrapper.fill_order.send_transaction( order=order, taker_asset_fill_amount=order["takerAssetAmount"], signature=order_signature, tx_params=TxParams( from_=taker, value=web3.eth.generateGasPrice() # pylint: disable=no-member * 150000, ), ) assert_valid(tx_hash.hex(), "/hexSchema") fill_event = exchange_wrapper.get_fill_event(tx_hash) assert_fill_log(fill_event[0].args, maker, taker, order, order_hash)
def test_exchange_wrapper__fill_order( accounts, exchange_wrapper, # pylint: disable=redefined-outer-name ganache_provider, weth_asset_data, ): """Test filling an order.""" taker = accounts[0] maker = accounts[1] exchange_address = exchange_wrapper.contract_address order = create_test_order(maker, 1, weth_asset_data, 1, weth_asset_data) order_hash = generate_order_hash_hex(order=order, exchange_address=exchange_address) order_signature = sign_hash_to_bytes(ganache_provider, maker, order_hash) tx_hash = exchange_wrapper.fill_order.send_transaction( order=order, taker_asset_fill_amount=order["takerAssetAmount"], signature=order_signature, tx_params=TxParams(from_=taker), ) assert_valid(tx_hash.hex(), "/hexSchema") fill_event = exchange_wrapper.get_fill_event(tx_hash) assert_fill_log(fill_event[0].args, maker, taker, order, order_hash)
def test_erc20_wrapper__approve( accounts, erc20_proxy_address, erc20_wrapper, # pylint: disable=redefined-outer-name ): """Test approving one account to spend balance from another account.""" erc20_wrapper.approve.send_transaction( erc20_proxy_address, MAX_ALLOWANCE, tx_params=TxParams(from_=accounts[0]), ) erc20_wrapper.approve.send_transaction( erc20_proxy_address, MAX_ALLOWANCE, tx_params=TxParams(from_=accounts[1]), ) acc_1_weth_allowance = erc20_wrapper.allowance.call( accounts[0], erc20_proxy_address) acc_2_weth_allowance = erc20_wrapper.allowance.call( accounts[1], erc20_proxy_address) assert acc_1_weth_allowance == MAX_ALLOWANCE assert acc_2_weth_allowance == MAX_ALLOWANCE
def test_exchange_wrapper__batch_fill_orders( accounts, exchange_wrapper, # pylint: disable=redefined-outer-name ganache_provider, weth_asset_data, ): """Test filling a batch of orders.""" taker = accounts[0] maker = accounts[1] exchange_address = exchange_wrapper.contract_address orders = [] order_1 = create_test_order(maker, 1, weth_asset_data, 1, weth_asset_data) order_2 = create_test_order(maker, 1, weth_asset_data, 1, weth_asset_data) orders.append(order_1) orders.append(order_2) order_hashes = [ generate_order_hash_hex(order=order, exchange_address=exchange_address, chain_id=1337) for order in orders ] order_signatures = [ sign_hash(ganache_provider, maker, order_hash) for order_hash in order_hashes ] taker_amounts = [order["takerAssetAmount"] for order in orders] web3 = Web3(ganache_provider) web3.eth.setGasPriceStrategy( # pylint: disable=no-member rpc_gas_price_strategy) tx_hash = exchange_wrapper.batch_fill_orders.send_transaction( orders=orders, taker_asset_fill_amounts=taker_amounts, signatures=order_signatures, tx_params=TxParams( from_=taker, value=2 * web3.eth.generateGasPrice() # pylint: disable=no-member * 150000, ), ) assert_valid(tx_hash.hex(), "/hexSchema") fill_events = exchange_wrapper.get_fill_event(tx_hash) for index, order in enumerate(orders): assert_fill_log(fill_events[index].args, maker, taker, order, order_hashes[index])
def test_exchange_wrapper__fill_order__without_from_tx_param( accounts, exchange_wrapper, # pylint: disable=redefined-outer-name ganache_provider, weth_asset_data, zrx_asset_data, ): """Test filling an order.""" maker = accounts[1] exchange_address = exchange_wrapper.contract_address order = create_test_order(maker, 1, weth_asset_data, 1, zrx_asset_data) order_hash = generate_order_hash_hex(order=order, exchange_address=exchange_address, chain_id=1337) order_signature = sign_hash(ganache_provider, maker, order_hash) web3 = Web3(ganache_provider) web3.eth.setGasPriceStrategy( # pylint: disable=no-member rpc_gas_price_strategy) exchange_wrapper._web3_eth.defaultAccount = ( # pylint: disable=protected-access None) exchange_wrapper._web3_eth.accounts.clear() # pylint: disable=protected-access built_tx = exchange_wrapper.fill_order.build_transaction( order=order, taker_asset_fill_amount=order["takerAssetAmount"], signature=order_signature, tx_params=TxParams( value=web3.eth.generateGasPrice() # pylint: disable=no-member * 150000, ), ) assert ( built_tx["data"][:824] == "powerchain9b44d5560000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003a00000000000000000000000006ecbe1db9ef729cbe972c83fb886247691fb6beb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005af3107a40000000000000000000000000000000000000000000000000" )
def test_exchange_wrapper__batch_fill_orders( accounts, exchange_wrapper, # pylint: disable=redefined-outer-name ganache_provider, weth_asset_data, ): """Test filling a batch of orders.""" taker = accounts[0] maker = accounts[1] exchange_address = exchange_wrapper.contract_address orders = [] order_1 = create_test_order(maker, 1, weth_asset_data, 1, weth_asset_data) order_2 = create_test_order(maker, 1, weth_asset_data, 1, weth_asset_data) orders.append(order_1) orders.append(order_2) order_hashes = [ generate_order_hash_hex(order=order, exchange_address=exchange_address) for order in orders ] order_signatures = [ sign_hash_to_bytes(ganache_provider, maker, order_hash) for order_hash in order_hashes ] taker_amounts = [order["takerAssetAmount"] for order in orders] tx_hash = exchange_wrapper.batch_fill_orders.send_transaction( orders=orders, taker_asset_fill_amounts=taker_amounts, signatures=order_signatures, tx_params=TxParams(from_=taker), ) assert_valid(tx_hash.hex(), "/hexSchema") fill_events = exchange_wrapper.get_fill_event(tx_hash) for index, order in enumerate(orders): assert_fill_log(fill_events[index].args, maker, taker, order, order_hashes[index])