From 74f5acf040ab3eda6088967d9b7673d3fe977dea Mon Sep 17 00:00:00 2001 From: Luchuan Date: Thu, 26 Sep 2019 23:17:48 +0800 Subject: [PATCH] Add `vmState` field in rpc getrawtransaction result (#1117) * add internal to DB and WriteBatch * add vmstate field in rpc getrawtransaction result * reset db.cs writebatch.cs * Optimize * Update RpcServer.cs * Format * Update RpcServer.cs * Update RpcTransaction.cs * Update UT_RpcClient.cs * Fixes `RpcTransaction.VMState` --- neo.UnitTests/Network/RPC/UT_RpcClient.cs | 2 ++ neo/Network/RPC/Models/RpcTransaction.cs | 5 +++++ neo/Network/RPC/RpcServer.cs | 7 ++++--- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/neo.UnitTests/Network/RPC/UT_RpcClient.cs b/neo.UnitTests/Network/RPC/UT_RpcClient.cs index 0875a5a793..7294d3ccb3 100644 --- a/neo.UnitTests/Network/RPC/UT_RpcClient.cs +++ b/neo.UnitTests/Network/RPC/UT_RpcClient.cs @@ -355,11 +355,13 @@ public void TestGetRawTransaction() json["blockhash"] = UInt256.Zero.ToString(); json["confirmations"] = 100; json["blocktime"] = 10; + json["vmState"] = VMState.HALT; MockResponse(response.ToString()); result = rpc.GetRawTransaction("0x9786cce0dddb524c40ddbdd5e31a41ed1f6b5c8a683c122f627ca4a007a7cf4e"); Assert.AreEqual(transaction.Hash, result.Transaction.Hash); Assert.AreEqual(100, result.Confirmations); + Assert.AreEqual(VMState.HALT, result.VMState); Assert.AreEqual(json.ToString(), result.ToJson().ToString()); } diff --git a/neo/Network/RPC/Models/RpcTransaction.cs b/neo/Network/RPC/Models/RpcTransaction.cs index f41c04710a..f96179c358 100644 --- a/neo/Network/RPC/Models/RpcTransaction.cs +++ b/neo/Network/RPC/Models/RpcTransaction.cs @@ -1,5 +1,6 @@ using Neo.IO.Json; using Neo.Network.P2P.Payloads; +using Neo.VM; namespace Neo.Network.RPC.Models { @@ -13,6 +14,8 @@ public class RpcTransaction public uint? BlockTime { get; set; } + public VMState? VMState { get; set; } + public JObject ToJson() { JObject json = Transaction.ToJson(); @@ -21,6 +24,7 @@ public JObject ToJson() json["blockhash"] = BlockHash.ToString(); json["confirmations"] = Confirmations; json["blocktime"] = BlockTime; + json["vmState"] = VMState; } return json; } @@ -34,6 +38,7 @@ public static RpcTransaction FromJson(JObject json) transaction.BlockHash = UInt256.Parse(json["blockhash"].AsString()); transaction.Confirmations = (int)json["confirmations"].AsNumber(); transaction.BlockTime = (uint)json["blocktime"].AsNumber(); + transaction.VMState = json["vmState"].TryGetEnum(); } return transaction; } diff --git a/neo/Network/RPC/RpcServer.cs b/neo/Network/RPC/RpcServer.cs index c47e6644e7..7414d54d10 100644 --- a/neo/Network/RPC/RpcServer.cs +++ b/neo/Network/RPC/RpcServer.cs @@ -564,13 +564,14 @@ private JObject GetRawTransaction(UInt256 hash, bool verbose) if (verbose) { JObject json = tx.ToJson(); - uint? height = Blockchain.Singleton.Store.GetTransactions().TryGet(hash)?.BlockIndex; - if (height != null) + TransactionState txState = Blockchain.Singleton.Store.GetTransactions().TryGet(hash); + if (txState != null) { - Header header = Blockchain.Singleton.Store.GetHeader((uint)height); + Header header = Blockchain.Singleton.Store.GetHeader(txState.BlockIndex); json["blockhash"] = header.Hash.ToString(); json["confirmations"] = Blockchain.Singleton.Height - header.Index + 1; json["blocktime"] = header.Timestamp; + json["vmState"] = txState.VMState; } return json; }