private async Task <EventABI[]> GetEventAbisAsync(IEventSubscriptionDto eventSubscription) { if (eventSubscription.ContractId == null) { return(null); } if (!eventSubscription.CatchAllContractEvents && eventSubscription.EventSignatures.Count == 0) { return(null); } var contractDto = await SubscriberContractRepository.GetAsync(eventSubscription.SubscriberId, eventSubscription.ContractId.Value).ConfigureAwait(false); ContractABI contractAbi = contractDto.Abi == null ? null : _abiDeserializer.DeserialiseContract(contractDto.Abi); if (contractAbi == null) { return(null); } if (eventSubscription.CatchAllContractEvents) { return(contractAbi.Events); } return(contractAbi.Events.Where(e => eventSubscription.EventSignatures.Contains(e.Sha3Signature)).ToArray()); }
static ServiceGenerator CreateGenerator() { var contractABI = new ContractABI { Constructor = new ConstructorABI { InputParameters = new[] { new ParameterABI("byte32", "owner") } }, }; contractABI.Functions = new[] { new FunctionABI("addAdministrator", false, contractABI) { InputParameters = new[] { new ParameterABI("bytes32", "administratorId", 1) }, OutputParameters = new[] { new ParameterABI("bool", 1) } } }; contractABI.Events = new[] { new EventABI("AdministratorAdded", contractABI) { InputParameters = new[] { new ParameterABI("bytes32", "administratorId", 1) } } }; return(new ServiceGenerator(contractABI, "StandardContract", "0x123456", "DefaultNamespace", "CQS", "Functions", CodeGenLanguage.CSharp)); }
public ConsoleGenerator(ContractABI contractABI, string contractName, string byteCode, string @namespace, string cqsNamespace, string functionOutputNamespace, CodeGenLanguage codeGenLanguage) { ContractABI = contractABI; ClassModel = new ConsoleModel(contractABI, contractName, byteCode, @namespace, cqsNamespace, functionOutputNamespace); ClassModel.CodeGenLanguage = codeGenLanguage; InitialiseTemplate(codeGenLanguage); }
private ContractABI DeserialiseContractBody(List <IDictionary <string, object> > contract) { var functions = new List <FunctionABI>(); var events = new List <EventABI>(); ConstructorABI constructor = null; foreach (IDictionary <string, object> element in contract) { if ((string)element["type"] == "function") { functions.Add(BuildFunction(element)); } if ((string)element["type"] == "event") { events.Add(BuildEvent(element)); } if ((string)element["type"] == "constructor") { constructor = BuildConstructor(element); } } var contractABI = new ContractABI(); contractABI.Functions = functions.ToArray(); contractABI.Constructor = constructor; contractABI.Events = events.ToArray(); return(contractABI); }
public FunctionMockupMethodCSharpTemplate(ContractABI contractAbi) { _contractAbi = contractAbi; _typeConvertor = new ABITypeToCSharpType(); _commonGenerators = new CommonGenerators(); _parameterAbiFunctionDtocSharpTemplate = new ParameterABIFunctionDTOCSharpTemplate(); }
public ContractProjectGenerator(ContractABI contractABI, string contractName, string byteCode, string baseNamespace, string serviceNamespace, string cqsNamespace, string dtoNamespace, string baseOutputPath, string pathDelimiter, CodeGenLanguage codeGenLanguage) { ContractABI = contractABI; ContractName = contractName; ByteCode = byteCode; BaseNamespace = baseNamespace; ServiceNamespace = serviceNamespace; CQSNamespace = cqsNamespace; DTONamespace = dtoNamespace; BaseOutputPath = baseOutputPath?.TrimEnd(pathDelimiter.ToCharArray()); PathDelimiter = pathDelimiter; CodeGenLanguage = codeGenLanguage; if (BaseOutputPath != null) { if (BaseOutputPath.LastIndexOf(PathDelimiter) > 0) { ProjectName = BaseOutputPath.Substring( BaseOutputPath.LastIndexOf(PathDelimiter) + PathDelimiter.Length); } } }
public ContractABI ExtractContractABI(params Type[] contractMessagesTypes) { var contractABI = new ContractABI(); var functions = new List <FunctionABI>(); var events = new List <EventABI>(); var errors = new List <ErrorABI>(); foreach (var contractMessageType in contractMessagesTypes) { if (FunctionAttribute.IsFunctionType(contractMessageType)) { functions.Add(ExtractFunctionABI(contractMessageType)); } if (EventAttribute.IsEventType(contractMessageType)) { events.Add(ExtractEventABI(contractMessageType)); } if (ErrorAttribute.IsErrorType(contractMessageType)) { errors.Add(ExtractErrorABI(contractMessageType)); } } contractABI.Functions = functions.ToArray(); contractABI.Events = events.ToArray(); contractABI.Errors = errors.ToArray(); return(contractABI); }
public ContractDefinition(string abi, string runtimeByteCode, string byteCode) { Abi = abi; RuntimeByteCode = runtimeByteCode; ByteCode = byteCode; ContractAbi = new ABIDeserialiser().DeserialiseContract(abi); }
public EventABI BuildEvent(IDictionary <string, object> eventobject, ContractABI contractAbi) { return(new EventABI((string)eventobject["name"], contractAbi) { InputParameters = this.BuildEventParameters((List <object>)eventobject["inputs"]) }); }
public ContractABI DeserialiseContract(string abi) { var convertor = new ExpandoObjectConverter(); var contract = JsonConvert.DeserializeObject <List <Dictionary <string, object> > >(abi, convertor); var functions = new List <FunctionABI>(); var events = new List <EventABI>(); ConstructorABI constructor = null; foreach (IDictionary <string, object> element in contract) { if ((string)element["type"] == "function") { functions.Add(BuildFunction(element)); } if ((string)element["type"] == "event") { events.Add(BuildEvent(element)); } if ((string)element["type"] == "constructor") { constructor = BuildConstructor(element); } } var contractABI = new ContractABI(); contractABI.Functions = functions.ToArray(); contractABI.Constructor = constructor; contractABI.Events = events.ToArray(); return(contractABI); }
public ContractABIToProtoGenerator(ContractABI contractABI, string @namespace, string name) { var constructorAbiToProtoGenerator = new ConstructorABIToProtoGenerator(contractABI.Constructor, name); var functionAbiToProtoGenerators = contractABI.Functions.Select(f => new FunctionABIToProtoGenerator(f)).ToArray(); var eventAbiToProtoGenerators = contractABI.Events.Select(e => new EventABIToProtoGenerator(e)).ToArray(); ClassModel = new ContractABIToProtoModel(name, "", constructorAbiToProtoGenerator, functionAbiToProtoGenerators, eventAbiToProtoGenerators); ClassTemplate = new ContractABIToProtoTemplate(ClassModel, @namespace); }
public string FunctionsGen(ContractABI contract) { var builder = new StringBuilder(); foreach (var function in contract.Functions) { builder.AppendLine(FunctionGen(function)); } return(builder.ToString()); }
public string EventsGen(ContractABI contract) { var builder = new StringBuilder(); foreach (var eventAbi in contract.Events) { builder.AppendLine(EventGet(eventAbi.Name)); } return(builder.ToString()); }
public ServiceModel(string abi, string byteCode, string contractName = DEFAULT_CONTRACTNAME, string namespaceName = DEFAULT_NAMESPACE) { ContractName = CapitaliseFirstChar(contractName); Namespace = CapitaliseFirstChar(namespaceName); Abi = abi; ByteCode = byteCode; var des = new ABIDeserialiser(); Contract = des.DeserialiseContract(abi); }
static EventDTOGenerator CreateGenerator() { var contractAbi = new ContractABI(); var eventAbi = new EventABI("ItemAdded", contractAbi) { InputParameters = new[] { new ParameterABI("uint256", "itemId") } }; contractAbi.Events = new EventABI[] { eventAbi }; return(new EventDTOGenerator(eventAbi, "DefaultNamespace", CodeGenLanguage.CSharp)); }
public static byte[] Pack(ContractABI abi, string funcName, object[] args, bool sm) { if (sm) { Nethereum.ABI.FunctionEncoding.ParametersEncoder pe = new Nethereum.ABI.FunctionEncoding.ParametersEncoder(); if (string.IsNullOrEmpty(funcName)) { return(pe.EncodeParameters(abi.Constructor.InputParameters, args)); } else { byte[] arguments = null, id = null; foreach (var item in abi.Functions) { if (item.Name == funcName) { id = GetMethodId(item); arguments = pe.EncodeParameters(item.InputParameters, args); } } byte[] hash = new byte[arguments.Length + id.Length]; Array.Copy(id, 0, hash, 0, id.Length); Array.Copy(arguments, 0, hash, id.Length, arguments.Length); return(hash); } } else { Nethereum.ABI.FunctionEncoding.ParametersEncoder pe = new Nethereum.ABI.FunctionEncoding.ParametersEncoder(); if (string.IsNullOrEmpty(funcName)) { return(pe.EncodeParameters(abi.Constructor.InputParameters, args)); } else { byte[] arguments = null, id = null; foreach (var item in abi.Functions) { if (item.Name == funcName) { id = Hex.Decode(item.Sha3Signature); arguments = pe.EncodeParameters(item.InputParameters, args); } } byte[] hash = new byte[arguments.Length + id.Length]; Array.Copy(id, 0, hash, 0, id.Length); Array.Copy(arguments, 0, hash, id.Length, arguments.Length); return(hash); } } }
private static ConstructorABI GetConstructor(ContractABI baseContractABI) { if (baseContractABI.Constructor == null) { return(new ConstructorABI()); } return(new ConstructorABI { InputParameters = baseContractABI.Constructor.InputParameters .Select(p => new ParameterABI(p.Type, p.Name, p.Order)).ToArray() }); }
public SimpleTestModel(ContractABI contractABI, string contractName, string @namespace, string cqsNamespace, string functionOutputNamespace) : base(@namespace, contractName, "Test") { ContractABI = contractABI; CQSNamespace = cqsNamespace; FunctionOutputNamespace = functionOutputNamespace; InitisialiseNamespaceDependencies(); NamespaceDependencies.Add(cqsNamespace); NamespaceDependencies.Add(functionOutputNamespace); }
public ServiceModel(ContractABI contractABI, string contractName, string byteCode, string @namespace, string cqsNamespace, string functionOutputNamespace) : base(@namespace, contractName, "Service") { ContractABI = contractABI; CQSNamespace = cqsNamespace; FunctionOutputNamespace = functionOutputNamespace; ContractDeploymentCQSMessageModel = new ContractDeploymentCQSMessageModel(contractABI.Constructor, cqsNamespace, byteCode, contractName); InitisialiseNamespaceDependencies(); NamespaceDependencies.Add(cqsNamespace); NamespaceDependencies.Add(functionOutputNamespace); }
static FunctionCQSMessageGenerator CreateGenerator() { var contractAbi = new ContractABI(); var functionAbi = new FunctionABI("BaseStats", constant: true, contractAbi) { InputParameters = new[] { new ParameterABI("uint256", "_number") }, OutputParameters = new[] { new ParameterABI("uint256") } }; contractAbi.Functions = new FunctionABI[] { functionAbi }; return(new FunctionCQSMessageGenerator(functionAbi, "DefaultNamespace", "FunctionOutput", CodeGenLanguage.CSharp)); }
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 void GeneratesExpectedFileName() { var abi = new ContractABI { Constructor = new ConstructorABI(), Functions = new FunctionABI[0], Events = new EventABI[0] }; var generator = new ContractABIToProtoGenerator(abi, "DefaultNamespace", "RecordHousePurchaseMessages"); var actualFileName = generator.GetFileName(); Assert.Equal("RecordHousePurchaseMessages.proto", actualFileName); }
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)); }
//Workaround when we don't have the internal type public void SetTupleTypeSameAsNameIfRequired(ContractABI contract) { foreach (var function in contract.Functions) { SetTupleTypeSameAsNameIfRequired(function.InputParameters); SetTupleTypeSameAsNameIfRequired(function.OutputParameters); } foreach (var eventItem in contract.Events) { SetTupleTypeSameAsNameIfRequired(eventItem.InputParameters); } if (contract.Constructor != null) { SetTupleTypeSameAsNameIfRequired(contract.Constructor.InputParameters); } }
public ContractABI DeserialiseABI(string abi) { var expandoObjectConverter = new ExpandoObjectConverter(); var dictionaryList = JsonConvert.DeserializeObject <List <IDictionary <string, object> > >(abi, expandoObjectConverter); var functionAbiList = new List <FunctionABI>(); var eventAbiList = new List <EventABI>(); var errorAbiList = new List <ErrorABI>(); var constructorAbi = new ConstructorABI(); var contractAbi = new ContractABI(); foreach (IDictionary <string, object> dictionary in dictionaryList) { if ((string)dictionary["type"] == "function") { functionAbiList.Add(this.BuildFunction(dictionary, contractAbi)); } if ((string)dictionary["type"] == "event") { eventAbiList.Add(this.BuildEvent(dictionary, contractAbi)); } if ((string)dictionary["type"] == "error") { errorAbiList.Add(this.BuildError(dictionary, contractAbi)); } if ((string)dictionary["type"] == "constructor") { constructorAbi = this.BuildConstructor(dictionary); } } contractAbi.Functions = functionAbiList.ToArray(); contractAbi.Constructor = constructorAbi; contractAbi.Events = eventAbiList.ToArray(); contractAbi.Errors = errorAbiList.ToArray(); var structs = _structDeserialiser.GetStructsFromAbi(abi); contractAbi.Structs = structs; _structDeserialiser.SetTupleTypeSameAsNameIfRequired(contractAbi); return(contractAbi); }
public ContractABI DeserialiseABI(string abi) { var abiDeserialiser = new ABIDeserialiser(); var baseContractABI = abiDeserialiser.DeserialiseContract(abi); var contractABI = new ContractABI { Constructor = GetConstructor(baseContractABI), Functions = baseContractABI.Functions.Select(f => { return(new FunctionABI(f.Name, f.Constant, f.Serpent) { InputParameters = f.InputParameters.Select(p => new ParameterABI(p.Type, p.Name, p.Order)) .ToArray(), OutputParameters = f.OutputParameters.Select(p => new ParameterABI(p.Type, p.Name, p.Order)) .ToArray() }); }).ToArray(), Events = baseContractABI.Events.Select(e => { return(new EventABI(e.Name) { InputParameters = e.InputParameters.Select(p => new ParameterABI(p.Type, p.Name, p.Order) { Indexed = p.Indexed }) .ToArray() }); }).ToArray() }; var structDeserialiser = new StructABIDeserialiser(); var structs = structDeserialiser.GetStructsFromAbi(abi); contractABI.Structs = structs; structDeserialiser.SetTupleTypeSameAsName(contractABI); return(contractABI); }
public ContractABI DeserialiseABI(string abi) { var abiDeserialiser = new ABIDeserialiser(); var baseContractABI = abiDeserialiser.DeserialiseContract(abi); var contractABI = new ContractABI { Constructor = new ConstructorABI { InputParameters = baseContractABI.Constructor.InputParameters .Select(p => new ParameterABI(p.Type, p.Name, p.Order)).ToArray() }, Functions = baseContractABI.Functions.Select(f => { return(new FunctionABI(f.Name, f.Constant, f.Serpent) { InputParameters = f.InputParameters.Select(p => new ParameterABI(p.Type, p.Name, p.Order)) .ToArray(), OutputParameters = f.OutputParameters.Select(p => new ParameterABI(p.Type, p.Name, p.Order)) .ToArray() }); }).ToArray(), Events = baseContractABI.Events.Select(e => { return(new EventABI(e.Name) { InputParameters = e.InputParameters.Select(p => new ParameterABI(p.Type, p.Name, p.Order) { Indexed = p.Indexed }) .ToArray() }); }).ToArray() }; return(contractABI); }
public ConsoleModel(ContractABI contractABI, string contractName, string byteCode, string @namespace, string cqsNamespace, string functionOutputNamespace) : base(@namespace, contractName, "Console") { ContractABI = contractABI; CQSNamespace = cqsNamespace; FunctionOutputNamespace = functionOutputNamespace; ContractDeploymentCQSMessageModel = new ContractDeploymentCQSMessageModel(contractABI.Constructor, cqsNamespace, byteCode, contractName); InitialiseNamespaceDependencies(); if (!string.IsNullOrEmpty(cqsNamespace)) { NamespaceDependencies.Add(cqsNamespace); } if (!string.IsNullOrEmpty(functionOutputNamespace)) { NamespaceDependencies.Add(functionOutputNamespace); } }
public ContractABI ExtractContractABI(params string[] signatures) { var contractABI = new ContractABI(); var functions = new List <FunctionABI>(); var events = new List <EventABI>(); var errors = new List <ErrorABI>(); foreach (var signature in signatures) { var match = Regex.Match(signature.Trim(), @"(?<scope>\w*)\s*(?<name>\w*)\s*" + paramsRegPattern); var scope = match.Groups["scope"].Value; var name = match.Groups["name"].Value; var parameters = match.Groups["params"].Value; if (scope == "function") { functions.Add(ExtractFunctionABI(signature.Trim(), name, parameters)); } if (scope == "event") { events.Add(ExtractEventABI(signature.Trim(), name, parameters)); } if (scope == "error") { errors.Add(ExtractErrorABI(signature.Trim(), name, parameters)); } if (scope == "constructor") { contractABI.Constructor = ExtractConstructorABI(signature.Trim(), name, parameters); } } contractABI.Functions = functions.ToArray(); contractABI.Events = events.ToArray(); contractABI.Errors = errors.ToArray(); return(contractABI); }
public ContractProjectGenerator(ContractABI contractABI, string contractName, string byteCode, string baseNamespace, string serviceNamespace, string cqsNamespace, string dtoNamespace, string baseOutputPath, string pathDelimiter, CodeGenLanguage codeGenLanguage) { ContractABI = contractABI; ContractName = contractName; ByteCode = byteCode; BaseNamespace = baseNamespace; ServiceNamespace = serviceNamespace; CQSNamespace = cqsNamespace; DTONamespace = dtoNamespace; BaseOutputPath = baseOutputPath?.TrimEnd(pathDelimiter.ToCharArray()); PathDelimiter = pathDelimiter; CodeGenLanguage = codeGenLanguage; }