Ejemplo n.º 1
0
        public async Task <SmartContractFunctionResponse> ExecuteFunctionAsync(SmartContractFunctionRequest request)
        {
            Guard.NotNull(request, nameof(request));

            var web3 = GetWeb3(request.CallerPrivateKey, request.Endpoint);

            string abi = await GetContractABIAsync(request);

            var contract = web3.Eth.GetContract(abi, request.ContractAddress);

            var function = contract.GetFunction(request.FunctionName);

            object[] functionParameters = request.FunctionParameters ?? new object[0];

            HexBigInteger gas = await function.EstimateGasAsync(request.FromAddress, null, null, functionParameters);

            var receipt = await SendTransactionAsync(web3, request.FromAddress, function, functionParameters, gas);

            return(new SmartContractFunctionResponse
            {
                GasEstimated = (ulong)gas.Value,
                GasUsed = receipt != null ? (ulong?)receipt.GasUsed.Value : null,
                Response = receipt != null,
                TransactionHash = receipt?.TransactionHash
            });
        }
Ejemplo n.º 2
0
        private async Task <string> GetContractABIAsync(SmartContractFunctionRequest request)
        {
            string network = GetNetwork(request.Endpoint);
            var    entity  = await _azure.GetSmartContractAsync(network, request.ContractAddress);

            return(entity != null ? entity.ABI : request.ContractABI);
        }
Ejemplo n.º 3
0
        public async Task <SmartContractFunctionResponse> QueryFunctionAsync(SmartContractFunctionRequest request)
        {
            Guard.NotNull(request, nameof(request));

            var web3 = GetWeb3(request.CallerPrivateKey, request.Endpoint);

            string abi = await GetContractABIAsync(request);

            var contract = web3.Eth.GetContract(abi, request.ContractAddress);

            var function = contract.GetFunction(request.FunctionName);

            object[] functionParameters = request.FunctionParameters ?? new object[0];

            HexBigInteger gas = await function.EstimateGasAsync(request.FromAddress, null, null, functionParameters);

            var result = await function.CallAsync <object>(request.FromAddress, gas, null, functionParameters);

            return(new SmartContractFunctionResponse
            {
                GasEstimated = (ulong)gas.Value,
                Response = result
            });
        }