Exemple #1
0
        protected async Task <string> SendTx(CallData callData, TxParameters txParams)
        {
            TransactionInput tx = new TransactionInput
            {
                From = CallerAccount.Address,
                To   = ContractAddress,
                Data = callData.TxData.ToHex(true)
            };

            tx.Gas = txParams == null || !txParams.GasLimit.HasValue ?
                     await _web3.Eth.Transactions.EstimateGas.SendRequestAsync(tx) : new HexBigInteger(txParams.GasLimit.Value);

            tx.GasPrice = new HexBigInteger(txParams == null || !txParams.GasPrice.HasValue ?
                                            Web3.Convert.ToWei(1, Nethereum.Util.UnitConversion.EthUnit.Gwei) : txParams.GasPrice.Value);

            tx.Nonce = txParams == null || !txParams.Nonce.HasValue ? await GetNonce() : new HexBigInteger(txParams.Nonce.Value);

            return(await _web3.TransactionManager.SendTransactionAsync(tx));
        }
Exemple #2
0
        /// <summary>
        /// Cancel order using this contract caller address as maker
        /// </summary>
        /// <param name="order">Order to cancel</param>
        /// <returns>Task which resolves into tx hash</returns>
        /// <exception cref="ArgumentNullException">Thrown when <paramref name="order"/>
        /// is equal to <c>null</c></exception>
        /// <exception cref="ArgumentException">Thrown when either MakerAddress
        /// property of <paramref name="order"/> not equal to this contract caller address
        /// or </exception>
        public async Task <string> CancelOrderAsync(Order order, TxParameters txParams = null)
        {
            order = order ?? throw new ArgumentNullException(nameof(order));

            if (order.MakerAddress != CallerAccount.Address)
            {
                throw new ArgumentException($"{nameof(order)}.{nameof(Order.MakerAddress)} must " +
                                            $"be equal to caller account address", nameof(order));
            }

            if (order.SenderAddress != CallerAccount.Address && order.SenderAddress != EthereumAddress.ZeroAddress)
            {
                throw new ArgumentException($"{order}.{nameof(Order.SenderAddress)} must be equal to zero " +
                                            $"address or this contract caller address", nameof(order));
            }

            CallData callData = CancelOrderCallData(order, ContractAddress, _web3);

            return(await SendTx(callData, txParams));
        }
Exemple #3
0
        /// <summary>
        /// Fills order, exchanges tokens between Maker and Taker
        /// </summary>
        /// <param name="order">0x order</param>
        /// <param name="takerAssetFillAmount">Amount to fill</param>
        /// <param name="makerSignature">Maker signature of the order</param>
        /// <param name="takerSignature">Taker signature of 0x <see cref="Transaction"/></param>
        /// <param name="txSalt">0x <see cref="Transaction"/> salt</param>
        /// <param name="txParams">Ethereum transaction parameters</param>
        /// <returns>Task which resolves into tx hash</returns>
        /// <exception cref="ArgumentNullException">Any of the arguments is equal to <c>null</c></exception>
        /// <exception cref="ArgumentException">Thrown when SenderAddress property of <paramref name="order"/>
        /// not equal to this contract instance caller address</exception>
        public async Task <string> FillOrderAsync(Order order, BigInteger takerAssetFillAmount,
                                                  byte[] makerSignature, byte[] takerSignature, BigInteger txSalt, TxParameters txParams = null)
        {
            order          = order ?? throw new ArgumentNullException(nameof(order));
            makerSignature = makerSignature ?? throw new ArgumentNullException(nameof(makerSignature));
            takerSignature = takerSignature ?? throw new ArgumentNullException(nameof(takerSignature));

            if (order.SenderAddress != CallerAccount.Address)
            {
                throw new ArgumentException($"{nameof(order)}.{nameof(Order.SenderAddress)} " +
                                            $"must be equal to caller account address", nameof(order));
            }

            CallData callData = FillOrderCallData(order, takerAssetFillAmount,
                                                  makerSignature, takerSignature, txSalt, ContractAddress, _web3);

            return(await SendTx(callData, txParams));
        }