/// <summary> /// Calls a smart contract method that mutates state. /// The call into the smart contract is accomplished by committing a transaction to the DAppChain. /// </summary> /// <param name="method">Smart contract method name.</param> /// <param name="functionInput">Arguments objects arrays for the smart contract method.</param> /// <returns>Nothing.</returns> public async Task <BroadcastTxResult> CallAsync(string method, params object[] functionInput) { FunctionBuilder function = this.contractBuilder.GetFunctionBuilder(method); CallInput callInput = function.CreateCallInput(functionInput); return(await this.CallAsync(callInput.Data)); }
protected async Task <TReturn> CallAsync <TReturn>(TReturn functionOuput, CallInput callInput, BlockParameter block) { var result = await CallAsync(callInput, block); return(FunctionBuilderBase.DecodeDTOTypeOutput(functionOuput, result)); }
public void ShouldForceCorrectFormatForCallInput() { var callInput = new CallInput(); callInput.From = "1"; callInput.To = "2"; callInput.Data = "3"; Assert.Equal(callInput.From, "0x1"); Assert.Equal(callInput.To, "0x2"); Assert.Equal(callInput.Data, "0x3"); callInput = new CallInput(); callInput.To = "2"; callInput.Data = "3"; Assert.Equal(callInput.From, null); Assert.Equal(callInput.To, "0x2"); Assert.Equal(callInput.Data, "0x3"); callInput = new CallInput(); Assert.Equal(callInput.From, null); Assert.Equal(callInput.To, null); Assert.Equal(callInput.Data, null); }
private Protobuf.Transaction CreateContractMethodCallTx(string method, object[] functionInput, out FunctionBuilder functionBuilder) { functionBuilder = this.contractBuilder.GetFunctionBuilder(method); CallInput callInput = functionBuilder.CreateCallInput(functionInput); return(this.CreateContractMethodCallTx(callInput.Data, Protobuf.VMType.Evm)); }
public async Task <OperationEstimationResult> EstimateTransactionExecutionCost(string from, string signedTrHex) { Nethereum.Signer.Transaction transaction = new Nethereum.Signer.Transaction(signedTrHex.HexToByteArray()); var increasedGas = new HexBigInteger(transaction.GasLimit.ToHexCompact()).Value + 1; var gasLimit = new HexBigInteger(increasedGas); var gasPrice = new HexBigInteger(transaction.GasPrice.ToHexCompact()); string hexValue = transaction.Value.ToHexCompact(); var value = new HexBigInteger(!string.IsNullOrEmpty(hexValue) ? hexValue : "0"); var to = transaction.ReceiveAddress.ToHex().EnsureHexPrefix(); var data = transaction?.Data?.ToHex()?.EnsureHexPrefix() ?? ""; var callInput = new CallInput(data, to, from, gasLimit, gasPrice, value); HexBigInteger response; try { var callResult = await _web3.Eth.Transactions.Call.SendRequestAsync(callInput); response = await _web3.Eth.Transactions.EstimateGas.SendRequestAsync(callInput); } catch (Exception e) { response = new HexBigInteger(gasLimit.Value); } return(new OperationEstimationResult() { GasAmount = response.Value, IsAllowed = response.Value < gasLimit.Value || response.Value == Constants.DefaultTransactionGas }); }
/// <summary> /// 异步 Call 调用 适用于链上调用但不需要共识(通常用constant,view等修饰的合约方法) /// </summary> /// <param name="contractAddress">合约地址</param> /// <param name="abi">合约abi</param> /// <param name="callFunctionName">调用方法名称</param> /// <returns>返回交易回执</returns> public async Task <ReceiptResultDto> CallRequestAsync(string contractAddress, string abi, string callFunctionName, Parameter[] inputsParameters = null, params object[] value) { CallInput callDto = new CallInput(); callDto.From = new Account(this._privateKey).Address.ToLower();//address ; var contractAbi = new ABIDeserialiser().DeserialiseContract(abi); callDto.To = contractAddress; callDto.Value = new HexBigInteger(0); var function = contractAbi.Functions.FirstOrDefault(x => x.Name == callFunctionName); var sha3Signature = function.Sha3Signature;// "0x53ba0944"; if (inputsParameters == null) { callDto.Data = "0x" + sha3Signature; } else { var functionCallEncoder = new FunctionCallEncoder(); var funcData = functionCallEncoder.EncodeRequest(sha3Signature, inputsParameters, value); callDto.Data = funcData; } var getRequest = new RpcRequest(this._requestId, JsonRPCAPIConfig.Call, new object[] { this._requestObjectId, callDto }); var result = await this._rpcClient.SendRequestAsync <ReceiptResultDto>(getRequest); //var getRequest = new RpcRequestMessage(this.RequestId, JsonRPCAPIConfig.Call, new object[] { this.RequestObjectId, callDto }); //var result = HttpUtils.RpcPost<ReceiptResultDto>(BaseConfig.DefaultUrl, getRequest); //同步方法 return(result); }
/// <summary> /// Estimates the gas limit of sending ether from one address to another. /// </summary> /// <param name="addressTo"> The address the ether is being sent to. </param> /// <param name="value"> The amount of ether being sent (in wei). </param> /// <returns> Task which returns the gas limit of sending ether. </returns> public static async Task <BigInteger> EstimateEthGasLimit(string addressTo, BigInteger value) { CallInput callInput = new CallInput("", addressTo, new HexBigInteger(value)); EthEstimateGas estimateGasLimit = new EthEstimateGas(NetworkProvider.GetWeb3().Client); return(await estimateGasLimit.SendRequestAsync(callInput)); }
private static IEnumerator SimpleCall(EthCallUnityRequest request, CallInput input) { var block = BlockParameter.CreateLatest(); var waiting = request.SendRequest(input, block); return(waiting); }
public void ReadDateFromContract() { CreateDefaultAccount(); HexBigInteger gas = new HexBigInteger(new BigInteger(this.gas)); HexBigInteger gasPrice = new HexBigInteger(Nethereum.Util.UnitConversion.Convert.ToWei(this.gasPrice, UnitConversion.EthUnit.Gwei)); HexBigInteger value = new HexBigInteger(Nethereum.Util.UnitConversion.Convert.ToWei(transferAmount)); CallInput input = ContractService.Instance.CreateCallInput("getBalance"); StartCoroutine(WalletManager.Instance.CallTransaction(input, (UnityRequest <string> result) => { if (result.Exception == null) { // getbalance of contract ,unit: wei BigInteger balance = ContractService.Instance.DecodeDate <BigInteger>("getBalance", result.Result); decimal ba = Nethereum.Util.UnitConversion.Convert.FromWei(balance); Debug.Log(ba); } else { throw new System.InvalidOperationException("Transfer failed"); } })); }
/// <summary> /// Calls a smart contract method that mutates state. /// The call into the smart contract is accomplished by committing a transaction to the DAppChain. /// </summary> /// <param name="functionInput">Input Data Transfer Object for smart contract method.</param> /// <returns>Nothing.</returns> /// <see href="https://nethereum.readthedocs.io/en/latest/contracts/functiondtos/"/> public async Task CallAsync <TInput>(TInput functionInput) { FunctionBuilder <TInput> function = this.contractBuilder.GetFunctionBuilder <TInput>(); CallInput callInput = function.CreateCallInput(functionInput); await this.CallAsync(callInput.Data); }
private string CreateContractMethodCallInput(string method, object[] functionInput, out FunctionBuilder functionBuilder) { functionBuilder = this.contractBuilder.GetFunctionBuilder(method); CallInput callInput = functionBuilder.CreateCallInput(functionInput); return(callInput.Data); }
/// <summary> /// Calls a smart contract method that mutates state. /// The call into the smart contract is accomplished by committing a transaction to the DAppChain. /// </summary> /// <param name="method">Smart contract method name.</param> /// <param name="functionInput">Arguments objects arrays for the smart contract method.</param> /// <returns>Nothing.</returns> public async Task CallAsync(string method, params object[] functionInput) { FunctionBuilder function = this.contractBuilder.GetFunctionBuilder(method); CallInput callInput = function.CreateCallInput(functionInput); await this.CallAsync(callInput.Data); }
public Task <HexBigInteger> EstimateGasAsync( CallInput callInput, params object[] functionInput) { var encodedInput = GetData(functionInput); return(EstimateGasFromEncAsync(encodedInput, callInput)); }
protected async Task <HexBigInteger> EstimateGasFromEncAsync(CallInput callInput) { return (await TransactionManager.EstimateGasAsync(callInput) .ConfigureAwait(false)); }
public void ShouldForceCorrectFormatForCallInput() { var callInput = new CallInput(); callInput.From = "1"; callInput.To = "2"; callInput.Data = "3"; Assert.Equal("0x1", callInput.From); Assert.Equal("0x2", callInput.To); Assert.Equal("0x3", callInput.Data); callInput = new CallInput(); callInput.To = "2"; callInput.Data = "3"; Assert.Equal(null, callInput.From); Assert.Equal("0x2", callInput.To); Assert.Equal("0x3", callInput.Data); callInput = new CallInput(); Assert.Equal(null, callInput.From); Assert.Equal(null, callInput.To); Assert.Equal(null, callInput.Data); }
public Task <TReturn> CallDeserializingToObjectAsync <TReturn>( CallInput callInput, BlockParameter blockParameter, params object[] functionInput) where TReturn : new() { var encodedInput = GetData(functionInput); return(base.CallAsync(new TReturn(), encodedInput, callInput, blockParameter)); }
public async Task <Response <string> > GetEstimatedFee(DonateViewModel model) { var response = new Response <string>(); var test = model.Amount; var callInput = new CallInput() { From = model.Address, To = model.Campaign, Value = new HexBigInteger(new BigInteger(model.Amount)) }; try { var gas = await _gethClient.Web3.Eth.Transactions.EstimateGas.SendRequestAsync(callInput); var gasPrice = await _gethClient.Web3.Eth.GasPrice.SendRequestAsync(); var gasPriceEth = Web3.Convert.FromWei(gasPrice); var estimatedFee = (decimal)gas.Value * gasPriceEth; response.Value = estimatedFee + " Eth"; response.Succeeded = true; } catch (Exception ex) { response.Message = ex.Message; response.Succeeded = false; } return(response); }
public Task <TReturn> CallAsync <TReturn>( CallInput callInput, BlockParameter blockParameter, params object[] functionInput) { var encodedInput = GetData(functionInput); return(base.CallAsync <TReturn>(encodedInput, callInput, blockParameter)); }
private string CreateContractMethodCallInput <TInput>(TInput functionInput, out FunctionBuilder <TInput> functionBuilder) { functionBuilder = this.contractBuilder.GetFunctionBuilder <TInput>(); CallInput callInput = functionBuilder.CreateCallInput(functionInput); return(callInput.Data); }
private Protobuf.Transaction CreateContractMethodCallTx <TInput>(TInput functionInput, out FunctionBuilder <TInput> functionBuilder) { functionBuilder = this.contractBuilder.GetFunctionBuilder <TInput>(); CallInput callInput = functionBuilder.CreateCallInput(functionInput); return(this.CreateContractMethodCallTx(callInput.Data, Protobuf.VMType.Evm)); }
/// <summary> /// Calls a smart contract method that mutates state. /// The call into the smart contract is accomplished by committing a transaction to the DAppChain. /// </summary> /// <param name="functionInput">Input Data Transfer Object for smart contract method.</param> /// <returns>Nothing.</returns> /// <see href="https://nethereum.readthedocs.io/en/latest/contracts/functiondtos/"/> public async Task <BroadcastTxResult> CallAsync <TInput>(TInput functionInput) { FunctionBuilder <TInput> function = this.contractBuilder.GetFunctionBuilder <TInput>(); CallInput callInput = function.CreateCallInput(functionInput); return(await this.CallAsync(callInput.Data)); }
public async Task <TReturn> CallDeserializingToObjectAsync <TReturn>( CallInput callInput, params object[] functionInput) where TReturn : new() { var encodedInput = GetData(functionInput); return(await base.CallAsync <TReturn>(new TReturn(), encodedInput, callInput)); }
public async Task <TReturn> CallAsync <TReturn>( CallInput callInput, params object[] functionInput) { var encodedInput = GetData(functionInput); return(await base.CallAsync <TReturn>(encodedInput, callInput)); }
public Task <string> SendRequestAsync(CallInput callInput, object id = null) { if (callInput == null) { throw new ArgumentNullException(nameof(callInput)); } return(base.SendRequestAsync(id, callInput, DefaultBlock)); }
public Task <HexBigInteger> SendRequestAsync(CallInput callInput, object id = null) { if (callInput == null) { throw new ArgumentNullException(nameof(callInput)); } return(SendRequestAsync(id, callInput)); }
public RpcRequest BuildRequest(CallInput callInput, object id = null) { if (callInput == null) { throw new ArgumentNullException(nameof(callInput)); } return(base.BuildRequest(id, callInput)); }
protected Task <string> CallAsync(CallInput callInput, BlockParameter block = null) { if (block == null) { block = DefaultBlockParameter; } return(_contractCall.CallAsync(callInput, block)); }
IEnumerator SendRequestCoroutine(CallInput requestParameters, System.Action <UnityRequest <string> > requestCallback) { var request = new EthCallUnityRequest(requestNode); yield return(request.SendRequest(requestParameters, Nethereum.RPC.Eth.DTOs.BlockParameter.CreateLatest())); requestCallback.Invoke(request); }
protected async Task <TReturn> CallAsync <TReturn>(TReturn functionOuput, string encodedFunctionCall, CallInput callInput, BlockParameter block) { callInput.Data = encodedFunctionCall; var result = await ethCall.SendRequestAsync(callInput, block).ConfigureAwait(false); return(FunctionCallDecoder.DecodeFunctionOutput(functionOuput, result)); }
public Task <HexBigInteger> EstimateGasAsync(TFunctionInput functionInput, CallInput callInput) { var encodedInput = GetData(functionInput); callInput.Data = encodedInput; return(EstimateGasFromEncAsync(callInput)); }
public void ShouldFindExistingCall() { SetupTestDirectory(); var saveFileRepository = new CallFileRepository(_directoryName); var input = new CallInput { TargetType = "TestTargetType", Method = "TestMethod", Arguments = new object[] { 1234L, null, DateTime.Now } }; var inputCall = new Call { Input = input, Result = new CallResult { Return = SampleObject.GetSampleObject() } }; saveFileRepository.SaveCall(inputCall); var getFileRepository = new CallFileRepository(_directoryName); var outputCall = getFileRepository.GetCall(input); Assert.That(outputCall, Is.EqualTo(inputCall)); }