Пример #1
0
        public async Task <IMulticallInputOutput[]> MultiCallAsync(BlockParameter block,
                                                                   params IMulticallInputOutput[] multiCalls)
        {
            var contractCalls = new List <Call>();

            foreach (var multiCall in multiCalls)
            {
                contractCalls.Add(new Call {
                    CallData = multiCall.GetCallData(), Target = multiCall.Target
                });
            }

            var aggregateFunction = new AggregateFunction();

            aggregateFunction.Calls = contractCalls;
            var returnCalls = await _multiQueryToDtoHandler
                              .QueryAsync(ContractAddress, aggregateFunction, block)
                              .ConfigureAwait(false);

            for (var i = 0; i < returnCalls.ReturnData.Count; i++)
            {
                multiCalls[i].Decode(returnCalls.ReturnData[i]);
            }

            return(multiCalls);
        }
Пример #2
0
        /// <summary>
        /// Queries some data from an ethereum contract.
        /// </summary>
        /// <typeparam name="TFunc"> The type of the function to send. </typeparam>
        /// <typeparam name="TOut"> The return type of the contract query. </typeparam>
        /// <param name="function"> The function containing the data to query. </param>
        /// <param name="contractAddress"> The address of the contract to query data from. </param>
        /// <param name="senderAddress"> The address of the sender which is querying data. </param>
        /// <returns> Task returning the return type of the query. </returns>
        public static Task <TOut> QueryContract <TFunc, TOut>(TFunc function, string contractAddress, string senderAddress)
            where TFunc : FunctionMessage, new()
            where TOut : IFunctionOutputDTO, new()
        {
            function.SetDefaultFromAddressIfNotSet(senderAddress);
            var queryHandler = new QueryToDTOHandler <TFunc, TOut>(NetworkProvider.GetWeb3().Client, senderAddress);

            return(queryHandler.QueryAsync(contractAddress, function));
        }