Ejemplo n.º 1
0
        public static RawTransaction Decode(string hexRawTransaction)
        {
            if (!StringUtils.IsHex(hexRawTransaction))
            {
                return(null);
            }
            var rawTxBytes = ByteUtils.ToByteArray(hexRawTransaction);
            var list       = RlpDecoder.Decode(rawTxBytes);

            if (list == null)
            {
                return(null);
            }
            var rlpContent = list.Values;

            //It should only has one element.
            if (rlpContent.Count != 1)
            {
                return(null);
            }
            var rawTransaction = new RawTransaction();
            var listValues     = ((RlpList)rlpContent[0]).Values;

            for (int index = 0; index < listValues.Count; index++)
            {
                FillTransaction(rawTransaction, listValues, index);
            }
            return(rawTransaction);
        }
Ejemplo n.º 2
0
        private User(byte[] rlp)
        {
            var decoder = new RlpDecoder(rlp);

            Id           = Encoding.UTF8.GetString(decoder.Next());
            PassHash     = Encoding.UTF8.GetString(decoder.Next());
            RegisterDate = Encoding.UTF8.GetString(decoder.Next());
        }
Ejemplo n.º 3
0
        private Item(byte[] rlp)
        {
            var decoder = new RlpDecoder(rlp);

            Code  = Encoding.UTF8.GetString(decoder.Next());
            Name  = Encoding.UTF8.GetString(decoder.Next());
            Price = Hex.ToNumber <decimal>(decoder.Next());
        }
Ejemplo n.º 4
0
        private Inventory(byte[] rlp) : base()
        {
            var decoder = new RlpDecoder(rlp);

            for (int i = 0; i < decoder.Count; i++)
            {
                Add(Encoding.UTF8.GetString(decoder.Next()));
            }
        }
Ejemplo n.º 5
0
        private Sales(byte[] rlp)
        {
            var decoder = new RlpDecoder(rlp);

            Order    = Encoding.UTF8.GetString(decoder.Next());
            Seller   = Encoding.UTF8.GetString(decoder.Next());
            ItemCode = Encoding.UTF8.GetString(decoder.Next());
            ItemName = Encoding.UTF8.GetString(decoder.Next());
            Price    = Coin.ToCoin(Hex.ToNumber <ulong>(decoder.Next()));
        }
Ejemplo n.º 6
0
        public void DecodeStaticString()
        {
            var input =
                "f902d6819a8702288058b9af928202d0f90273e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f800008001830616988088ff9198c817655decc0b841bd61e198f126adddb169eebf5cd3da25ae3a3f07102e574bcd1368440d1e307c4c47884364e2abc66ef6940c4953758dd1c57f8255025639702104ce83e9a3b501";

            var rlpList      = RlpDecoder.Decode(input.HexStringToByteArray());
            var nethereumRLP = RLP.Decode(input.HexStringToByteArray());


            Assert.True(RlpCompare(rlpList, nethereumRLP));
        }
Ejemplo n.º 7
0
 public static NodeType GetNodeType(RlpDecoder rlp)
 {
     if (rlp.Count == 17)
     {
         return(NodeType.FullNode);
     }
     if (rlp.Count == 2)
     {
         return(TrieKey.Decode(rlp[0].Value).HasTerm ? NodeType.ValueNode : NodeType.ShortNode);
     }
     return(NodeType.EmptyNode);
 }
Ejemplo n.º 8
0
        public void DecoderTest()
        {
            string hexRaw  = "0xf83d81c7860881eec535498202d0e1e094000000002beadb038203be21ed5ce7c9b1bff60289056bc75e2d63100000808082520880884773cc184328eb3ec0";
            var    rlpList = RlpDecoder.Decode(hexRaw.HexStringToByteArray());

            // The list should only have 1 element
            Assert.Single(rlpList);
            byte[] encodedinner    = RlpEncoder.Encode(rlpList[0]);
            string hexEncodedinner = encodedinner.ByteArrayToString(StringType.Hex | StringType.ZeroLowerX);

            Assert.Equal(hexRaw, hexEncodedinner);
        }
Ejemplo n.º 9
0
        protected Tx(byte[] rlp)
        {
            var decoder = new RlpDecoder(rlp);

            chain   = decoder.Next();
            version = decoder.Next();
            to      = decoder.Next();
            value   = decoder.Next();
            gas     = decoder.Next();
            nonce   = decoder.Next();
            data    = decoder.Next();
            extra   = decoder.Next();

            // signature rsv
            seal = decoder.Next();

            // metadata
            metadata = decoder.Next();
        }
Ejemplo n.º 10
0
        // RLP를 디코딩하여 노드 상태를 완전하게 만든다.
        internal TrieNode DecodeRLP()
        {
            if (ReferenceEquals(rlp, null))
            {
                throw new Exception("can't decode empty rlp");
            }

            if (!Parsed)
            {
                var rlp = new RlpDecoder(this.rlp);

                if (Type == NodeType.FullNode)
                {
                    if (rlp.Count != 17)
                    {
                        throw new Exception("can't decode rlp for full node");
                    }

                    // child node
                    chidrens = new TrieNode[16];
                    for (int i = 0; i < 16; i++)
                    {
                        byte[] node = trie.Read(rlp[i].Value);
                        chidrens[i] = node != null ? new TrieNode(trie, node) : null;
                    }

                    // value
                    value = rlp[16].Value;
                }
                else if (Type == NodeType.ShortNode)
                {
                    if (rlp.Count != 2)
                    {
                        throw new Exception("can't decode rlp for short node");
                    }

                    // key
                    key = TrieKey.Decode(rlp[0].Value);

                    // next node
                    byte[] node = trie.Read(rlp[1].Value);
                    next = node != null ? new TrieNode(trie, node) : null;
                }
                else if (Type == NodeType.ValueNode)
                {
                    if (rlp.Count != 2)
                    {
                        throw new Exception("can't decode rlp for value node");
                    }

                    // key
                    key = TrieKey.Decode(rlp[0].Value);

                    // value
                    value = rlp[1].Value;
                }
                else
                {
                    throw new Exception("can't decoded rlp for unknown node type");
                }

                Parsed = true;
            }

            return(this);
        }