public static Tuple <string, string> TransData(string contractabi, string contractAddress, string funcName, object[] args, BigInteger groupId, BigInteger blockLimit, byte[] extraData, bool smcrypto, ECKeyPair key) { try { if (string.IsNullOrEmpty(funcName)) { return(new Tuple <string, string>("", "contract not has function")); } Nethereum.ABI.JsonDeserialisation.ABIDeserialiser abijson = new Nethereum.ABI.JsonDeserialisation.ABIDeserialiser(); var abi = abijson.DeserialiseContract(contractabi); var funcData = Pack(abi, funcName, args, smcrypto); FunctionABI method = null; foreach (var item in abi.Functions) { if (item.Name == funcName) { method = item; } } if (method.Constant) { return(new Tuple <string, string>(Hex.ToHexString(funcData), "")); } var toAddress = Hex.Decode(contractAddress.Replace("0x", "")); var nonce = RandomHelper.GetRandomBytes(32); var tx = NewTransaction(nonce, toAddress, null, GAS_LIMIT, GAS_PRICE, blockLimit, funcData, ChainId, groupId, extraData, smcrypto); var dataByte = SignData(tx, key); return(new Tuple <string, string>(Hex.ToHexString(dataByte), string.Empty)); } catch (Exception ex) { throw ex; } }
protected FunctionBuilderBase(ContractBuilder contract, FunctionABI functionAbi) { FunctionABI = functionAbi; _contract = contract; FunctionCallDecoder = new FunctionCallDecoder(); FunctionCallEncoder = new FunctionCallEncoder(); }
public string GenerateClass(FunctionABI functionABI) { var header = ""; if (_functionABIModel.IsMultipleOutput(functionABI)) { header = $@"{SpaceUtils.OneTab}[Function(""{functionABI.Name}"", typeof({_functionOutputDTOModel.GetFunctionOutputTypeName(functionABI)}))]"; } if (_functionABIModel.IsSingleOutput(functionABI)) { header = $@"{SpaceUtils.OneTab}[Function(""{functionABI.Name}"", ""{_functionABIModel.GetSingleAbiReturnType(functionABI)}""))]"; } if (_functionABIModel.HasNoReturn(functionABI)) { header = $@"{SpaceUtils.OneTab}[Function(""{functionABI.Name}""]"; } return($@"{header} {SpaceUtils.OneTab}public class {_functionCQSMessageModel.GetFunctionMessageTypeName(functionABI)}:ContractMessage {SpaceUtils.OneTab}{{ {_parameterABIFunctionDTOTemplate.GenerateAllProperties(functionABI.InputParameters)} {SpaceUtils.OneTab}}}"); }
private FunctionABI GetNethFunctionABI(IAbiFunctionDefinition definition) { var functionABI = new FunctionABI(definition.Name, definition.Constant); functionABI.InputParameters = this.GetNethParameters(definition.inputs); functionABI.OutputParameters = this.GetNethParameters(definition.outputs); return(functionABI); }
private string GetFunctionDisplay(FunctionABI functionAbi) { return($@" {SpaceUtils.ThreeTabs}/** Function: {functionAbi.Name}**/ {SpaceUtils.ThreeTabs}/* {GenerateMethod(functionAbi)} {SpaceUtils.ThreeTabs}*/"); }
public string GetSingleOutputReturnType(FunctionABI functionABI) { if (functionABI.OutputParameters != null && functionABI.OutputParameters.Length == 1) { return(abiTypeToCSharpType.GetTypeMap(functionABI.OutputParameters[0].Type, true)); } return(null); }
public FunctionOutputDTOGenerator(FunctionABI functionABI, string @namespace, CodeGenLanguage codeGenLanguage) { ClassModel = new FunctionOutputDTOModel(functionABI, @namespace) { CodeGenLanguage = codeGenLanguage }; InitialiseTemplate(codeGenLanguage); }
public string GetSingleOutputGenericReturnType(FunctionABI item) { if (item == null) { return(String.Empty); } return($"<{GetSingleOutputReturnType(item)}>"); }
public string GetSingleAbiReturnType(FunctionABI functionABI) { if (functionABI.OutputParameters != null && functionABI.OutputParameters.Length == 1) { return(functionABI.OutputParameters[0].Type); } return(null); }
public string GetReturnType(FunctionABI functionABI) { if (functionABI.OutputParameters != null && functionABI.OutputParameters.Length == 1) { return(GetTypeMap(functionABI.OutputParameters[0].Type, true)); } return(null); }
public string GenerateMethod(FunctionABI functionABI) { var functionCQSMessageModel = new FunctionCQSMessageModel(functionABI, _model.CQSNamespace); var functionOutputDTOModel = new FunctionOutputDTOModel(functionABI, _model.FunctionOutputNamespace); var functionABIModel = new FunctionABIModel(functionABI, _typeConvertor); var messageType = functionCQSMessageModel.GetTypeName(); var messageVariableName = functionCQSMessageModel.GetVariableName(); var functionNameUpper = _commonGenerators.GenerateClassName(functionABI.Name); if (functionABIModel.IsMultipleOutput() && !functionABIModel.IsTransaction()) { var functionOutputDTOType = functionOutputDTOModel.GetTypeName(); return ($@"{SpaceUtils.TwoTabs}Public Function {functionNameUpper}QueryAsync(ByVal {messageVariableName} As {messageType}, ByVal Optional blockParameter As BlockParameter = Nothing) As Task(Of {functionOutputDTOType}) {SpaceUtils.TwoTabs} {SpaceUtils.ThreeTabs}Return ContractHandler.QueryDeserializingToObjectAsync(Of {messageType}, {functionOutputDTOType})({messageVariableName}, blockParameter) {SpaceUtils.TwoTabs} {SpaceUtils.TwoTabs}End Function"); } if (functionABIModel.IsSingleOutput() && !functionABIModel.IsTransaction()) { if (functionABI.OutputParameters != null && functionABI.OutputParameters.Length == 1 && functionABI.Constant) { var type = functionABIModel.GetSingleOutputReturnType(); return ($@"{SpaceUtils.TwoTabs}Public Function {functionNameUpper}QueryAsync(ByVal {messageVariableName} As {messageType}, ByVal Optional blockParameter As BlockParameter = Nothing) As Task(Of {type}) {SpaceUtils.TwoTabs} {SpaceUtils.ThreeTabs}Return ContractHandler.QueryAsync(Of {messageType}, {type})({messageVariableName}, blockParameter) {SpaceUtils.TwoTabs} {SpaceUtils.TwoTabs}End Function"); } } if (functionABIModel.IsTransaction()) { var transactionRequest = $@"{SpaceUtils.TwoTabs}Public Function {functionNameUpper}RequestAsync(ByVal {messageVariableName} As {messageType}) As Task(Of String) {SpaceUtils.TwoTabs} {SpaceUtils.ThreeTabs}Return ContractHandler.SendRequestAsync({messageVariableName}) {SpaceUtils.TwoTabs} {SpaceUtils.TwoTabs}End Function"; var transactionRequestAndReceipt = $@"{SpaceUtils.TwoTabs}Public Function {functionNameUpper}RequestAndWaitForReceiptAsync(ByVal {messageVariableName} As {messageType}, ByVal Optional cancellationToken As CancellationTokenSource = Nothing) As Task(Of TransactionReceipt) {SpaceUtils.TwoTabs} {SpaceUtils.ThreeTabs}Return ContractHandler.SendRequestAndWaitForReceiptAsync({messageVariableName}, cancellationToken) {SpaceUtils.TwoTabs} {SpaceUtils.TwoTabs}End Function"; return(transactionRequest + Environment.NewLine + transactionRequestAndReceipt); } return(null); }
public FunctionABI BuildFunction(IDictionary <string, object> function) { var functionABI = new FunctionABI((string)function["name"], (bool)function["constant"], TryGetSerpentValue(function)); functionABI.InputParameters = BuildFunctionParameters((List <object>)function["inputs"]); functionABI.OutputParameters = BuildFunctionParameters((List <object>)function["outputs"]); return(functionABI); }
static FunctionOutputDTOGenerator CreateGenerator() { var functionAbi = new FunctionABI("GetCar", true) { OutputParameters = new[] { new ParameterABI("uint32", "id", 1), new ParameterABI("string", "name", 2) } }; return(new FunctionOutputDTOGenerator(functionAbi, "DefaultNamespace", CodeGenLanguage.CSharp)); }
public FunctionPrinter() { _functionAbi = ABITypedRegistry.GetFunctionABI <TFunctionInput>(); if (_functionAbi == null) { throw new ArgumentException("Function for TFunctionInput not found in contract"); } }
public string GetGenericReturnType(FunctionABI item) { if (item == null) { return(String.Empty); } var returnType = GetReturnType(item); return("<" + returnType + ">"); }
public FunctionCQSMessageGenerator(FunctionABI functionABI, string @namespace, string namespaceFunctionOutput, CodeGenLanguage codeGenLanguage) { FunctionABI = functionABI; ClassModel = new FunctionCQSMessageModel(FunctionABI, @namespace); ClassModel.NamespaceDependencies.Add(namespaceFunctionOutput); ClassModel.CodeGenLanguage = codeGenLanguage; var functionOutputDTOModel = new FunctionOutputDTOModel(functionABI, namespaceFunctionOutput); InitialiseTemplate(codeGenLanguage, functionOutputDTOModel); }
public void GeneratesExpectedFileName() { var abi = new FunctionABI("recordHousePurchase", false) { }; var generator = new FunctionABIToProtoGenerator(abi); var actualFileName = generator.GetFileName(); Assert.Equal("RecordHousePurchaseMessages.proto", actualFileName); }
public string GenerateMethod(FunctionABI functionABI) { var functionCQSMessageModel = new FunctionCQSMessageModel(functionABI, _model.CQSNamespace); var functionOutputDTOModel = new FunctionOutputDTOModel(functionABI, _model.FunctionOutputNamespace); var functionABIModel = new FunctionABIModel(functionABI, _typeConvertor); var messageType = functionCQSMessageModel.GetTypeName(); var messageVariableName = functionCQSMessageModel.GetVariableName(); var functionNameUpper = _commonGenerators.GenerateClassName(functionABI.Name); if (functionABIModel.IsMultipleOutput() && !functionABIModel.IsTransaction()) { var functionOutputDTOType = functionOutputDTOModel.GetTypeName(); return ($@"{SpaceUtils.TwoTabs}member this.{functionNameUpper}QueryAsync({messageVariableName}: {messageType}, ?blockParameter: BlockParameter): Task<{functionOutputDTOType}> = {SpaceUtils.ThreeTabs}let blockParameterVal = defaultArg blockParameter null {SpaceUtils.ThreeTabs}this.ContractHandler.QueryDeserializingToObjectAsync<{messageType}, {functionOutputDTOType}>({messageVariableName}, blockParameterVal) {SpaceUtils.ThreeTabs}"); } if (functionABIModel.IsSingleOutput() && !functionABIModel.IsTransaction()) { if (functionABI.OutputParameters != null && functionABI.OutputParameters.Length == 1 && functionABI.Constant) { var type = functionABIModel.GetSingleOutputReturnType(); return ($@"{SpaceUtils.TwoTabs}member this.{functionNameUpper}QueryAsync({messageVariableName}: {messageType}, ?blockParameter: BlockParameter): Task<{type}> = {SpaceUtils.ThreeTabs}let blockParameterVal = defaultArg blockParameter null {SpaceUtils.ThreeTabs}this.ContractHandler.QueryAsync<{messageType}, {type}>({messageVariableName}, blockParameterVal) {SpaceUtils.ThreeTabs}"); } } if (functionABIModel.IsTransaction()) { var transactionRequest = $@"{SpaceUtils.TwoTabs}member this.{functionNameUpper}RequestAsync({messageVariableName}: {messageType}): Task<string> = {SpaceUtils.ThreeTabs}this.ContractHandler.SendRequestAsync({messageVariableName}); {SpaceUtils.TwoTabs}"; var transactionRequestAndReceipt = $@"{SpaceUtils.TwoTabs}member this.{functionNameUpper}RequestAndWaitForReceiptAsync({messageVariableName}: {messageType}, ?cancellationTokenSource : CancellationTokenSource): Task<TransactionReceipt> = {SpaceUtils.ThreeTabs}let cancellationTokenSourceVal = defaultArg cancellationTokenSource null {SpaceUtils.ThreeTabs}this.ContractHandler.SendRequestAndWaitForReceiptAsync({messageVariableName}, cancellationTokenSourceVal); {SpaceUtils.TwoTabs}"; return(transactionRequest + Environment.NewLine + transactionRequestAndReceipt); } return(null); }
protected FunctionBase(IClient rpcClient, Contract contract, FunctionABI functionABI) { FunctionABI = functionABI; this.rpcClient = rpcClient; this.contract = contract; this.ethCall = new EthCall(rpcClient); this.ethSendTransaction = new EthSendTransaction(rpcClient); this.FunctionCallDecoder = new FunctionCallDecoder(); this.FunctionCallEncoder = new FunctionCallEncoder(); }
public static byte[] GetMethodId(FunctionABI func) { List <Parameter> list = new List <Parameter>(func.InputParameters); byte[] hash = DigestUtilities.CalculateDigest ("SM3", System.Text.Encoding.UTF8.GetBytes(string.Format("{0}({1})", func.Name, string.Join(',', list.ConvertAll(a => a.Type))))); byte[] id = new byte[4]; Array.Copy(hash, id, 4); return(id); }
protected FunctionBase(IClient rpcClient, Contract contract, FunctionABI functionABI) { FunctionABI = functionABI; this.rpcClient = rpcClient; this.contract = contract; ethCall = new EthCall(rpcClient); ethSendTransaction = new EthSendTransaction(rpcClient); ethEstimateGas = new EthEstimateGas(rpcClient); personalSignAndSendTransaction = new PersonalSignAndSendTransaction(rpcClient); FunctionCallDecoder = new FunctionCallDecoder(); FunctionCallEncoder = new FunctionCallEncoder(); }
public string FunctionGen(FunctionABI function) { var functionGet = FunctionGet(function.Name); var functionCall = FunctionCall(function); var functionTransaction = FunctionTransaction(function); var builder = new StringBuilder(); builder.AppendLine(functionGet); builder.AppendLine(functionCall); builder.AppendLine(functionTransaction); return(builder.ToString()); }
public string GenerateClass(FunctionABI functionABI) { if (_functionOutputDTOModel.CanGenerateOutputDTO(functionABI)) { return ($@"{SpaceUtils.OneTab}[FunctionOutput] {SpaceUtils.OneTab}public class {_functionOutputDTOModel.GetFunctionOutputTypeName(functionABI)} {SpaceUtils.OneTab}{{ {_parameterABIFunctionDTOTemplate.GenerateAllProperties(functionABI.OutputParameters)} {SpaceUtils.OneTab}}}"); } return(null); }
public string GenerateClass(FunctionABI functionABI) { if (functionABIFunctionOutputDtoModel.CanGenerateOutputDTO(functionABI)) { return ($@"[FunctionOutput] public class {functionABIFunctionOutputDtoModel.GetFunctionOutputTypeName(functionABI)} {{ {parameterABIFunctionDtoClassTemplate.GenerateAllProperties(functionABI.OutputParameters)} }}"); } return(null); }
public void GeneratesExpectedProtoBufferContent() { var constructorAbi = new ConstructorABI() { InputParameters = new[] { new ParameterABI("bytes32", "ownerId", 1) } }; var functionAbi1 = new FunctionABI("recordHousePurchase", false) { InputParameters = new[] { new ParameterABI("bytes32", "propertyId", 1), new ParameterABI("bytes32", "buyerId", 2), new ParameterABI("uint32", "date", 3), new ParameterABI("uint32", "price", 4), }, OutputParameters = new[] { new ParameterABI("uint"), } }; var eventAbi1 = new EventABI("HousePurchased") { InputParameters = new[] { new ParameterABI("int32", "purchaseId", 1), new ParameterABI("bytes32", "propertyId", 2), new ParameterABI("bytes32", "buyerId", 3), new ParameterABI("uint32", "date", 4), new ParameterABI("uint32", "price", 5), } }; var contractABI = new ContractABI { Constructor = constructorAbi, Functions = new[] { functionAbi1 }, Events = new[] { eventAbi1 } }; var generator = new ContractABIToProtoGenerator(contractABI, "Proxy.Ethereum.Samples.HousePurchase", "HousePurchase"); var actualProtoFileContent = generator.GenerateFileContent(); var expectedContent = GetExpectedProtoContent("ContractABIToProto.01.proto"); Assert.Equal(expectedContent, actualProtoFileContent); }
public string GenerateFullClass(FunctionABI functionABI, string namespaceName) { return ($@"using System; using System.Threading.Tasks; using System.Numerics; using Nethereum.Hex.HexTypes; using Nethereum.ABI.FunctionEncoding.Attributes; namespace {namespaceName} {{ {GenerateClass(functionABI)} }} "); }
public string FunctionCall(FunctionABI function) { var functionNameUpper = MakeFirstCharUpper(function.Name); var parameters = GetFunctionParameters(function.InputParameters); var callParameters = GetFunctionCallParameters(function.InputParameters); var returnType = ""; if (function.OutputParameters != null && function.OutputParameters.Length > 0) { returnType = GetTypeMap(function.OutputParameters.FirstOrDefault().ABIType.Name); } return(string.Format(FunctionCallTemplate, functionNameUpper, parameters, callParameters, "<" + returnType + ">")); }
static FunctionOutputDTOGenerator CreateGenerator() { var contractAbi = new ContractABI(); var functionAbi = new FunctionABI("GetCar", true, contractAbi) { OutputParameters = new[] { new ParameterABI("uint", order: 1), new ParameterABI("string", order: 2) } }; contractAbi.Functions = new FunctionABI[] { functionAbi }; return(new FunctionOutputDTOGenerator(functionAbi, "DefaultNamespace", CodeGenLanguage.CSharp)); }
public string FunctionTransaction(FunctionABI function) { if (!function.Constant) { var functionNameUpper = MakeFirstCharUpper(function.Name); var parameters = GetFunctionParameters(function.InputParameters); var callParameters = GetFunctionCallParameters(function.InputParameters); if (!string.IsNullOrEmpty(callParameters)) { callParameters = callParameters + ","; } return(string.Format(FunctionTransactionTemplate, functionNameUpper, parameters, callParameters)); } return(""); }
public string GenerateMethod(FunctionABI functionABI) { var messageType = _functionCQSMessageModel.GetFunctionMessageTypeName(functionABI); var messageVariableName = _functionCQSMessageModel.GetFunctionMessageVariableName(functionABI); if (_functionOutputDTOModel.CanGenerateOutputDTO(functionABI)) { var functionOutputDTOType = _functionOutputDTOModel.GetFunctionOutputTypeName(functionABI); return ($@"{SpaceUtils.TwoTabs}public Task<{functionOutputDTOType}> {_commonGenerators.GenerateClassName(functionABI.Name)}QueryAsync({messageType} {messageVariableName}, BlockParameter blockParameter = null) {SpaceUtils.TwoTabs}{{ {SpaceUtils.ThreeTabs}return ContractHandler.QueryDeserializingToObjectAsync<{messageType}, {functionOutputDTOType}>({messageVariableName}, blockParameter); {SpaceUtils.TwoTabs}}}"); } if (functionABI.OutputParameters != null && functionABI.OutputParameters.Length == 1 && functionABI.Constant) { var type = _abiTypeToCSharpType.GetTypeMap(functionABI.OutputParameters[0].Type); return ($@"{SpaceUtils.TwoTabs}public Task<{type}> {_commonGenerators.GenerateClassName(functionABI.Name)}QueryAsync({messageType} {messageVariableName}, BlockParameter blockParameter = null) {SpaceUtils.TwoTabs}{{ {SpaceUtils.ThreeTabs}return ContractHandler.QueryAsync<{messageType}, {type}>({messageVariableName}, blockParameter); {SpaceUtils.TwoTabs}}}"); } if (functionABI.Constant == false || (functionABI.OutputParameters == null || functionABI.OutputParameters.Length == 0)) { var transactionRequest = $@"{SpaceUtils.TwoTabs}public Task<string> {_commonGenerators.GenerateClassName(functionABI.Name)}RequestAsync({messageType} {messageVariableName}) {SpaceUtils.TwoTabs}{{ {SpaceUtils.ThreeTabs} return ContractHandler.SendRequestAsync({messageVariableName}); {SpaceUtils.TwoTabs}}}"; var transactionRequestAndReceipt = $@"{SpaceUtils.TwoTabs}public Task<TransactionReceipt> {_commonGenerators.GenerateClassName(functionABI.Name)}RequestAndWaitForReceiptAsync({messageType} {messageVariableName}, CancellationTokenSource cancellationToken = null) {SpaceUtils.TwoTabs}{{ {SpaceUtils.ThreeTabs} return ContractHandler.SendRequestAndWaitForReceiptAsync({messageVariableName}, cancellationToken); {SpaceUtils.TwoTabs}}}"; return(transactionRequest + Environment.NewLine + transactionRequestAndReceipt); } return(null); }