예제 #1
0
        public byte[] GetABIParamsEncodedPacked <T>(T input)
        {
            var type = typeof(T);
            var parametersEncoder = new ParametersEncoder();
            var parameterObjects  = parametersEncoder.GetParameterAttributeValues(type, input).OrderBy(x => x.ParameterAttribute.Order);

            var result = new List <byte>();

            foreach (var abiParameter in parameterObjects)
            {
                var abiType = abiParameter.ParameterAttribute.Parameter.ABIType;
                var value   = abiParameter.Value;

                result.AddRange(abiType.EncodePacked(value));
            }
            return(result.ToArray());
        }
예제 #2
0
        private TypedData GenerateTypedData <T>(T data, Domain domain, string primaryTypeName)
        {
            var parameters = _parametersEncoder.GetParameterAttributeValues(typeof(T), data).OrderBy(x => x.ParameterAttribute.Order);

            var typeMembers = new List <MemberDescription>();
            var typeValues  = new List <MemberValue>();

            foreach (var parameterAttributeValue in parameters)
            {
                typeMembers.Add(new MemberDescription
                {
                    Type = parameterAttributeValue.ParameterAttribute.Type,
                    Name = parameterAttributeValue.ParameterAttribute.Name
                });

                typeValues.Add(new MemberValue
                {
                    TypeName = parameterAttributeValue.ParameterAttribute.Type,
                    Value    = parameterAttributeValue.Value
                });
            }

            var result = new TypedData
            {
                PrimaryType = primaryTypeName,
                Types       = new Dictionary <string, MemberDescription[]>
                {
                    [primaryTypeName] = typeMembers.ToArray(),
                    ["EIP712Domain"]  = ParseDomain(domain).Select(x => x.MemberDescription).ToArray()
                },
                Message = typeValues.ToArray(),
                Domain  = domain
            };

            return(result);
        }