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; }