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); }
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()); }
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()); }
private Inventory(byte[] rlp) : base() { var decoder = new RlpDecoder(rlp); for (int i = 0; i < decoder.Count; i++) { Add(Encoding.UTF8.GetString(decoder.Next())); } }
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())); }
public void DecodeStaticString() { var input = "f902d6819a8702288058b9af928202d0f90273e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f8000080e094d3ef28df6b553ed2fc47259e8134319cb1121a2a89364200111c48f800008001830616988088ff9198c817655decc0b841bd61e198f126adddb169eebf5cd3da25ae3a3f07102e574bcd1368440d1e307c4c47884364e2abc66ef6940c4953758dd1c57f8255025639702104ce83e9a3b501"; var rlpList = RlpDecoder.Decode(input.HexStringToByteArray()); var nethereumRLP = RLP.Decode(input.HexStringToByteArray()); Assert.True(RlpCompare(rlpList, nethereumRLP)); }
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); }
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); }
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(); }
// 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); }