using Nethereum.Contracts.MessageEncodingServices; using Nethereum.RPC.Eth.DTOs; namespace Nethereum.Contracts { public static class FunctionMessageExtensions { public static FunctionMessageEncodingService GetEncodingService(this TContractMessage contractMessage, string contractAddress=null, string defaultAddressFrom = null) where TContractMessage: FunctionMessage { return new FunctionMessageEncodingService(contractAddress, defaultAddressFrom); } public static CallInput CreateCallInput(this TContractMessage contractMessage, string contractAddress) where TContractMessage : FunctionMessage { return GetEncodingService(contractMessage, contractAddress).CreateCallInput(contractMessage); } public static TransactionInput CreateTransactionInput(this TContractMessage contractMessage, string contractAddress) where TContractMessage : FunctionMessage { return GetEncodingService(contractMessage, contractAddress).CreateTransactionInput(contractMessage); } public static TContractMessage DecodeInput(this TContractMessage contractMessage, string data) where TContractMessage : FunctionMessage { return GetEncodingService(contractMessage).DecodeInput(contractMessage, data); } public static bool IsTransactionForFunctionMessage(this Transaction transaction) where TContractMessage : FunctionMessage, new() { var contractMessage = new TContractMessage(); return GetEncodingService(contractMessage).IsTransactionForFunction(transaction); } public static TContractMessage DecodeTransactionToFunctionMessage(this Transaction transaction) where TContractMessage : FunctionMessage, new() { var contractMessage = new TContractMessage(); return GetEncodingService(contractMessage).DecodeTransactionInput(contractMessage, transaction); } public static TContractMessage DecodeTransaction(this TContractMessage contractMessage, Transaction transaction) where TContractMessage : FunctionMessage { return GetEncodingService(contractMessage).DecodeTransactionInput(contractMessage, transaction); } public static byte[] GetCallData(this TContractMessage contractMessage ) where TContractMessage : FunctionMessage { return GetEncodingService(contractMessage).GetCallData(contractMessage); } public static byte[] GetCallDataHash(this TContractMessage contractMessage) where TContractMessage : FunctionMessage { return GetEncodingService(contractMessage).GetCallDataHash(contractMessage); } public static TFunctionMessage Decode(this TransactionReceiptVO transactionWithReceipt) where TFunctionMessage : FunctionMessage, new() { return transactionWithReceipt.Transaction?.DecodeTransactionToFunctionMessage(); } public static bool IsTransactionForFunctionMessage(this TransactionReceiptVO transactionWithReceipt) where TFunctionMessage : FunctionMessage, new() { return transactionWithReceipt.Transaction?.IsTransactionForFunctionMessage() ?? false; } public static bool IsTransactionForFunctionMessage(this TransactionVO transactionVo) where TFunctionMessage : FunctionMessage, new() { return transactionVo.Transaction?.IsTransactionForFunctionMessage() ?? false; } } }