From 9a9420268f134e9cbbd98a15116ce4e1c69c322b Mon Sep 17 00:00:00 2001 From: Ricardo Prado Date: Tue, 5 Dec 2023 20:03:08 -0300 Subject: [PATCH] Added blockchain show block/transactions/contracts commands #905 (cschuchardt88) Added icon to applications #908 (cschuchardt88) --- src/Neo.CLI/CLI/MainService.Blockchain.cs | 272 ++++++++++++++++++++++ src/Neo.CLI/neo.ico | Bin 21317 -> 105486 bytes src/Neo.GUI/Neo.GUI.csproj | 5 + src/Neo.GUI/neo.ico | Bin 0 -> 370070 bytes 4 files changed, 277 insertions(+) create mode 100644 src/Neo.GUI/neo.ico diff --git a/src/Neo.CLI/CLI/MainService.Blockchain.cs b/src/Neo.CLI/CLI/MainService.Blockchain.cs index d363688701..3e5fc90a9b 100644 --- a/src/Neo.CLI/CLI/MainService.Blockchain.cs +++ b/src/Neo.CLI/CLI/MainService.Blockchain.cs @@ -9,8 +9,11 @@ // modifications are permitted. using Neo.ConsoleService; +using Neo.Network.P2P.Payloads; +using Neo.SmartContract; using Neo.SmartContract.Native; using System; +using System.Linq; namespace Neo.CLI { @@ -41,5 +44,274 @@ private void OnExportBlocksStartCountCommand(uint start, uint count = uint.MaxVa WriteBlocks(start, count, path, true); } + + [ConsoleCommand("show block", Category = "Blockchain Commands")] + private void OnShowBlockCommand(string indexOrHash) + { + lock (syncRoot) + { + Block block = null; + + if (uint.TryParse(indexOrHash, out var index)) + block = NativeContract.Ledger.GetBlock(_neoSystem.StoreView, index); + else if (UInt256.TryParse(indexOrHash, out var hash)) + block = NativeContract.Ledger.GetBlock(_neoSystem.StoreView, hash); + else + { + ConsoleHelper.Error("Enter a valid block index or hash."); + return; + } + + if (block is null) + { + ConsoleHelper.Error($"Block {indexOrHash} doesn't exist."); + return; + } + + DateTime blockDatetime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); + blockDatetime = blockDatetime.AddMilliseconds(block.Timestamp).ToLocalTime(); + + ConsoleHelper.Info("", "-------------", "Block", "-------------"); + ConsoleHelper.Info(); + ConsoleHelper.Info("", " Timestamp: ", $"{blockDatetime}"); + ConsoleHelper.Info("", " Index: ", $"{block.Index}"); + ConsoleHelper.Info("", " Hash: ", $"{block.Hash}"); + ConsoleHelper.Info("", " Nonce: ", $"{block.Nonce}"); + ConsoleHelper.Info("", " MerkleRoot: ", $"{block.MerkleRoot}"); + ConsoleHelper.Info("", " PrevHash: ", $"{block.PrevHash}"); + ConsoleHelper.Info("", " NextConsensus: ", $"{block.NextConsensus}"); + ConsoleHelper.Info("", " PrimaryIndex: ", $"{block.PrimaryIndex}"); + ConsoleHelper.Info("", " PrimaryPubKey: ", $"{NativeContract.NEO.GetCommittee(_neoSystem.GetSnapshot())[block.PrimaryIndex]}"); + ConsoleHelper.Info("", " Version: ", $"{block.Version}"); + ConsoleHelper.Info("", " Size: ", $"{block.Size} Byte(s)"); + ConsoleHelper.Info(); + + ConsoleHelper.Info("", "-------------", "Witness", "-------------"); + ConsoleHelper.Info(); + ConsoleHelper.Info("", " Invocation Script: ", $"{Convert.ToBase64String(block.Witness.InvocationScript.Span)}"); + ConsoleHelper.Info("", " Verification Script: ", $"{Convert.ToBase64String(block.Witness.VerificationScript.Span)}"); + ConsoleHelper.Info("", " ScriptHash: ", $"{block.Witness.ScriptHash}"); + ConsoleHelper.Info("", " Size: ", $"{block.Witness.Size} Byte(s)"); + ConsoleHelper.Info(); + + ConsoleHelper.Info("", "-------------", "Transactions", "-------------"); + ConsoleHelper.Info(); + + if (block.Transactions.Length == 0) + { + ConsoleHelper.Info("", " No Transaction(s)"); + } + else + { + foreach (var tx in block.Transactions) + ConsoleHelper.Info($" {tx.Hash}"); + } + ConsoleHelper.Info(); + ConsoleHelper.Info("", "--------------------------------------"); + } + } + + [ConsoleCommand("show tx", Category = "Blockchain Commands")] + public void OnShowTransactionCommand(UInt256 hash) + { + lock (syncRoot) + { + var tx = NativeContract.Ledger.GetTransactionState(_neoSystem.StoreView, hash); + + if (tx is null) + { + ConsoleHelper.Error($"Transaction {hash} doesn't exist."); + return; + } + + var block = NativeContract.Ledger.GetHeader(_neoSystem.StoreView, tx.BlockIndex); + + DateTime transactionDatetime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); + transactionDatetime = transactionDatetime.AddMilliseconds(block.Timestamp).ToLocalTime(); + + ConsoleHelper.Info("", "-------------", "Transaction", "-------------"); + ConsoleHelper.Info(); + ConsoleHelper.Info("", " Timestamp: ", $"{transactionDatetime}"); + ConsoleHelper.Info("", " Hash: ", $"{tx.Transaction.Hash}"); + ConsoleHelper.Info("", " Nonce: ", $"{tx.Transaction.Nonce}"); + ConsoleHelper.Info("", " Sender: ", $"{tx.Transaction.Sender}"); + ConsoleHelper.Info("", " ValidUntilBlock: ", $"{tx.Transaction.ValidUntilBlock}"); + ConsoleHelper.Info("", " FeePerByte: ", $"{tx.Transaction.FeePerByte}"); + ConsoleHelper.Info("", " NetworkFee: ", $"{tx.Transaction.NetworkFee}"); + ConsoleHelper.Info("", " SystemFee: ", $"{tx.Transaction.SystemFee}"); + ConsoleHelper.Info("", " Script: ", $"{Convert.ToBase64String(tx.Transaction.Script.Span)}"); + ConsoleHelper.Info("", " Version: ", $"{tx.Transaction.Version}"); + ConsoleHelper.Info("", " BlockIndex: ", $"{block.Index}"); + ConsoleHelper.Info("", " BlockHash: ", $"{block.Hash}"); + ConsoleHelper.Info("", " Size: ", $"{tx.Transaction.Size} Byte(s)"); + ConsoleHelper.Info(); + + ConsoleHelper.Info("", "-------------", "Signers", "-------------"); + ConsoleHelper.Info(); + + foreach (var signer in tx.Transaction.Signers) + { + if (signer.Rules.Length == 0) + ConsoleHelper.Info("", " Rules: ", "[]"); + else + ConsoleHelper.Info("", " Rules: ", $"[{string.Join(", ", signer.Rules.Select(s => $"\"{s.ToJson()}\""))}]"); + ConsoleHelper.Info("", " Account: ", $"{signer.Account}"); + ConsoleHelper.Info("", " Scopes: ", $"{signer.Scopes}"); + if (signer.AllowedContracts.Length == 0) + ConsoleHelper.Info("", " AllowedContracts: ", "[]"); + else + ConsoleHelper.Info("", " AllowedContracts: ", $"[{string.Join(", ", signer.AllowedContracts.Select(s => s.ToString()))}]"); + if (signer.AllowedGroups.Length == 0) + ConsoleHelper.Info("", " AllowedGroups: ", "[]"); + else + ConsoleHelper.Info("", " AllowedGroups: ", $"[{string.Join(", ", signer.AllowedGroups.Select(s => s.ToString()))}]"); + ConsoleHelper.Info("", " Size: ", $"{signer.Size} Byte(s)"); + ConsoleHelper.Info(); + } + + ConsoleHelper.Info("", "-------------", "Witnesses", "-------------"); + ConsoleHelper.Info(); + foreach (var witness in tx.Transaction.Witnesses) + { + ConsoleHelper.Info("", " InvocationScript: ", $"{Convert.ToBase64String(witness.InvocationScript.Span)}"); + ConsoleHelper.Info("", " VerificationScript: ", $"{Convert.ToBase64String(witness.VerificationScript.Span)}"); + ConsoleHelper.Info("", " ScriptHash: ", $"{witness.ScriptHash}"); + ConsoleHelper.Info("", " Size: ", $"{witness.Size} Byte(s)"); + ConsoleHelper.Info(); + } + + ConsoleHelper.Info("", "-------------", "Attributes", "-------------"); + ConsoleHelper.Info(); + if (tx.Transaction.Attributes.Length == 0) + { + ConsoleHelper.Info("", " No Attribute(s)."); + } + else + { + foreach (var attribute in tx.Transaction.Attributes) + { + switch (attribute) + { + case Conflicts c: + ConsoleHelper.Info("", " Type: ", $"{c.Type}"); + ConsoleHelper.Info("", " Hash: ", $"{c.Hash}"); + ConsoleHelper.Info("", " Size: ", $"{c.Size} Byte(s)"); + break; + case OracleResponse o: + ConsoleHelper.Info("", " Type: ", $"{o.Type}"); + ConsoleHelper.Info("", " Id: ", $"{o.Id}"); + ConsoleHelper.Info("", " Code: ", $"{o.Code}"); + ConsoleHelper.Info("", " Result: ", $"{Convert.ToBase64String(o.Result.Span)}"); + ConsoleHelper.Info("", " Size: ", $"{o.Size} Byte(s)"); + break; + case HighPriorityAttribute p: + ConsoleHelper.Info("", " Type: ", $"{p.Type}"); + break; + case NotValidBefore n: + ConsoleHelper.Info("", " Type: ", $"{n.Type}"); + ConsoleHelper.Info("", " Height: ", $"{n.Height}"); + break; + default: + ConsoleHelper.Info("", " Type: ", $"{attribute.Type}"); + ConsoleHelper.Info("", " Size: ", $"{attribute.Size} Byte(s)"); + break; + } + } + } + ConsoleHelper.Info(); + ConsoleHelper.Info("", "--------------------------------------"); + } + } + + [ConsoleCommand("show contract", Category = "Blockchain Commands")] + public void OnShowContractCommand(string nameOrHash) + { + lock (syncRoot) + { + ContractState contract = null; + + if (UInt160.TryParse(nameOrHash, out var scriptHash)) + contract = NativeContract.ContractManagement.GetContract(_neoSystem.StoreView, scriptHash); + else + { + var nativeContract = NativeContract.Contracts.SingleOrDefault(s => s.Name.Equals(nameOrHash, StringComparison.InvariantCultureIgnoreCase)); + + if (nativeContract != null) + contract = NativeContract.ContractManagement.GetContract(_neoSystem.StoreView, nativeContract.Hash); + } + + if (contract is null) + { + ConsoleHelper.Error($"Contract {nameOrHash} doesn't exist."); + return; + } + + ConsoleHelper.Info("", "-------------", "Contract", "-------------"); + ConsoleHelper.Info(); + ConsoleHelper.Info("", " Name: ", $"{contract.Manifest.Name}"); + ConsoleHelper.Info("", " Hash: ", $"{contract.Hash}"); + ConsoleHelper.Info("", " Id: ", $"{contract.Id}"); + ConsoleHelper.Info("", " UpdateCounter: ", $"{contract.UpdateCounter}"); + ConsoleHelper.Info("", " SupportedStandards: ", $"{string.Join(" ", contract.Manifest.SupportedStandards)}"); + ConsoleHelper.Info("", " Checksum: ", $"{contract.Nef.CheckSum}"); + ConsoleHelper.Info("", " Compiler: ", $"{contract.Nef.Compiler}"); + ConsoleHelper.Info("", " SourceCode: ", $"{contract.Nef.Source}"); + ConsoleHelper.Info("", " Trusts: ", $"[{string.Join(", ", contract.Manifest.Trusts.Select(s => s.ToJson()?.GetString()))}]"); + if (contract.Manifest.Extra is null) + { + foreach (var extra in contract.Manifest.Extra.Properties) + { + ConsoleHelper.Info("", $" {extra.Key,18}: ", $"{extra.Value?.GetString()}"); + } + } + ConsoleHelper.Info(); + + ConsoleHelper.Info("", "-------------", "Groups", "-------------"); + ConsoleHelper.Info(); + if (contract.Manifest.Groups.Length == 0) + { + ConsoleHelper.Info("", " No Group(s)."); + } + else + { + foreach (var group in contract.Manifest.Groups) + { + ConsoleHelper.Info("", " PubKey: ", $"{group.PubKey}"); + ConsoleHelper.Info("", " Signature: ", $"{Convert.ToBase64String(group.Signature)}"); + } + } + ConsoleHelper.Info(); + + ConsoleHelper.Info("", "-------------", "Permissions", "-------------"); + ConsoleHelper.Info(); + foreach (var permission in contract.Manifest.Permissions) + { + ConsoleHelper.Info("", " Contract: ", $"{permission.Contract.ToJson()?.GetString()}"); + if (permission.Methods.IsWildcard) + ConsoleHelper.Info("", " Methods: ", "*"); + else + ConsoleHelper.Info("", " Methods: ", $"{string.Join(", ", permission.Methods)}"); + ConsoleHelper.Info(); + } + + ConsoleHelper.Info("", "-------------", "Methods", "-------------"); + ConsoleHelper.Info(); + foreach (var method in contract.Manifest.Abi.Methods) + { + ConsoleHelper.Info("", " Name: ", $"{method.Name}"); + ConsoleHelper.Info("", " Safe: ", $"{method.Safe}"); + ConsoleHelper.Info("", " Offset: ", $"{method.Offset}"); + ConsoleHelper.Info("", " Parameters: ", $"[{string.Join(", ", method.Parameters.Select(s => s.Type.ToString()))}]"); + ConsoleHelper.Info("", " ReturnType: ", $"{method.ReturnType}"); + ConsoleHelper.Info(); + } + + ConsoleHelper.Info("", "-------------", "Script", "-------------"); + ConsoleHelper.Info(); + ConsoleHelper.Info($" {Convert.ToBase64String(contract.Nef.Script.Span)}"); + ConsoleHelper.Info(); + ConsoleHelper.Info("", "--------------------------------"); + } + } } } diff --git a/src/Neo.CLI/neo.ico b/src/Neo.CLI/neo.ico index 60786c424d8ec4c41a72a023d1aead2a8995a515..403aa7f3764f3dd49f9edd8e93302bf24cc35fcf 100644 GIT binary patch literal 105486 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 literal 21317 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 diff --git a/src/Neo.GUI/Neo.GUI.csproj b/src/Neo.GUI/Neo.GUI.csproj index 7a7193ea30..3921bb12b1 100644 --- a/src/Neo.GUI/Neo.GUI.csproj +++ b/src/Neo.GUI/Neo.GUI.csproj @@ -9,8 +9,13 @@ Neo true Neo.GUI + neo.ico + + + + DeveloperToolsForm.cs diff --git a/src/Neo.GUI/neo.ico b/src/Neo.GUI/neo.ico new file mode 100644 index 0000000000000000000000000000000000000000..141d11d686a2a1fe3bb2d9dbd81d5b477c99ef32 GIT binary patch literal 370070 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 literal 0 HcmV?d00001