示例#1
0
        public void Deserialize_Basic_Log_Success()
        {
            var network             = new SmartContractsPoATest();
            var primitiveSerializer = new ContractPrimitiveSerializer(network);

            var testStruct = new TestLog
            {
                Id      = uint.MaxValue,
                Name    = "Test ID",
                Data    = 0xAA,
                Datas   = new byte[] { 0xBB, 0xCC, 0xDD },
                Truth   = true,
                Address = "0x0000000000000000000000000000000000000001".HexToAddress()
            };

            var testBytes = primitiveSerializer.Serialize(testStruct);

            var     serializer      = new ApiLogDeserializer(primitiveSerializer, network);
            dynamic deserializedLog = serializer.DeserializeLogData(testBytes, typeof(TestLog));

            Assert.Equal(testStruct.Id, deserializedLog.Id);
            Assert.Equal(testStruct.Name, deserializedLog.Name);
            Assert.Equal(testStruct.Data, deserializedLog.Data);
            Assert.True(testStruct.Datas.SequenceEqual((byte[])deserializedLog.Datas));
            Assert.Equal(testStruct.Truth, deserializedLog.Truth);
            Assert.Equal(testStruct.Address.ToUint160().ToBase58Address(network), deserializedLog.Address);
        }
        private List <LogResponse> MapLogResponses(Receipt receipt, Assembly assembly, ApiLogDeserializer deserializer)
        {
            var logResponses = new List <LogResponse>();

            foreach (Log log in receipt.Logs)
            {
                var logResponse = new LogResponse(log, this.network);

                logResponses.Add(logResponse);

                if (log.Topics.Count == 0)
                {
                    continue;
                }

                // Get receipt struct name
                string eventTypeName = Encoding.UTF8.GetString(log.Topics[0]);

                // Find the type in the module def
                Type eventType = assembly.DefinedTypes.FirstOrDefault(t => t.Name == eventTypeName);

                if (eventType == null)
                {
                    // Couldn't match the type, continue?
                    continue;
                }

                // Deserialize it
                dynamic deserialized = deserializer.DeserializeLogData(log.Data, eventType);

                logResponse.Log = deserialized;
            }

            return(logResponses);
        }
        public void Deserialize_Basic_Log_Success()
        {
            var network             = new SmartContractsRegTest();
            var primitiveSerializer = new ContractPrimitiveSerializer(network);

            var testStruct = new TestLog
            {
                Id       = uint.MaxValue,
                Name     = "Test ID",
                Data     = 0xAA,
                Datas    = new byte[] { 0xBB, 0xCC, 0xDD },
                Truth    = true,
                Address  = "0x0000000000000000000000000000000000000001".HexToAddress(),
                Value128 = 123,
                Value256 = 456
            };

            var testBytes = primitiveSerializer.Serialize(testStruct);

            var     serializer      = new ApiLogDeserializer(primitiveSerializer, network, Mock.Of <IStateRepositoryRoot>(), Mock.Of <IContractAssemblyCache>());
            dynamic deserializedLog = serializer.DeserializeLogData(testBytes, typeof(TestLog));

            Assert.Equal(testStruct.Id, deserializedLog.Id);
            Assert.Equal(testStruct.Name, deserializedLog.Name);
            Assert.Equal(testStruct.Data, deserializedLog.Data);
            Assert.True(testStruct.Datas.SequenceEqual((byte[])deserializedLog.Datas));
            Assert.Equal(testStruct.Truth, deserializedLog.Truth);
            Assert.Equal(testStruct.Address.ToUint160().ToBase58Address(network), deserializedLog.Address);
            Assert.Equal(testStruct.Value128.ToString(), deserializedLog.Value128.ToString());
            Assert.Equal(testStruct.Value256.ToString(), deserializedLog.Value256.ToString());
        }