diff --git a/plugins/ApplicationLogs/ApplicationLogs.csproj b/plugins/ApplicationLogs/ApplicationLogs.csproj
index 04c7d70cb..aa3a759af 100644
--- a/plugins/ApplicationLogs/ApplicationLogs.csproj
+++ b/plugins/ApplicationLogs/ApplicationLogs.csproj
@@ -1,9 +1,5 @@
-
- enable
-
-
diff --git a/plugins/DBFTPlugin/Consensus/ConsensusContext.Get.cs b/plugins/DBFTPlugin/Consensus/ConsensusContext.Get.cs
index 117e3443a..5173ae7bb 100644
--- a/plugins/DBFTPlugin/Consensus/ConsensusContext.Get.cs
+++ b/plugins/DBFTPlugin/Consensus/ConsensusContext.Get.cs
@@ -9,27 +9,29 @@
// Redistribution and use in source and binary forms with or without
// modifications are permitted.
-using Neo.Extensions;
using Neo.Network.P2P.Payloads;
using Neo.Plugins.DBFTPlugin.Messages;
using Neo.SmartContract;
+using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
namespace Neo.Plugins.DBFTPlugin.Consensus;
partial class ConsensusContext
{
- public ConsensusMessage GetMessage(ExtensiblePayload payload)
+ [return: NotNullIfNotNull(nameof(payload))]
+ public ConsensusMessage? GetMessage(ExtensiblePayload? payload)
{
if (payload is null) return null;
- if (!cachedMessages.TryGetValue(payload.Hash, out ConsensusMessage message))
+ if (!cachedMessages.TryGetValue(payload.Hash, out ConsensusMessage? message))
cachedMessages.Add(payload.Hash, message = ConsensusMessage.DeserializeFrom(payload.Data));
return message;
}
- public T GetMessage(ExtensiblePayload payload) where T : ConsensusMessage
+ [return: NotNullIfNotNull(nameof(payload))]
+ public T? GetMessage(ExtensiblePayload? payload) where T : ConsensusMessage
{
- return (T)GetMessage(payload);
+ return (T?)GetMessage(payload);
}
private RecoveryMessage.ChangeViewPayloadCompact GetChangeViewPayloadCompact(ExtensiblePayload payload)
@@ -82,7 +84,7 @@ public UInt160 GetSender(int index)
///
public int GetExpectedBlockSize()
{
- return GetExpectedBlockSizeWithoutTransactions(Transactions.Count) + // Base size
+ return GetExpectedBlockSizeWithoutTransactions(Transactions!.Count) + // Base size
Transactions.Values.Sum(u => u.Size); // Sum Txs
}
@@ -91,7 +93,7 @@ public int GetExpectedBlockSize()
///
public long GetExpectedBlockSystemFee()
{
- return Transactions.Values.Sum(u => u.SystemFee); // Sum Txs
+ return Transactions!.Values.Sum(u => u.SystemFee); // Sum Txs
}
///
diff --git a/plugins/DBFTPlugin/Consensus/ConsensusContext.MakePayload.cs b/plugins/DBFTPlugin/Consensus/ConsensusContext.MakePayload.cs
index 0ba8982ec..da1b38ac9 100644
--- a/plugins/DBFTPlugin/Consensus/ConsensusContext.MakePayload.cs
+++ b/plugins/DBFTPlugin/Consensus/ConsensusContext.MakePayload.cs
@@ -9,7 +9,6 @@
// Redistribution and use in source and binary forms with or without
// modifications are permitted.
-using Neo.Extensions;
using Neo.Ledger;
using Neo.Network.P2P.Payloads;
using Neo.Plugins.DBFTPlugin.Messages;
@@ -32,15 +31,15 @@ public ExtensiblePayload MakeChangeView(ChangeViewReason reason)
public ExtensiblePayload MakeCommit()
{
- if (CommitPayloads[MyIndex] is not null)
- return CommitPayloads[MyIndex];
+ if (CommitPayloads[MyIndex] is ExtensiblePayload payload)
+ return payload;
- var block = EnsureHeader();
+ var block = EnsureHeader()!;
CommitPayloads[MyIndex] = MakeSignedPayload(new Commit
{
- Signature = _signer.SignBlock(block, _myPublicKey, dbftSettings.Network)
+ Signature = _signer.SignBlock(block, _myPublicKey!, dbftSettings.Network)
});
- return CommitPayloads[MyIndex];
+ return CommitPayloads[MyIndex]!;
}
private ExtensiblePayload MakeSignedPayload(ConsensusMessage message)
@@ -112,7 +111,7 @@ public ExtensiblePayload MakePrepareRequest()
PrevHash = Block.PrevHash,
Timestamp = Block.Timestamp,
Nonce = Block.Nonce,
- TransactionHashes = TransactionHashes
+ TransactionHashes = TransactionHashes!
});
}
@@ -126,7 +125,7 @@ public ExtensiblePayload MakeRecoveryRequest()
public ExtensiblePayload MakeRecoveryMessage()
{
- PrepareRequest prepareRequestMessage = null;
+ PrepareRequest? prepareRequestMessage = null;
if (TransactionHashes != null)
{
prepareRequestMessage = new PrepareRequest
@@ -144,23 +143,23 @@ public ExtensiblePayload MakeRecoveryMessage()
return MakeSignedPayload(new RecoveryMessage
{
ChangeViewMessages = LastChangeViewPayloads.Where(p => p != null)
- .Select(p => GetChangeViewPayloadCompact(p))
+ .Select(p => GetChangeViewPayloadCompact(p!))
.Take(M)
.ToDictionary(p => p.ValidatorIndex),
PrepareRequestMessage = prepareRequestMessage,
// We only need a PreparationHash set if we don't have the PrepareRequest information.
PreparationHash = TransactionHashes == null
? PreparationPayloads.Where(p => p != null)
- .GroupBy(p => GetMessage(p).PreparationHash, (k, g) => new { Hash = k, Count = g.Count() })
+ .GroupBy(p => GetMessage(p!).PreparationHash, (k, g) => new { Hash = k, Count = g.Count() })
.OrderByDescending(p => p.Count)
.Select(p => p.Hash)
.FirstOrDefault()
: null,
PreparationMessages = PreparationPayloads.Where(p => p != null)
- .Select(p => GetPreparationPayloadCompact(p))
+ .Select(p => GetPreparationPayloadCompact(p!))
.ToDictionary(p => p.ValidatorIndex),
CommitMessages = CommitSent
- ? CommitPayloads.Where(p => p != null).Select(p => GetCommitPayloadCompact(p)).ToDictionary(p => p.ValidatorIndex)
+ ? CommitPayloads.Where(p => p != null).Select(p => GetCommitPayloadCompact(p!)).ToDictionary(p => p.ValidatorIndex)
: new Dictionary()
});
}
@@ -169,7 +168,7 @@ public ExtensiblePayload MakePrepareResponse()
{
return PreparationPayloads[MyIndex] = MakeSignedPayload(new PrepareResponse
{
- PreparationHash = PreparationPayloads[Block.PrimaryIndex].Hash
+ PreparationHash = PreparationPayloads[Block.PrimaryIndex]!.Hash
});
}
diff --git a/plugins/DBFTPlugin/Consensus/ConsensusContext.cs b/plugins/DBFTPlugin/Consensus/ConsensusContext.cs
index 043cb3568..1fccdf28a 100644
--- a/plugins/DBFTPlugin/Consensus/ConsensusContext.cs
+++ b/plugins/DBFTPlugin/Consensus/ConsensusContext.cs
@@ -11,7 +11,6 @@
using Neo.Cryptography;
using Neo.Cryptography.ECC;
-using Neo.Extensions;
using Neo.Extensions.IO;
using Neo.IO;
using Neo.Ledger;
@@ -32,41 +31,41 @@ public sealed partial class ConsensusContext : IDisposable, ISerializable
///
private static readonly byte[] ConsensusStateKey = { 0xf4 };
- public Block Block;
+ public Block Block = null!;
public byte ViewNumber;
public TimeSpan TimePerBlock;
- public ECPoint[] Validators;
+ public ECPoint[] Validators = null!;
public int MyIndex;
- public UInt256[] TransactionHashes;
- public Dictionary Transactions;
- public ExtensiblePayload[] PreparationPayloads;
- public ExtensiblePayload[] CommitPayloads;
- public ExtensiblePayload[] ChangeViewPayloads;
- public ExtensiblePayload[] LastChangeViewPayloads;
+ public UInt256[]? TransactionHashes;
+ public Dictionary? Transactions;
+ public ExtensiblePayload?[] PreparationPayloads = null!;
+ public ExtensiblePayload?[] CommitPayloads = null!;
+ public ExtensiblePayload?[] ChangeViewPayloads = null!;
+ public ExtensiblePayload?[] LastChangeViewPayloads = null!;
// LastSeenMessage array stores the height of the last seen message, for each validator.
// if this node never heard from validator i, LastSeenMessage[i] will be -1.
- public Dictionary LastSeenMessage { get; private set; }
+ public Dictionary? LastSeenMessage { get; private set; }
///
/// Store all verified unsorted transactions' senders' fee currently in the consensus context.
///
public TransactionVerificationContext VerificationContext = new();
- public StoreCache Snapshot { get; private set; }
- private ECPoint _myPublicKey;
+ public StoreCache Snapshot { get; private set; } = null!;
+ private ECPoint? _myPublicKey;
private int _witnessSize;
private readonly NeoSystem neoSystem;
private readonly DbftSettings dbftSettings;
private readonly ISigner _signer;
- private readonly IStore store;
- private Dictionary cachedMessages;
+ private readonly IStore? store;
+ private Dictionary cachedMessages = null!;
public int F => (Validators.Length - 1) / 3;
public int M => Validators.Length - F;
public bool IsPrimary => MyIndex == Block.PrimaryIndex;
public bool IsBackup => MyIndex >= 0 && MyIndex != Block.PrimaryIndex;
public bool WatchOnly => MyIndex < 0;
- public Header PrevHeader => NativeContract.Ledger.GetHeader(Snapshot, Block.PrevHash);
+ public Header PrevHeader => NativeContract.Ledger.GetHeader(Snapshot, Block.PrevHash)!;
public int CountCommitted => CommitPayloads.Count(p => p != null);
public int CountFailed
{
@@ -82,8 +81,8 @@ public bool ValidatorsChanged
{
if (NativeContract.Ledger.CurrentIndex(Snapshot) == 0) return false;
UInt256 hash = NativeContract.Ledger.CurrentHash(Snapshot);
- TrimmedBlock currentBlock = NativeContract.Ledger.GetTrimmedBlock(Snapshot, hash);
- TrimmedBlock previousBlock = NativeContract.Ledger.GetTrimmedBlock(Snapshot, currentBlock.Header.PrevHash);
+ TrimmedBlock currentBlock = NativeContract.Ledger.GetTrimmedBlock(Snapshot, hash)!;
+ TrimmedBlock previousBlock = NativeContract.Ledger.GetTrimmedBlock(Snapshot, currentBlock.Header.PrevHash)!;
return currentBlock.Header.NextConsensus != previousBlock.Header.NextConsensus;
}
}
@@ -128,11 +127,11 @@ public Block CreateBlock()
for (int i = 0, j = 0; i < Validators.Length && j < M; i++)
{
if (GetMessage(CommitPayloads[i])?.ViewNumber != ViewNumber) continue;
- sc.AddSignature(contract, Validators[i], GetMessage(CommitPayloads[i]).Signature.ToArray());
+ sc.AddSignature(contract, Validators[i], GetMessage(CommitPayloads[i]!).Signature.ToArray());
j++;
}
Block.Header.Witness = sc.GetWitnesses()[0];
- Block.Transactions = TransactionHashes.Select(p => Transactions[p]).ToArray();
+ Block.Transactions = TransactionHashes!.Select(p => Transactions![p]).ToArray();
return Block;
}
@@ -145,7 +144,7 @@ public ExtensiblePayload CreatePayload(ConsensusMessage message, ReadOnlyMemory<
ValidBlockEnd = message.BlockIndex,
Sender = GetSender(message.ValidatorIndex),
Data = message.ToArray(),
- Witness = invocationScript.IsEmpty ? null : new Witness
+ Witness = invocationScript.IsEmpty ? null! : new Witness
{
InvocationScript = invocationScript,
VerificationScript = Contract.CreateSignatureRedeemScript(Validators[message.ValidatorIndex])
@@ -160,7 +159,7 @@ public void Dispose()
Snapshot?.Dispose();
}
- public Block EnsureHeader()
+ public Block? EnsureHeader()
{
if (TransactionHashes == null) return null;
Block.Header.MerkleRoot ??= MerkleTree.ComputeRoot(TransactionHashes);
@@ -267,13 +266,13 @@ public void Reset(byte viewNumber)
}
ViewNumber = viewNumber;
Block.Header.PrimaryIndex = GetPrimaryIndex(viewNumber);
- Block.Header.MerkleRoot = null;
+ Block.Header.MerkleRoot = null!;
Block.Header.Timestamp = 0;
Block.Header.Nonce = 0;
- Block.Transactions = null;
+ Block.Transactions = null!;
TransactionHashes = null;
PreparationPayloads = new ExtensiblePayload[Validators.Length];
- if (MyIndex >= 0) LastSeenMessage[Validators[MyIndex]] = Block.Index;
+ if (MyIndex >= 0) LastSeenMessage![Validators[MyIndex]] = Block.Index;
}
public void Save()
@@ -295,7 +294,7 @@ public void Deserialize(ref MemoryReader reader)
Block.Header.PrimaryIndex = reader.ReadByte();
Block.Header.NextConsensus = reader.ReadSerializable();
if (Block.NextConsensus.Equals(UInt160.Zero))
- Block.Header.NextConsensus = null;
+ Block.Header.NextConsensus = null!;
ViewNumber = reader.ReadByte();
TransactionHashes = reader.ReadSerializableArray(ushort.MaxValue);
Transaction[] transactions = reader.ReadSerializableArray(ushort.MaxValue);
diff --git a/plugins/DBFTPlugin/Consensus/ConsensusService.Check.cs b/plugins/DBFTPlugin/Consensus/ConsensusService.Check.cs
index cdc8d7952..33d7f84a1 100644
--- a/plugins/DBFTPlugin/Consensus/ConsensusService.Check.cs
+++ b/plugins/DBFTPlugin/Consensus/ConsensusService.Check.cs
@@ -21,7 +21,7 @@ partial class ConsensusService
{
private bool CheckPrepareResponse()
{
- if (context.TransactionHashes.Length == context.Transactions.Count)
+ if (context.TransactionHashes!.Length == context.Transactions!.Count)
{
// if we are the primary for this view, but acting as a backup because we recovered our own
// previously sent prepare request, then we don't want to send a prepare response.
@@ -55,7 +55,7 @@ private bool CheckPrepareResponse()
private void CheckCommits()
{
- if (context.CommitPayloads.Count(p => context.GetMessage(p)?.ViewNumber == context.ViewNumber) >= context.M && context.TransactionHashes.All(p => context.Transactions.ContainsKey(p)))
+ if (context.CommitPayloads.Count(p => context.GetMessage(p)?.ViewNumber == context.ViewNumber) >= context.M && context.TransactionHashes!.All(p => context.Transactions!.ContainsKey(p)))
{
block_received_index = context.Block.Index;
Block block = context.CreateBlock();
@@ -73,7 +73,7 @@ private void CheckExpectedView(byte viewNumber)
{
if (!context.WatchOnly)
{
- ChangeView message = messages[context.MyIndex];
+ ChangeView? message = messages[context.MyIndex];
// Communicate the network about my agreement to move to `viewNumber`
// if my last change view payload, `message`, has NewViewNumber lower than current view to change
if (message is null || message.NewViewNumber < viewNumber)
@@ -85,7 +85,7 @@ private void CheckExpectedView(byte viewNumber)
private void CheckPreparations()
{
- if (context.PreparationPayloads.Count(p => p != null) >= context.M && context.TransactionHashes.All(p => context.Transactions.ContainsKey(p)))
+ if (context.PreparationPayloads.Count(p => p != null) >= context.M && context.TransactionHashes!.All(p => context.Transactions!.ContainsKey(p)))
{
ExtensiblePayload payload = context.MakeCommit();
Log($"Sending {nameof(Commit)}");
diff --git a/plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs b/plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs
index 2cbb4d233..e069ab17f 100644
--- a/plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs
+++ b/plugins/DBFTPlugin/Consensus/ConsensusService.OnMessage.cs
@@ -11,7 +11,6 @@
using Akka.Actor;
using Neo.Cryptography;
-using Neo.Extensions;
using Neo.Ledger;
using Neo.Network.P2P;
using Neo.Network.P2P.Payloads;
@@ -48,7 +47,7 @@ private void OnConsensusPayload(ExtensiblePayload payload)
}
if (message.ValidatorIndex >= context.Validators.Length) return;
if (payload.Sender != Contract.CreateSignatureRedeemScript(context.Validators[message.ValidatorIndex]).ToScriptHash()) return;
- context.LastSeenMessage[context.Validators[message.ValidatorIndex]] = message.BlockIndex;
+ context.LastSeenMessage?[context.Validators[message.ValidatorIndex]] = message.BlockIndex;
switch (message)
{
case PrepareRequest request:
@@ -106,13 +105,13 @@ private void OnPrepareRequestReceived(ExtensiblePayload payload, PrepareRequest
context.VerificationContext = new TransactionVerificationContext();
for (int i = 0; i < context.PreparationPayloads.Length; i++)
if (context.PreparationPayloads[i] != null)
- if (!context.GetMessage(context.PreparationPayloads[i]).PreparationHash.Equals(payload.Hash))
+ if (!context.GetMessage(context.PreparationPayloads[i]!).PreparationHash.Equals(payload.Hash))
context.PreparationPayloads[i] = null;
context.PreparationPayloads[message.ValidatorIndex] = payload;
- byte[] hashData = context.EnsureHeader().GetSignData(neoSystem.Settings.Network);
+ byte[] hashData = context.EnsureHeader()!.GetSignData(neoSystem.Settings.Network);
for (int i = 0; i < context.CommitPayloads.Length; i++)
if (context.GetMessage(context.CommitPayloads[i])?.ViewNumber == context.ViewNumber)
- if (!Crypto.VerifySignature(hashData, context.GetMessage(context.CommitPayloads[i]).Signature.Span, context.Validators[i]))
+ if (!Crypto.VerifySignature(hashData, context.GetMessage(context.CommitPayloads[i]!).Signature.Span, context.Validators[i]))
context.CommitPayloads[i] = null;
if (context.TransactionHashes.Length == 0)
@@ -127,7 +126,7 @@ private void OnPrepareRequestReceived(ExtensiblePayload payload, PrepareRequest
var mtb = neoSystem.Settings.MaxTraceableBlocks;
foreach (UInt256 hash in context.TransactionHashes)
{
- if (mempoolVerified.TryGetValue(hash, out Transaction tx))
+ if (mempoolVerified.TryGetValue(hash, out Transaction? tx))
{
if (NativeContract.Ledger.ContainsConflictHash(context.Snapshot, hash, tx.Signers.Select(s => s.Account), mtb))
{
@@ -165,7 +164,7 @@ private void OnPrepareResponseReceived(ExtensiblePayload payload, PrepareRespons
{
if (message.ViewNumber != context.ViewNumber) return;
if (context.PreparationPayloads[message.ValidatorIndex] != null || context.NotAcceptingPayloadsDueToViewChanging) return;
- if (context.PreparationPayloads[context.Block.PrimaryIndex] != null && !message.PreparationHash.Equals(context.PreparationPayloads[context.Block.PrimaryIndex].Hash))
+ if (context.PreparationPayloads[context.Block.PrimaryIndex] != null && !message.PreparationHash.Equals(context.PreparationPayloads[context.Block.PrimaryIndex]!.Hash))
return;
// Timeout extension: prepare response has been received with success
@@ -197,7 +196,7 @@ private void OnChangeViewReceived(ExtensiblePayload payload, ChangeView message)
private void OnCommitReceived(ExtensiblePayload payload, Commit commit)
{
- ref ExtensiblePayload existingCommitPayload = ref context.CommitPayloads[commit.ValidatorIndex];
+ ref ExtensiblePayload? existingCommitPayload = ref context.CommitPayloads[commit.ValidatorIndex];
if (existingCommitPayload != null)
{
if (existingCommitPayload.Hash != payload.Hash)
@@ -213,7 +212,7 @@ private void OnCommitReceived(ExtensiblePayload payload, Commit commit)
Log($"{nameof(OnCommitReceived)}: height={commit.BlockIndex} view={commit.ViewNumber} index={commit.ValidatorIndex} nc={context.CountCommitted} nf={context.CountFailed}");
- byte[] hashData = context.EnsureHeader()?.GetSignData(neoSystem.Settings.Network);
+ byte[]? hashData = context.EnsureHeader()?.GetSignData(neoSystem.Settings.Network);
if (hashData == null)
{
existingCommitPayload = payload;
@@ -254,7 +253,7 @@ private void OnRecoveryMessageReceived(RecoveryMessage message)
{
if (!context.RequestSentOrReceived)
{
- ExtensiblePayload prepareRequestPayload = message.GetPrepareRequestPayload(context);
+ ExtensiblePayload? prepareRequestPayload = message.GetPrepareRequestPayload(context);
if (prepareRequestPayload != null)
{
totalPrepReq = 1;
diff --git a/plugins/DBFTPlugin/Consensus/ConsensusService.cs b/plugins/DBFTPlugin/Consensus/ConsensusService.cs
index 73fef63c0..fdb7fa459 100644
--- a/plugins/DBFTPlugin/Consensus/ConsensusService.cs
+++ b/plugins/DBFTPlugin/Consensus/ConsensusService.cs
@@ -30,7 +30,7 @@ private class Timer { public uint Height; public byte ViewNumber; }
private readonly IActorRef localNode;
private readonly IActorRef taskManager;
private readonly IActorRef blockchain;
- private ICancelable timer_token;
+ private ICancelable? timer_token;
private DateTime prepareRequestReceivedTime;
private uint prepareRequestReceivedBlockIndex;
private uint block_received_index;
@@ -200,7 +200,7 @@ private void SendPrepareRequest()
if (context.Validators.Length == 1)
CheckPreparations();
- if (context.TransactionHashes.Length > 0)
+ if (context.TransactionHashes!.Length > 0)
{
foreach (InvPayload payload in InvPayload.CreateGroup(InventoryType.TX, context.TransactionHashes))
localNode.Tell(Message.Create(MessageCommand.Inv, payload));
@@ -247,7 +247,7 @@ private void OnTransaction(Transaction transaction)
{
if (!context.IsBackup || context.NotAcceptingPayloadsDueToViewChanging || !context.RequestSentOrReceived || context.ResponseSent || context.BlockSent)
return;
- if (context.Transactions.ContainsKey(transaction.Hash)) return;
+ if (context.Transactions!.ContainsKey(transaction.Hash)) return;
if (!context.TransactionHashes.Contains(transaction.Hash)) return;
AddTransaction(transaction, true);
}
@@ -273,7 +273,7 @@ private bool AddTransaction(Transaction tx, bool verify)
}
}
// After that, check whether context's transactions have Conflicts attribute with tx's hash.
- foreach (var pooledTx in context.Transactions.Values)
+ foreach (var pooledTx in context.Transactions!.Values)
{
if (pooledTx.GetAttributes().Select(attr => attr.Hash).Contains(tx.Hash))
{
@@ -295,7 +295,7 @@ private bool AddTransaction(Transaction tx, bool verify)
return false;
}
}
- context.Transactions[tx.Hash] = tx;
+ context.Transactions![tx.Hash] = tx;
context.VerificationContext.AddTransaction(tx);
return CheckPrepareResponse();
}
diff --git a/plugins/DBFTPlugin/DBFTPlugin.cs b/plugins/DBFTPlugin/DBFTPlugin.cs
index 2de5b4b9a..e0cadeb15 100644
--- a/plugins/DBFTPlugin/DBFTPlugin.cs
+++ b/plugins/DBFTPlugin/DBFTPlugin.cs
@@ -20,13 +20,13 @@
namespace Neo.Plugins.DBFTPlugin;
-public sealed class DBFTPlugin : Plugin, IServiceAddedHandler, IMessageReceivedHandler, IWalletChangedHandler
+public sealed class DBFTPlugin : Plugin, IMessageReceivedHandler
{
- private IWalletProvider walletProvider;
- private IActorRef consensus;
+ private IWalletProvider? walletProvider;
+ private IActorRef consensus = null!;
private bool started = false;
- private NeoSystem neoSystem;
- private DbftSettings settings;
+ private NeoSystem neoSystem = null!;
+ private DbftSettings settings = null!;
public override string Description => "Consensus plugin with dBFT algorithm.";
@@ -60,24 +60,27 @@ protected override void OnSystemLoaded(NeoSystem system)
{
if (system.Settings.Network != settings.Network) return;
neoSystem = system;
- neoSystem.ServiceAdded += ((IServiceAddedHandler)this).NeoSystem_ServiceAdded_Handler;
+ neoSystem.ServiceAdded += NeoSystem_ServiceAdded_Handler;
}
- void IServiceAddedHandler.NeoSystem_ServiceAdded_Handler(object sender, object service)
+ void NeoSystem_ServiceAdded_Handler(object? sender, object service)
{
if (service is not IWalletProvider provider) return;
walletProvider = provider;
- neoSystem.ServiceAdded -= ((IServiceAddedHandler)this).NeoSystem_ServiceAdded_Handler;
+ neoSystem.ServiceAdded -= NeoSystem_ServiceAdded_Handler;
if (settings.AutoStart)
{
- walletProvider.WalletChanged += ((IWalletChangedHandler)this).IWalletProvider_WalletChanged_Handler;
+ walletProvider.WalletChanged += IWalletProvider_WalletChanged_Handler;
}
}
- void IWalletChangedHandler.IWalletProvider_WalletChanged_Handler(object sender, Wallet wallet)
+ void IWalletProvider_WalletChanged_Handler(object? sender, Wallet? wallet)
{
- walletProvider.WalletChanged -= ((IWalletChangedHandler)this).IWalletProvider_WalletChanged_Handler;
- Start(wallet);
+ if (wallet != null)
+ {
+ walletProvider!.WalletChanged -= IWalletProvider_WalletChanged_Handler;
+ Start(wallet);
+ }
}
///
@@ -89,8 +92,14 @@ void IWalletChangedHandler.IWalletProvider_WalletChanged_Handler(object sender,
[ConsoleCommand("start consensus", Category = "Consensus", Description = "Start consensus service (dBFT)")]
private void OnStart(string signerName = "")
{
- var signer = SignerManager.GetSignerOrDefault(signerName);
- Start(signer ?? walletProvider.GetWallet());
+ var signer = SignerManager.GetSignerOrDefault(signerName)
+ ?? walletProvider?.GetWallet();
+ if (signer == null)
+ {
+ ConsoleHelper.Warning("Please open wallet first!");
+ return;
+ }
+ Start(signer);
}
public void Start(ISigner signer)
@@ -105,7 +114,7 @@ bool IMessageReceivedHandler.RemoteNode_MessageReceived_Handler(NeoSystem system
{
if (message.Command == MessageCommand.Transaction)
{
- Transaction tx = (Transaction)message.Payload;
+ Transaction tx = (Transaction)message.Payload!;
if (tx.SystemFee > settings.MaxBlockSystemFee)
return false;
consensus?.Tell(tx);
diff --git a/plugins/DBFTPlugin/Messages/ConsensusMessage.cs b/plugins/DBFTPlugin/Messages/ConsensusMessage.cs
index 599929514..0eacff1c9 100644
--- a/plugins/DBFTPlugin/Messages/ConsensusMessage.cs
+++ b/plugins/DBFTPlugin/Messages/ConsensusMessage.cs
@@ -49,7 +49,7 @@ public static ConsensusMessage DeserializeFrom(ReadOnlyMemory data)
{
ConsensusMessageType type = (ConsensusMessageType)data.Span[0];
Type t = typeof(ConsensusMessage);
- t = t.Assembly.GetType($"{t.Namespace}.{type}", false);
+ t = t.Assembly.GetType($"{t.Namespace}.{type}", false)!;
if (t is null) throw new FormatException($"Invalid consensus message type: {type}");
return (ConsensusMessage)data.AsSerializable(t);
}
diff --git a/plugins/DBFTPlugin/Messages/PrepareRequest.cs b/plugins/DBFTPlugin/Messages/PrepareRequest.cs
index 6162fe2c5..a5aa1b5d5 100644
--- a/plugins/DBFTPlugin/Messages/PrepareRequest.cs
+++ b/plugins/DBFTPlugin/Messages/PrepareRequest.cs
@@ -20,10 +20,10 @@ namespace Neo.Plugins.DBFTPlugin.Messages;
public class PrepareRequest : ConsensusMessage
{
public uint Version;
- public UInt256 PrevHash;
+ public required UInt256 PrevHash;
public ulong Timestamp;
public ulong Nonce;
- public UInt256[] TransactionHashes;
+ public required UInt256[] TransactionHashes;
public override int Size => base.Size
+ sizeof(uint) //Version
diff --git a/plugins/DBFTPlugin/Messages/PrepareResponse.cs b/plugins/DBFTPlugin/Messages/PrepareResponse.cs
index ad740800e..65a0471e8 100644
--- a/plugins/DBFTPlugin/Messages/PrepareResponse.cs
+++ b/plugins/DBFTPlugin/Messages/PrepareResponse.cs
@@ -17,7 +17,7 @@ namespace Neo.Plugins.DBFTPlugin.Messages;
public class PrepareResponse : ConsensusMessage
{
- public UInt256 PreparationHash;
+ public required UInt256 PreparationHash;
public override int Size => base.Size + PreparationHash.Size;
diff --git a/plugins/DBFTPlugin/Messages/RecoveryMessage/RecoveryMessage.cs b/plugins/DBFTPlugin/Messages/RecoveryMessage/RecoveryMessage.cs
index 4ff6ebf93..bb83c8ee1 100644
--- a/plugins/DBFTPlugin/Messages/RecoveryMessage/RecoveryMessage.cs
+++ b/plugins/DBFTPlugin/Messages/RecoveryMessage/RecoveryMessage.cs
@@ -21,13 +21,13 @@ namespace Neo.Plugins.DBFTPlugin.Messages;
public partial class RecoveryMessage : ConsensusMessage
{
- public Dictionary ChangeViewMessages;
- public PrepareRequest PrepareRequestMessage;
+ public required Dictionary ChangeViewMessages;
+ public PrepareRequest? PrepareRequestMessage;
/// The PreparationHash in case the PrepareRequest hasn't been received yet.
/// This can be null if the PrepareRequest information is present, since it can be derived in that case.
- public UInt256 PreparationHash;
- public Dictionary PreparationMessages;
- public Dictionary CommitMessages;
+ public UInt256? PreparationHash;
+ public required Dictionary PreparationMessages;
+ public required Dictionary CommitMessages;
public override int Size => base.Size
+ (ChangeViewMessages?.Values.GetVarSize() ?? 0) // ChangeViewMessages
@@ -88,17 +88,17 @@ internal ExtensiblePayload[] GetCommitPayloadsFromRecoveryMessage(ConsensusConte
}, p.InvocationScript)).ToArray();
}
- internal ExtensiblePayload GetPrepareRequestPayload(ConsensusContext context)
+ internal ExtensiblePayload? GetPrepareRequestPayload(ConsensusContext context)
{
if (PrepareRequestMessage == null) return null;
- if (!PreparationMessages.TryGetValue(context.Block.PrimaryIndex, out PreparationPayloadCompact compact))
+ if (!PreparationMessages.TryGetValue(context.Block.PrimaryIndex, out PreparationPayloadCompact? compact))
return null;
return context.CreatePayload(PrepareRequestMessage, compact.InvocationScript);
}
internal ExtensiblePayload[] GetPrepareResponsePayloads(ConsensusContext context)
{
- UInt256 preparationHash = PreparationHash ?? context.PreparationPayloads[context.Block.PrimaryIndex]?.Hash;
+ UInt256? preparationHash = PreparationHash ?? context.PreparationPayloads[context.Block.PrimaryIndex]?.Hash;
if (preparationHash is null) return Array.Empty();
return PreparationMessages.Values.Where(p => p.ValidatorIndex != context.Block.PrimaryIndex).Select(p => context.CreatePayload(new PrepareResponse
{
@@ -113,12 +113,14 @@ public override void Serialize(BinaryWriter writer)
{
base.Serialize(writer);
writer.Write(ChangeViewMessages.Values.ToArray());
- bool hasPrepareRequestMessage = PrepareRequestMessage != null;
- writer.Write(hasPrepareRequestMessage);
- if (hasPrepareRequestMessage)
+ if (PrepareRequestMessage != null)
+ {
+ writer.Write(true);
writer.Write(PrepareRequestMessage);
+ }
else
{
+ writer.Write(false);
if (PreparationHash == null)
writer.WriteVarInt(0);
else
diff --git a/plugins/Directory.Build.props b/plugins/Directory.Build.props
index 1c06fd7ef..509746d1a 100644
--- a/plugins/Directory.Build.props
+++ b/plugins/Directory.Build.props
@@ -13,6 +13,7 @@
4.0.0
net10.0
$(PackageId)
+ enable
enable
true
diff --git a/plugins/LevelDBStore/LevelDBStore.csproj b/plugins/LevelDBStore/LevelDBStore.csproj
index 4ec8a2b80..e73cfeb10 100644
--- a/plugins/LevelDBStore/LevelDBStore.csproj
+++ b/plugins/LevelDBStore/LevelDBStore.csproj
@@ -4,7 +4,6 @@
false
Neo.Plugins.Storage.LevelDBStore
Neo
- enable
true
diff --git a/plugins/MPTTrie/MPTTrie.csproj b/plugins/MPTTrie/MPTTrie.csproj
index 852671a0a..80c43771e 100644
--- a/plugins/MPTTrie/MPTTrie.csproj
+++ b/plugins/MPTTrie/MPTTrie.csproj
@@ -3,7 +3,6 @@
Neo.Cryptography.MPT
Neo.Cryptography.MPTTrie
- enable
diff --git a/plugins/OracleService/OracleService.cs b/plugins/OracleService/OracleService.cs
index 0d2567b1d..3b3c21757 100644
--- a/plugins/OracleService/OracleService.cs
+++ b/plugins/OracleService/OracleService.cs
@@ -36,7 +36,7 @@
namespace Neo.Plugins.OracleService;
-public sealed class OracleService : Plugin, ICommittingHandler, IServiceAddedHandler, IWalletChangedHandler
+public sealed class OracleService : Plugin, ICommittingHandler
{
private const int RefreshIntervalMilliSeconds = 1000 * 60 * 3;
@@ -46,15 +46,15 @@ public sealed class OracleService : Plugin, ICommittingHandler, IServiceAddedHan
MaxResponseContentBufferSize = ushort.MaxValue
};
- private Wallet wallet;
+ private Wallet wallet = null!;
private readonly ConcurrentDictionary pendingQueue = new();
private readonly ConcurrentDictionary finishedCache = new();
- private Timer timer;
+ private Timer? timer;
internal readonly CancellationTokenSource cancelSource = new();
private OracleStatus status = OracleStatus.Unstarted;
- private IWalletProvider walletProvider;
+ private IWalletProvider? walletProvider;
private int counter;
- private NeoSystem _system;
+ private NeoSystem _system = null!;
private readonly Dictionary protocols = new();
@@ -80,28 +80,31 @@ protected override void OnSystemLoaded(NeoSystem system)
{
if (system.Settings.Network != OracleSettings.Default.Network) return;
_system = system;
- _system.ServiceAdded += ((IServiceAddedHandler)this).NeoSystem_ServiceAdded_Handler;
+ _system.ServiceAdded += NeoSystem_ServiceAdded_Handler;
RpcServerPlugin.RegisterMethods(this, OracleSettings.Default.Network);
}
- void IServiceAddedHandler.NeoSystem_ServiceAdded_Handler(object sender, object service)
+ void NeoSystem_ServiceAdded_Handler(object? sender, object service)
{
- if (service is IWalletProvider)
+ if (service is IWalletProvider provider)
{
- walletProvider = service as IWalletProvider;
- _system.ServiceAdded -= ((IServiceAddedHandler)this).NeoSystem_ServiceAdded_Handler;
+ walletProvider = provider;
+ _system.ServiceAdded -= NeoSystem_ServiceAdded_Handler;
if (OracleSettings.Default.AutoStart)
{
- walletProvider.WalletChanged += ((IWalletChangedHandler)this).IWalletProvider_WalletChanged_Handler;
+ walletProvider.WalletChanged += IWalletProvider_WalletChanged_Handler;
}
}
}
- void IWalletChangedHandler.IWalletProvider_WalletChanged_Handler(object sender, Wallet wallet)
+ void IWalletProvider_WalletChanged_Handler(object? sender, Wallet? wallet)
{
- walletProvider.WalletChanged -= ((IWalletChangedHandler)this).IWalletProvider_WalletChanged_Handler;
- Start(wallet);
+ if (wallet != null)
+ {
+ walletProvider!.WalletChanged -= IWalletProvider_WalletChanged_Handler;
+ Start(wallet);
+ }
}
protected override void Dispose(bool disposing)
@@ -124,7 +127,7 @@ private void OnStart()
Start(walletProvider?.GetWallet());
}
- public Task Start(Wallet wallet)
+ public Task Start(Wallet? wallet)
{
if (status == OracleStatus.Running) return Task.CompletedTask;
@@ -186,7 +189,7 @@ void ICommittingHandler.Blockchain_Committing_Handler(NeoSystem system, Block bl
OnStop();
}
- private async void OnTimer(object state)
+ private async void OnTimer(object? state)
{
try
{
@@ -204,8 +207,8 @@ private async void OnTimer(object state)
if (span > TimeSpan.FromMilliseconds(RefreshIntervalMilliSeconds))
{
foreach (var account in wallet.GetAccounts())
- if (task.BackupSigns.TryGetValue(account.GetKey().PublicKey, out byte[] sign))
- tasks.Add(SendResponseSignatureAsync(id, sign, account.GetKey()));
+ if (task.BackupSigns.TryGetValue(account.GetKey()!.PublicKey, out byte[]? sign))
+ tasks.Add(SendResponseSignatureAsync(id, sign, account.GetKey()!));
}
}
@@ -294,7 +297,7 @@ private async Task ProcessRequestAsync(DataCache snapshot, OracleRequest req)
uint height = NativeContract.Ledger.CurrentIndex(snapshot) + 1;
- (OracleResponseCode code, string data) = await ProcessUrlAsync(req.Url);
+ (OracleResponseCode code, string? data) = await ProcessUrlAsync(req.Url);
Log($"[{req.OriginalTxid}] Process oracle request end:<{req.Url}>, responseCode:{code}, response:{data}");
@@ -306,7 +309,7 @@ private async Task ProcessRequestAsync(DataCache snapshot, OracleRequest req)
{
try
{
- result = Filter(data, request.Filter);
+ result = Filter(data!, request.Filter);
}
catch (Exception ex)
{
@@ -324,16 +327,17 @@ private async Task ProcessRequestAsync(DataCache snapshot, OracleRequest req)
ECPoint[] oraclePublicKeys = NativeContract.RoleManagement.GetDesignatedByRole(snapshot, Role.Oracle, height);
foreach (var account in wallet.GetAccounts())
{
- var oraclePub = account.GetKey()?.PublicKey;
- if (!account.HasKey || account.Lock || !oraclePublicKeys.Contains(oraclePub)) continue;
+ if (!account.HasKey || account.Lock) continue;
+ var key = account.GetKey()!;
+ if (!oraclePublicKeys.Contains(key.PublicKey)) continue;
- var txSign = responseTx.Sign(account.GetKey(), _system.Settings.Network);
- var backTxSign = backupTx.Sign(account.GetKey(), _system.Settings.Network);
+ var txSign = responseTx.Sign(key, _system.Settings.Network);
+ var backTxSign = backupTx.Sign(key, _system.Settings.Network);
- AddResponseTxSign(snapshot, requestId, oraclePub, txSign, responseTx, backupTx, backTxSign);
- tasks.Add(SendResponseSignatureAsync(requestId, txSign, account.GetKey()));
+ AddResponseTxSign(snapshot, requestId, key.PublicKey, txSign, responseTx, backupTx, backTxSign);
+ tasks.Add(SendResponseSignatureAsync(requestId, txSign, key));
- Log($"[{request.OriginalTxid}]-[[{responseTx.Hash}]] Send oracle sign data, Oracle node: {oraclePub}, Sign: {txSign.ToHexString()}");
+ Log($"[{request.OriginalTxid}]-[[{responseTx.Hash}]] Send oracle sign data, Oracle node: {key.PublicKey}, Sign: {txSign.ToHexString()}");
}
await Task.WhenAll(tasks);
}
@@ -349,7 +353,7 @@ private async Task ProcessRequestsAsync()
foreach (var (id, request) in NativeContract.Oracle.GetRequests(snapshot))
{
if (cancelSource.IsCancellationRequested) break;
- if (!finishedCache.ContainsKey(id) && (!pendingQueue.TryGetValue(id, out OracleTask task) || task.Tx is null))
+ if (!finishedCache.ContainsKey(id) && (!pendingQueue.TryGetValue(id, out OracleTask? task) || task.Tx is null))
await ProcessRequestAsync(snapshot, request);
}
}
@@ -371,11 +375,11 @@ private void SyncPendingQueue(DataCache snapshot)
}
}
- private async Task<(OracleResponseCode, string)> ProcessUrlAsync(string url)
+ private async Task<(OracleResponseCode, string?)> ProcessUrlAsync(string url)
{
if (!Uri.TryCreate(url, UriKind.Absolute, out var uri))
return (OracleResponseCode.Error, $"Invalid url:<{url}>");
- if (!protocols.TryGetValue(uri.Scheme, out IOracleProtocol protocol))
+ if (!protocols.TryGetValue(uri.Scheme, out IOracleProtocol? protocol))
return (OracleResponseCode.ProtocolNotSupported, $"Invalid Protocol:<{url}>");
using CancellationTokenSource ctsTimeout = new(OracleSettings.Default.MaxOracleTimeout);
@@ -393,7 +397,7 @@ private void SyncPendingQueue(DataCache snapshot)
public static Transaction CreateResponseTx(DataCache snapshot, OracleRequest request, OracleResponse response, ECPoint[] oracleNodes, ProtocolSettings settings, bool useCurrentHeight = false)
{
- var requestTx = NativeContract.Ledger.GetTransactionState(snapshot, request.OriginalTxid);
+ var requestTx = NativeContract.Ledger.GetTransactionState(snapshot, request.OriginalTxid)!;
var n = oracleNodes.Length;
var m = n - (n - 1) / 3;
var oracleSignContract = Contract.CreateMultiSigContract(m, oracleNodes);
@@ -434,11 +438,11 @@ public static Transaction CreateResponseTx(DataCache snapshot, OracleRequest req
// Calculate network fee
- var oracleContract = NativeContract.ContractManagement.GetContract(snapshot, NativeContract.Oracle.Hash);
+ var oracleContract = NativeContract.ContractManagement.GetContract(snapshot, NativeContract.Oracle.Hash)!;
var engine = ApplicationEngine.Create(TriggerType.Verification, tx, snapshot.CloneCache(), settings: settings);
- ContractMethodDescriptor md = oracleContract.Manifest.Abi.GetMethod(ContractBasicMethod.Verify, ContractBasicMethod.VerifyPCount);
+ ContractMethodDescriptor md = oracleContract.Manifest.Abi.GetMethod(ContractBasicMethod.Verify, ContractBasicMethod.VerifyPCount)!;
engine.LoadContract(oracleContract, md, CallFlags.None);
- if (engine.Execute() != VMState.HALT) return null;
+ engine.Execute(); //FAULT is impossible
tx.NetworkFee += engine.FeeConsumed;
var executionFactor = NativeContract.Policy.GetExecFeeFactor(snapshot);
@@ -473,12 +477,12 @@ public static Transaction CreateResponseTx(DataCache snapshot, OracleRequest req
return tx;
}
- private void AddResponseTxSign(DataCache snapshot, ulong requestId, ECPoint oraclePub, byte[] sign, Transaction responseTx = null, Transaction backupTx = null, byte[] backupSign = null)
+ private void AddResponseTxSign(DataCache snapshot, ulong requestId, ECPoint oraclePub, byte[] sign, Transaction? responseTx = null, Transaction? backupTx = null, byte[]? backupSign = null)
{
var task = pendingQueue.GetOrAdd(requestId, _ => new OracleTask
{
Id = requestId,
- Request = NativeContract.Oracle.GetRequest(snapshot, requestId),
+ Request = NativeContract.Oracle.GetRequest(snapshot, requestId)!,
Signs = new ConcurrentDictionary(),
BackupSigns = new ConcurrentDictionary()
});
@@ -494,7 +498,7 @@ private void AddResponseTxSign(DataCache snapshot, ulong requestId, ECPoint orac
task.BackupTx = backupTx;
var data = task.BackupTx.GetSignData(_system.Settings.Network);
task.BackupSigns.Where(p => !Crypto.VerifySignature(data, p.Value, p.Key)).ForEach(p => task.BackupSigns.Remove(p.Key, out _));
- task.BackupSigns.TryAdd(oraclePub, backupSign);
+ task.BackupSigns.TryAdd(oraclePub, backupSign!);
}
if (task.Tx == null)
{
@@ -505,25 +509,25 @@ private void AddResponseTxSign(DataCache snapshot, ulong requestId, ECPoint orac
if (Crypto.VerifySignature(task.Tx.GetSignData(_system.Settings.Network), sign, oraclePub))
task.Signs.TryAdd(oraclePub, sign);
- else if (Crypto.VerifySignature(task.BackupTx.GetSignData(_system.Settings.Network), sign, oraclePub))
+ else if (Crypto.VerifySignature(task.BackupTx!.GetSignData(_system.Settings.Network), sign, oraclePub))
task.BackupSigns.TryAdd(oraclePub, sign);
else
throw new RpcException(RpcErrorFactory.InvalidSignature($"Invalid oracle response transaction signature from '{oraclePub}'."));
- if (CheckTxSign(snapshot, task.Tx, task.Signs) || CheckTxSign(snapshot, task.BackupTx, task.BackupSigns))
+ if (CheckTxSign(snapshot, task.Tx, task.Signs) || CheckTxSign(snapshot, task.BackupTx!, task.BackupSigns))
{
finishedCache.TryAdd(requestId, new DateTime());
pendingQueue.TryRemove(requestId, out _);
}
}
- public static byte[] Filter(string input, string filterArgs)
+ public static byte[] Filter(string input, string? filterArgs)
{
if (string.IsNullOrEmpty(filterArgs))
return input.ToStrictUtf8Bytes();
- JToken beforeObject = JToken.Parse(input);
- JArray afterObjects = beforeObject.JsonPath(filterArgs);
+ JToken? beforeObject = JToken.Parse(input);
+ JArray afterObjects = beforeObject?.JsonPath(filterArgs) ?? new();
return afterObjects.ToByteArray(false);
}
@@ -576,11 +580,11 @@ private static void Log(string message, LogLevel level = LogLevel.Info)
class OracleTask
{
public ulong Id;
- public OracleRequest Request;
- public Transaction Tx;
- public Transaction BackupTx;
- public ConcurrentDictionary Signs;
- public ConcurrentDictionary BackupSigns;
+ public required OracleRequest Request;
+ public Transaction? Tx;
+ public Transaction? BackupTx;
+ public required ConcurrentDictionary Signs;
+ public required ConcurrentDictionary BackupSigns;
public readonly DateTime Timestamp = TimeProvider.Current.UtcNow;
}
diff --git a/plugins/OracleService/OracleSettings.cs b/plugins/OracleService/OracleSettings.cs
index f0e518898..adbb77395 100644
--- a/plugins/OracleService/OracleSettings.cs
+++ b/plugins/OracleService/OracleSettings.cs
@@ -48,18 +48,18 @@ class OracleSettings : IPluginSettings
public NeoFSSettings NeoFS { get; }
public bool AutoStart { get; }
- public static OracleSettings Default { get; private set; }
+ public static OracleSettings Default { get; private set; } = null!;
public UnhandledExceptionPolicy ExceptionPolicy { get; }
private OracleSettings(IConfigurationSection section)
{
Network = section.GetValue("Network", 5195086u);
- Nodes = section.GetSection("Nodes").GetChildren().Select(p => new Uri(p.Get(), UriKind.Absolute)).ToArray();
+ Nodes = section.GetSection("Nodes").GetChildren().Select(p => new Uri(p.Get()!, UriKind.Absolute)).ToArray();
MaxTaskTimeout = TimeSpan.FromMilliseconds(section.GetValue("MaxTaskTimeout", 432000000));
MaxOracleTimeout = TimeSpan.FromMilliseconds(section.GetValue("MaxOracleTimeout", 15000));
AllowPrivateHost = section.GetValue("AllowPrivateHost", false);
- AllowedContentTypes = section.GetSection("AllowedContentTypes").GetChildren().Select(p => p.Get()).ToArray();
+ AllowedContentTypes = section.GetSection("AllowedContentTypes").GetChildren().Select(p => p.Get()!).ToArray();
ExceptionPolicy = section.GetValue("UnhandledExceptionPolicy", UnhandledExceptionPolicy.Ignore);
if (AllowedContentTypes.Length == 0)
AllowedContentTypes = AllowedContentTypes.Concat("application/json").ToArray();
diff --git a/plugins/OracleService/Protocols/IOracleProtocol.cs b/plugins/OracleService/Protocols/IOracleProtocol.cs
index 408fbe8db..5046550b8 100644
--- a/plugins/OracleService/Protocols/IOracleProtocol.cs
+++ b/plugins/OracleService/Protocols/IOracleProtocol.cs
@@ -16,5 +16,5 @@ namespace Neo.Plugins.OracleService.Protocols;
interface IOracleProtocol : IDisposable
{
void Configure();
- Task<(OracleResponseCode, string)> ProcessAsync(Uri uri, CancellationToken cancellation);
+ Task<(OracleResponseCode, string?)> ProcessAsync(Uri uri, CancellationToken cancellation);
}
diff --git a/plugins/OracleService/Protocols/OracleHttpsProtocol.cs b/plugins/OracleService/Protocols/OracleHttpsProtocol.cs
index 05e90bb27..fd39f9334 100644
--- a/plugins/OracleService/Protocols/OracleHttpsProtocol.cs
+++ b/plugins/OracleService/Protocols/OracleHttpsProtocol.cs
@@ -24,7 +24,7 @@ class OracleHttpsProtocol : IOracleProtocol
public OracleHttpsProtocol()
{
CustomAttributeData attribute = Assembly.GetExecutingAssembly().CustomAttributes.First(p => p.AttributeType == typeof(AssemblyInformationalVersionAttribute));
- string version = (string)attribute.ConstructorArguments[0].Value;
+ string version = (string)attribute.ConstructorArguments[0].Value!;
client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("NeoOracleService", version));
}
@@ -41,11 +41,11 @@ public void Dispose()
client.Dispose();
}
- public async Task<(OracleResponseCode, string)> ProcessAsync(Uri uri, CancellationToken cancellation)
+ public async Task<(OracleResponseCode, string?)> ProcessAsync(Uri uri, CancellationToken cancellation)
{
Utility.Log(nameof(OracleHttpsProtocol), LogLevel.Debug, $"Request: {uri.AbsoluteUri}");
- HttpResponseMessage message;
+ HttpResponseMessage? message;
try
{
int redirects = 2;
@@ -77,6 +77,8 @@ public void Dispose()
return (OracleResponseCode.Forbidden, null);
if (!message.IsSuccessStatusCode)
return (OracleResponseCode.Error, message.StatusCode.ToString());
+ if (message.Content.Headers.ContentType is null)
+ return (OracleResponseCode.ContentTypeNotSupported, null);
if (!OracleSettings.Default.AllowedContentTypes.Contains(message.Content.Headers.ContentType.MediaType))
return (OracleResponseCode.ContentTypeNotSupported, null);
if (message.Content.Headers.ContentLength.HasValue && message.Content.Headers.ContentLength > OracleResponse.MaxResultSize)
@@ -98,7 +100,7 @@ public void Dispose()
private static Encoding GetEncoding(HttpContentHeaders headers)
{
- Encoding encoding = null;
+ Encoding? encoding = null;
if ((headers.ContentType != null) && (headers.ContentType.CharSet != null))
{
encoding = Encoding.GetEncoding(headers.ContentType.CharSet);
diff --git a/plugins/OracleService/Protocols/OracleNeoFSProtocol.cs b/plugins/OracleService/Protocols/OracleNeoFSProtocol.cs
index e6368eaed..c2153be24 100644
--- a/plugins/OracleService/Protocols/OracleNeoFSProtocol.cs
+++ b/plugins/OracleService/Protocols/OracleNeoFSProtocol.cs
@@ -43,7 +43,7 @@ public void Dispose()
privateKey.Dispose();
}
- public async Task<(OracleResponseCode, string)> ProcessAsync(Uri uri, CancellationToken cancellation)
+ public async Task<(OracleResponseCode, string?)> ProcessAsync(Uri uri, CancellationToken cancellation)
{
Utility.Log(nameof(OracleNeoFSProtocol), LogLevel.Debug, $"Request: {uri.AbsoluteUri}");
try
diff --git a/plugins/RestServer/RestServer.csproj b/plugins/RestServer/RestServer.csproj
index 0d4e585a5..dcd3e6ba8 100644
--- a/plugins/RestServer/RestServer.csproj
+++ b/plugins/RestServer/RestServer.csproj
@@ -1,9 +1,5 @@
-
- enable
-
-
diff --git a/plugins/RestServer/RestWebServer.cs b/plugins/RestServer/RestWebServer.cs
index f2acda735..e4668f84d 100644
--- a/plugins/RestServer/RestWebServer.cs
+++ b/plugins/RestServer/RestWebServer.cs
@@ -489,9 +489,8 @@ await context.Response.WriteAsync(
options.RouteTemplate = "docs/{documentName}/swagger.json";
options.PreSerializeFilters.Add((document, request) =>
{
- document.Servers.Clear();
- string basePath = $"{request.Scheme}://{request.Host.Value}";
- document.Servers.Add(new OpenApiServer { Url = basePath });
+ document.Servers?.Clear();
+ document.Servers?.Add(new OpenApiServer { Url = $"{request.Scheme}://{request.Host.Value}" });
});
});
app.UseSwaggerUI(options =>
diff --git a/plugins/RocksDBStore/RocksDBStore.csproj b/plugins/RocksDBStore/RocksDBStore.csproj
index 2b76221e9..cec590455 100644
--- a/plugins/RocksDBStore/RocksDBStore.csproj
+++ b/plugins/RocksDBStore/RocksDBStore.csproj
@@ -3,7 +3,6 @@
Neo.Plugins.Storage.RocksDBStore
Neo.Plugins.Storage
- enable
diff --git a/plugins/RpcClient/Models/RpcAccount.cs b/plugins/RpcClient/Models/RpcAccount.cs
index eef89ccdc..fa7121b9d 100644
--- a/plugins/RpcClient/Models/RpcAccount.cs
+++ b/plugins/RpcClient/Models/RpcAccount.cs
@@ -15,11 +15,11 @@ namespace Neo.Network.RPC.Models;
public class RpcAccount
{
- public string Address { get; set; }
+ public required string Address { get; set; }
public bool HasKey { get; set; }
- public string Label { get; set; }
+ public string? Label { get; set; }
public bool WatchOnly { get; set; }
@@ -38,10 +38,10 @@ public static RpcAccount FromJson(JObject json)
{
return new RpcAccount
{
- Address = json["address"].AsString(),
- HasKey = json["haskey"].AsBoolean(),
+ Address = json["address"]!.AsString(),
+ HasKey = json["haskey"]!.AsBoolean(),
Label = json["label"]?.AsString(),
- WatchOnly = json["watchonly"].AsBoolean(),
+ WatchOnly = json["watchonly"]!.AsBoolean(),
};
}
}
diff --git a/plugins/RpcClient/Models/RpcApplicationLog.cs b/plugins/RpcClient/Models/RpcApplicationLog.cs
index 4ded2a09d..207f901a1 100644
--- a/plugins/RpcClient/Models/RpcApplicationLog.cs
+++ b/plugins/RpcClient/Models/RpcApplicationLog.cs
@@ -19,11 +19,11 @@ namespace Neo.Network.RPC.Models;
public class RpcApplicationLog
{
- public UInt256 TxId { get; set; }
+ public UInt256? TxId { get; set; }
- public UInt256 BlockHash { get; set; }
+ public UInt256? BlockHash { get; set; }
- public List Executions { get; set; }
+ public required List Executions { get; set; }
public JObject ToJson()
{
@@ -40,9 +40,9 @@ public static RpcApplicationLog FromJson(JObject json, ProtocolSettings protocol
{
return new RpcApplicationLog
{
- TxId = json["txid"] is null ? null : UInt256.Parse(json["txid"].AsString()),
- BlockHash = json["blockhash"] is null ? null : UInt256.Parse(json["blockhash"].AsString()),
- Executions = ((JArray)json["executions"]).Select(p => Execution.FromJson((JObject)p, protocolSettings)).ToList(),
+ TxId = json["txid"] is null ? null : UInt256.Parse(json["txid"]!.AsString()),
+ BlockHash = json["blockhash"] is null ? null : UInt256.Parse(json["blockhash"]!.AsString()),
+ Executions = ((JArray)json["executions"]!).Select(p => Execution.FromJson((JObject)p!, protocolSettings)).ToList(),
};
}
}
@@ -55,11 +55,11 @@ public class Execution
public long GasConsumed { get; set; }
- public string ExceptionMessage { get; set; }
+ public string? ExceptionMessage { get; set; }
- public List Stack { get; set; }
+ public required List Stack { get; set; }
- public List Notifications { get; set; }
+ public required List Notifications { get; set; }
public JObject ToJson()
{
@@ -78,23 +78,23 @@ public static Execution FromJson(JObject json, ProtocolSettings protocolSettings
{
return new Execution
{
- Trigger = json["trigger"].GetEnum(),
- VMState = json["vmstate"].GetEnum(),
- GasConsumed = long.Parse(json["gasconsumed"].AsString()),
+ Trigger = json["trigger"]!.GetEnum(),
+ VMState = json["vmstate"]!.GetEnum(),
+ GasConsumed = long.Parse(json["gasconsumed"]!.AsString()),
ExceptionMessage = json["exception"]?.AsString(),
- Stack = ((JArray)json["stack"]).Select(p => Utility.StackItemFromJson((JObject)p)).ToList(),
- Notifications = ((JArray)json["notifications"]).Select(p => RpcNotifyEventArgs.FromJson((JObject)p, protocolSettings)).ToList()
+ Stack = ((JArray)json["stack"]!).Select(p => Utility.StackItemFromJson((JObject)p!)).ToList(),
+ Notifications = ((JArray)json["notifications"]!).Select(p => RpcNotifyEventArgs.FromJson((JObject)p!, protocolSettings)).ToList()
};
}
}
public class RpcNotifyEventArgs
{
- public UInt160 Contract { get; set; }
+ public required UInt160 Contract { get; set; }
- public string EventName { get; set; }
+ public required string EventName { get; set; }
- public StackItem State { get; set; }
+ public required StackItem State { get; set; }
public JObject ToJson()
{
@@ -110,9 +110,9 @@ public static RpcNotifyEventArgs FromJson(JObject json, ProtocolSettings protoco
{
return new RpcNotifyEventArgs
{
- Contract = json["contract"].ToScriptHash(protocolSettings),
- EventName = json["eventname"].AsString(),
- State = Utility.StackItemFromJson((JObject)json["state"])
+ Contract = json["contract"]!.ToScriptHash(protocolSettings),
+ EventName = json["eventname"]!.AsString(),
+ State = Utility.StackItemFromJson((JObject)json["state"]!)
};
}
}
diff --git a/plugins/RpcClient/Models/RpcBlock.cs b/plugins/RpcClient/Models/RpcBlock.cs
index 22cb187e6..2873fa58f 100644
--- a/plugins/RpcClient/Models/RpcBlock.cs
+++ b/plugins/RpcClient/Models/RpcBlock.cs
@@ -16,11 +16,11 @@ namespace Neo.Network.RPC.Models;
public class RpcBlock
{
- public Block Block { get; set; }
+ public required Block Block { get; set; }
public uint Confirmations { get; set; }
- public UInt256 NextBlockHash { get; set; }
+ public UInt256? NextBlockHash { get; set; }
public JObject ToJson(ProtocolSettings protocolSettings)
{
@@ -35,8 +35,8 @@ public static RpcBlock FromJson(JObject json, ProtocolSettings protocolSettings)
return new RpcBlock
{
Block = Utility.BlockFromJson(json, protocolSettings),
- Confirmations = (uint)json["confirmations"].AsNumber(),
- NextBlockHash = json["nextblockhash"] is null ? null : UInt256.Parse(json["nextblockhash"].AsString())
+ Confirmations = (uint)json["confirmations"]!.AsNumber(),
+ NextBlockHash = json["nextblockhash"] is null ? null : UInt256.Parse(json["nextblockhash"]!.AsString())
};
}
}
diff --git a/plugins/RpcClient/Models/RpcBlockHeader.cs b/plugins/RpcClient/Models/RpcBlockHeader.cs
index f36a0e94a..8bf9947a4 100644
--- a/plugins/RpcClient/Models/RpcBlockHeader.cs
+++ b/plugins/RpcClient/Models/RpcBlockHeader.cs
@@ -16,11 +16,11 @@ namespace Neo.Network.RPC.Models;
public class RpcBlockHeader
{
- public Header Header { get; set; }
+ public required Header Header { get; set; }
public uint Confirmations { get; set; }
- public UInt256 NextBlockHash { get; set; }
+ public UInt256? NextBlockHash { get; set; }
public JObject ToJson(ProtocolSettings protocolSettings)
{
@@ -35,8 +35,8 @@ public static RpcBlockHeader FromJson(JObject json, ProtocolSettings protocolSet
return new RpcBlockHeader
{
Header = Utility.HeaderFromJson(json, protocolSettings),
- Confirmations = (uint)json["confirmations"].AsNumber(),
- NextBlockHash = json["nextblockhash"] is null ? null : UInt256.Parse(json["nextblockhash"].AsString())
+ Confirmations = (uint)json["confirmations"]!.AsNumber(),
+ NextBlockHash = json["nextblockhash"] is null ? null : UInt256.Parse(json["nextblockhash"]!.AsString())
};
}
}
diff --git a/plugins/RpcClient/Models/RpcContractState.cs b/plugins/RpcClient/Models/RpcContractState.cs
index e1a7e1a78..a8ae0dc82 100644
--- a/plugins/RpcClient/Models/RpcContractState.cs
+++ b/plugins/RpcClient/Models/RpcContractState.cs
@@ -17,7 +17,7 @@ namespace Neo.Network.RPC.Models;
public class RpcContractState
{
- public ContractState ContractState { get; set; }
+ public required ContractState ContractState { get; set; }
public JObject ToJson()
{
@@ -30,11 +30,11 @@ public static RpcContractState FromJson(JObject json)
{
ContractState = new ContractState
{
- Id = (int)json["id"].AsNumber(),
- UpdateCounter = (ushort)json["updatecounter"].AsNumber(),
- Hash = UInt160.Parse(json["hash"].AsString()),
- Nef = RpcNefFile.FromJson((JObject)json["nef"]),
- Manifest = ContractManifest.FromJson((JObject)json["manifest"])
+ Id = (int)json["id"]!.AsNumber(),
+ UpdateCounter = (ushort)json["updatecounter"]!.AsNumber(),
+ Hash = UInt160.Parse(json["hash"]!.AsString()),
+ Nef = RpcNefFile.FromJson((JObject)json["nef"]!),
+ Manifest = ContractManifest.FromJson((JObject)json["manifest"]!)
}
};
}
diff --git a/plugins/RpcClient/Models/RpcFoundStates.cs b/plugins/RpcClient/Models/RpcFoundStates.cs
index 64248d1ec..0ec316e85 100644
--- a/plugins/RpcClient/Models/RpcFoundStates.cs
+++ b/plugins/RpcClient/Models/RpcFoundStates.cs
@@ -16,26 +16,26 @@ namespace Neo.Network.RPC.Models;
public class RpcFoundStates
{
public bool Truncated;
- public (byte[] key, byte[] value)[] Results;
- public byte[] FirstProof;
- public byte[] LastProof;
+ public required (byte[] key, byte[] value)[] Results;
+ public byte[]? FirstProof;
+ public byte[]? LastProof;
public static RpcFoundStates FromJson(JObject json)
{
return new RpcFoundStates
{
- Truncated = json["truncated"].AsBoolean(),
- Results = ((JArray)json["results"])
+ Truncated = json["truncated"]!.AsBoolean(),
+ Results = ((JArray)json["results"]!)
.Select(j => (
- Convert.FromBase64String(j["key"].AsString()),
- Convert.FromBase64String(j["value"].AsString())
+ Convert.FromBase64String(j!["key"]!.AsString()),
+ Convert.FromBase64String(j["value"]!.AsString())
))
.ToArray(),
- FirstProof = ProofFromJson((JString)json["firstProof"]),
- LastProof = ProofFromJson((JString)json["lastProof"]),
+ FirstProof = ProofFromJson((JString?)json["firstProof"]),
+ LastProof = ProofFromJson((JString?)json["lastProof"]),
};
}
- static byte[] ProofFromJson(JString json)
+ static byte[]? ProofFromJson(JString? json)
=> json == null ? null : Convert.FromBase64String(json.AsString());
}
diff --git a/plugins/RpcClient/Models/RpcInvokeResult.cs b/plugins/RpcClient/Models/RpcInvokeResult.cs
index 6c7d610cf..bdfbcb60d 100644
--- a/plugins/RpcClient/Models/RpcInvokeResult.cs
+++ b/plugins/RpcClient/Models/RpcInvokeResult.cs
@@ -18,19 +18,19 @@ namespace Neo.Network.RPC.Models;
public class RpcInvokeResult
{
- public string Script { get; set; }
+ public required string Script { get; set; }
public VMState State { get; set; }
public long GasConsumed { get; set; }
- public StackItem[] Stack { get; set; }
+ public required StackItem[] Stack { get; set; }
- public string Tx { get; set; }
+ public string? Tx { get; set; }
- public string Exception { get; set; }
+ public string? Exception { get; set; }
- public string Session { get; set; }
+ public string? Session { get; set; }
public JObject ToJson()
{
@@ -60,29 +60,24 @@ public JObject ToJson()
public static RpcInvokeResult FromJson(JObject json)
{
- var invokeScriptResult = new RpcInvokeResult()
+ return new RpcInvokeResult()
{
- Script = json["script"].AsString(),
- State = json["state"].GetEnum(),
- GasConsumed = long.Parse(json["gasconsumed"].AsString()),
+ Script = json["script"]!.AsString(),
+ State = json["state"]!.GetEnum(),
+ GasConsumed = long.Parse(json["gasconsumed"]!.AsString()),
+ Stack = ((JArray)json["stack"]!).Select(p => Utility.StackItemFromJson((JObject)p!)).ToArray(),
+ Tx = json["tx"]?.AsString(),
Exception = json["exception"]?.AsString(),
Session = json["session"]?.AsString()
};
- try
- {
- invokeScriptResult.Stack = ((JArray)json["stack"]).Select(p => Utility.StackItemFromJson((JObject)p)).ToArray();
- }
- catch { }
- invokeScriptResult.Tx = json["tx"]?.AsString();
- return invokeScriptResult;
}
}
public class RpcStack
{
- public string Type { get; set; }
+ public required string Type { get; set; }
- public JToken Value { get; set; }
+ public JToken? Value { get; set; }
public JObject ToJson() => new() { ["type"] = Type, ["value"] = Value };
@@ -90,7 +85,7 @@ public static RpcStack FromJson(JObject json)
{
return new RpcStack
{
- Type = json["type"].AsString(),
+ Type = json["type"]!.AsString(),
Value = json["value"]
};
}
diff --git a/plugins/RpcClient/Models/RpcMethodToken.cs b/plugins/RpcClient/Models/RpcMethodToken.cs
index 89e729b88..fa7f02631 100644
--- a/plugins/RpcClient/Models/RpcMethodToken.cs
+++ b/plugins/RpcClient/Models/RpcMethodToken.cs
@@ -20,11 +20,11 @@ public static MethodToken FromJson(JObject json)
{
return new MethodToken
{
- Hash = UInt160.Parse(json["hash"].AsString()),
- Method = json["method"].AsString(),
- ParametersCount = (ushort)json["paramcount"].AsNumber(),
- HasReturnValue = json["hasreturnvalue"].AsBoolean(),
- CallFlags = (CallFlags)Enum.Parse(typeof(CallFlags), json["callflags"].AsString())
+ Hash = UInt160.Parse(json["hash"]!.AsString()),
+ Method = json["method"]!.AsString(),
+ ParametersCount = (ushort)json["paramcount"]!.AsNumber(),
+ HasReturnValue = json["hasreturnvalue"]!.AsBoolean(),
+ CallFlags = Enum.Parse(json["callflags"]!.AsString())
};
}
}
diff --git a/plugins/RpcClient/Models/RpcNefFile.cs b/plugins/RpcClient/Models/RpcNefFile.cs
index 9042d2a2d..f438ded54 100644
--- a/plugins/RpcClient/Models/RpcNefFile.cs
+++ b/plugins/RpcClient/Models/RpcNefFile.cs
@@ -20,11 +20,11 @@ public static NefFile FromJson(JObject json)
{
return new NefFile
{
- Compiler = json["compiler"].AsString(),
- Source = json["source"].AsString(),
- Tokens = ((JArray)json["tokens"]).Select(p => RpcMethodToken.FromJson((JObject)p)).ToArray(),
- Script = Convert.FromBase64String(json["script"].AsString()),
- CheckSum = (uint)json["checksum"].AsNumber()
+ Compiler = json["compiler"]!.AsString(),
+ Source = json["source"]!.AsString(),
+ Tokens = ((JArray)json["tokens"]!).Select(p => RpcMethodToken.FromJson((JObject)p!)).ToArray(),
+ Script = Convert.FromBase64String(json["script"]!.AsString()),
+ CheckSum = (uint)json["checksum"]!.AsNumber()
};
}
}
diff --git a/plugins/RpcClient/Models/RpcNep17Balances.cs b/plugins/RpcClient/Models/RpcNep17Balances.cs
index c023b6b2c..a1474210e 100644
--- a/plugins/RpcClient/Models/RpcNep17Balances.cs
+++ b/plugins/RpcClient/Models/RpcNep17Balances.cs
@@ -17,9 +17,9 @@ namespace Neo.Network.RPC.Models;
public class RpcNep17Balances
{
- public UInt160 UserScriptHash { get; set; }
+ public required UInt160 UserScriptHash { get; set; }
- public List Balances { get; set; }
+ public required List Balances { get; set; }
public JObject ToJson(ProtocolSettings protocolSettings)
{
@@ -34,15 +34,15 @@ public static RpcNep17Balances FromJson(JObject json, ProtocolSettings protocolS
{
return new()
{
- Balances = ((JArray)json["balance"]).Select(p => RpcNep17Balance.FromJson((JObject)p, protocolSettings)).ToList(),
- UserScriptHash = json["address"].ToScriptHash(protocolSettings)
+ Balances = ((JArray)json["balance"]!).Select(p => RpcNep17Balance.FromJson((JObject)p!, protocolSettings)).ToList(),
+ UserScriptHash = json["address"]!.ToScriptHash(protocolSettings)
};
}
}
public class RpcNep17Balance
{
- public UInt160 AssetHash { get; set; }
+ public required UInt160 AssetHash { get; set; }
public BigInteger Amount { get; set; }
@@ -62,9 +62,9 @@ public static RpcNep17Balance FromJson(JObject json, ProtocolSettings protocolSe
{
return new()
{
- AssetHash = json["assethash"].ToScriptHash(protocolSettings),
- Amount = BigInteger.Parse(json["amount"].AsString()),
- LastUpdatedBlock = (uint)json["lastupdatedblock"].AsNumber()
+ AssetHash = json["assethash"]!.ToScriptHash(protocolSettings),
+ Amount = BigInteger.Parse(json["amount"]!.AsString()),
+ LastUpdatedBlock = (uint)json["lastupdatedblock"]!.AsNumber()
};
}
}
diff --git a/plugins/RpcClient/Models/RpcNep17TokenInfo.cs b/plugins/RpcClient/Models/RpcNep17TokenInfo.cs
index ff475f58f..b10ac2911 100644
--- a/plugins/RpcClient/Models/RpcNep17TokenInfo.cs
+++ b/plugins/RpcClient/Models/RpcNep17TokenInfo.cs
@@ -15,9 +15,9 @@ namespace Neo.Network.RPC.Models;
public class RpcNep17TokenInfo
{
- public string Name { get; set; }
+ public required string Name { get; set; }
- public string Symbol { get; set; }
+ public required string Symbol { get; set; }
public byte Decimals { get; set; }
diff --git a/plugins/RpcClient/Models/RpcNep17Transfers.cs b/plugins/RpcClient/Models/RpcNep17Transfers.cs
index 1113724b5..b365204b2 100644
--- a/plugins/RpcClient/Models/RpcNep17Transfers.cs
+++ b/plugins/RpcClient/Models/RpcNep17Transfers.cs
@@ -17,11 +17,11 @@ namespace Neo.Network.RPC.Models;
public class RpcNep17Transfers
{
- public UInt160 UserScriptHash { get; set; }
+ public required UInt160 UserScriptHash { get; set; }
- public List Sent { get; set; }
+ public required List Sent { get; set; }
- public List Received { get; set; }
+ public required List Received { get; set; }
public JObject ToJson(ProtocolSettings protocolSettings)
{
@@ -37,9 +37,9 @@ public static RpcNep17Transfers FromJson(JObject json, ProtocolSettings protocol
{
return new()
{
- Sent = ((JArray)json["sent"]).Select(p => RpcNep17Transfer.FromJson((JObject)p, protocolSettings)).ToList(),
- Received = ((JArray)json["received"]).Select(p => RpcNep17Transfer.FromJson((JObject)p, protocolSettings)).ToList(),
- UserScriptHash = json["address"].ToScriptHash(protocolSettings)
+ Sent = ((JArray)json["sent"]!).Select(p => RpcNep17Transfer.FromJson((JObject)p!, protocolSettings)).ToList(),
+ Received = ((JArray)json["received"]!).Select(p => RpcNep17Transfer.FromJson((JObject)p!, protocolSettings)).ToList(),
+ UserScriptHash = json["address"]!.ToScriptHash(protocolSettings)
};
}
}
@@ -48,9 +48,9 @@ public class RpcNep17Transfer
{
public ulong TimestampMS { get; set; }
- public UInt160 AssetHash { get; set; }
+ public required UInt160 AssetHash { get; set; }
- public UInt160 UserScriptHash { get; set; }
+ public UInt160? UserScriptHash { get; set; }
public BigInteger Amount { get; set; }
@@ -58,7 +58,7 @@ public class RpcNep17Transfer
public ushort TransferNotifyIndex { get; set; }
- public UInt256 TxHash { get; set; }
+ public required UInt256 TxHash { get; set; }
public JObject ToJson(ProtocolSettings protocolSettings)
{
@@ -78,13 +78,13 @@ public static RpcNep17Transfer FromJson(JObject json, ProtocolSettings protocolS
{
return new RpcNep17Transfer
{
- TimestampMS = (ulong)json["timestamp"].AsNumber(),
- AssetHash = json["assethash"].ToScriptHash(protocolSettings),
+ TimestampMS = (ulong)json["timestamp"]!.AsNumber(),
+ AssetHash = json["assethash"]!.ToScriptHash(protocolSettings),
UserScriptHash = json["transferaddress"]?.ToScriptHash(protocolSettings),
- Amount = BigInteger.Parse(json["amount"].AsString()),
- BlockIndex = (uint)json["blockindex"].AsNumber(),
- TransferNotifyIndex = (ushort)json["transfernotifyindex"].AsNumber(),
- TxHash = UInt256.Parse(json["txhash"].AsString())
+ Amount = BigInteger.Parse(json["amount"]!.AsString()),
+ BlockIndex = (uint)json["blockindex"]!.AsNumber(),
+ TransferNotifyIndex = (ushort)json["transfernotifyindex"]!.AsNumber(),
+ TxHash = UInt256.Parse(json["txhash"]!.AsString())
};
}
}
diff --git a/plugins/RpcClient/Models/RpcPeers.cs b/plugins/RpcClient/Models/RpcPeers.cs
index 1027537a7..06d7cfbe0 100644
--- a/plugins/RpcClient/Models/RpcPeers.cs
+++ b/plugins/RpcClient/Models/RpcPeers.cs
@@ -15,11 +15,11 @@ namespace Neo.Network.RPC.Models;
public class RpcPeers
{
- public RpcPeer[] Unconnected { get; set; }
+ public required RpcPeer[] Unconnected { get; set; }
- public RpcPeer[] Bad { get; set; }
+ public required RpcPeer[] Bad { get; set; }
- public RpcPeer[] Connected { get; set; }
+ public required RpcPeer[] Connected { get; set; }
public JObject ToJson()
{
@@ -35,16 +35,16 @@ public static RpcPeers FromJson(JObject json)
{
return new RpcPeers
{
- Unconnected = ((JArray)json["unconnected"]).Select(p => RpcPeer.FromJson((JObject)p)).ToArray(),
- Bad = ((JArray)json["bad"]).Select(p => RpcPeer.FromJson((JObject)p)).ToArray(),
- Connected = ((JArray)json["connected"]).Select(p => RpcPeer.FromJson((JObject)p)).ToArray()
+ Unconnected = ((JArray)json["unconnected"]!).Select(p => RpcPeer.FromJson((JObject)p!)).ToArray(),
+ Bad = ((JArray)json["bad"]!).Select(p => RpcPeer.FromJson((JObject)p!)).ToArray(),
+ Connected = ((JArray)json["connected"]!).Select(p => RpcPeer.FromJson((JObject)p!)).ToArray()
};
}
}
public class RpcPeer
{
- public string Address { get; set; }
+ public required string Address { get; set; }
public int Port { get; set; }
@@ -54,8 +54,8 @@ public static RpcPeer FromJson(JObject json)
{
return new RpcPeer
{
- Address = json["address"].AsString(),
- Port = int.Parse(json["port"].AsString())
+ Address = json["address"]!.AsString(),
+ Port = int.Parse(json["port"]!.AsString())
};
}
}
diff --git a/plugins/RpcClient/Models/RpcPlugin.cs b/plugins/RpcClient/Models/RpcPlugin.cs
index 714b691ae..95d27a64f 100644
--- a/plugins/RpcClient/Models/RpcPlugin.cs
+++ b/plugins/RpcClient/Models/RpcPlugin.cs
@@ -15,11 +15,11 @@ namespace Neo.Network.RPC.Models;
public class RpcPlugin
{
- public string Name { get; set; }
+ public required string Name { get; set; }
- public string Version { get; set; }
+ public required string Version { get; set; }
- public string[] Interfaces { get; set; }
+ public required string[] Interfaces { get; set; }
public JObject ToJson()
{
@@ -35,9 +35,9 @@ public static RpcPlugin FromJson(JObject json)
{
return new RpcPlugin
{
- Name = json["name"].AsString(),
- Version = json["version"].AsString(),
- Interfaces = ((JArray)json["interfaces"]).Select(p => p.AsString()).ToArray()
+ Name = json["name"]!.AsString(),
+ Version = json["version"]!.AsString(),
+ Interfaces = ((JArray)json["interfaces"]!).Select(p => p!.AsString()).ToArray()
};
}
}
diff --git a/plugins/RpcClient/Models/RpcRawMemPool.cs b/plugins/RpcClient/Models/RpcRawMemPool.cs
index 654b9cafe..5e178cedc 100644
--- a/plugins/RpcClient/Models/RpcRawMemPool.cs
+++ b/plugins/RpcClient/Models/RpcRawMemPool.cs
@@ -17,9 +17,9 @@ public class RpcRawMemPool
{
public uint Height { get; set; }
- public List Verified { get; set; }
+ public required List Verified { get; set; }
- public List UnVerified { get; set; }
+ public required List UnVerified { get; set; }
public JObject ToJson()
{
@@ -35,9 +35,9 @@ public static RpcRawMemPool FromJson(JObject json)
{
return new RpcRawMemPool
{
- Height = uint.Parse(json["height"].AsString()),
- Verified = ((JArray)json["verified"]).Select(p => UInt256.Parse(p.AsString())).ToList(),
- UnVerified = ((JArray)json["unverified"]).Select(p => UInt256.Parse(p.AsString())).ToList()
+ Height = uint.Parse(json["height"]!.AsString()),
+ Verified = ((JArray)json["verified"]!).Select(p => UInt256.Parse(p!.AsString())).ToList(),
+ UnVerified = ((JArray)json["unverified"]!).Select(p => UInt256.Parse(p!.AsString())).ToList()
};
}
}
diff --git a/plugins/RpcClient/Models/RpcRequest.cs b/plugins/RpcClient/Models/RpcRequest.cs
index dcac51f39..165d166d6 100644
--- a/plugins/RpcClient/Models/RpcRequest.cs
+++ b/plugins/RpcClient/Models/RpcRequest.cs
@@ -15,22 +15,22 @@ namespace Neo.Network.RPC.Models;
public class RpcRequest
{
- public JToken Id { get; set; }
+ public JToken? Id { get; set; }
- public string JsonRpc { get; set; }
+ public required string JsonRpc { get; set; }
- public string Method { get; set; }
+ public required string Method { get; set; }
- public JToken[] Params { get; set; }
+ public required JToken?[] Params { get; set; }
public static RpcRequest FromJson(JObject json)
{
return new RpcRequest
{
Id = json["id"],
- JsonRpc = json["jsonrpc"].AsString(),
- Method = json["method"].AsString(),
- Params = ((JArray)json["params"]).ToArray()
+ JsonRpc = json["jsonrpc"]!.AsString(),
+ Method = json["method"]!.AsString(),
+ Params = ((JArray)json["params"]!).ToArray()
};
}
diff --git a/plugins/RpcClient/Models/RpcResponse.cs b/plugins/RpcClient/Models/RpcResponse.cs
index 6c57d295a..957b5d59a 100644
--- a/plugins/RpcClient/Models/RpcResponse.cs
+++ b/plugins/RpcClient/Models/RpcResponse.cs
@@ -15,28 +15,28 @@ namespace Neo.Network.RPC.Models;
public class RpcResponse
{
- public JToken Id { get; set; }
+ public JToken? Id { get; set; }
- public string JsonRpc { get; set; }
+ public required string JsonRpc { get; set; }
- public RpcResponseError Error { get; set; }
+ public RpcResponseError? Error { get; set; }
- public JToken Result { get; set; }
+ public JToken? Result { get; set; }
- public string RawResponse { get; set; }
+ public string RawResponse { get; set; } = null!;
public static RpcResponse FromJson(JObject json)
{
var response = new RpcResponse
{
Id = json["id"],
- JsonRpc = json["jsonrpc"].AsString(),
+ JsonRpc = json["jsonrpc"]!.AsString(),
Result = json["result"]
};
if (json["error"] != null)
{
- response.Error = RpcResponseError.FromJson((JObject)json["error"]);
+ response.Error = RpcResponseError.FromJson((JObject)json["error"]!);
}
return response;
@@ -58,16 +58,16 @@ public class RpcResponseError
{
public int Code { get; set; }
- public string Message { get; set; }
+ public required string Message { get; set; }
- public JToken Data { get; set; }
+ public JToken? Data { get; set; }
public static RpcResponseError FromJson(JObject json)
{
return new RpcResponseError
{
- Code = (int)json["code"].AsNumber(),
- Message = json["message"].AsString(),
+ Code = (int)json["code"]!.AsNumber(),
+ Message = json["message"]!.AsString(),
Data = json["data"],
};
}
diff --git a/plugins/RpcClient/Models/RpcStateRoot.cs b/plugins/RpcClient/Models/RpcStateRoot.cs
index 1b8ae7062..6664d7ff9 100644
--- a/plugins/RpcClient/Models/RpcStateRoot.cs
+++ b/plugins/RpcClient/Models/RpcStateRoot.cs
@@ -18,17 +18,17 @@ public class RpcStateRoot
{
public byte Version;
public uint Index;
- public UInt256 RootHash;
- public Witness Witness;
+ public required UInt256 RootHash;
+ public required Witness Witness;
public static RpcStateRoot FromJson(JObject json)
{
return new RpcStateRoot
{
- Version = (byte)json["version"].AsNumber(),
- Index = (uint)json["index"].AsNumber(),
- RootHash = UInt256.Parse(json["roothash"].AsString()),
- Witness = ((JArray)json["witnesses"]).Select(p => Utility.WitnessFromJson((JObject)p)).FirstOrDefault()
+ Version = (byte)json["version"]!.AsNumber(),
+ Index = (uint)json["index"]!.AsNumber(),
+ RootHash = UInt256.Parse(json["roothash"]!.AsString()),
+ Witness = ((JArray)json["witnesses"]!).Select(p => Utility.WitnessFromJson((JObject)p!)).First()
};
}
}
diff --git a/plugins/RpcClient/Models/RpcTransaction.cs b/plugins/RpcClient/Models/RpcTransaction.cs
index f07949947..16a2d226f 100644
--- a/plugins/RpcClient/Models/RpcTransaction.cs
+++ b/plugins/RpcClient/Models/RpcTransaction.cs
@@ -17,9 +17,9 @@ namespace Neo.Network.RPC.Models;
public class RpcTransaction
{
- public Transaction Transaction { get; set; }
+ public required Transaction Transaction { get; set; }
- public UInt256 BlockHash { get; set; }
+ public UInt256? BlockHash { get; set; }
public uint? Confirmations { get; set; }
@@ -32,7 +32,7 @@ public JObject ToJson(ProtocolSettings protocolSettings)
var json = Utility.TransactionToJson(Transaction, protocolSettings);
if (Confirmations != null)
{
- json["blockhash"] = BlockHash.ToString();
+ json["blockhash"] = BlockHash!.ToString();
json["confirmations"] = Confirmations;
json["blocktime"] = BlockTime;
if (VMState != null)
@@ -52,9 +52,9 @@ public static RpcTransaction FromJson(JObject json, ProtocolSettings protocolSet
if (json["confirmations"] != null)
{
- transaction.BlockHash = UInt256.Parse(json["blockhash"].AsString());
- transaction.Confirmations = (uint)json["confirmations"].AsNumber();
- transaction.BlockTime = (ulong)json["blocktime"].AsNumber();
+ transaction.BlockHash = UInt256.Parse(json["blockhash"]!.AsString());
+ transaction.Confirmations = (uint)json["confirmations"]!.AsNumber();
+ transaction.BlockTime = (ulong)json["blocktime"]!.AsNumber();
transaction.VMState = json["vmstate"]?.GetEnum();
}
return transaction;
diff --git a/plugins/RpcClient/Models/RpcTransferOut.cs b/plugins/RpcClient/Models/RpcTransferOut.cs
index 636e2762d..94a71f3b9 100644
--- a/plugins/RpcClient/Models/RpcTransferOut.cs
+++ b/plugins/RpcClient/Models/RpcTransferOut.cs
@@ -16,11 +16,11 @@ namespace Neo.Network.RPC.Models;
public class RpcTransferOut
{
- public UInt160 Asset { get; set; }
+ public required UInt160 Asset { get; set; }
- public UInt160 ScriptHash { get; set; }
+ public required UInt160 ScriptHash { get; set; }
- public string Value { get; set; }
+ public required string Value { get; set; }
public JObject ToJson(ProtocolSettings protocolSettings)
{
@@ -36,9 +36,9 @@ public static RpcTransferOut FromJson(JObject json, ProtocolSettings protocolSet
{
return new RpcTransferOut
{
- Asset = json["asset"].ToScriptHash(protocolSettings),
- Value = json["value"].AsString(),
- ScriptHash = json["address"].ToScriptHash(protocolSettings),
+ Asset = json["asset"]!.ToScriptHash(protocolSettings),
+ Value = json["value"]!.AsString(),
+ ScriptHash = json["address"]!.ToScriptHash(protocolSettings),
};
}
}
diff --git a/plugins/RpcClient/Models/RpcUnclaimedGas.cs b/plugins/RpcClient/Models/RpcUnclaimedGas.cs
index 0fb1824e1..0c266a0fb 100644
--- a/plugins/RpcClient/Models/RpcUnclaimedGas.cs
+++ b/plugins/RpcClient/Models/RpcUnclaimedGas.cs
@@ -17,7 +17,7 @@ public class RpcUnclaimedGas
{
public long Unclaimed { get; set; }
- public string Address { get; set; }
+ public required string Address { get; set; }
public JObject ToJson() => new() { ["unclaimed"] = Unclaimed.ToString(), ["address"] = Address };
@@ -25,8 +25,8 @@ public static RpcUnclaimedGas FromJson(JObject json)
{
return new RpcUnclaimedGas
{
- Unclaimed = long.Parse(json["unclaimed"].AsString()),
- Address = json["address"].AsString()
+ Unclaimed = long.Parse(json["unclaimed"]!.AsString()),
+ Address = json["address"]!.AsString()
};
}
}
diff --git a/plugins/RpcClient/Models/RpcValidateAddressResult.cs b/plugins/RpcClient/Models/RpcValidateAddressResult.cs
index 3668556d2..2c5cfc5ce 100644
--- a/plugins/RpcClient/Models/RpcValidateAddressResult.cs
+++ b/plugins/RpcClient/Models/RpcValidateAddressResult.cs
@@ -15,7 +15,7 @@ namespace Neo.Network.RPC.Models;
public class RpcValidateAddressResult
{
- public string Address { get; set; }
+ public required string Address { get; set; }
public bool IsValid { get; set; }
@@ -25,8 +25,8 @@ public static RpcValidateAddressResult FromJson(JObject json)
{
return new RpcValidateAddressResult
{
- Address = json["address"].AsString(),
- IsValid = json["isvalid"].AsBoolean()
+ Address = json["address"]!.AsString(),
+ IsValid = json["isvalid"]!.AsBoolean()
};
}
}
diff --git a/plugins/RpcClient/Models/RpcValidator.cs b/plugins/RpcClient/Models/RpcValidator.cs
index 9875ec339..96e712a9a 100644
--- a/plugins/RpcClient/Models/RpcValidator.cs
+++ b/plugins/RpcClient/Models/RpcValidator.cs
@@ -16,7 +16,7 @@ namespace Neo.Network.RPC.Models;
public class RpcValidator
{
- public string PublicKey { get; set; }
+ public required string PublicKey { get; set; }
public BigInteger Votes { get; set; }
@@ -26,8 +26,8 @@ public static RpcValidator FromJson(JObject json)
{
return new RpcValidator
{
- PublicKey = json["publickey"].AsString(),
- Votes = BigInteger.Parse(json["votes"].AsString()),
+ PublicKey = json["publickey"]!.AsString(),
+ Votes = BigInteger.Parse(json["votes"]!.AsString()),
};
}
}
diff --git a/plugins/RpcClient/Models/RpcVersion.cs b/plugins/RpcClient/Models/RpcVersion.cs
index f01d5cf9e..3d5590e2a 100644
--- a/plugins/RpcClient/Models/RpcVersion.cs
+++ b/plugins/RpcClient/Models/RpcVersion.cs
@@ -27,9 +27,9 @@ public class RpcProtocol
public uint MaxTransactionsPerBlock { get; set; }
public int MemoryPoolMaxTransactions { get; set; }
public ulong InitialGasDistribution { get; set; }
- public IReadOnlyDictionary Hardforks { get; set; }
- public IReadOnlyList SeedList { get; set; }
- public IReadOnlyList StandbyCommittee { get; set; }
+ public required IReadOnlyDictionary Hardforks { get; set; }
+ public required IReadOnlyList SeedList { get; set; }
+ public required IReadOnlyList StandbyCommittee { get; set; }
public JObject ToJson()
{
@@ -58,24 +58,24 @@ public static RpcProtocol FromJson(JObject json)
{
return new()
{
- Network = (uint)json["network"].AsNumber(),
- ValidatorsCount = (int)json["validatorscount"].AsNumber(),
- MillisecondsPerBlock = (uint)json["msperblock"].AsNumber(),
- MaxValidUntilBlockIncrement = (uint)json["maxvaliduntilblockincrement"].AsNumber(),
- MaxTraceableBlocks = (uint)json["maxtraceableblocks"].AsNumber(),
- AddressVersion = (byte)json["addressversion"].AsNumber(),
- MaxTransactionsPerBlock = (uint)json["maxtransactionsperblock"].AsNumber(),
- MemoryPoolMaxTransactions = (int)json["memorypoolmaxtransactions"].AsNumber(),
- InitialGasDistribution = (ulong)json["initialgasdistribution"].AsNumber(),
- Hardforks = new Dictionary(((JArray)json["hardforks"]).Select(s =>
+ Network = (uint)json["network"]!.AsNumber(),
+ ValidatorsCount = (int)json["validatorscount"]!.AsNumber(),
+ MillisecondsPerBlock = (uint)json["msperblock"]!.AsNumber(),
+ MaxValidUntilBlockIncrement = (uint)json["maxvaliduntilblockincrement"]!.AsNumber(),
+ MaxTraceableBlocks = (uint)json["maxtraceableblocks"]!.AsNumber(),
+ AddressVersion = (byte)json["addressversion"]!.AsNumber(),
+ MaxTransactionsPerBlock = (uint)json["maxtransactionsperblock"]!.AsNumber(),
+ MemoryPoolMaxTransactions = (int)json["memorypoolmaxtransactions"]!.AsNumber(),
+ InitialGasDistribution = (ulong)json["initialgasdistribution"]!.AsNumber(),
+ Hardforks = new Dictionary(((JArray)json["hardforks"]!).Select(s =>
{
- var name = s["name"].AsString();
+ var name = s!["name"]!.AsString();
// Add HF_ prefix to the hardfork response for proper Hardfork enum parsing.
var hardfork = Enum.Parse(name.StartsWith("HF_") ? name : $"HF_{name}");
- return new KeyValuePair(hardfork, (uint)s["blockheight"].AsNumber());
+ return new KeyValuePair(hardfork, (uint)s["blockheight"]!.AsNumber());
})),
- SeedList = [.. ((JArray)json["seedlist"]).Select(s => s.AsString())],
- StandbyCommittee = [.. ((JArray)json["standbycommittee"]).Select(s => ECPoint.Parse(s.AsString(), ECCurve.Secp256r1))]
+ SeedList = [.. ((JArray)json["seedlist"]!).Select(s => s!.AsString())],
+ StandbyCommittee = [.. ((JArray)json["standbycommittee"]!).Select(s => ECPoint.Parse(s!.AsString(), ECCurve.Secp256r1))]
};
}
@@ -89,9 +89,9 @@ private static string StripPrefix(string s, string prefix)
public uint Nonce { get; set; }
- public string UserAgent { get; set; }
+ public required string UserAgent { get; set; }
- public RpcProtocol Protocol { get; set; } = new();
+ public required RpcProtocol Protocol { get; set; }
public JObject ToJson()
{
@@ -109,10 +109,10 @@ public static RpcVersion FromJson(JObject json)
{
return new()
{
- TcpPort = (int)json["tcpport"].AsNumber(),
- Nonce = (uint)json["nonce"].AsNumber(),
- UserAgent = json["useragent"].AsString(),
- Protocol = RpcProtocol.FromJson((JObject)json["protocol"])
+ TcpPort = (int)json["tcpport"]!.AsNumber(),
+ Nonce = (uint)json["nonce"]!.AsNumber(),
+ UserAgent = json["useragent"]!.AsString(),
+ Protocol = RpcProtocol.FromJson((JObject)json["protocol"]!)
};
}
}
diff --git a/plugins/RpcClient/Nep17API.cs b/plugins/RpcClient/Nep17API.cs
index b1de7646a..062b6c410 100644
--- a/plugins/RpcClient/Nep17API.cs
+++ b/plugins/RpcClient/Nep17API.cs
@@ -52,7 +52,7 @@ public async Task BalanceOfAsync(UInt160 scriptHash, UInt160 account
public async Task SymbolAsync(UInt160 scriptHash)
{
var result = await TestInvokeAsync(scriptHash, "symbol").ConfigureAwait(false);
- return result.Stack.Single().GetString();
+ return result.Stack.Single().GetString()!;
}
///
@@ -96,7 +96,7 @@ .. scriptHash.MakeScript("decimals"),
return new RpcNep17TokenInfo
{
Name = name,
- Symbol = stack[0].GetString(),
+ Symbol = stack[0].GetString()!,
Decimals = (byte)stack[1].GetInteger(),
TotalSupply = stack[2].GetInteger()
};
@@ -116,7 +116,7 @@ .. contractState.Hash.MakeScript("decimals"),
return new RpcNep17TokenInfo
{
Name = name,
- Symbol = stack[0].GetString(),
+ Symbol = stack[0].GetString()!,
Decimals = (byte)stack[1].GetInteger(),
TotalSupply = stack[2].GetInteger()
};
@@ -132,7 +132,7 @@ .. contractState.Hash.MakeScript("decimals"),
/// onPayment data
/// Add assert at the end of the script
///
- public async Task CreateTransferTxAsync(UInt160 scriptHash, KeyPair fromKey, UInt160 to, BigInteger amount, object data = null, bool addAssert = true)
+ public async Task CreateTransferTxAsync(UInt160 scriptHash, KeyPair fromKey, UInt160 to, BigInteger amount, object? data = null, bool addAssert = true)
{
var sender = Contract.CreateSignatureRedeemScript(fromKey.PublicKey).ToScriptHash();
Signer[] signers = new[] { new Signer { Scopes = WitnessScope.CalledByEntry, Account = sender } };
@@ -159,7 +159,7 @@ public async Task CreateTransferTxAsync(UInt160 scriptHash, KeyPair
/// onPayment data
/// Add assert at the end of the script
///
- public async Task CreateTransferTxAsync(UInt160 scriptHash, int m, ECPoint[] pubKeys, KeyPair[] fromKeys, UInt160 to, BigInteger amount, object data = null, bool addAssert = true)
+ public async Task CreateTransferTxAsync(UInt160 scriptHash, int m, ECPoint[] pubKeys, KeyPair[] fromKeys, UInt160 to, BigInteger amount, object? data = null, bool addAssert = true)
{
if (m > fromKeys.Length)
throw new ArgumentException($"Need at least {m} KeyPairs for signing!");
diff --git a/plugins/RpcClient/RpcClient.cs b/plugins/RpcClient/RpcClient.cs
index 4c8c1bc22..1163f4959 100644
--- a/plugins/RpcClient/RpcClient.cs
+++ b/plugins/RpcClient/RpcClient.cs
@@ -35,7 +35,7 @@ public class RpcClient : IDisposable
internal readonly ProtocolSettings protocolSettings;
- public RpcClient(Uri url, string rpcUser = default, string rpcPass = default, ProtocolSettings protocolSettings = null)
+ public RpcClient(Uri url, string? rpcUser = null, string? rpcPass = null, ProtocolSettings? protocolSettings = null)
{
_httpClient = new HttpClient();
_baseAddress = url;
@@ -47,7 +47,7 @@ public RpcClient(Uri url, string rpcUser = default, string rpcPass = default, Pr
this.protocolSettings = protocolSettings ?? ProtocolSettings.Default;
}
- public RpcClient(HttpClient client, Uri url, ProtocolSettings protocolSettings = null)
+ public RpcClient(HttpClient client, Uri url, ProtocolSettings? protocolSettings = null)
{
_httpClient = client;
_baseAddress = url;
@@ -76,7 +76,7 @@ public void Dispose()
}
#endregion
- static RpcRequest AsRpcRequest(string method, params JToken[] paraArgs)
+ static RpcRequest AsRpcRequest(string method, params JToken?[] paraArgs)
{
return new RpcRequest
{
@@ -89,7 +89,7 @@ static RpcRequest AsRpcRequest(string method, params JToken[] paraArgs)
static RpcResponse AsRpcResponse(string content, bool throwOnError)
{
- var response = RpcResponse.FromJson((JObject)JToken.Parse(content));
+ var response = RpcResponse.FromJson((JObject)JToken.Parse(content)!);
response.RawResponse = content;
if (response.Error != null && throwOnError)
@@ -134,19 +134,19 @@ public virtual JToken RpcSend(string method, params JToken[] paraArgs)
{
var request = AsRpcRequest(method, paraArgs);
var response = Send(request);
- return response.Result;
+ return response.Result!;
}
- public virtual async Task RpcSendAsync(string method, params JToken[] paraArgs)
+ public virtual async Task RpcSendAsync(string method, params JToken?[] paraArgs)
{
var request = AsRpcRequest(method, paraArgs);
var response = await SendAsync(request).ConfigureAwait(false);
- return response.Result;
+ return response.Result!;
}
- public static string GetRpcName([CallerMemberName] string methodName = null)
+ public static string GetRpcName([CallerMemberName] string? methodName = null)
{
- return s_rpcNameRegex.Replace(methodName, "$1").ToLowerInvariant();
+ return s_rpcNameRegex.Replace(methodName!, "$1").ToLowerInvariant();
}
#region Blockchain
@@ -256,11 +256,11 @@ public static ContractState ContractStateFromJson(JObject json)
{
return new ContractState
{
- Id = (int)json["id"].AsNumber(),
+ Id = (int)json["id"]!.AsNumber(),
UpdateCounter = (ushort)(json["updatecounter"]?.AsNumber() ?? 0),
- Hash = UInt160.Parse(json["hash"].AsString()),
- Nef = RpcNefFile.FromJson((JObject)json["nef"]),
- Manifest = ContractManifest.FromJson((JObject)json["manifest"])
+ Hash = UInt160.Parse(json["hash"]!.AsString()),
+ Nef = RpcNefFile.FromJson((JObject)json["nef"]!),
+ Manifest = ContractManifest.FromJson((JObject)json["manifest"]!)
};
}
@@ -270,7 +270,7 @@ public static ContractState ContractStateFromJson(JObject json)
public async Task GetNativeContractsAsync()
{
var result = await RpcSendAsync(GetRpcName()).ConfigureAwait(false);
- return ((JArray)result).Select(p => ContractStateFromJson((JObject)p)).ToArray();
+ return ((JArray)result).Select(p => ContractStateFromJson((JObject)p!)).ToArray();
}
///
@@ -279,7 +279,7 @@ public async Task GetNativeContractsAsync()
public async Task GetRawMempoolAsync()
{
var result = await RpcSendAsync(GetRpcName()).ConfigureAwait(false);
- return ((JArray)result).Select(p => p.AsString()).ToArray();
+ return ((JArray)result).Select(p => p!.AsString()).ToArray();
}
///
@@ -320,7 +320,7 @@ public async Task CalculateNetworkFeeAsync(Transaction tx)
{
var json = await RpcSendAsync(GetRpcName(), Convert.ToBase64String(tx.ToArray()))
.ConfigureAwait(false);
- return (long)json["networkfee"].AsNumber();
+ return (long)json["networkfee"]!.AsNumber();
}
///
@@ -347,7 +347,7 @@ public async Task GetTransactionHeightAsync(string txHash)
public async Task GetNextBlockValidatorsAsync()
{
var result = await RpcSendAsync(GetRpcName()).ConfigureAwait(false);
- return ((JArray)result).Select(p => RpcValidator.FromJson((JObject)p)).ToArray();
+ return ((JArray)result).Select(p => RpcValidator.FromJson((JObject)p!)).ToArray();
}
///
@@ -356,7 +356,7 @@ public async Task GetNextBlockValidatorsAsync()
public async Task GetCommitteeAsync()
{
var result = await RpcSendAsync(GetRpcName()).ConfigureAwait(false);
- return [.. ((JArray)result).Select(p => p.AsString())];
+ return [.. ((JArray)result).Select(p => p!.AsString())];
}
#endregion Blockchain
@@ -396,7 +396,7 @@ public async Task GetVersionAsync()
public async Task SendRawTransactionAsync(byte[] rawTransaction)
{
var result = await RpcSendAsync(GetRpcName(), Convert.ToBase64String(rawTransaction)).ConfigureAwait(false);
- return UInt256.Parse(result["hash"].AsString());
+ return UInt256.Parse(result["hash"]!.AsString());
}
///
@@ -413,7 +413,7 @@ public Task SendRawTransactionAsync(Transaction transaction)
public async Task SubmitBlockAsync(byte[] block)
{
var result = await RpcSendAsync(GetRpcName(), Convert.ToBase64String(block)).ConfigureAwait(false);
- return UInt256.Parse(result["hash"].AsString());
+ return UInt256.Parse(result["hash"]!.AsString());
}
#endregion Node
@@ -464,9 +464,9 @@ public async IAsyncEnumerable TraverseIteratorAsync(string sessionId, s
{
var result = await RpcSendAsync(GetRpcName(), sessionId, id, count).ConfigureAwait(false);
var array = (JArray)result;
- foreach (JObject jObject in array)
+ foreach (var jObject in array)
{
- yield return jObject;
+ yield return (JObject)jObject!;
}
if (array.Count < count) break;
}
@@ -485,9 +485,9 @@ public async IAsyncEnumerable TraverseIteratorAsync(string sessionId, s
var result = await RpcSendAsync(GetRpcName(), sessionId, id, count).ConfigureAwait(false);
if (result is JArray { Count: > 0 } array)
{
- foreach (JObject jObject in array)
+ foreach (var jObject in array)
{
- yield return jObject;
+ yield return (JObject)jObject!;
}
}
}
@@ -512,7 +512,7 @@ public async Task TerminateSessionAsync(string sessionId)
public async Task ListPluginsAsync()
{
var result = await RpcSendAsync(GetRpcName()).ConfigureAwait(false);
- return [.. ((JArray)result).Select(p => RpcPlugin.FromJson((JObject)p))];
+ return [.. ((JArray)result).Select(p => RpcPlugin.FromJson((JObject)p!))];
}
///
@@ -563,7 +563,7 @@ public async Task GetNewAddressAsync()
public async Task GetWalletBalanceAsync(string assetId)
{
var result = await RpcSendAsync(GetRpcName(), assetId).ConfigureAwait(false);
- BigInteger balance = BigInteger.Parse(result["balance"].AsString());
+ BigInteger balance = BigInteger.Parse(result["balance"]!.AsString());
byte decimals = await new Nep17API(this).DecimalsAsync(UInt160.Parse(assetId.AsScriptHash())).ConfigureAwait(false);
return new BigDecimal(balance, decimals);
}
@@ -592,7 +592,7 @@ public async Task ImportPrivKeyAsync(string wif)
public async Task> ListAddressAsync()
{
var result = await RpcSendAsync(GetRpcName()).ConfigureAwait(false);
- return [.. ((JArray)result).Select(p => RpcAccount.FromJson((JObject)p))];
+ return [.. ((JArray)result).Select(p => RpcAccount.FromJson((JObject)p!))];
}
///
diff --git a/plugins/RpcClient/StateAPI.cs b/plugins/RpcClient/StateAPI.cs
index 43b0ae72f..88567b077 100644
--- a/plugins/RpcClient/StateAPI.cs
+++ b/plugins/RpcClient/StateAPI.cs
@@ -52,7 +52,7 @@ public async Task VerifyProofAsync(UInt256 rootHash, byte[] proofBytes)
return (localRootIndex, validatedRootIndex);
}
- static uint? ToNullableUint(JToken json) => (json == null) ? null : (uint?)json.AsNumber();
+ static uint? ToNullableUint(JToken? json) => (json == null) ? null : (uint?)json.AsNumber();
public static JToken[] MakeFindStatesParams(UInt256 rootHash, UInt160 scriptHash, ReadOnlySpan prefix, ReadOnlySpan from = default, int? count = null)
{
diff --git a/plugins/RpcClient/TransactionManager.cs b/plugins/RpcClient/TransactionManager.cs
index 3af64e583..f8579bb79 100644
--- a/plugins/RpcClient/TransactionManager.cs
+++ b/plugins/RpcClient/TransactionManager.cs
@@ -22,7 +22,7 @@ namespace Neo.Network.RPC;
///
public class TransactionManager
{
- private class SignItem { public Contract Contract; public HashSet KeyPairs; }
+ private class SignItem { public required Contract Contract; public required HashSet KeyPairs; }
private readonly RpcClient rpcClient;
@@ -51,14 +51,14 @@ private class SignItem { public Contract Contract; public HashSet KeyPa
public TransactionManager(Transaction tx, RpcClient rpcClient)
{
this.tx = tx;
- context = new ContractParametersContext(null, tx, rpcClient.protocolSettings.Network);
+ context = new ContractParametersContext(null!, tx, rpcClient.protocolSettings.Network);
this.rpcClient = rpcClient;
}
///
/// Helper function for one-off TransactionManager creation
///
- public static Task MakeTransactionAsync(RpcClient rpcClient, ReadOnlyMemory script, Signer[] signers = null, TransactionAttribute[] attributes = null)
+ public static Task MakeTransactionAsync(RpcClient rpcClient, ReadOnlyMemory script, Signer[]? signers = null, TransactionAttribute[]? attributes = null)
{
var factory = new TransactionManagerFactory(rpcClient);
return factory.MakeTransactionAsync(script, signers, attributes);
@@ -67,7 +67,7 @@ public static Task MakeTransactionAsync(RpcClient rpcClient,
///
/// Helper function for one-off TransactionManager creation
///
- public static Task MakeTransactionAsync(RpcClient rpcClient, ReadOnlyMemory script, long systemFee, Signer[] signers = null, TransactionAttribute[] attributes = null)
+ public static Task MakeTransactionAsync(RpcClient rpcClient, ReadOnlyMemory script, long systemFee, Signer[]? signers = null, TransactionAttribute[]? attributes = null)
{
var factory = new TransactionManagerFactory(rpcClient);
return factory.MakeTransactionAsync(script, systemFee, signers, attributes);
@@ -116,12 +116,12 @@ public TransactionManager AddMultiSig(KeyPair[] keys, int m, params ECPoint[] pu
private void AddSignItem(Contract contract, KeyPair key)
{
- if (!Tx.GetScriptHashesForVerifying(null).Contains(contract.ScriptHash))
+ if (!Tx.GetScriptHashesForVerifying(null!).Contains(contract.ScriptHash))
{
throw new Exception($"Add SignItem error: Mismatch ScriptHash ({contract.ScriptHash})");
}
- SignItem item = signStore.FirstOrDefault(p => p.Contract.ScriptHash == contract.ScriptHash);
+ SignItem? item = signStore.FirstOrDefault(p => p.Contract.ScriptHash == contract.ScriptHash);
if (item is null)
{
signStore.Add(new SignItem { Contract = contract, KeyPairs = new HashSet { key } });
@@ -163,13 +163,13 @@ public TransactionManager AddWitness(UInt160 scriptHash, params object[] paramet
public async Task SignAsync()
{
// Calculate NetworkFee
- Tx.Witnesses = Tx.GetScriptHashesForVerifying(null).Select(u => new Witness()
+ Tx.Witnesses = Tx.GetScriptHashesForVerifying(null!).Select(u => new Witness()
{
InvocationScript = ReadOnlyMemory.Empty,
VerificationScript = GetVerificationScript(u)
}).ToArray();
Tx.NetworkFee = await rpcClient.CalculateNetworkFeeAsync(Tx).ConfigureAwait(false);
- Tx.Witnesses = null;
+ Tx.Witnesses = null!;
var gasBalance = await new Nep17API(rpcClient).BalanceOfAsync(NativeContract.GAS.Hash, Tx.Sender).ConfigureAwait(false);
if (gasBalance < Tx.SystemFee + Tx.NetworkFee)
diff --git a/plugins/RpcClient/TransactionManagerFactory.cs b/plugins/RpcClient/TransactionManagerFactory.cs
index c166ab162..730fa2a47 100644
--- a/plugins/RpcClient/TransactionManagerFactory.cs
+++ b/plugins/RpcClient/TransactionManagerFactory.cs
@@ -35,9 +35,9 @@ public TransactionManagerFactory(RpcClient rpcClient)
/// Transaction Signers
/// Transaction Attributes
///
- public async Task MakeTransactionAsync(ReadOnlyMemory script, Signer[] signers = null, TransactionAttribute[] attributes = null)
+ public async Task MakeTransactionAsync(ReadOnlyMemory script, Signer[]? signers = null, TransactionAttribute[]? attributes = null)
{
- RpcInvokeResult invokeResult = await rpcClient.InvokeScriptAsync(script, signers).ConfigureAwait(false);
+ RpcInvokeResult invokeResult = await rpcClient.InvokeScriptAsync(script, signers ?? []).ConfigureAwait(false);
return await MakeTransactionAsync(script, invokeResult.GasConsumed, signers, attributes).ConfigureAwait(false);
}
@@ -49,7 +49,7 @@ public async Task MakeTransactionAsync(ReadOnlyMemory
/// Transaction Signers
/// Transaction Attributes
///
- public async Task MakeTransactionAsync(ReadOnlyMemory script, long systemFee, Signer[] signers = null, TransactionAttribute[] attributes = null)
+ public async Task MakeTransactionAsync(ReadOnlyMemory script, long systemFee, Signer[]? signers = null, TransactionAttribute[]? attributes = null)
{
uint blockCount = await rpcClient.GetBlockCountAsync().ConfigureAwait(false) - 1;
diff --git a/plugins/RpcClient/Utility.cs b/plugins/RpcClient/Utility.cs
index 8f306aeab..cdca1199f 100644
--- a/plugins/RpcClient/Utility.cs
+++ b/plugins/RpcClient/Utility.cs
@@ -10,7 +10,6 @@
// modifications are permitted.
using Neo.Cryptography.ECC;
-using Neo.Extensions;
using Neo.Json;
using Neo.Network.P2P.Payloads;
using Neo.Network.P2P.Payloads.Conditions;
@@ -123,7 +122,7 @@ public static Block BlockFromJson(JObject json, ProtocolSettings protocolSetting
return new Block()
{
Header = HeaderFromJson(json, protocolSettings),
- Transactions = ((JArray)json["tx"]).Select(p => TransactionFromJson((JObject)p, protocolSettings)).ToArray()
+ Transactions = ((JArray)json["tx"]!).Select(p => TransactionFromJson((JObject)p!, protocolSettings)).ToArray()
};
}
@@ -138,15 +137,15 @@ public static Header HeaderFromJson(JObject json, ProtocolSettings protocolSetti
{
return new Header
{
- Version = (uint)json["version"].AsNumber(),
- PrevHash = UInt256.Parse(json["previousblockhash"].AsString()),
- MerkleRoot = UInt256.Parse(json["merkleroot"].AsString()),
- Timestamp = (ulong)json["time"].AsNumber(),
- Nonce = Convert.ToUInt64(json["nonce"].AsString(), 16),
- Index = (uint)json["index"].AsNumber(),
- PrimaryIndex = (byte)json["primary"].AsNumber(),
- NextConsensus = json["nextconsensus"].ToScriptHash(protocolSettings),
- Witness = ((JArray)json["witnesses"]).Select(p => WitnessFromJson((JObject)p)).FirstOrDefault()
+ Version = (uint)json["version"]!.AsNumber(),
+ PrevHash = UInt256.Parse(json["previousblockhash"]!.AsString()),
+ MerkleRoot = UInt256.Parse(json["merkleroot"]!.AsString()),
+ Timestamp = (ulong)json["time"]!.AsNumber(),
+ Nonce = Convert.ToUInt64(json["nonce"]!.AsString(), 16),
+ Index = (uint)json["index"]!.AsNumber(),
+ PrimaryIndex = (byte)json["primary"]!.AsNumber(),
+ NextConsensus = json["nextconsensus"]!.ToScriptHash(protocolSettings),
+ Witness = ((JArray)json["witnesses"]!).Select(p => WitnessFromJson((JObject)p!)).First()
};
}
@@ -154,15 +153,15 @@ public static Transaction TransactionFromJson(JObject json, ProtocolSettings pro
{
return new Transaction
{
- Version = byte.Parse(json["version"].AsString()),
- Nonce = uint.Parse(json["nonce"].AsString()),
- Signers = ((JArray)json["signers"]).Select(p => SignerFromJson((JObject)p, protocolSettings)).ToArray(),
- SystemFee = long.Parse(json["sysfee"].AsString()),
- NetworkFee = long.Parse(json["netfee"].AsString()),
- ValidUntilBlock = uint.Parse(json["validuntilblock"].AsString()),
- Attributes = ((JArray)json["attributes"]).Select(p => TransactionAttributeFromJson((JObject)p)).ToArray(),
- Script = Convert.FromBase64String(json["script"].AsString()),
- Witnesses = ((JArray)json["witnesses"]).Select(p => WitnessFromJson((JObject)p)).ToArray()
+ Version = byte.Parse(json["version"]!.AsString()),
+ Nonce = uint.Parse(json["nonce"]!.AsString()),
+ Signers = ((JArray)json["signers"]!).Select(p => SignerFromJson((JObject)p!, protocolSettings)).ToArray(),
+ SystemFee = long.Parse(json["sysfee"]!.AsString()),
+ NetworkFee = long.Parse(json["netfee"]!.AsString()),
+ ValidUntilBlock = uint.Parse(json["validuntilblock"]!.AsString()),
+ Attributes = ((JArray)json["attributes"]!).Select(p => TransactionAttributeFromJson((JObject)p!)).ToArray(),
+ Script = Convert.FromBase64String(json["script"]!.AsString()),
+ Witnesses = ((JArray)json["witnesses"]!).Select(p => WitnessFromJson((JObject)p!)).ToArray()
};
}
@@ -178,37 +177,37 @@ public static Signer SignerFromJson(JObject json, ProtocolSettings protocolSetti
{
return new Signer
{
- Account = json["account"].ToScriptHash(protocolSettings),
- Rules = ((JArray)json["rules"])?.Select(p => RuleFromJson((JObject)p, protocolSettings)).ToArray(),
- Scopes = (WitnessScope)Enum.Parse(typeof(WitnessScope), json["scopes"].AsString()),
- AllowedContracts = ((JArray)json["allowedcontracts"])?.Select(p => p.ToScriptHash(protocolSettings)).ToArray(),
- AllowedGroups = ((JArray)json["allowedgroups"])?.Select(p => ECPoint.Parse(p.AsString(), ECCurve.Secp256r1)).ToArray()
+ Account = json["account"]!.ToScriptHash(protocolSettings),
+ Rules = ((JArray?)json["rules"])?.Select(p => RuleFromJson((JObject)p!, protocolSettings)).ToArray(),
+ Scopes = Enum.Parse(json["scopes"]!.AsString()),
+ AllowedContracts = ((JArray?)json["allowedcontracts"])?.Select(p => p!.ToScriptHash(protocolSettings)).ToArray(),
+ AllowedGroups = ((JArray?)json["allowedgroups"])?.Select(p => ECPoint.Parse(p!.AsString(), ECCurve.Secp256r1)).ToArray()
};
}
public static TransactionAttribute TransactionAttributeFromJson(JObject json)
{
- TransactionAttributeType usage = Enum.Parse(json["type"].AsString());
+ TransactionAttributeType usage = Enum.Parse(json["type"]!.AsString());
return usage switch
{
TransactionAttributeType.HighPriority => new HighPriorityAttribute(),
TransactionAttributeType.OracleResponse => new OracleResponse()
{
- Id = (ulong)json["id"].AsNumber(),
- Code = Enum.Parse(json["code"].AsString()),
- Result = Convert.FromBase64String(json["result"].AsString()),
+ Id = (ulong)json["id"]!.AsNumber(),
+ Code = Enum.Parse(json["code"]!.AsString()),
+ Result = Convert.FromBase64String(json["result"]!.AsString()),
},
TransactionAttributeType.NotValidBefore => new NotValidBefore()
{
- Height = (uint)json["height"].AsNumber(),
+ Height = (uint)json["height"]!.AsNumber(),
},
TransactionAttributeType.Conflicts => new Conflicts()
{
- Hash = UInt256.Parse(json["hash"].AsString())
+ Hash = UInt256.Parse(json["hash"]!.AsString())
},
TransactionAttributeType.NotaryAssisted => new NotaryAssisted()
{
- NKeys = (byte)json["nkeys"].AsNumber()
+ NKeys = (byte)json["nkeys"]!.AsNumber()
},
_ => throw new FormatException(),
};
@@ -218,8 +217,8 @@ public static Witness WitnessFromJson(JObject json)
{
return new Witness
{
- InvocationScript = Convert.FromBase64String(json["invocation"].AsString()),
- VerificationScript = Convert.FromBase64String(json["verification"].AsString())
+ InvocationScript = Convert.FromBase64String(json["invocation"]!.AsString()),
+ VerificationScript = Convert.FromBase64String(json["verification"]!.AsString())
};
}
@@ -227,61 +226,61 @@ public static WitnessRule RuleFromJson(JObject json, ProtocolSettings protocolSe
{
return new WitnessRule()
{
- Action = Enum.Parse(json["action"].AsString()),
- Condition = RuleExpressionFromJson((JObject)json["condition"], protocolSettings)
+ Action = Enum.Parse(json["action"]!.AsString()),
+ Condition = RuleExpressionFromJson((JObject)json["condition"]!, protocolSettings)
};
}
public static WitnessCondition RuleExpressionFromJson(JObject json, ProtocolSettings protocolSettings)
{
- return json["type"].AsString() switch
+ return json["type"]!.AsString() switch
{
- "Or" => new OrCondition { Expressions = ((JArray)json["expressions"])?.Select(p => RuleExpressionFromJson((JObject)p, protocolSettings)).ToArray() },
- "And" => new AndCondition { Expressions = ((JArray)json["expressions"])?.Select(p => RuleExpressionFromJson((JObject)p, protocolSettings)).ToArray() },
- "Boolean" => new BooleanCondition { Expression = json["expression"].AsBoolean() },
- "Not" => new NotCondition { Expression = RuleExpressionFromJson((JObject)json["expression"], protocolSettings) },
- "Group" => new GroupCondition { Group = ECPoint.Parse(json["group"].AsString(), ECCurve.Secp256r1) },
- "CalledByContract" => new CalledByContractCondition { Hash = json["hash"].ToScriptHash(protocolSettings) },
- "ScriptHash" => new ScriptHashCondition { Hash = json["hash"].ToScriptHash(protocolSettings) },
+ "Or" => new OrCondition { Expressions = ((JArray)json["expressions"]!).Select(p => RuleExpressionFromJson((JObject)p!, protocolSettings)).ToArray() },
+ "And" => new AndCondition { Expressions = ((JArray)json["expressions"]!).Select(p => RuleExpressionFromJson((JObject)p!, protocolSettings)).ToArray() },
+ "Boolean" => new BooleanCondition { Expression = json["expression"]!.AsBoolean() },
+ "Not" => new NotCondition { Expression = RuleExpressionFromJson((JObject)json["expression"]!, protocolSettings) },
+ "Group" => new GroupCondition { Group = ECPoint.Parse(json["group"]!.AsString(), ECCurve.Secp256r1) },
+ "CalledByContract" => new CalledByContractCondition { Hash = json["hash"]!.ToScriptHash(protocolSettings) },
+ "ScriptHash" => new ScriptHashCondition { Hash = json["hash"]!.ToScriptHash(protocolSettings) },
"CalledByEntry" => new CalledByEntryCondition(),
- "CalledByGroup" => new CalledByGroupCondition { Group = ECPoint.Parse(json["group"].AsString(), ECCurve.Secp256r1) },
+ "CalledByGroup" => new CalledByGroupCondition { Group = ECPoint.Parse(json["group"]!.AsString(), ECCurve.Secp256r1) },
_ => throw new FormatException("Wrong rule's condition type"),
};
}
public static StackItem StackItemFromJson(JObject json)
{
- StackItemType type = json["type"].GetEnum();
+ StackItemType type = json["type"]!.GetEnum();
switch (type)
{
case StackItemType.Boolean:
- return json["value"].GetBoolean() ? StackItem.True : StackItem.False;
+ return json["value"]!.GetBoolean() ? StackItem.True : StackItem.False;
case StackItemType.Buffer:
- return new Buffer(Convert.FromBase64String(json["value"].AsString()));
+ return new Buffer(Convert.FromBase64String(json["value"]!.AsString()));
case StackItemType.ByteString:
- return new ByteString(Convert.FromBase64String(json["value"].AsString()));
+ return new ByteString(Convert.FromBase64String(json["value"]!.AsString()));
case StackItemType.Integer:
- return BigInteger.Parse(json["value"].AsString());
+ return BigInteger.Parse(json["value"]!.AsString());
case StackItemType.Array:
Array array = new();
- foreach (JObject item in (JArray)json["value"])
- array.Add(StackItemFromJson(item));
+ foreach (var item in (JArray)json["value"]!)
+ array.Add(StackItemFromJson((JObject)item!));
return array;
case StackItemType.Struct:
Struct @struct = new();
- foreach (JObject item in (JArray)json["value"])
- @struct.Add(StackItemFromJson(item));
+ foreach (var item in (JArray)json["value"]!)
+ @struct.Add(StackItemFromJson((JObject)item!));
return @struct;
case StackItemType.Map:
Map map = new();
- foreach (var item in (JArray)json["value"])
+ foreach (var item in (JArray)json["value"]!)
{
- PrimitiveType key = (PrimitiveType)StackItemFromJson((JObject)item["key"]);
- map[key] = StackItemFromJson((JObject)item["value"]);
+ PrimitiveType key = (PrimitiveType)StackItemFromJson((JObject)item!["key"]!);
+ map[key] = StackItemFromJson((JObject)item["value"]!);
}
return map;
case StackItemType.Pointer:
- return new Pointer(Script.Empty, (int)json["value"].AsNumber());
+ return new Pointer(Script.Empty, (int)json["value"]!.AsNumber());
case StackItemType.InteropInterface:
return new InteropInterface(json);
default:
@@ -289,7 +288,7 @@ public static StackItem StackItemFromJson(JObject json)
}
}
- public static string GetIteratorId(this StackItem item)
+ public static string? GetIteratorId(this StackItem item)
{
if (item is InteropInterface iop)
{
diff --git a/plugins/RpcClient/WalletAPI.cs b/plugins/RpcClient/WalletAPI.cs
index 76344a212..46077df74 100644
--- a/plugins/RpcClient/WalletAPI.cs
+++ b/plugins/RpcClient/WalletAPI.cs
@@ -142,7 +142,7 @@ public async Task ClaimGasAsync(KeyPair keyPair, bool addAssert = t
/// onPayment data
/// Add assert at the end of the script
///
- public async Task TransferAsync(string tokenHash, string fromKey, string toAddress, decimal amount, object data = null, bool addAssert = true)
+ public async Task TransferAsync(string tokenHash, string fromKey, string toAddress, decimal amount, object? data = null, bool addAssert = true)
{
UInt160 scriptHash = Utility.GetScriptHash(tokenHash, rpcClient.protocolSettings);
var decimals = await nep17API.DecimalsAsync(scriptHash).ConfigureAwait(false);
@@ -163,7 +163,7 @@ public async Task TransferAsync(string tokenHash, string fromKey, s
/// onPayment data
/// Add assert at the end of the script
///
- public async Task TransferAsync(UInt160 scriptHash, KeyPair from, UInt160 to, BigInteger amountInteger, object data = null, bool addAssert = true)
+ public async Task TransferAsync(UInt160 scriptHash, KeyPair from, UInt160 to, BigInteger amountInteger, object? data = null, bool addAssert = true)
{
Transaction transaction = await nep17API.CreateTransferTxAsync(scriptHash, from, to, amountInteger, data, addAssert).ConfigureAwait(false);
await rpcClient.SendRawTransactionAsync(transaction).ConfigureAwait(false);
@@ -182,7 +182,7 @@ public async Task TransferAsync(UInt160 scriptHash, KeyPair from, U
/// onPayment data
/// Add assert at the end of the script
///
- public async Task TransferAsync(UInt160 scriptHash, int m, ECPoint[] pubKeys, KeyPair[] keys, UInt160 to, BigInteger amountInteger, object data = null, bool addAssert = true)
+ public async Task TransferAsync(UInt160 scriptHash, int m, ECPoint[] pubKeys, KeyPair[] keys, UInt160 to, BigInteger amountInteger, object? data = null, bool addAssert = true)
{
Transaction transaction = await nep17API.CreateTransferTxAsync(scriptHash, m, pubKeys, keys, to, amountInteger, data, addAssert).ConfigureAwait(false);
await rpcClient.SendRawTransactionAsync(transaction).ConfigureAwait(false);
@@ -198,7 +198,7 @@ public async Task TransferAsync(UInt160 scriptHash, int m, ECPoint[
public async Task WaitTransactionAsync(Transaction transaction, int timeout = 60)
{
DateTime deadline = DateTime.UtcNow.AddSeconds(timeout);
- RpcTransaction rpcTx = null;
+ RpcTransaction? rpcTx = null;
while (rpcTx == null || rpcTx.Confirmations == null)
{
if (deadline < DateTime.UtcNow)
diff --git a/plugins/RpcServer/RpcServer.csproj b/plugins/RpcServer/RpcServer.csproj
index 040cf1bbe..a1f9d85f9 100644
--- a/plugins/RpcServer/RpcServer.csproj
+++ b/plugins/RpcServer/RpcServer.csproj
@@ -1,9 +1,5 @@
-
- enable
-
-
diff --git a/plugins/SQLiteWallet/SQLiteWallet.csproj b/plugins/SQLiteWallet/SQLiteWallet.csproj
index 635465d29..1fb8d39d2 100644
--- a/plugins/SQLiteWallet/SQLiteWallet.csproj
+++ b/plugins/SQLiteWallet/SQLiteWallet.csproj
@@ -1,9 +1,8 @@
- Neo.Wallets.SQLite
Neo.Wallets.SQLite
- enable
+ Neo.Wallets.SQLite
diff --git a/plugins/SignClient/SignClient.csproj b/plugins/SignClient/SignClient.csproj
index ef06028b5..4e6c5c2d1 100644
--- a/plugins/SignClient/SignClient.csproj
+++ b/plugins/SignClient/SignClient.csproj
@@ -1,9 +1,5 @@
-
- enable
-
-
diff --git a/plugins/StateService/Network/StateRoot.cs b/plugins/StateService/Network/StateRoot.cs
index b727639f0..0081f345f 100644
--- a/plugins/StateService/Network/StateRoot.cs
+++ b/plugins/StateService/Network/StateRoot.cs
@@ -26,27 +26,16 @@ class StateRoot : IVerifiable
public byte Version;
public uint Index;
- public UInt256 RootHash;
- public Witness Witness;
+ public required UInt256 RootHash;
+ public Witness? Witness;
- private UInt256 _hash = null;
- public UInt256 Hash
- {
- get
- {
- if (_hash is null)
- {
- _hash = this.CalculateHash();
- }
- return _hash;
- }
- }
+ public UInt256 Hash => field ??= this.CalculateHash();
Witness[] IVerifiable.Witnesses
{
get
{
- return [Witness];
+ return [Witness!];
}
set
{
diff --git a/plugins/StateService/StatePlugin.cs b/plugins/StateService/StatePlugin.cs
index c9bdd094f..14b219218 100644
--- a/plugins/StateService/StatePlugin.cs
+++ b/plugins/StateService/StatePlugin.cs
@@ -29,7 +29,7 @@
namespace Neo.Plugins.StateService;
-public class StatePlugin : Plugin, ICommittingHandler, ICommittedHandler, IWalletChangedHandler, IServiceAddedHandler
+public class StatePlugin : Plugin, ICommittingHandler, ICommittedHandler
{
public const string StatePayloadCategory = "StateService";
public override string Name => "StateService";
@@ -38,14 +38,14 @@ public class StatePlugin : Plugin, ICommittingHandler, ICommittedHandler, IWalle
protected override UnhandledExceptionPolicy ExceptionPolicy => StateServiceSettings.Default.ExceptionPolicy;
- internal IActorRef Store;
- internal IActorRef Verifier;
+ internal IActorRef Store = null!;
+ internal IActorRef Verifier = null!;
- private static NeoSystem _system;
+ private static NeoSystem _system = null!;
internal static NeoSystem NeoSystem => _system;
- private IWalletProvider walletProvider;
+ private IWalletProvider? walletProvider;
public StatePlugin()
{
@@ -63,27 +63,30 @@ protected override void OnSystemLoaded(NeoSystem system)
if (system.Settings.Network != StateServiceSettings.Default.Network) return;
_system = system;
Store = _system.ActorSystem.ActorOf(StateStore.Props(this, string.Format(StateServiceSettings.Default.Path, system.Settings.Network.ToString("X8"))));
- _system.ServiceAdded += ((IServiceAddedHandler)this).NeoSystem_ServiceAdded_Handler;
+ _system.ServiceAdded += NeoSystem_ServiceAdded_Handler;
RpcServerPlugin.RegisterMethods(this, StateServiceSettings.Default.Network);
}
- void IServiceAddedHandler.NeoSystem_ServiceAdded_Handler(object sender, object service)
+ void NeoSystem_ServiceAdded_Handler(object? sender, object service)
{
- if (service is IWalletProvider)
+ if (service is IWalletProvider provider)
{
- walletProvider = service as IWalletProvider;
- _system.ServiceAdded -= ((IServiceAddedHandler)this).NeoSystem_ServiceAdded_Handler;
+ walletProvider = provider;
+ _system.ServiceAdded -= NeoSystem_ServiceAdded_Handler;
if (StateServiceSettings.Default.AutoVerify)
{
- walletProvider.WalletChanged += ((IWalletChangedHandler)this).IWalletProvider_WalletChanged_Handler;
+ walletProvider.WalletChanged += IWalletProvider_WalletChanged_Handler;
}
}
}
- void IWalletChangedHandler.IWalletProvider_WalletChanged_Handler(object sender, Wallet wallet)
+ void IWalletProvider_WalletChanged_Handler(object? sender, Wallet? wallet)
{
- walletProvider.WalletChanged -= ((IWalletChangedHandler)this).IWalletProvider_WalletChanged_Handler;
- Start(wallet);
+ if (wallet != null)
+ {
+ walletProvider!.WalletChanged -= IWalletProvider_WalletChanged_Handler;
+ Start(wallet);
+ }
}
protected override void Dispose(bool disposing)
@@ -125,10 +128,10 @@ private void CheckNetwork()
private void OnStartVerifyingState()
{
CheckNetwork();
- Start(walletProvider.GetWallet());
+ Start(walletProvider?.GetWallet());
}
- public void Start(Wallet wallet)
+ public void Start(Wallet? wallet)
{
if (Verifier is not null)
{
@@ -284,7 +287,7 @@ public JToken GetStateHeight()
};
}
- private ContractState GetHistoricalContractState(Trie trie, UInt160 scriptHash)
+ private ContractState? GetHistoricalContractState(Trie trie, UInt160 scriptHash)
{
const byte prefix = 8;
var skey = new KeyBuilder(NativeContract.ContractManagement.Id, prefix).Add(scriptHash);
@@ -307,7 +310,7 @@ private void CheckRootHash(UInt256 rootHash)
}
[RpcMethod]
- public JToken FindStates(UInt256 rootHash, UInt160 scriptHash, byte[] prefix, byte[] key = null, int count = 0)
+ public JToken FindStates(UInt256 rootHash, UInt160 scriptHash, byte[] prefix, byte[]? key = null, int count = 0)
{
CheckRootHash(rootHash);
@@ -339,11 +342,11 @@ public JToken FindStates(UInt256 rootHash, UInt160 scriptHash, byte[] prefix, by
}
if (0 < jarr.Count)
{
- json["firstProof"] = GetProof(trie, contract.Id, Convert.FromBase64String(jarr.First()["key"].AsString()));
+ json["firstProof"] = GetProof(trie, contract.Id, Convert.FromBase64String(jarr.First()!["key"]!.AsString()));
}
if (1 < jarr.Count)
{
- json["lastProof"] = GetProof(trie, contract.Id, Convert.FromBase64String(jarr.Last()["key"].AsString()));
+ json["lastProof"] = GetProof(trie, contract.Id, Convert.FromBase64String(jarr.Last()!["key"]!.AsString()));
}
json["truncated"] = count < i;
json["results"] = jarr;
diff --git a/plugins/StateService/StateServiceSettings.cs b/plugins/StateService/StateServiceSettings.cs
index 94c3f2865..dc69b3922 100644
--- a/plugins/StateService/StateServiceSettings.cs
+++ b/plugins/StateService/StateServiceSettings.cs
@@ -21,7 +21,7 @@ internal class StateServiceSettings : IPluginSettings
public bool AutoVerify { get; }
public int MaxFindResultItems { get; }
- public static StateServiceSettings Default { get; private set; }
+ public static StateServiceSettings Default { get; private set; } = null!;
public UnhandledExceptionPolicy ExceptionPolicy { get; }
diff --git a/plugins/StateService/Storage/StateSnapshot.cs b/plugins/StateService/Storage/StateSnapshot.cs
index 2684caaae..8146d47c9 100644
--- a/plugins/StateService/Storage/StateSnapshot.cs
+++ b/plugins/StateService/Storage/StateSnapshot.cs
@@ -28,7 +28,7 @@ public StateSnapshot(IStore store)
Trie = new Trie(_snapshot, CurrentLocalRootHash(), StateServiceSettings.Default.FullState);
}
- public StateRoot GetStateRoot(uint index)
+ public StateRoot? GetStateRoot(uint index)
{
return _snapshot.TryGet(Keys.StateRoot(index), out var data) ? data.AsSerializable() : null;
}
@@ -46,7 +46,7 @@ public void AddLocalStateRoot(StateRoot stateRoot)
return null;
}
- public UInt256 CurrentLocalRootHash()
+ public UInt256? CurrentLocalRootHash()
{
var index = CurrentLocalRootIndex();
if (index is null) return null;
@@ -68,7 +68,7 @@ public void AddValidatedStateRoot(StateRoot stateRoot)
return null;
}
- public UInt256 CurrentValidatedRootHash()
+ public UInt256? CurrentValidatedRootHash()
{
var index = CurrentLocalRootIndex();
if (index is null) return null;
diff --git a/plugins/StateService/Storage/StateStore.cs b/plugins/StateService/Storage/StateStore.cs
index b243012a2..6582de2df 100644
--- a/plugins/StateService/Storage/StateStore.cs
+++ b/plugins/StateService/Storage/StateStore.cs
@@ -31,7 +31,7 @@ class StateStore : UntypedActor
private readonly Dictionary _cache = [];
private StateSnapshot _currentSnapshot;
private StateSnapshot? _stateSnapshot;
- public UInt256 CurrentLocalRootHash => _currentSnapshot.CurrentLocalRootHash();
+ public UInt256? CurrentLocalRootHash => _currentSnapshot.CurrentLocalRootHash();
public uint? LocalRootIndex => _currentSnapshot.CurrentLocalRootIndex();
public uint? ValidatedRootIndex => _currentSnapshot.CurrentValidatedRootIndex();
diff --git a/plugins/StateService/Verification/VerificationContext.cs b/plugins/StateService/Verification/VerificationContext.cs
index f982730e7..10dddd9c7 100644
--- a/plugins/StateService/Verification/VerificationContext.cs
+++ b/plugins/StateService/Verification/VerificationContext.cs
@@ -27,11 +27,9 @@ namespace Neo.Plugins.StateService.Verification;
class VerificationContext
{
private const uint MaxValidUntilBlockIncrement = 100;
- private StateRoot root;
- private ExtensiblePayload rootPayload;
- private ExtensiblePayload votePayload;
+ private ExtensiblePayload? rootPayload;
private readonly Wallet wallet;
- private readonly KeyPair keyPair;
+ private readonly KeyPair? keyPair;
private readonly int myIndex;
private readonly uint rootIndex;
private readonly ECPoint[] verifiers;
@@ -54,32 +52,24 @@ public int Sender
}
public bool IsSender => myIndex == Sender;
- public ICancelable Timer;
+ public ICancelable? Timer;
- public StateRoot StateRoot
+ public StateRoot? StateRoot
{
get
{
- if (root is null)
+ if (field is null)
{
using var snapshot = StateStore.Singleton.GetSnapshot();
- root = snapshot.GetStateRoot(rootIndex);
+ field = snapshot.GetStateRoot(rootIndex);
}
- return root;
+ return field;
}
}
- public ExtensiblePayload StateRootMessage => rootPayload;
+ public ExtensiblePayload? StateRootMessage => rootPayload;
- public ExtensiblePayload VoteMessage
- {
- get
- {
- if (votePayload is null)
- votePayload = CreateVoteMessage();
- return votePayload;
- }
- }
+ public ExtensiblePayload? VoteMessage => field ??= CreateVoteMessage();
public VerificationContext(Wallet wallet, uint index)
{
@@ -91,20 +81,20 @@ public VerificationContext(Wallet wallet, uint index)
if (wallet is null) return;
for (int i = 0; i < verifiers.Length; i++)
{
- WalletAccount account = wallet.GetAccount(verifiers[i]);
+ WalletAccount? account = wallet.GetAccount(verifiers[i]);
if (account?.HasKey != true) continue;
myIndex = i;
- keyPair = account.GetKey();
+ keyPair = account.GetKey()!;
break;
}
}
- private ExtensiblePayload CreateVoteMessage()
+ private ExtensiblePayload? CreateVoteMessage()
{
if (StateRoot is null) return null;
if (!signatures.TryGetValue(myIndex, out var sig))
{
- sig = StateRoot.Sign(keyPair, StatePlugin.NeoSystem.Settings.Network);
+ sig = StateRoot.Sign(keyPair!, StatePlugin.NeoSystem.Settings.Network);
signatures[myIndex] = sig;
}
return CreatePayload(MessageType.Vote, new Vote
@@ -143,7 +133,7 @@ public bool CheckSignatures()
var sc = new ContractParametersContext(StatePlugin.NeoSystem.StoreView, StateRoot, StatePlugin.NeoSystem.Settings.Network);
for (int i = 0, j = 0; i < verifiers.Length && j < M; i++)
{
- if (!signatures.TryGetValue(i, out byte[] sig)) continue;
+ if (!signatures.TryGetValue(i, out byte[]? sig)) continue;
sc.AddSignature(contract, verifiers[i], sig);
j++;
}
@@ -170,7 +160,7 @@ private ExtensiblePayload CreatePayload(MessageType type, ISerializable payload,
var msg = new ExtensiblePayload
{
Category = StatePlugin.StatePayloadCategory,
- ValidBlockStart = StateRoot.Index,
+ ValidBlockStart = StateRoot!.Index,
ValidBlockEnd = StateRoot.Index + validBlockEndThreshold,
Sender = Contract.CreateSignatureRedeemScript(verifiers[MyIndex]).ToScriptHash(),
Data = data,
diff --git a/plugins/StateService/Verification/VerificationService.cs b/plugins/StateService/Verification/VerificationService.cs
index 1924ca79b..abe681743 100644
--- a/plugins/StateService/Verification/VerificationService.cs
+++ b/plugins/StateService/Verification/VerificationService.cs
@@ -56,7 +56,7 @@ private void CheckVotes(VerificationContext context)
if (context.IsSender && context.CheckSignatures())
{
if (context.StateRootMessage is null) return;
- Utility.Log(nameof(VerificationService), LogLevel.Info, $"relay state root, height={context.StateRoot.Index}, root={context.StateRoot.RootHash}");
+ Utility.Log(nameof(VerificationService), LogLevel.Info, $"relay state root, height={context.StateRoot!.Index}, root={context.StateRoot.RootHash}");
StatePlugin.NeoSystem.Blockchain.Tell(context.StateRootMessage);
}
}
@@ -98,7 +98,7 @@ private void OnValidatedRootPersisted(uint index)
private void OnTimer(uint index)
{
- if (contexts.TryGetValue(index, out VerificationContext context))
+ if (contexts.TryGetValue(index, out VerificationContext? context))
{
SendVote(context);
CheckVotes(context);
diff --git a/plugins/StorageDumper/StorageDumper.csproj b/plugins/StorageDumper/StorageDumper.csproj
index 1c4f04f47..262f0b386 100644
--- a/plugins/StorageDumper/StorageDumper.csproj
+++ b/plugins/StorageDumper/StorageDumper.csproj
@@ -1,9 +1,5 @@
-
- enable
-
-
diff --git a/plugins/TokensTracker/TokensTracker.csproj b/plugins/TokensTracker/TokensTracker.csproj
index 68d508e9b..39644fd04 100644
--- a/plugins/TokensTracker/TokensTracker.csproj
+++ b/plugins/TokensTracker/TokensTracker.csproj
@@ -1,9 +1,5 @@
-
- enable
-
-
diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props
index b479c2d9f..3565aa3e6 100644
--- a/tests/Directory.Build.props
+++ b/tests/Directory.Build.props
@@ -3,6 +3,7 @@
net10.0
+ enable
enable
false
diff --git a/tests/Neo.CLI.Tests/UT_MainService_Contracts.cs b/tests/Neo.CLI.Tests/UT_MainService_Contracts.cs
index a174339b4..9fdaca7bc 100644
--- a/tests/Neo.CLI.Tests/UT_MainService_Contracts.cs
+++ b/tests/Neo.CLI.Tests/UT_MainService_Contracts.cs
@@ -24,13 +24,13 @@ namespace Neo.CLI.Tests;
[TestClass]
public class UT_MainService_Contracts
{
- private MainService _mainService;
- private NeoSystem _neoSystem;
- private Mock _mockWallet;
- private UInt160 _contractHash;
- private ContractState _contractState;
- private StringWriter _consoleOutput;
- private TextWriter _originalOutput;
+ private MainService _mainService = null!;
+ private NeoSystem _neoSystem = null!;
+ private Mock _mockWallet = null!;
+ private UInt160 _contractHash = null!;
+ private ContractState _contractState = null!;
+ private StringWriter _consoleOutput = null!;
+ private TextWriter _originalOutput = null!;
[TestInitialize]
public void TestSetup()
@@ -53,7 +53,7 @@ public void TestSetup()
// Setup mock wallet
_mockWallet = new Mock();
- var mockAccount = new Mock(UInt160.Zero, null);
+ var mockAccount = new Mock(UInt160.Zero, null!);
_mockWallet.Setup(w => w.GetDefaultAccount()).Returns(mockAccount.Object);
// Set CurrentWallet using reflection
@@ -184,12 +184,12 @@ public void TestParseParameterFromAbi_Boolean()
var method = GetPrivateMethod("ParseParameterFromAbi");
// Test true value
- var result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Boolean, JToken.Parse("true")]);
+ var result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Boolean, JToken.Parse("true")])!;
Assert.AreEqual(ContractParameterType.Boolean, result.Type);
Assert.IsTrue((bool?)result.Value);
// Test false value
- result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.Boolean, JToken.Parse("false") });
+ result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Boolean, JToken.Parse("false")])!;
Assert.AreEqual(ContractParameterType.Boolean, result.Type);
Assert.IsFalse((bool?)result.Value);
}
@@ -200,17 +200,17 @@ public void TestParseParameterFromAbi_Integer()
var method = GetPrivateMethod("ParseParameterFromAbi");
// Test positive integer
- var result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.Integer, JToken.Parse("\"123\"") });
+ var result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Integer, JToken.Parse("\"123\"")])!;
Assert.AreEqual(ContractParameterType.Integer, result.Type);
Assert.AreEqual(new BigInteger(123), result.Value);
// Test negative integer
- result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.Integer, JToken.Parse("\"-456\"") });
+ result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Integer, JToken.Parse("\"-456\"")])!;
Assert.AreEqual(ContractParameterType.Integer, result.Type);
Assert.AreEqual(new BigInteger(-456), result.Value);
// Test large integer
- result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.Integer, JToken.Parse("\"999999999999999999999\"") });
+ result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Integer, JToken.Parse("\"999999999999999999999\"")])!;
Assert.AreEqual(ContractParameterType.Integer, result.Type);
Assert.AreEqual(BigInteger.Parse("999999999999999999999"), result.Value);
}
@@ -220,12 +220,12 @@ public void TestParseParameterFromAbi_String()
{
var method = GetPrivateMethod("ParseParameterFromAbi");
- var result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.String, JToken.Parse("\"Hello, World!\"") });
+ var result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.String, JToken.Parse("\"Hello, World!\"")])!;
Assert.AreEqual(ContractParameterType.String, result.Type);
Assert.AreEqual("Hello, World!", result.Value);
// Test empty string
- result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.String, JToken.Parse("\"\"") });
+ result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.String, JToken.Parse("\"\"")])!;
Assert.AreEqual(ContractParameterType.String, result.Type);
Assert.AreEqual("", result.Value);
}
@@ -236,7 +236,7 @@ public void TestParseParameterFromAbi_Hash160()
var method = GetPrivateMethod("ParseParameterFromAbi");
var hash160 = "0x1234567890abcdef1234567890abcdef12345678";
- var result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.Hash160, JToken.Parse($"\"{hash160}\"") });
+ var result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Hash160, JToken.Parse($"\"{hash160}\"")])!;
Assert.AreEqual(ContractParameterType.Hash160, result.Type);
Assert.AreEqual(UInt160.Parse(hash160), result.Value);
}
@@ -247,9 +247,9 @@ public void TestParseParameterFromAbi_ByteArray()
var method = GetPrivateMethod("ParseParameterFromAbi");
var base64 = Convert.ToBase64String(new byte[] { 0x01, 0x02, 0x03, 0x04 });
- var result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.ByteArray, JToken.Parse($"\"{base64}\"") });
+ var result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.ByteArray, JToken.Parse($"\"{base64}\"")])!;
Assert.AreEqual(ContractParameterType.ByteArray, result.Type);
- CollectionAssert.AreEqual(new byte[] { 0x01, 0x02, 0x03, 0x04 }, (byte[])result.Value);
+ CollectionAssert.AreEqual(new byte[] { 0x01, 0x02, 0x03, 0x04 }, (byte[])result.Value!);
}
[TestMethod]
@@ -258,10 +258,10 @@ public void TestParseParameterFromAbi_Array()
var method = GetPrivateMethod("ParseParameterFromAbi");
var arrayJson = "[1, \"hello\", true]";
- var result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.Array, JToken.Parse(arrayJson) });
+ var result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Array, JToken.Parse(arrayJson)])!;
Assert.AreEqual(ContractParameterType.Array, result.Type);
- var array = (ContractParameter[])result.Value;
+ var array = (ContractParameter[])result.Value!;
Assert.HasCount(3, array);
Assert.AreEqual(ContractParameterType.Integer, array[0].Type);
Assert.AreEqual(ContractParameterType.String, array[1].Type);
@@ -274,10 +274,10 @@ public void TestParseParameterFromAbi_Map()
var method = GetPrivateMethod("ParseParameterFromAbi");
var mapJson = "{\"key1\": \"value1\", \"key2\": 123}";
- var result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.Map, JToken.Parse(mapJson) });
+ var result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Map, JToken.Parse(mapJson)])!;
Assert.AreEqual(ContractParameterType.Map, result.Type);
- var map = (List>)result.Value;
+ var map = (List>)result.Value!;
Assert.HasCount(2, map);
Assert.AreEqual("key1", map[0].Key.Value);
Assert.AreEqual("value1", map[0].Value.Value);
@@ -291,24 +291,24 @@ public void TestParseParameterFromAbi_Any()
var method = GetPrivateMethod("ParseParameterFromAbi");
// Test Any with boolean
- var result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.Any, JToken.Parse("true") });
+ var result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Any, JToken.Parse("true")])!;
Assert.AreEqual(ContractParameterType.Boolean, result.Type);
Assert.IsTrue((bool?)result.Value);
// Test Any with integer
- result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.Any, JToken.Parse("123") });
+ result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Any, JToken.Parse("123")])!;
Assert.AreEqual(ContractParameterType.Integer, result.Type);
Assert.AreEqual(new BigInteger(123), result.Value);
// Test Any with string
- result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.Any, JToken.Parse("\"test\"") });
+ result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Any, JToken.Parse("\"test\"")])!;
Assert.AreEqual(ContractParameterType.String, result.Type);
Assert.AreEqual("test", result.Value);
// Test Any with array
- result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.Any, JToken.Parse("[1, 2, 3]") });
+ result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Any, JToken.Parse("[1, 2, 3]")])!;
Assert.AreEqual(ContractParameterType.Array, result.Type);
- Assert.HasCount(3, (ContractParameter[])result.Value);
+ Assert.HasCount(3, (ContractParameter[])result.Value!);
}
[TestMethod]
@@ -316,11 +316,11 @@ public void TestParseParameterFromAbi_Null()
{
var method = GetPrivateMethod("ParseParameterFromAbi");
- var result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.String, null });
+ var result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.String, null])!;
Assert.AreEqual(ContractParameterType.String, result.Type);
Assert.IsNull(result.Value);
- result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.String, JToken.Null });
+ result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.String, JToken.Null])!;
Assert.AreEqual(ContractParameterType.String, result.Type);
Assert.IsNull(result.Value);
}
@@ -332,7 +332,7 @@ public void TestParseParameterFromAbi_InvalidInteger()
// This should throw because "abc" is not a valid integer
Assert.ThrowsExactly(() =>
- method.Invoke(_mainService, new object[] { ContractParameterType.Integer, JToken.Parse("\"abc\"") }));
+ method.Invoke(_mainService, [ContractParameterType.Integer, JToken.Parse("\"abc\"")]));
}
[TestMethod]
@@ -342,7 +342,7 @@ public void TestParseParameterFromAbi_InvalidHash160()
// This should throw because the hash is invalid
Assert.ThrowsExactly(() =>
- method.Invoke(_mainService, new object[] { ContractParameterType.Hash160, JToken.Parse("\"invalid_hash\"") }));
+ method.Invoke(_mainService, [ContractParameterType.Hash160, JToken.Parse("\"invalid_hash\"")]));
}
[TestMethod]
@@ -352,7 +352,7 @@ public void TestParseParameterFromAbi_UnsupportedType()
// InteropInterface is not supported for JSON parsing
Assert.ThrowsExactly(() =>
- method.Invoke(_mainService, new object[] { ContractParameterType.InteropInterface, JToken.Parse("\"test\"") }));
+ method.Invoke(_mainService, [ContractParameterType.InteropInterface, JToken.Parse("\"test\"")]));
}
private static MethodInfo GetPrivateMethod(string methodName)
@@ -373,7 +373,7 @@ public void TestInvokeAbiCommand_ContractNotFound()
// Act
var invokeAbiMethod = GetPrivateMethod("OnInvokeAbiCommand");
- invokeAbiMethod.Invoke(_mainService, new object[] { nonExistentHash, "test", null, null, null, 20m });
+ invokeAbiMethod.Invoke(_mainService, [nonExistentHash, "test", null, null, null, 20m]);
// Assert
var output = _consoleOutput.ToString();
@@ -388,7 +388,7 @@ public void TestInvokeAbiCommand_MethodNotFound()
// Act
var invokeAbiMethod = GetPrivateMethod("OnInvokeAbiCommand");
- invokeAbiMethod.Invoke(_mainService, new object[] { _contractHash, "nonExistentMethod", null, null, null, 20m });
+ invokeAbiMethod.Invoke(_mainService, [_contractHash, "nonExistentMethod", null, null, null, 20m]);
// Assert
var output = _consoleOutput.ToString();
@@ -404,7 +404,7 @@ public void TestInvokeAbiCommand_WrongParameterCount()
// Act
var invokeAbiMethod = GetPrivateMethod("OnInvokeAbiCommand");
- invokeAbiMethod.Invoke(_mainService, new object[] { _contractHash, "testBoolean", args, null, null, 20m });
+ invokeAbiMethod.Invoke(_mainService, [_contractHash, "testBoolean", args, null, null, 20m]);
// Assert
var output = _consoleOutput.ToString();
@@ -420,7 +420,7 @@ public void TestInvokeAbiCommand_TooManyArguments()
// Act
var invokeAbiMethod = GetPrivateMethod("OnInvokeAbiCommand");
- invokeAbiMethod.Invoke(_mainService, new object[] { _contractHash, "testMultipleParams", args, null, null, 20m });
+ invokeAbiMethod.Invoke(_mainService, [_contractHash, "testMultipleParams", args, null, null, 20m]);
// Assert
var output = _consoleOutput.ToString();
@@ -436,7 +436,7 @@ public void TestInvokeAbiCommand_TooFewArguments()
// Act
var invokeAbiMethod = GetPrivateMethod("OnInvokeAbiCommand");
- invokeAbiMethod.Invoke(_mainService, new object[] { _contractHash, "testMultipleParams", args, null, null, 20m });
+ invokeAbiMethod.Invoke(_mainService, [_contractHash, "testMultipleParams", args, null, null, 20m]);
// Assert
var output = _consoleOutput.ToString();
@@ -451,7 +451,7 @@ public void TestInvokeAbiCommand_NoArgumentsForMethodExpectingParameters()
// Act - calling testBoolean with no arguments when it expects 1
var invokeAbiMethod = GetPrivateMethod("OnInvokeAbiCommand");
- invokeAbiMethod.Invoke(_mainService, new object[] { _contractHash, "testBoolean", null, null, null, 20m });
+ invokeAbiMethod.Invoke(_mainService, [_contractHash, "testBoolean", null, null, null, 20m]);
// Assert
var output = _consoleOutput.ToString();
@@ -467,7 +467,7 @@ public void TestInvokeAbiCommand_InvalidParameterFormat()
// Act
var invokeAbiMethod = GetPrivateMethod("OnInvokeAbiCommand");
- invokeAbiMethod.Invoke(_mainService, new object[] { _contractHash, "testHash160", args, null, null, 20m });
+ invokeAbiMethod.Invoke(_mainService, [_contractHash, "testHash160", args, null, null, 20m]);
// Assert
var output = _consoleOutput.ToString();
@@ -488,7 +488,7 @@ public void TestInvokeAbiCommand_SuccessfulInvocation_SingleParameter()
var invokeAbiMethod = GetPrivateMethod("OnInvokeAbiCommand");
try
{
- invokeAbiMethod.Invoke(_mainService, new object[] { _contractHash, "testBoolean", args, null, null, 20m });
+ invokeAbiMethod.Invoke(_mainService, [_contractHash, "testBoolean", args, null, null, 20m]);
}
catch (TargetInvocationException ex) when (ex.InnerException?.Message.Contains("This method does not not exist") == true)
{
@@ -524,7 +524,7 @@ public void TestInvokeAbiCommand_ComplexTypes()
var invokeAbiMethod = GetPrivateMethod("OnInvokeAbiCommand");
try
{
- invokeAbiMethod.Invoke(_mainService, new object[] { _contractHash, "testArray", arrayArgs, null, null, 20m });
+ invokeAbiMethod.Invoke(_mainService, [_contractHash, "testArray", arrayArgs, null, null, 20m]);
}
catch (TargetInvocationException)
{
@@ -551,7 +551,7 @@ public void TestInvokeAbiCommand_MultipleParameters()
var invokeAbiMethod = GetPrivateMethod("OnInvokeAbiCommand");
try
{
- invokeAbiMethod.Invoke(_mainService, new object[] { _contractHash, "testMultipleParams", args, null, null, 20m });
+ invokeAbiMethod.Invoke(_mainService, [_contractHash, "testMultipleParams", args, null, null, 20m]);
}
catch (TargetInvocationException)
{
@@ -596,7 +596,7 @@ public void TestParseParameterFromAbi_ImprovedErrorMessages()
// Test invalid integer format with helpful error
try
{
- method.Invoke(_mainService, new object[] { ContractParameterType.Integer, JToken.Parse("\"abc\"") });
+ method.Invoke(_mainService, [ContractParameterType.Integer, JToken.Parse("\"abc\"")]);
Assert.Fail("Expected exception for invalid integer");
}
catch (TargetInvocationException ex)
@@ -609,7 +609,7 @@ public void TestParseParameterFromAbi_ImprovedErrorMessages()
// Test invalid Hash160 format with helpful error
try
{
- method.Invoke(_mainService, new object[] { ContractParameterType.Hash160, JToken.Parse("\"invalid\"") });
+ method.Invoke(_mainService, [ContractParameterType.Hash160, JToken.Parse("\"invalid\"")]);
Assert.Fail("Expected exception for invalid Hash160");
}
catch (TargetInvocationException ex)
@@ -623,7 +623,7 @@ public void TestParseParameterFromAbi_ImprovedErrorMessages()
// Test invalid Base64 format with helpful error
try
{
- method.Invoke(_mainService, new object[] { ContractParameterType.ByteArray, JToken.Parse("\"not-base64!@#$\"") });
+ method.Invoke(_mainService, [ContractParameterType.ByteArray, JToken.Parse("\"not-base64!@#$\"")]);
Assert.Fail("Expected exception for invalid Base64");
}
catch (TargetInvocationException ex)
@@ -641,10 +641,10 @@ public void TestParseParameterFromAbi_ContractParameterObjects()
// Test parsing an array with ContractParameter objects (the issue from superboyiii)
var arrayWithContractParam = JToken.Parse(@"[4, [{""type"":""PublicKey"",""value"":""0244d12f3e6b8eba7d0bc0cf0c176d9df545141f4d3447f8463c1b16afb90b1ea8""}]]");
- var result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.Array, arrayWithContractParam });
+ var result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Array, arrayWithContractParam])!;
Assert.AreEqual(ContractParameterType.Array, result.Type);
- var array = (ContractParameter[])result.Value;
+ var array = (ContractParameter[])result.Value!;
Assert.HasCount(2, array);
// First element should be Integer
@@ -653,7 +653,7 @@ public void TestParseParameterFromAbi_ContractParameterObjects()
// Second element should be Array containing a PublicKey
Assert.AreEqual(ContractParameterType.Array, array[1].Type);
- var innerArray = (ContractParameter[])array[1].Value;
+ var innerArray = (ContractParameter[])array[1].Value!;
Assert.HasCount(1, innerArray);
Assert.AreEqual(ContractParameterType.PublicKey, innerArray[0].Type);
@@ -669,13 +669,13 @@ public void TestParseParameterFromAbi_RegularMapVsContractParameter()
// Test regular map (should be treated as Map)
var regularMap = JToken.Parse(@"{""key1"": ""value1"", ""key2"": 123}");
- var mapResult = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.Any, regularMap });
+ var mapResult = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Any, regularMap])!;
Assert.AreEqual(ContractParameterType.Map, mapResult.Type);
// Test ContractParameter object with Any type - should be treated as Map since we only parse
// ContractParameter format inside arrays
var contractParamObj = JToken.Parse(@"{""type"": ""String"", ""value"": ""test""}");
- var paramResult = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.Any, contractParamObj });
+ var paramResult = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Any, contractParamObj])!;
Assert.AreEqual(ContractParameterType.Map, paramResult.Type);
}
@@ -691,10 +691,10 @@ public void TestParseParameterFromAbi_MapWithContractParameterFormat()
""key3"": ""simple string""
}");
- var result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.Map, mapWithContractParams });
+ var result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Map, mapWithContractParams])!;
Assert.AreEqual(ContractParameterType.Map, result.Type);
- var map = (List>)result.Value;
+ var map = (List>)result.Value!;
Assert.HasCount(3, map);
// Check each key-value pair
@@ -731,10 +731,10 @@ public void TestParseParameterFromAbi_CompleteContractParameterMap()
]
}");
- var result = (ContractParameter)method.Invoke(_mainService, new object[] { ContractParameterType.Map, completeMapFormat });
+ var result = (ContractParameter)method.Invoke(_mainService, [ContractParameterType.Map, completeMapFormat])!;
Assert.AreEqual(ContractParameterType.Map, result.Type);
- var map = (List>)result.Value;
+ var map = (List>)result.Value!;
Assert.HasCount(2, map);
Assert.AreEqual("name", map[0].Key.Value);
@@ -792,7 +792,7 @@ public void TestInvokeAbiCommand_MethodOverloading()
try
{
- invokeAbiMethod.Invoke(_mainService, new object[] { _contractHash, "transfer", args2, null, null, 20m });
+ invokeAbiMethod.Invoke(_mainService, [_contractHash, "transfer", args2, null, null, 20m]);
}
catch (TargetInvocationException)
{
@@ -807,7 +807,7 @@ public void TestInvokeAbiCommand_MethodOverloading()
_consoleOutput.GetStringBuilder().Clear();
var args4 = new JArray("0x1234567890abcdef1234567890abcdef12345678", "0xabcdef1234567890abcdef1234567890abcdef12", 100, "extra");
- invokeAbiMethod.Invoke(_mainService, new object[] { _contractHash, "transfer", args4, null, null, 20m });
+ invokeAbiMethod.Invoke(_mainService, [_contractHash, "transfer", args4, null, null, 20m]);
output = _consoleOutput.ToString();
Assert.IsTrue(output.Contains("Method 'transfer' exists but expects") || output.Contains("expects exactly"));
diff --git a/tests/Neo.ConsoleService.Tests/UT_CommandServiceBase.cs b/tests/Neo.ConsoleService.Tests/UT_CommandServiceBase.cs
index 6ff8b81ff..0458807ed 100644
--- a/tests/Neo.ConsoleService.Tests/UT_CommandServiceBase.cs
+++ b/tests/Neo.ConsoleService.Tests/UT_CommandServiceBase.cs
@@ -53,7 +53,7 @@ public enum TestEnum { Value1, Value2, Value3 }
public void TestParseIndicatorArguments()
{
var service = new TestConsoleService();
- var method = typeof(TestConsoleService).GetMethod("TestMethod");
+ var method = typeof(TestConsoleService).GetMethod("TestMethod")!;
// Test case 1: Basic indicator arguments
var args1 = "test --strParam hello --intParam 42 --boolParam".Tokenize();
@@ -77,7 +77,7 @@ public void TestParseIndicatorArguments()
Assert.ThrowsExactly(() => service.ParseIndicatorArguments(method, args2[1..]));
// Test case 3: Enum parameter
- var enumMethod = typeof(TestConsoleService).GetMethod("TestEnumMethod");
+ var enumMethod = typeof(TestConsoleService).GetMethod("TestEnumMethod")!;
var args3 = "testenum --enumParam Value2".Tokenize();
var result3 = service.ParseIndicatorArguments(enumMethod, args3[1..]);
Assert.HasCount(1, result3);
@@ -96,7 +96,7 @@ public void TestParseIndicatorArguments()
public void TestParseSequentialArguments()
{
var service = new TestConsoleService();
- var method = typeof(TestConsoleService).GetMethod("TestMethod");
+ var method = typeof(TestConsoleService).GetMethod("TestMethod")!;
// Test case 1: All parameters provided
var args1 = "test hello 42 true custom".Tokenize();
@@ -117,7 +117,7 @@ public void TestParseSequentialArguments()
Assert.AreEqual("default", result2[3]); // optionalParam default value
// Test case 3: Enum parameter
- var enumMethod = typeof(TestConsoleService).GetMethod("TestEnumMethod");
+ var enumMethod = typeof(TestConsoleService).GetMethod("TestEnumMethod")!;
var args3 = "testenum Value1".Tokenize();
var result3 = service.ParseSequentialArguments(enumMethod, args3[1..].Trim());
Assert.HasCount(1, result3);
diff --git a/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Cache.cs b/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Cache.cs
index f5bddb8aa..fa6149f95 100644
--- a/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Cache.cs
+++ b/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Cache.cs
@@ -28,7 +28,7 @@ public void TestResolveLeaf()
store.Put(n.Hash.ToKey(), n.ToArray());
var snapshot = store.GetSnapshot();
var cache = new Cache(snapshot, Prefix);
- var resolved = cache.Resolve(n.Hash);
+ var resolved = cache.Resolve(n.Hash)!;
Assert.AreEqual(n.Hash, resolved.Hash);
Assert.AreEqual(n.Value.Span.ToHexString(), resolved.Value.Span.ToHexString());
}
@@ -44,10 +44,10 @@ public void TestResolveBranch()
store.Put(l.Hash.ToKey(), l.ToArray());
var snapshot = store.GetSnapshot();
var cache = new Cache(snapshot, Prefix);
- var resolved_b = cache.Resolve(b.Hash);
+ var resolved_b = cache.Resolve(b.Hash)!;
Assert.AreEqual(b.Hash, resolved_b.Hash);
Assert.AreEqual(l.Hash, resolved_b.Children[1].Hash);
- var resolved_l = cache.Resolve(l.Hash);
+ var resolved_l = cache.Resolve(l.Hash)!;
Assert.AreEqual(l.Value.Span.ToHexString(), resolved_l.Value.Span.ToHexString());
}
@@ -59,10 +59,10 @@ public void TestResolveExtension()
store.Put(e.Hash.ToKey(), e.ToArray());
var snapshot = store.GetSnapshot();
var cache = new Cache(snapshot, Prefix);
- var re = cache.Resolve(e.Hash);
+ var re = cache.Resolve(e.Hash)!;
Assert.AreEqual(e.Hash, re.Hash);
Assert.AreEqual(e.Key.Span.ToHexString(), re.Key.Span.ToHexString());
- Assert.IsTrue(re.Next.IsEmpty);
+ Assert.IsTrue(re.Next!.IsEmpty);
}
[TestMethod]
@@ -74,7 +74,7 @@ public void TestGetAndChangedBranch()
store.Put(b.Hash.ToKey(), b.ToArray());
var snapshot = store.GetSnapshot();
var cache = new Cache(snapshot, Prefix);
- var resolved_b = cache.Resolve(b.Hash);
+ var resolved_b = cache.Resolve(b.Hash)!;
Assert.AreEqual(resolved_b.Hash, b.Hash);
foreach (var n in resolved_b.Children)
{
@@ -82,7 +82,7 @@ public void TestGetAndChangedBranch()
}
resolved_b.Children[1] = l;
resolved_b.SetDirty();
- var resovled_b1 = cache.Resolve(b.Hash);
+ var resovled_b1 = cache.Resolve(b.Hash)!;
Assert.AreEqual(resovled_b1.Hash, b.Hash);
foreach (var n in resovled_b1.Children)
{
@@ -98,16 +98,16 @@ public void TestGetAndChangedExtension()
store.Put(e.Hash.ToKey(), e.ToArray());
var snapshot = store.GetSnapshot();
var cache = new Cache(snapshot, Prefix);
- var re = cache.Resolve(e.Hash);
+ var re = cache.Resolve(e.Hash)!;
Assert.AreEqual(e.Hash, re.Hash);
Assert.AreEqual(e.Key.Span.ToHexString(), re.Key.Span.ToHexString());
- Assert.IsTrue(re.Next.IsEmpty);
+ Assert.IsTrue(re.Next!.IsEmpty);
re.Key = new byte[] { 0x02 };
re.SetDirty();
- var re1 = cache.Resolve(e.Hash);
+ var re1 = cache.Resolve(e.Hash)!;
Assert.AreEqual(e.Hash, re1.Hash);
Assert.AreEqual(e.Key.Span.ToHexString(), re1.Key.Span.ToHexString());
- Assert.IsTrue(re1.Next.IsEmpty);
+ Assert.IsTrue(re1.Next!.IsEmpty);
}
[TestMethod]
@@ -118,12 +118,12 @@ public void TestGetAndChangedLeaf()
store.Put(l.Hash.ToKey(), l.ToArray());
var snapshot = store.GetSnapshot();
var cache = new Cache(snapshot, Prefix);
- var rl = cache.Resolve(l.Hash);
+ var rl = cache.Resolve(l.Hash)!;
Assert.AreEqual(l.Hash, rl.Hash);
Assert.AreEqual("leaf", Encoding.ASCII.GetString(rl.Value.Span));
rl.Value = new byte[] { 0x01 };
rl.SetDirty();
- var rl1 = cache.Resolve(l.Hash);
+ var rl1 = cache.Resolve(l.Hash)!;
Assert.AreEqual(l.Hash, rl1.Hash);
Assert.AreEqual("leaf", Encoding.ASCII.GetString(rl1.Value.Span));
}
@@ -138,7 +138,7 @@ public void TestPutAndChangedBranch()
var snapshot = store.GetSnapshot();
var cache = new Cache(snapshot, Prefix);
cache.PutNode(b);
- var rb = cache.Resolve(h);
+ var rb = cache.Resolve(h)!;
Assert.AreEqual(h, rb.Hash);
foreach (var n in rb.Children)
{
@@ -146,7 +146,7 @@ public void TestPutAndChangedBranch()
}
rb.Children[1] = l;
rb.SetDirty();
- var rb1 = cache.Resolve(h);
+ var rb1 = cache.Resolve(h)!;
Assert.AreEqual(h, rb1.Hash);
foreach (var n in rb1.Children)
{
@@ -163,17 +163,17 @@ public void TestPutAndChangedExtension()
var snapshot = store.GetSnapshot();
var cache = new Cache(snapshot, Prefix);
cache.PutNode(e);
- var re = cache.Resolve(e.Hash);
+ var re = cache.Resolve(e.Hash)!;
Assert.AreEqual(e.Hash, re.Hash);
Assert.AreEqual(e.Key.Span.ToHexString(), re.Key.Span.ToHexString());
- Assert.IsTrue(re.Next.IsEmpty);
+ Assert.IsTrue(re.Next!.IsEmpty);
e.Key = new byte[] { 0x02 };
e.Next = e;
e.SetDirty();
- var re1 = cache.Resolve(h);
+ var re1 = cache.Resolve(h)!;
Assert.AreEqual(h, re1.Hash);
Assert.AreEqual("01", re1.Key.Span.ToHexString());
- Assert.IsTrue(re1.Next.IsEmpty);
+ Assert.IsTrue(re1.Next!.IsEmpty);
}
[TestMethod]
@@ -185,12 +185,12 @@ public void TestPutAndChangedLeaf()
var snapshot = store.GetSnapshot();
var cache = new Cache(snapshot, Prefix);
cache.PutNode(l);
- var rl = cache.Resolve(l.Hash);
+ var rl = cache.Resolve(l.Hash)!;
Assert.AreEqual(h, rl.Hash);
Assert.AreEqual("leaf", Encoding.ASCII.GetString(rl.Value.Span));
l.Value = new byte[] { 0x01 };
l.SetDirty();
- var rl1 = cache.Resolve(h);
+ var rl1 = cache.Resolve(h)!;
Assert.AreEqual(h, rl1.Hash);
Assert.AreEqual("leaf", Encoding.ASCII.GetString(rl1.Value.Span));
}
@@ -212,7 +212,7 @@ public void TestReference1()
snapshot1.Commit();
var snapshot2 = store.GetSnapshot();
var cache2 = new Cache(snapshot2, Prefix);
- var rl = cache2.Resolve(l.Hash);
+ var rl = cache2.Resolve(l.Hash)!;
Assert.AreEqual(2, rl.Reference);
}
@@ -226,7 +226,7 @@ public void TestReference2()
cache.PutNode(l);
cache.PutNode(l);
cache.DeleteNode(l.Hash);
- var rl = cache.Resolve(l.Hash);
+ var rl = cache.Resolve(l.Hash)!;
Assert.AreEqual(1, rl.Reference);
}
}
diff --git a/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Node.cs b/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Node.cs
index 24dca3299..e8c32064a 100644
--- a/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Node.cs
+++ b/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Node.cs
@@ -35,10 +35,10 @@ public void TestLogLevel()
int raised = 0;
Utility.Logging += (a, b, c) => raised++;
- Utility.Log("a", LogLevel.Warning, null);
+ Utility.Log("a", LogLevel.Warning, "null");
Assert.AreEqual(1, raised);
Utility.LogLevel = LogLevel.Fatal;
- Utility.Log("a", LogLevel.Warning, null);
+ Utility.Log("a", LogLevel.Warning, "null");
Assert.AreEqual(1, raised);
}
@@ -153,7 +153,7 @@ public void TestCloneExtension()
var n = Node.NewExtension(new byte[] { 0x01 }, new Node());
var n1 = n.Clone();
n1.Next = l;
- Assert.IsTrue(n.Next.IsEmpty);
+ Assert.IsTrue(n.Next!.IsEmpty);
}
[TestMethod]
@@ -168,23 +168,9 @@ public void TestCloneLeaf()
[TestMethod]
public void TestNewExtensionException()
{
- Assert.ThrowsExactly(() => _ = Node.NewExtension(null, new Node()));
- Assert.ThrowsExactly(() => _ = Node.NewExtension(new byte[] { 0x01 }, null));
Assert.ThrowsExactly(() => _ = Node.NewExtension(Array.Empty(), new Node()));
}
- [TestMethod]
- public void TestNewHashException()
- {
- Assert.ThrowsExactly(() => _ = Node.NewHash(null));
- }
-
- [TestMethod]
- public void TestNewLeafException()
- {
- Assert.ThrowsExactly(() => _ = Node.NewLeaf(null));
- }
-
[TestMethod]
public void TestSize()
{
diff --git a/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Trie.cs b/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Trie.cs
index 9124de0ad..0728d4dbf 100644
--- a/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Trie.cs
+++ b/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Trie.cs
@@ -12,6 +12,7 @@
using Neo.Extensions.IO;
using Neo.Persistence;
using Neo.Persistence.Providers;
+using System.Diagnostics.CodeAnalysis;
using System.Text;
namespace Neo.Cryptography.MPTTrie.Tests;
@@ -41,16 +42,16 @@ public void Delete(byte[] key)
public bool Contains(byte[] key) { throw new NotImplementedException(); }
- public IEnumerable<(byte[] Key, byte[] Value)> Find(byte[] key, SeekDirection direction) { throw new NotImplementedException(); }
+ public IEnumerable<(byte[] Key, byte[] Value)> Find(byte[]? key, SeekDirection direction) { throw new NotImplementedException(); }
- public byte[] TryGet(byte[] key)
+ public byte[]? TryGet(byte[] key)
{
- var result = _store.TryGetValue(StoreKey(key), out byte[] value);
+ var result = _store.TryGetValue(StoreKey(key), out byte[]? value);
if (result) return value;
return null;
}
- public bool TryGet(byte[] key, out byte[] value)
+ public bool TryGet(byte[] key, [NotNullWhen(true)] out byte[]? value)
{
return _store.TryGetValue(StoreKey(key), out value);
}
@@ -63,8 +64,8 @@ public bool TryGet(byte[] key, out byte[] value)
[TestClass]
public class UT_Trie
{
- private Node _root;
- private IStore _mptdb;
+ private Node _root = null!;
+ private IStore _mptdb = null!;
private void PutToStore(IStore store, Node node)
{
diff --git a/tests/Neo.Network.RPC.Tests/TestUtils.cs b/tests/Neo.Network.RPC.Tests/TestUtils.cs
index 5cc03e818..c8784b5b6 100644
--- a/tests/Neo.Network.RPC.Tests/TestUtils.cs
+++ b/tests/Neo.Network.RPC.Tests/TestUtils.cs
@@ -17,7 +17,7 @@ namespace Neo.Network.RPC.Tests;
internal static class TestUtils
{
- public readonly static List RpcTestCases = ((JArray)JToken.Parse(File.ReadAllText("RpcTestCases.json"))).Select(p => RpcTestCase.FromJson((JObject)p)).ToList();
+ public readonly static List RpcTestCases = ((JArray)JToken.Parse(File.ReadAllText("RpcTestCases.json"))!).Select(p => RpcTestCase.FromJson((JObject)p!)).ToList();
public static Block GetBlock(int txCount)
{
@@ -53,9 +53,9 @@ public static Transaction GetTransaction()
internal class RpcTestCase
{
- public string Name { get; set; }
- public RpcRequest Request { get; set; }
- public RpcResponse Response { get; set; }
+ public required string Name { get; set; }
+ public required RpcRequest Request { get; set; }
+ public required RpcResponse Response { get; set; }
public JObject ToJson()
{
@@ -71,9 +71,9 @@ public static RpcTestCase FromJson(JObject json)
{
return new RpcTestCase
{
- Name = json["Name"].AsString(),
- Request = RpcRequest.FromJson((JObject)json["Request"]),
- Response = RpcResponse.FromJson((JObject)json["Response"]),
+ Name = json["Name"]!.AsString(),
+ Request = RpcRequest.FromJson((JObject)json["Request"]!),
+ Response = RpcResponse.FromJson((JObject)json["Response"]!),
};
}
diff --git a/tests/Neo.Network.RPC.Tests/UT_ContractClient.cs b/tests/Neo.Network.RPC.Tests/UT_ContractClient.cs
index c14952934..1ca007294 100644
--- a/tests/Neo.Network.RPC.Tests/UT_ContractClient.cs
+++ b/tests/Neo.Network.RPC.Tests/UT_ContractClient.cs
@@ -23,9 +23,9 @@ namespace Neo.Network.RPC.Tests;
[TestClass]
public class UT_ContractClient
{
- Mock rpcClientMock;
- KeyPair keyPair1;
- UInt160 sender;
+ Mock rpcClientMock = null!;
+ KeyPair keyPair1 = null!;
+ UInt160 sender = null!;
[TestInitialize]
public void TestSetup()
diff --git a/tests/Neo.Network.RPC.Tests/UT_Nep17API.cs b/tests/Neo.Network.RPC.Tests/UT_Nep17API.cs
index 507ec4715..a98460cec 100644
--- a/tests/Neo.Network.RPC.Tests/UT_Nep17API.cs
+++ b/tests/Neo.Network.RPC.Tests/UT_Nep17API.cs
@@ -23,10 +23,10 @@ namespace Neo.Network.RPC.Tests;
[TestClass]
public class UT_Nep17API
{
- Mock rpcClientMock;
- KeyPair keyPair1;
- UInt160 sender;
- Nep17API nep17API;
+ Mock rpcClientMock = null!;
+ KeyPair keyPair1 = null!;
+ UInt160 sender = null!;
+ Nep17API nep17API = null!;
[TestInitialize]
public void TestSetup()
@@ -105,10 +105,10 @@ .. scriptHash.MakeScript("decimals"),
var haveNeoTokenUT = false;
foreach (var test in tests)
{
- rpcClientMock.Setup(p => p.RpcSendAsync("getcontractstate", It.Is(u => true)))
- .ReturnsAsync(test.Response.Result)
- .Verifiable();
- if (test.Request.Params[0].AsString() == NativeContract.GAS.Hash.ToString() || test.Request.Params[0].AsString().Equals(NativeContract.GAS.Name, StringComparison.OrdinalIgnoreCase))
+ rpcClientMock.Setup(p => p.RpcSendAsync("getcontractstate", It.Is(u => true)))
+ .ReturnsAsync(test.Response.Result!)
+ .Verifiable();
+ if (test.Request.Params[0]!.AsString() == NativeContract.GAS.Hash.ToString() || test.Request.Params[0]!.AsString().Equals(NativeContract.GAS.Name, StringComparison.OrdinalIgnoreCase))
{
var result = await nep17API.GetTokenInfoAsync(NativeContract.GAS.Name.ToLower());
Assert.AreEqual(NativeContract.GAS.Symbol, result.Symbol);
@@ -123,7 +123,7 @@ .. scriptHash.MakeScript("decimals"),
Assert.AreEqual("GasToken", result.Name);
haveGasTokenUT = true;
}
- else if (test.Request.Params[0].AsString() == NativeContract.NEO.Hash.ToString() || test.Request.Params[0].AsString().Equals(NativeContract.NEO.Name, StringComparison.OrdinalIgnoreCase))
+ else if (test.Request.Params[0]!.AsString() == NativeContract.NEO.Hash.ToString() || test.Request.Params[0]!.AsString().Equals(NativeContract.NEO.Name, StringComparison.OrdinalIgnoreCase))
{
var result = await nep17API.GetTokenInfoAsync(NativeContract.NEO.Name.ToLower());
Assert.AreEqual(NativeContract.NEO.Symbol, result.Symbol);
diff --git a/tests/Neo.Network.RPC.Tests/UT_PolicyAPI.cs b/tests/Neo.Network.RPC.Tests/UT_PolicyAPI.cs
index 798eb7eea..00f32f7c0 100644
--- a/tests/Neo.Network.RPC.Tests/UT_PolicyAPI.cs
+++ b/tests/Neo.Network.RPC.Tests/UT_PolicyAPI.cs
@@ -21,10 +21,10 @@ namespace Neo.Network.RPC.Tests;
[TestClass]
public class UT_PolicyAPI
{
- Mock rpcClientMock;
- KeyPair keyPair1;
- UInt160 sender;
- PolicyAPI policyAPI;
+ Mock rpcClientMock = null!;
+ KeyPair keyPair1 = null!;
+ UInt160 sender = null!;
+ PolicyAPI policyAPI = null!;
[TestInitialize]
public void TestSetup()
diff --git a/tests/Neo.Network.RPC.Tests/UT_RpcClient.cs b/tests/Neo.Network.RPC.Tests/UT_RpcClient.cs
index 8728eb235..2ed4d6d09 100644
--- a/tests/Neo.Network.RPC.Tests/UT_RpcClient.cs
+++ b/tests/Neo.Network.RPC.Tests/UT_RpcClient.cs
@@ -23,8 +23,8 @@ namespace Neo.Network.RPC.Tests;
[TestClass]
public class UT_RpcClient
{
- RpcClient rpc;
- Mock handlerMock;
+ RpcClient rpc = null!;
+ Mock handlerMock = null!;
[TestInitialize]
public void TestSetup()
@@ -46,7 +46,7 @@ private void MockResponse(RpcRequest request, RpcResponse response)
// Setup the PROTECTED method to mock
.Setup>(
"SendAsync",
- ItExpr.Is(p => p.Content.ReadAsStringAsync().Result == request.ToJson().ToString()),
+ ItExpr.Is(p => p.Content!.ReadAsStringAsync().Result == request.ToJson().ToString()),
ItExpr.IsAny()
)
// prepare the expected response of the mocked http call
@@ -61,10 +61,10 @@ private void MockResponse(RpcRequest request, RpcResponse response)
[TestMethod]
public async Task TestErrorResponse()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.SendRawTransactionAsync) + "error", StringComparison.CurrentCultureIgnoreCase));
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.SendRawTransactionAsync) + "error", StringComparison.CurrentCultureIgnoreCase))!;
try
{
- var result = await rpc.SendRawTransactionAsync(Convert.FromBase64String(test.Request.Params[0].AsString()).AsSerializable());
+ var result = await rpc.SendRawTransactionAsync(Convert.FromBase64String(test.Request.Params[0]!.AsString()).AsSerializable());
}
catch (RpcException ex)
{
@@ -76,7 +76,7 @@ public async Task TestErrorResponse()
[TestMethod]
public async Task TestNoThrowErrorResponse()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.SendRawTransactionAsync) + "error", StringComparison.CurrentCultureIgnoreCase));
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.SendRawTransactionAsync) + "error", StringComparison.CurrentCultureIgnoreCase))!;
handlerMock = new Mock(MockBehavior.Strict);
handlerMock.Protected()
// Setup the PROTECTED method to mock
@@ -130,9 +130,9 @@ public void TestConstructorWithBasicAuth()
[TestMethod]
public async Task TestGetBestBlockHash()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetBestBlockHashAsync), StringComparison.CurrentCultureIgnoreCase));
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetBestBlockHashAsync), StringComparison.CurrentCultureIgnoreCase))!;
var result = await rpc.GetBestBlockHashAsync();
- Assert.AreEqual(test.Response.Result.AsString(), result);
+ Assert.AreEqual(test.Response.Result!.AsString(), result);
}
[TestMethod]
@@ -141,8 +141,8 @@ public async Task TestGetBlockHex()
var tests = TestUtils.RpcTestCases.Where(p => p.Name.Equals(nameof(rpc.GetBlockHexAsync), StringComparison.CurrentCultureIgnoreCase));
foreach (var test in tests)
{
- var result = await rpc.GetBlockHexAsync(test.Request.Params[0].AsString());
- Assert.AreEqual(test.Response.Result.AsString(), result);
+ var result = await rpc.GetBlockHexAsync(test.Request.Params[0]!.AsString());
+ Assert.AreEqual(test.Response.Result!.AsString(), result);
}
}
@@ -152,33 +152,33 @@ public async Task TestGetBlock()
var tests = TestUtils.RpcTestCases.Where(p => p.Name.Equals(nameof(rpc.GetBlockAsync), StringComparison.CurrentCultureIgnoreCase));
foreach (var test in tests)
{
- var result = await rpc.GetBlockAsync(test.Request.Params[0].AsString());
- Assert.AreEqual(test.Response.Result.AsString(), result.ToJson(rpc.protocolSettings).ToString());
+ var result = await rpc.GetBlockAsync(test.Request.Params[0]!.AsString());
+ Assert.AreEqual(test.Response.Result!.AsString(), result.ToJson(rpc.protocolSettings).ToString());
}
}
[TestMethod]
public async Task TestGetBlockHeaderCount()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetBlockHeaderCountAsync), StringComparison.CurrentCultureIgnoreCase));
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetBlockHeaderCountAsync), StringComparison.CurrentCultureIgnoreCase))!;
var result = await rpc.GetBlockHeaderCountAsync();
- Assert.AreEqual(test.Response.Result.AsString(), result.ToString());
+ Assert.AreEqual(test.Response.Result!.AsString(), result.ToString());
}
[TestMethod]
public async Task TestGetBlockCount()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetBlockCountAsync), StringComparison.CurrentCultureIgnoreCase));
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetBlockCountAsync), StringComparison.CurrentCultureIgnoreCase))!;
var result = await rpc.GetBlockCountAsync();
- Assert.AreEqual(test.Response.Result.AsString(), result.ToString());
+ Assert.AreEqual(test.Response.Result!.AsString(), result.ToString());
}
[TestMethod]
public async Task TestGetBlockHash()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetBlockHashAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.GetBlockHashAsync((uint)test.Request.Params[0].AsNumber());
- Assert.AreEqual(test.Response.Result.AsString(), result.ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetBlockHashAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.GetBlockHashAsync((uint)test.Request.Params[0]!.AsNumber());
+ Assert.AreEqual(test.Response.Result!.AsString(), result.ToString());
}
[TestMethod]
@@ -187,8 +187,8 @@ public async Task TestGetBlockHeaderHex()
var tests = TestUtils.RpcTestCases.Where(p => p.Name.Equals(nameof(rpc.GetBlockHeaderHexAsync), StringComparison.CurrentCultureIgnoreCase));
foreach (var test in tests)
{
- var result = await rpc.GetBlockHeaderHexAsync(test.Request.Params[0].AsString());
- Assert.AreEqual(test.Response.Result.AsString(), result);
+ var result = await rpc.GetBlockHeaderHexAsync(test.Request.Params[0]!.AsString());
+ Assert.AreEqual(test.Response.Result!.AsString(), result);
}
}
@@ -198,8 +198,8 @@ public async Task TestGetBlockHeader()
var tests = TestUtils.RpcTestCases.Where(p => p.Name.Equals(nameof(rpc.GetBlockHeaderAsync), StringComparison.CurrentCultureIgnoreCase));
foreach (var test in tests)
{
- var result = await rpc.GetBlockHeaderAsync(test.Request.Params[0].AsString());
- Assert.AreEqual(test.Response.Result.ToString(), result.ToJson(rpc.protocolSettings).ToString());
+ var result = await rpc.GetBlockHeaderAsync(test.Request.Params[0]!.AsString());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToJson(rpc.protocolSettings).ToString());
}
}
@@ -210,7 +210,7 @@ public async Task TestGetCommittee()
foreach (var test in tests)
{
var result = await rpc.GetCommitteeAsync();
- Assert.AreEqual(test.Response.Result.ToString(), ((JArray)result.Select(p => (JToken)p).ToArray()).ToString());
+ Assert.AreEqual(test.Response.Result!.ToString(), ((JArray)result.Select(p => (JToken)p).ToArray()).ToString());
}
}
@@ -220,16 +220,16 @@ public async Task TestGetContractState()
var tests = TestUtils.RpcTestCases.Where(p => p.Name.Equals(nameof(rpc.GetContractStateAsync), StringComparison.CurrentCultureIgnoreCase));
foreach (var test in tests)
{
- var type = test.Request.Params[0].GetType().Name;
+ var type = test.Request.Params[0]!.GetType().Name;
if (type == "JString")
{
- var result = await rpc.GetContractStateAsync(test.Request.Params[0].AsString());
- Assert.AreEqual(test.Response.Result.ToString(), result.ToJson().ToString());
+ var result = await rpc.GetContractStateAsync(test.Request.Params[0]!.AsString());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToJson().ToString());
}
if (type == "JNumber")
{
- var result = await rpc.GetContractStateAsync((int)test.Request.Params[0].AsNumber());
- Assert.AreEqual(test.Response.Result.ToString(), result.ToJson().ToString());
+ var result = await rpc.GetContractStateAsync((int)test.Request.Params[0]!.AsNumber());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToJson().ToString());
}
}
}
@@ -241,64 +241,64 @@ public async Task TestGetNativeContracts()
foreach (var test in tests)
{
var result = await rpc.GetNativeContractsAsync();
- Assert.AreEqual(test.Response.Result.ToString(), ((JArray)result.Select(p => p.ToJson()).ToArray()).ToString());
+ Assert.AreEqual(test.Response.Result!.ToString(), ((JArray)result.Select(p => p.ToJson()).ToArray()).ToString());
}
}
[TestMethod]
public async Task TestGetRawMempool()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetRawMempoolAsync), StringComparison.CurrentCultureIgnoreCase));
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetRawMempoolAsync), StringComparison.CurrentCultureIgnoreCase))!;
var result = await rpc.GetRawMempoolAsync();
- Assert.AreEqual(test.Response.Result.ToString(), ((JArray)result.Select(p => (JToken)p).ToArray()).ToString());
+ Assert.AreEqual(test.Response.Result!.ToString(), ((JArray)result.Select(p => (JToken)p).ToArray()).ToString());
}
[TestMethod]
public async Task TestGetRawMempoolBoth()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetRawMempoolBothAsync), StringComparison.CurrentCultureIgnoreCase));
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetRawMempoolBothAsync), StringComparison.CurrentCultureIgnoreCase))!;
var result = await rpc.GetRawMempoolBothAsync();
- Assert.AreEqual(test.Response.Result.ToString(), result.ToJson().ToString());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToJson().ToString());
}
[TestMethod]
public async Task TestGetRawTransactionHex()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetRawTransactionHexAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.GetRawTransactionHexAsync(test.Request.Params[0].AsString());
- Assert.AreEqual(test.Response.Result.AsString(), result);
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetRawTransactionHexAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.GetRawTransactionHexAsync(test.Request.Params[0]!.AsString());
+ Assert.AreEqual(test.Response.Result!.AsString(), result);
}
[TestMethod]
public async Task TestGetRawTransaction()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetRawTransactionAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.GetRawTransactionAsync(test.Request.Params[0].AsString());
- Assert.AreEqual(test.Response.Result.ToString(), result.ToJson(rpc.protocolSettings).ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetRawTransactionAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.GetRawTransactionAsync(test.Request.Params[0]!.AsString());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToJson(rpc.protocolSettings).ToString());
}
[TestMethod]
public async Task TestGetStorage()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetStorageAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.GetStorageAsync(test.Request.Params[0].AsString(), test.Request.Params[1].AsString());
- Assert.AreEqual(test.Response.Result.AsString(), result);
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetStorageAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.GetStorageAsync(test.Request.Params[0]!.AsString(), test.Request.Params[1]!.AsString());
+ Assert.AreEqual(test.Response.Result!.AsString(), result);
}
[TestMethod]
public async Task TestGetTransactionHeight()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetTransactionHeightAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.GetTransactionHeightAsync(test.Request.Params[0].AsString());
- Assert.AreEqual(test.Response.Result.ToString(), result.ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetTransactionHeightAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.GetTransactionHeightAsync(test.Request.Params[0]!.AsString());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToString());
}
[TestMethod]
public async Task TestGetNextBlockValidators()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetNextBlockValidatorsAsync), StringComparison.CurrentCultureIgnoreCase));
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetNextBlockValidatorsAsync), StringComparison.CurrentCultureIgnoreCase))!;
var result = await rpc.GetNextBlockValidatorsAsync();
- Assert.AreEqual(test.Response.Result.ToString(), ((JArray)result.Select(p => p.ToJson()).ToArray()).ToString());
+ Assert.AreEqual(test.Response.Result!.ToString(), ((JArray)result.Select(p => p.ToJson()).ToArray()).ToString());
}
#endregion Blockchain
@@ -308,41 +308,41 @@ public async Task TestGetNextBlockValidators()
[TestMethod]
public async Task TestGetConnectionCount()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetConnectionCountAsync), StringComparison.CurrentCultureIgnoreCase));
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetConnectionCountAsync), StringComparison.CurrentCultureIgnoreCase))!;
var result = await rpc.GetConnectionCountAsync();
- Assert.AreEqual(test.Response.Result.ToString(), result.ToString());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToString());
}
[TestMethod]
public async Task TestGetPeers()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetPeersAsync), StringComparison.CurrentCultureIgnoreCase));
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetPeersAsync), StringComparison.CurrentCultureIgnoreCase))!;
var result = await rpc.GetPeersAsync();
- Assert.AreEqual(test.Response.Result.ToString(), result.ToJson().ToString());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToJson().ToString());
}
[TestMethod]
public async Task TestGetVersion()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetVersionAsync), StringComparison.CurrentCultureIgnoreCase));
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetVersionAsync), StringComparison.CurrentCultureIgnoreCase))!;
var result = await rpc.GetVersionAsync();
- Assert.AreEqual(test.Response.Result.ToString(), result.ToJson().ToString());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToJson().ToString());
}
[TestMethod]
public async Task TestSendRawTransaction()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.SendRawTransactionAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.SendRawTransactionAsync(Convert.FromBase64String(test.Request.Params[0].AsString()).AsSerializable());
- Assert.AreEqual(test.Response.Result["hash"].AsString(), result.ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.SendRawTransactionAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.SendRawTransactionAsync(Convert.FromBase64String(test.Request.Params[0]!.AsString()).AsSerializable());
+ Assert.AreEqual(test.Response.Result!["hash"]!.AsString(), result.ToString());
}
[TestMethod]
public async Task TestSubmitBlock()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.SubmitBlockAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.SubmitBlockAsync(Convert.FromBase64String(test.Request.Params[0].AsString()));
- Assert.AreEqual(test.Response.Result["hash"].AsString(), result.ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.SubmitBlockAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.SubmitBlockAsync(Convert.FromBase64String(test.Request.Params[0]!.AsString()));
+ Assert.AreEqual(test.Response.Result!["hash"]!.AsString(), result.ToString());
}
#endregion Node
@@ -352,10 +352,10 @@ public async Task TestSubmitBlock()
[TestMethod]
public async Task TestInvokeFunction()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.InvokeFunctionAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.InvokeFunctionAsync(test.Request.Params[0].AsString(), test.Request.Params[1].AsString(),
- ((JArray)test.Request.Params[2]).Select(p => RpcStack.FromJson((JObject)p)).ToArray());
- Assert.AreEqual(test.Response.Result.ToString(), result.ToJson().ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.InvokeFunctionAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.InvokeFunctionAsync(test.Request.Params[0]!.AsString(), test.Request.Params[1]!.AsString(),
+ ((JArray)test.Request.Params[2]!).Select(p => RpcStack.FromJson((JObject)p!)).ToArray());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToJson().ToString());
// TODO test verify method
}
@@ -363,18 +363,18 @@ public async Task TestInvokeFunction()
[TestMethod]
public async Task TestInvokeScript()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.InvokeScriptAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.InvokeScriptAsync(Convert.FromBase64String(test.Request.Params[0].AsString()));
- Assert.AreEqual(test.Response.Result.ToString(), result.ToJson().ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.InvokeScriptAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.InvokeScriptAsync(Convert.FromBase64String(test.Request.Params[0]!.AsString()));
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToJson().ToString());
}
[TestMethod]
public async Task TestGetUnclaimedGas()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetUnclaimedGasAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.GetUnclaimedGasAsync(test.Request.Params[0].AsString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetUnclaimedGasAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.GetUnclaimedGasAsync(test.Request.Params[0]!.AsString());
Assert.AreEqual(result.ToJson().AsString(), RpcUnclaimedGas.FromJson(result.ToJson()).ToJson().AsString());
- Assert.AreEqual(test.Response.Result["unclaimed"].AsString(), result.Unclaimed.ToString());
+ Assert.AreEqual(test.Response.Result!["unclaimed"]!.AsString(), result.Unclaimed.ToString());
}
#endregion SmartContract
@@ -384,17 +384,17 @@ public async Task TestGetUnclaimedGas()
[TestMethod]
public async Task TestListPlugins()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.ListPluginsAsync), StringComparison.CurrentCultureIgnoreCase));
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.ListPluginsAsync), StringComparison.CurrentCultureIgnoreCase))!;
var result = await rpc.ListPluginsAsync();
- Assert.AreEqual(test.Response.Result.ToString(), ((JArray)result.Select(p => p.ToJson()).ToArray()).ToString());
+ Assert.AreEqual(test.Response.Result!.ToString(), ((JArray)result.Select(p => p.ToJson()).ToArray()).ToString());
}
[TestMethod]
public async Task TestValidateAddress()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.ValidateAddressAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.ValidateAddressAsync(test.Request.Params[0].AsString());
- Assert.AreEqual(test.Response.Result.ToString(), result.ToJson().ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.ValidateAddressAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.ValidateAddressAsync(test.Request.Params[0]!.AsString());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToJson().ToString());
}
#endregion Utilities
@@ -404,90 +404,90 @@ public async Task TestValidateAddress()
[TestMethod]
public async Task TestCloseWallet()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.CloseWalletAsync), StringComparison.CurrentCultureIgnoreCase));
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.CloseWalletAsync), StringComparison.CurrentCultureIgnoreCase))!;
var result = await rpc.CloseWalletAsync();
- Assert.AreEqual(test.Response.Result.AsBoolean(), result);
+ Assert.AreEqual(test.Response.Result!.AsBoolean(), result);
}
[TestMethod]
public async Task TestDumpPrivKey()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.DumpPrivKeyAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.DumpPrivKeyAsync(test.Request.Params[0].AsString());
- Assert.AreEqual(test.Response.Result.AsString(), result);
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.DumpPrivKeyAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.DumpPrivKeyAsync(test.Request.Params[0]!.AsString());
+ Assert.AreEqual(test.Response.Result!.AsString(), result);
}
[TestMethod]
public async Task TestGetNewAddress()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetNewAddressAsync), StringComparison.CurrentCultureIgnoreCase));
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetNewAddressAsync), StringComparison.CurrentCultureIgnoreCase))!;
var result = await rpc.GetNewAddressAsync();
- Assert.AreEqual(test.Response.Result.AsString(), result);
+ Assert.AreEqual(test.Response.Result!.AsString(), result);
}
[TestMethod]
public async Task TestGetWalletBalance()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetWalletBalanceAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.GetWalletBalanceAsync(test.Request.Params[0].AsString());
- Assert.AreEqual(test.Response.Result["balance"].AsString(), result.Value.ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetWalletBalanceAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.GetWalletBalanceAsync(test.Request.Params[0]!.AsString());
+ Assert.AreEqual(test.Response.Result!["balance"]!.AsString(), result.Value.ToString());
}
[TestMethod]
public async Task TestGetWalletUnclaimedGas()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetWalletUnclaimedGasAsync), StringComparison.CurrentCultureIgnoreCase));
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetWalletUnclaimedGasAsync), StringComparison.CurrentCultureIgnoreCase))!;
var result = await rpc.GetWalletUnclaimedGasAsync();
- Assert.AreEqual(test.Response.Result.AsString(), result.ToString());
+ Assert.AreEqual(test.Response.Result!.AsString(), result.ToString());
}
[TestMethod]
public async Task TestImportPrivKey()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.ImportPrivKeyAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.ImportPrivKeyAsync(test.Request.Params[0].AsString());
- Assert.AreEqual(test.Response.Result.ToString(), result.ToJson().ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.ImportPrivKeyAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.ImportPrivKeyAsync(test.Request.Params[0]!.AsString());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToJson().ToString());
}
[TestMethod]
public async Task TestListAddress()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.ListAddressAsync), StringComparison.CurrentCultureIgnoreCase));
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.ListAddressAsync), StringComparison.CurrentCultureIgnoreCase))!;
var result = await rpc.ListAddressAsync();
- Assert.AreEqual(test.Response.Result.ToString(), ((JArray)result.Select(p => p.ToJson()).ToArray()).ToString());
+ Assert.AreEqual(test.Response.Result!.ToString(), ((JArray)result.Select(p => p.ToJson()).ToArray()).ToString());
}
[TestMethod]
public async Task TestOpenWallet()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.OpenWalletAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.OpenWalletAsync(test.Request.Params[0].AsString(), test.Request.Params[1].AsString());
- Assert.AreEqual(test.Response.Result.AsBoolean(), result);
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.OpenWalletAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.OpenWalletAsync(test.Request.Params[0]!.AsString(), test.Request.Params[1]!.AsString());
+ Assert.AreEqual(test.Response.Result!.AsBoolean(), result);
}
[TestMethod]
public async Task TestSendFrom()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.SendFromAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.SendFromAsync(test.Request.Params[0].AsString(), test.Request.Params[1].AsString(),
- test.Request.Params[2].AsString(), test.Request.Params[3].AsString());
- Assert.AreEqual(test.Response.Result.ToString(), result.ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.SendFromAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.SendFromAsync(test.Request.Params[0]!.AsString(), test.Request.Params[1]!.AsString(),
+ test.Request.Params[2]!.AsString(), test.Request.Params[3]!.AsString());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToString());
}
[TestMethod]
public async Task TestSendMany()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.SendManyAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.SendManyAsync(test.Request.Params[0].AsString(), ((JArray)test.Request.Params[1]).Select(p => RpcTransferOut.FromJson((JObject)p, rpc.protocolSettings)));
- Assert.AreEqual(test.Response.Result.ToString(), result.ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.SendManyAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.SendManyAsync(test.Request.Params[0]!.AsString(), ((JArray)test.Request.Params[1]!).Select(p => RpcTransferOut.FromJson((JObject)p!, rpc.protocolSettings)));
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToString());
}
[TestMethod]
public async Task TestSendToAddress()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.SendToAddressAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.SendToAddressAsync(test.Request.Params[0].AsString(), test.Request.Params[1].AsString(), test.Request.Params[2].AsString());
- Assert.AreEqual(test.Response.Result.ToString(), result.ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.SendToAddressAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.SendToAddressAsync(test.Request.Params[0]!.AsString(), test.Request.Params[1]!.AsString(), test.Request.Params[2]!.AsString());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToString());
}
#endregion Wallet
@@ -497,36 +497,36 @@ public async Task TestSendToAddress()
[TestMethod()]
public async Task GetApplicationLogTest()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetApplicationLogAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.GetApplicationLogAsync(test.Request.Params[0].AsString());
- Assert.AreEqual(test.Response.Result.ToString(), result.ToJson().ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetApplicationLogAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.GetApplicationLogAsync(test.Request.Params[0]!.AsString());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToJson().ToString());
}
[TestMethod()]
public async Task GetApplicationLogTest_TriggerType()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetApplicationLogAsync) + "_triggertype", StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.GetApplicationLogAsync(test.Request.Params[0].AsString(), TriggerType.OnPersist);
- Assert.AreEqual(test.Response.Result.ToString(), result.ToJson().ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetApplicationLogAsync) + "_triggertype", StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.GetApplicationLogAsync(test.Request.Params[0]!.AsString(), TriggerType.OnPersist);
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToJson().ToString());
}
[TestMethod()]
public async Task GetNep17TransfersTest()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetNep17TransfersAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.GetNep17TransfersAsync(test.Request.Params[0].AsString(), (ulong)test.Request.Params[1].AsNumber(), (ulong)test.Request.Params[2].AsNumber());
- Assert.AreEqual(test.Response.Result.ToString(), result.ToJson(rpc.protocolSettings).ToString());
- test = TestUtils.RpcTestCases.Find(p => p.Name == (nameof(rpc.GetNep17TransfersAsync).ToLower() + "_with_null_transferaddress"));
- result = await rpc.GetNep17TransfersAsync(test.Request.Params[0].AsString(), (ulong)test.Request.Params[1].AsNumber(), (ulong)test.Request.Params[2].AsNumber());
- Assert.AreEqual(test.Response.Result.ToString(), result.ToJson(rpc.protocolSettings).ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetNep17TransfersAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.GetNep17TransfersAsync(test.Request.Params[0]!.AsString(), (ulong)test.Request.Params[1]!.AsNumber(), (ulong)test.Request.Params[2]!.AsNumber());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToJson(rpc.protocolSettings).ToString());
+ test = TestUtils.RpcTestCases.Find(p => p.Name == (nameof(rpc.GetNep17TransfersAsync).ToLower() + "_with_null_transferaddress"))!;
+ result = await rpc.GetNep17TransfersAsync(test.Request.Params[0]!.AsString(), (ulong)test.Request.Params[1]!.AsNumber(), (ulong)test.Request.Params[2]!.AsNumber());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToJson(rpc.protocolSettings).ToString());
}
[TestMethod()]
public async Task GetNep17BalancesTest()
{
- var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetNep17BalancesAsync), StringComparison.CurrentCultureIgnoreCase));
- var result = await rpc.GetNep17BalancesAsync(test.Request.Params[0].AsString());
- Assert.AreEqual(test.Response.Result.ToString(), result.ToJson(rpc.protocolSettings).ToString());
+ var test = TestUtils.RpcTestCases.Find(p => p.Name.Equals(nameof(rpc.GetNep17BalancesAsync), StringComparison.CurrentCultureIgnoreCase))!;
+ var result = await rpc.GetNep17BalancesAsync(test.Request.Params[0]!.AsString());
+ Assert.AreEqual(test.Response.Result!.ToString(), result.ToJson(rpc.protocolSettings).ToString());
}
#endregion Plugins
diff --git a/tests/Neo.Network.RPC.Tests/UT_RpcModels.cs b/tests/Neo.Network.RPC.Tests/UT_RpcModels.cs
index 1e2d48c2e..ec319d3e5 100644
--- a/tests/Neo.Network.RPC.Tests/UT_RpcModels.cs
+++ b/tests/Neo.Network.RPC.Tests/UT_RpcModels.cs
@@ -19,8 +19,8 @@ namespace Neo.Network.RPC.Tests;
[TestClass()]
public class UT_RpcModels
{
- RpcClient rpc;
- Mock handlerMock;
+ RpcClient rpc = null!;
+ Mock handlerMock = null!;
[TestInitialize]
public void TestSetup()
@@ -36,9 +36,9 @@ public void TestSetup()
public void TestRpcAccount()
{
var json = TestUtils.RpcTestCases
- .Find(p => p.Name.Equals(nameof(RpcClient.ImportPrivKeyAsync), StringComparison.CurrentCultureIgnoreCase))
+ .Find(p => p.Name.Equals(nameof(RpcClient.ImportPrivKeyAsync), StringComparison.CurrentCultureIgnoreCase))!
.Response
- .Result;
+ .Result!;
var item = RpcAccount.FromJson((JObject)json);
Assert.AreEqual(json.ToString(), item.ToJson().ToString());
}
@@ -47,9 +47,9 @@ public void TestRpcAccount()
public void TestRpcApplicationLog()
{
var json = TestUtils.RpcTestCases
- .Find(p => p.Name.Equals(nameof(RpcClient.GetApplicationLogAsync), StringComparison.CurrentCultureIgnoreCase))
+ .Find(p => p.Name.Equals(nameof(RpcClient.GetApplicationLogAsync), StringComparison.CurrentCultureIgnoreCase))!
.Response
- .Result;
+ .Result!;
var item = RpcApplicationLog.FromJson((JObject)json, rpc.protocolSettings);
Assert.AreEqual(json.ToString(), item.ToJson().ToString());
}
@@ -58,9 +58,9 @@ public void TestRpcApplicationLog()
public void TestRpcBlock()
{
var json = TestUtils.RpcTestCases
- .Find(p => p.Name.Equals(nameof(RpcClient.GetBlockAsync), StringComparison.CurrentCultureIgnoreCase))
+ .Find(p => p.Name.Equals(nameof(RpcClient.GetBlockAsync), StringComparison.CurrentCultureIgnoreCase))!
.Response
- .Result;
+ .Result!;
var item = RpcBlock.FromJson((JObject)json, rpc.protocolSettings);
Assert.AreEqual(json.ToString(), item.ToJson(rpc.protocolSettings).ToString());
}
@@ -69,9 +69,9 @@ public void TestRpcBlock()
public void TestRpcBlockHeader()
{
var json = TestUtils.RpcTestCases
- .Find(p => p.Name.Equals(nameof(RpcClient.GetBlockHeaderAsync), StringComparison.CurrentCultureIgnoreCase))
+ .Find(p => p.Name.Equals(nameof(RpcClient.GetBlockHeaderAsync), StringComparison.CurrentCultureIgnoreCase))!
.Response
- .Result;
+ .Result!;
var item = RpcBlockHeader.FromJson((JObject)json, rpc.protocolSettings);
Assert.AreEqual(json.ToString(), item.ToJson(rpc.protocolSettings).ToString());
}
@@ -80,23 +80,23 @@ public void TestRpcBlockHeader()
public void TestGetContractState()
{
var json = TestUtils.RpcTestCases
- .Find(p => p.Name.Equals(nameof(RpcClient.GetContractStateAsync), StringComparison.CurrentCultureIgnoreCase))
+ .Find(p => p.Name.Equals(nameof(RpcClient.GetContractStateAsync), StringComparison.CurrentCultureIgnoreCase))!
.Response
- .Result;
+ .Result!;
var item = RpcContractState.FromJson((JObject)json);
Assert.AreEqual(json.ToString(), item.ToJson().ToString());
- var nef = RpcNefFile.FromJson((JObject)json["nef"]);
- Assert.AreEqual(json["nef"].ToString(), nef.ToJson().ToString());
+ var nef = RpcNefFile.FromJson((JObject)json["nef"]!);
+ Assert.AreEqual(json["nef"]!.ToString(), nef.ToJson().ToString());
}
[TestMethod()]
public void TestRpcInvokeResult()
{
var json = TestUtils.RpcTestCases
- .Find(p => p.Name.Equals(nameof(RpcClient.InvokeFunctionAsync), StringComparison.CurrentCultureIgnoreCase))
+ .Find(p => p.Name.Equals(nameof(RpcClient.InvokeFunctionAsync), StringComparison.CurrentCultureIgnoreCase))!
.Response
- .Result;
+ .Result!;
var item = RpcInvokeResult.FromJson((JObject)json);
Assert.AreEqual(json.ToString(), item.ToJson().ToString());
}
@@ -105,7 +105,7 @@ public void TestRpcInvokeResult()
public void TestRpcMethodToken()
{
var json = """{"hash":"0x0e1b9bfaa44e60311f6f3c96cfcd6d12c2fc3add","method":"test","paramcount":1,"hasreturnvalue":true,"callflags":"All"}""";
- var item = RpcMethodToken.FromJson((JObject)JToken.Parse(json));
+ var item = RpcMethodToken.FromJson((JObject)JToken.Parse(json)!);
Assert.AreEqual("0x0e1b9bfaa44e60311f6f3c96cfcd6d12c2fc3add", item.Hash.ToString());
Assert.AreEqual("test", item.Method);
Assert.AreEqual(1, item.ParametersCount);
@@ -118,9 +118,9 @@ public void TestRpcMethodToken()
public void TestRpcNep17Balances()
{
var json = TestUtils.RpcTestCases
- .Find(p => p.Name.Equals(nameof(RpcClient.GetNep17BalancesAsync), StringComparison.CurrentCultureIgnoreCase))
+ .Find(p => p.Name.Equals(nameof(RpcClient.GetNep17BalancesAsync), StringComparison.CurrentCultureIgnoreCase))!
.Response
- .Result;
+ .Result!;
var item = RpcNep17Balances.FromJson((JObject)json, rpc.protocolSettings);
Assert.AreEqual(json.ToString(), item.ToJson(rpc.protocolSettings).ToString());
}
@@ -129,9 +129,9 @@ public void TestRpcNep17Balances()
public void TestRpcNep17Transfers()
{
var json = TestUtils.RpcTestCases
- .Find(p => p.Name.Equals(nameof(RpcClient.GetNep17TransfersAsync), StringComparison.CurrentCultureIgnoreCase))
+ .Find(p => p.Name.Equals(nameof(RpcClient.GetNep17TransfersAsync), StringComparison.CurrentCultureIgnoreCase))!
.Response
- .Result;
+ .Result!;
var item = RpcNep17Transfers.FromJson((JObject)json, rpc.protocolSettings);
Assert.AreEqual(json.ToString(), item.ToJson(rpc.protocolSettings).ToString());
}
@@ -140,9 +140,9 @@ public void TestRpcNep17Transfers()
public void TestRpcPeers()
{
var json = TestUtils.RpcTestCases
- .Find(p => p.Name.Equals(nameof(RpcClient.GetPeersAsync), StringComparison.CurrentCultureIgnoreCase))
+ .Find(p => p.Name.Equals(nameof(RpcClient.GetPeersAsync), StringComparison.CurrentCultureIgnoreCase))!
.Response
- .Result;
+ .Result!;
var item = RpcPeers.FromJson((JObject)json);
Assert.AreEqual(json.ToString(), item.ToJson().ToString());
}
@@ -151,10 +151,10 @@ public void TestRpcPeers()
public void TestRpcPlugin()
{
var json = TestUtils.RpcTestCases
- .Find(p => p.Name.Equals(nameof(RpcClient.ListPluginsAsync), StringComparison.CurrentCultureIgnoreCase))
+ .Find(p => p.Name.Equals(nameof(RpcClient.ListPluginsAsync), StringComparison.CurrentCultureIgnoreCase))!
.Response
- .Result;
- var item = ((JArray)json).Select(p => RpcPlugin.FromJson((JObject)p));
+ .Result!;
+ var item = ((JArray)json).Select(p => RpcPlugin.FromJson((JObject)p!));
Assert.AreEqual(json.ToString(), ((JArray)item.Select(p => p.ToJson()).ToArray()).ToString());
}
@@ -162,9 +162,9 @@ public void TestRpcPlugin()
public void TestRpcRawMemPool()
{
var json = TestUtils.RpcTestCases
- .Find(p => p.Name.Equals(nameof(RpcClient.GetRawMempoolBothAsync), StringComparison.CurrentCultureIgnoreCase))
+ .Find(p => p.Name.Equals(nameof(RpcClient.GetRawMempoolBothAsync), StringComparison.CurrentCultureIgnoreCase))!
.Response
- .Result;
+ .Result!;
var item = RpcRawMemPool.FromJson((JObject)json);
Assert.AreEqual(json.ToString(), item.ToJson().ToString());
}
@@ -173,9 +173,9 @@ public void TestRpcRawMemPool()
public void TestRpcTransaction()
{
var json = TestUtils.RpcTestCases
- .Find(p => p.Name.Equals(nameof(RpcClient.GetRawTransactionAsync), StringComparison.CurrentCultureIgnoreCase))
+ .Find(p => p.Name.Equals(nameof(RpcClient.GetRawTransactionAsync), StringComparison.CurrentCultureIgnoreCase))!
.Response
- .Result;
+ .Result!;
var item = RpcTransaction.FromJson((JObject)json, rpc.protocolSettings);
Assert.AreEqual(json.ToString(), item.ToJson(rpc.protocolSettings).ToString());
}
@@ -184,8 +184,8 @@ public void TestRpcTransaction()
public void TestRpcTransferOut()
{
var json = TestUtils.RpcTestCases
- .Find(p => p.Name.Equals(nameof(RpcClient.SendManyAsync), StringComparison.CurrentCultureIgnoreCase)).Request.Params[1];
- var item = ((JArray)json).Select(p => RpcTransferOut.FromJson((JObject)p, rpc.protocolSettings));
+ .Find(p => p.Name.Equals(nameof(RpcClient.SendManyAsync), StringComparison.CurrentCultureIgnoreCase))!.Request.Params[1]!;
+ var item = ((JArray)json).Select(p => RpcTransferOut.FromJson((JObject)p!, rpc.protocolSettings));
Assert.AreEqual(json.ToString(), ((JArray)item.Select(p => p.ToJson(rpc.protocolSettings)).ToArray()).ToString());
}
@@ -193,9 +193,9 @@ public void TestRpcTransferOut()
public void TestRpcValidateAddressResult()
{
var json = TestUtils.RpcTestCases
- .Find(p => p.Name.Equals(nameof(RpcClient.ValidateAddressAsync), StringComparison.CurrentCultureIgnoreCase))
+ .Find(p => p.Name.Equals(nameof(RpcClient.ValidateAddressAsync), StringComparison.CurrentCultureIgnoreCase))!
.Response
- .Result;
+ .Result!;
var item = RpcValidateAddressResult.FromJson((JObject)json);
Assert.AreEqual(json.ToString(), item.ToJson().ToString());
}
@@ -204,10 +204,10 @@ public void TestRpcValidateAddressResult()
public void TestRpcValidator()
{
var json = TestUtils.RpcTestCases
- .Find(p => p.Name.Equals(nameof(RpcClient.GetNextBlockValidatorsAsync), StringComparison.CurrentCultureIgnoreCase))
+ .Find(p => p.Name.Equals(nameof(RpcClient.GetNextBlockValidatorsAsync), StringComparison.CurrentCultureIgnoreCase))!
.Response
- .Result;
- var item = ((JArray)json).Select(p => RpcValidator.FromJson((JObject)p));
+ .Result!;
+ var item = ((JArray)json).Select(p => RpcValidator.FromJson((JObject)p!));
Assert.AreEqual(json.ToString(), ((JArray)item.Select(p => p.ToJson()).ToArray()).ToString());
}
@@ -215,9 +215,9 @@ public void TestRpcValidator()
public void TestRpcVersion()
{
var json = TestUtils.RpcTestCases
- .Find(p => p.Name.Equals(nameof(RpcClient.GetVersionAsync), StringComparison.CurrentCultureIgnoreCase))
+ .Find(p => p.Name.Equals(nameof(RpcClient.GetVersionAsync), StringComparison.CurrentCultureIgnoreCase))!
.Response
- .Result;
+ .Result!;
var item = RpcVersion.FromJson((JObject)json);
Assert.AreEqual(json.ToString(), item.ToJson().ToString());
}
diff --git a/tests/Neo.Network.RPC.Tests/UT_TransactionManager.cs b/tests/Neo.Network.RPC.Tests/UT_TransactionManager.cs
index 4ecefcef1..59a776b58 100644
--- a/tests/Neo.Network.RPC.Tests/UT_TransactionManager.cs
+++ b/tests/Neo.Network.RPC.Tests/UT_TransactionManager.cs
@@ -29,14 +29,13 @@ namespace Neo.Network.RPC.Tests;
[TestClass]
public class UT_TransactionManager
{
- TransactionManager txManager;
- Mock rpcClientMock;
- Mock multiSigMock;
- KeyPair keyPair1;
- KeyPair keyPair2;
- UInt160 sender;
- UInt160 multiHash;
- RpcClient client;
+ Mock rpcClientMock = null!;
+ Mock multiSigMock = null!;
+ KeyPair keyPair1 = null!;
+ KeyPair keyPair2 = null!;
+ UInt160 sender = null!;
+ UInt160 multiHash = null!;
+ RpcClient client = null!;
[TestInitialize]
public void TestSetup()
@@ -52,7 +51,7 @@ public void TestSetup()
public static Mock MockRpcClient(UInt160 sender, byte[] script)
{
- var mockRpc = new Mock(MockBehavior.Strict, new Uri("http://seed1.neo.org:10331"), null, null, null);
+ var mockRpc = new Mock(MockBehavior.Strict, new Uri("http://seed1.neo.org:10331"), null!, null!, null!);
// MockHeight
mockRpc.Setup(p => p.RpcSendAsync("getblockcount")).ReturnsAsync(100).Verifiable();
@@ -84,7 +83,7 @@ public static Mock MockRpcClient(UInt160 sender, byte[] script)
public static Mock MockMultiSig(UInt160 multiHash, byte[] script)
{
- var mockRpc = new Mock(MockBehavior.Strict, new Uri("http://seed1.neo.org:10331"), null, null, null);
+ var mockRpc = new Mock(MockBehavior.Strict, new Uri("http://seed1.neo.org:10331"), null!, null!, null!);
// MockHeight
mockRpc.Setup(p => p.RpcSendAsync("getblockcount")).ReturnsAsync(100).Verifiable();
@@ -143,7 +142,7 @@ public async Task TestMakeTransaction()
};
byte[] script = new byte[1];
- txManager = await TransactionManager.MakeTransactionAsync(rpcClientMock.Object, script, signers);
+ TransactionManager txManager = await TransactionManager.MakeTransactionAsync(rpcClientMock.Object, script, signers);
var tx = txManager.Tx;
Assert.AreEqual(WitnessScope.Global, tx.Signers[0].Scopes);
@@ -162,7 +161,7 @@ public async Task TestSign()
};
byte[] script = new byte[1];
- txManager = await TransactionManager.MakeTransactionAsync(client, script, signers);
+ TransactionManager txManager = await TransactionManager.MakeTransactionAsync(client, script, signers);
await txManager
.AddSignature(keyPair1)
.SignAsync();
@@ -221,7 +220,7 @@ public async Task TestSignMulti()
};
byte[] script = new byte[1];
- txManager = await TransactionManager.MakeTransactionAsync(multiSigMock.Object, script, signers);
+ TransactionManager txManager = await TransactionManager.MakeTransactionAsync(multiSigMock.Object, script, signers);
await txManager
.AddMultiSig(keyPair1, 2, keyPair1.PublicKey, keyPair2.PublicKey)
.AddMultiSig(keyPair2, 2, keyPair1.PublicKey, keyPair2.PublicKey)
@@ -247,7 +246,7 @@ public async Task TestAddWitness()
};
byte[] script = new byte[1];
- txManager = await TransactionManager.MakeTransactionAsync(rpcClientMock.Object, script, signers);
+ TransactionManager txManager = await TransactionManager.MakeTransactionAsync(rpcClientMock.Object, script, signers);
txManager.AddWitness(UInt160.Zero);
txManager.AddSignature(keyPair1);
await txManager.SignAsync();
diff --git a/tests/Neo.Network.RPC.Tests/UT_Utility.cs b/tests/Neo.Network.RPC.Tests/UT_Utility.cs
index a329d838f..dfe940fac 100644
--- a/tests/Neo.Network.RPC.Tests/UT_Utility.cs
+++ b/tests/Neo.Network.RPC.Tests/UT_Utility.cs
@@ -9,7 +9,6 @@
// Redistribution and use in source and binary forms with or without
// modifications are permitted.
-using Neo.Extensions;
using Neo.Network.P2P.Payloads;
using Neo.Network.P2P.Payloads.Conditions;
using Neo.SmartContract;
@@ -22,9 +21,9 @@ namespace Neo.Network.RPC.Tests;
[TestClass]
public class UT_Utility
{
- private KeyPair keyPair;
- private UInt160 scriptHash;
- private ProtocolSettings protocolSettings;
+ private KeyPair keyPair = null!;
+ private UInt160 scriptHash = null!;
+ private ProtocolSettings protocolSettings = null!;
[TestInitialize]
public void TestSetup()
@@ -47,9 +46,6 @@ public void TestAsScriptHash()
[TestMethod]
public void TestGetKeyPair()
{
- string nul = null;
- Assert.ThrowsExactly(() => _ = Utility.GetKeyPair(nul));
-
string wif = "KyXwTh1hB76RRMquSvnxZrJzQx7h9nQP2PCRL38v6VDb5ip3nf1p";
var result = Utility.GetKeyPair(wif);
Assert.AreEqual(keyPair, result);
@@ -69,9 +65,6 @@ public void TestGetKeyPair()
[TestMethod]
public void TestGetScriptHash()
{
- string nul = null;
- Assert.ThrowsExactly(() => _ = Utility.GetScriptHash(nul, protocolSettings));
-
string addr = scriptHash.ToAddress(protocolSettings.AddressVersion);
var result = Utility.GetScriptHash(addr, protocolSettings);
Assert.AreEqual(scriptHash, result);
diff --git a/tests/Neo.Network.RPC.Tests/UT_WalletAPI.cs b/tests/Neo.Network.RPC.Tests/UT_WalletAPI.cs
index a65c5a258..76a171aa1 100644
--- a/tests/Neo.Network.RPC.Tests/UT_WalletAPI.cs
+++ b/tests/Neo.Network.RPC.Tests/UT_WalletAPI.cs
@@ -26,13 +26,13 @@ namespace Neo.Network.RPC.Tests;
[TestClass]
public class UT_WalletAPI
{
- Mock rpcClientMock;
- KeyPair keyPair1;
- string address1;
- UInt160 sender;
- WalletAPI walletAPI;
- UInt160 multiSender;
- RpcClient client;
+ Mock rpcClientMock = null!;
+ KeyPair keyPair1 = null!;
+ string address1 = null!;
+ UInt160 sender = null!;
+ WalletAPI walletAPI = null!;
+ UInt160 multiSender = null!;
+ RpcClient client = null!;
[TestInitialize]
public void TestSetup()
diff --git a/tests/Neo.Plugins.ApplicationLogs.Tests/TestUtils.cs b/tests/Neo.Plugins.ApplicationLogs.Tests/TestUtils.cs
index f9d9dd30f..6add03858 100644
--- a/tests/Neo.Plugins.ApplicationLogs.Tests/TestUtils.cs
+++ b/tests/Neo.Plugins.ApplicationLogs.Tests/TestUtils.cs
@@ -27,6 +27,6 @@ public static NEP6Wallet GenerateTestWallet(string password)
["extra"] = null
};
Assert.AreEqual("{\"name\":\"noname\",\"version\":\"1.0\",\"scrypt\":{\"n\":2,\"r\":1,\"p\":1},\"accounts\":[],\"extra\":null}", wallet.ToString());
- return new NEP6Wallet(null, password, TestProtocolSettings.Default, wallet);
+ return new NEP6Wallet(null!, password, TestProtocolSettings.Default, wallet);
}
}
diff --git a/tests/Neo.Plugins.ApplicationLogs.Tests/UT_LogReader.cs b/tests/Neo.Plugins.ApplicationLogs.Tests/UT_LogReader.cs
index e0283afe1..69517ed66 100644
--- a/tests/Neo.Plugins.ApplicationLogs.Tests/UT_LogReader.cs
+++ b/tests/Neo.Plugins.ApplicationLogs.Tests/UT_LogReader.cs
@@ -41,7 +41,7 @@ public class TestMemoryStoreProvider(MemoryStore memoryStore) : IStoreProvider
{
public MemoryStore MemoryStore { get; init; } = memoryStore;
public string Name => nameof(MemoryStore);
- public IStore GetStore(string path) => MemoryStore;
+ public IStore GetStore(string? path) => MemoryStore;
}
private class NeoSystemFixture : IDisposable
@@ -78,7 +78,7 @@ public NeoSystemFixture()
Witnesses = []
}
];
- byte[] signature = txs[0].Sign(_walletAccount.GetKey(), ApplicationLogsSettings.Default.Network);
+ byte[] signature = txs[0].Sign(_walletAccount.GetKey()!, ApplicationLogsSettings.Default.Network);
txs[0].Witnesses = [new Witness
{
InvocationScript = new byte[] { (byte)OpCode.PUSHDATA1, (byte)signature.Length }.Concat(signature).ToArray(),
@@ -99,7 +99,7 @@ public NeoSystemFixture()
Transactions = txs,
};
block.Header.MerkleRoot ??= MerkleTree.ComputeRoot(block.Transactions.Select(t => t.Hash).ToArray());
- signature = block.Sign(_walletAccount.GetKey(), ApplicationLogsSettings.Default.Network);
+ signature = block.Sign(_walletAccount.GetKey()!, ApplicationLogsSettings.Default.Network);
block.Header.Witness = new Witness
{
InvocationScript = new byte[] { (byte)OpCode.PUSHDATA1, (byte)signature.Length }.Concat(signature).ToArray(),
@@ -115,7 +115,7 @@ public void Dispose()
}
}
- private static NeoSystemFixture s_neoSystemFixture;
+ private static NeoSystemFixture s_neoSystemFixture = null!;
[ClassInitialize]
public static void ClassInitialize(TestContext _)
@@ -139,38 +139,38 @@ public async Task Test_GetApplicationLog()
JObject blockJson = (JObject)s_neoSystemFixture.logReader.GetApplicationLog(block.Hash);
Assert.AreEqual(blockJson["blockhash"], block.Hash.ToString());
- JArray executions = (JArray)blockJson["executions"];
+ JArray executions = (JArray)blockJson["executions"]!;
Assert.HasCount(2, executions);
- Assert.AreEqual("OnPersist", executions[0]["trigger"]);
- Assert.AreEqual("PostPersist", executions[1]["trigger"]);
+ Assert.AreEqual("OnPersist", executions[0]!["trigger"]);
+ Assert.AreEqual("PostPersist", executions[1]!["trigger"]);
- JArray notifications = (JArray)executions[1]["notifications"];
+ JArray notifications = (JArray)executions[1]!["notifications"]!;
Assert.HasCount(1, notifications);
- Assert.AreEqual(notifications[0]["contract"], GasToken.GAS.Hash.ToString());
- Assert.AreEqual("Transfer", notifications[0]["eventname"]); // from null to Validator
- Assert.AreEqual(nameof(ContractParameterType.Any), notifications[0]["state"]["value"][0]["type"]);
- CollectionAssert.AreEqual(Convert.FromBase64String(notifications[0]["state"]["value"][1]["value"].AsString()), ValidatorScriptHash.ToArray());
- Assert.AreEqual("50000000", notifications[0]["state"]["value"][2]["value"]);
+ Assert.AreEqual(notifications[0]!["contract"], GasToken.GAS.Hash.ToString());
+ Assert.AreEqual("Transfer", notifications[0]!["eventname"]); // from null to Validator
+ Assert.AreEqual(nameof(ContractParameterType.Any), notifications[0]!["state"]!["value"]![0]!["type"]);
+ CollectionAssert.AreEqual(Convert.FromBase64String(notifications[0]!["state"]!["value"]![1]!["value"]!.AsString()), ValidatorScriptHash.ToArray());
+ Assert.AreEqual("50000000", notifications[0]!["state"]!["value"]![2]!["value"]);
blockJson = (JObject)s_neoSystemFixture.logReader.GetApplicationLog(block.Hash, "PostPersist");
- executions = (JArray)blockJson["executions"];
+ executions = (JArray)blockJson["executions"]!;
Assert.HasCount(1, executions);
- Assert.AreEqual("PostPersist", executions[0]["trigger"]);
+ Assert.AreEqual("PostPersist", executions[0]!["trigger"]);
// "true" is invalid but still works
JObject transactionJson = (JObject)s_neoSystemFixture.logReader.GetApplicationLog(s_neoSystemFixture.txs[0].Hash.ToString(), "true");
- executions = (JArray)transactionJson["executions"];
+ executions = (JArray)transactionJson["executions"]!;
Assert.HasCount(1, executions);
- Assert.AreEqual(nameof(VMState.HALT), executions[0]["vmstate"]);
- Assert.IsTrue(executions[0]["stack"][0]["value"].GetBoolean());
- notifications = (JArray)executions[0]["notifications"];
+ Assert.AreEqual(nameof(VMState.HALT), executions[0]!["vmstate"]);
+ Assert.IsTrue(executions[0]!["stack"]![0]!["value"]!.GetBoolean());
+ notifications = (JArray)executions[0]!["notifications"]!;
Assert.HasCount(2, notifications);
- Assert.AreEqual("Transfer", notifications[0]["eventname"].AsString());
- Assert.AreEqual(notifications[0]["contract"].AsString(), NeoToken.NEO.Hash.ToString());
- Assert.AreEqual("1", notifications[0]["state"]["value"][2]["value"]);
- Assert.AreEqual("Transfer", notifications[1]["eventname"].AsString());
- Assert.AreEqual(notifications[1]["contract"].AsString(), GasToken.GAS.Hash.ToString());
- Assert.AreEqual("50000000", notifications[1]["state"]["value"][2]["value"]);
+ Assert.AreEqual("Transfer", notifications[0]!["eventname"]!.AsString());
+ Assert.AreEqual(notifications[0]!["contract"]!.AsString(), NeoToken.NEO.Hash.ToString());
+ Assert.AreEqual("1", notifications[0]!["state"]!["value"]![2]!["value"]);
+ Assert.AreEqual("Transfer", notifications[1]!["eventname"]!.AsString());
+ Assert.AreEqual(notifications[1]!["contract"]!.AsString(), GasToken.GAS.Hash.ToString());
+ Assert.AreEqual("50000000", notifications[1]!["state"]!["value"]![2]!["value"]);
}
[TestMethod]
@@ -185,8 +185,8 @@ public async Task Test_Commands()
s_neoSystemFixture.logReader.OnGetContractCommand(NativeContract.NEO.Hash);
s_neoSystemFixture.logReader.OnGetTransactionCommand(s_neoSystemFixture.txs[0].Hash);
- var blockLog = s_neoSystemFixture.logReader._neostore.GetBlockLog(block.Hash, TriggerType.Application);
- var transactionLog = s_neoSystemFixture.logReader._neostore.GetTransactionLog(s_neoSystemFixture.txs[0].Hash);
+ var blockLog = s_neoSystemFixture.logReader._neostore.GetBlockLog(block.Hash, TriggerType.Application)!;
+ var transactionLog = s_neoSystemFixture.logReader._neostore.GetTransactionLog(s_neoSystemFixture.txs[0].Hash)!;
foreach (var log in new BlockchainExecutionModel[] { blockLog, transactionLog })
{
Assert.AreEqual(VMState.HALT, log.VmState);
diff --git a/tests/Neo.Plugins.DBFTPlugin.Tests/ConsensusTestUtilities.cs b/tests/Neo.Plugins.DBFTPlugin.Tests/ConsensusTestUtilities.cs
index 3f62fcfb1..825c6737d 100644
--- a/tests/Neo.Plugins.DBFTPlugin.Tests/ConsensusTestUtilities.cs
+++ b/tests/Neo.Plugins.DBFTPlugin.Tests/ConsensusTestUtilities.cs
@@ -80,7 +80,7 @@ public ExtensiblePayload CreateConsensusPayload(ConsensusMessage message, int va
///
/// Creates a PrepareRequest message
///
- public PrepareRequest CreatePrepareRequest(UInt256 prevHash = null, UInt256[] transactionHashes = null, ulong nonce = 0)
+ public PrepareRequest CreatePrepareRequest(UInt256? prevHash = null, UInt256[]? transactionHashes = null, ulong nonce = 0)
{
return new PrepareRequest
{
@@ -95,7 +95,7 @@ public PrepareRequest CreatePrepareRequest(UInt256 prevHash = null, UInt256[] tr
///
/// Creates a PrepareResponse message
///
- public PrepareResponse CreatePrepareResponse(UInt256 preparationHash = null)
+ public PrepareResponse CreatePrepareResponse(UInt256? preparationHash = null)
{
return new PrepareResponse
{
@@ -106,7 +106,7 @@ public PrepareResponse CreatePrepareResponse(UInt256 preparationHash = null)
///
/// Creates a Commit message
///
- public Commit CreateCommit(byte[] signature = null)
+ public Commit CreateCommit(byte[]? signature = null)
{
return new Commit
{
@@ -224,7 +224,7 @@ public void SendToValidators(ExtensiblePayload payload, IActorRef[] consensusSer
///
/// Simulates a complete consensus round with proper message flow
///
- public async Task SimulateCompleteConsensusRoundAsync(IActorRef[] consensusServices, uint blockIndex = 1, UInt256[] transactions = null)
+ public async Task SimulateCompleteConsensusRoundAsync(IActorRef[] consensusServices, uint blockIndex = 1, UInt256[]? transactions = null)
{
var validatorCount = consensusServices.Length;
var primaryIndex = (int)(blockIndex % (uint)validatorCount);
@@ -272,7 +272,7 @@ public void SimulateConsensusWithProperFlow(IActorRef[] consensusServices, TestP
/// Simulates a complete consensus round (legacy synchronous version)
///
[Obsolete("Use SimulateCompleteConsensusRoundAsync for proper message flow testing")]
- public void SimulateCompleteConsensusRound(IActorRef[] consensusServices, uint blockIndex = 1, UInt256[] transactions = null)
+ public void SimulateCompleteConsensusRound(IActorRef[] consensusServices, uint blockIndex = 1, UInt256[]? transactions = null)
{
var validatorCount = consensusServices.Length;
var primaryIndex = (int)(blockIndex % (uint)validatorCount);
diff --git a/tests/Neo.Plugins.DBFTPlugin.Tests/MockBlockchain.cs b/tests/Neo.Plugins.DBFTPlugin.Tests/MockBlockchain.cs
index daab3e13c..643b3a10a 100644
--- a/tests/Neo.Plugins.DBFTPlugin.Tests/MockBlockchain.cs
+++ b/tests/Neo.Plugins.DBFTPlugin.Tests/MockBlockchain.cs
@@ -20,14 +20,13 @@ namespace Neo.Plugins.DBFTPlugin.Tests;
public static class MockBlockchain
{
public static readonly NeoSystem TheNeoSystem;
- public static readonly UInt160[] DefaultExtensibleWitnessWhiteList;
private static readonly MemoryStore Store = new();
internal class StoreProvider : IStoreProvider
{
public string Name => "TestProvider";
- public IStore GetStore(string path) => Store;
+ public IStore GetStore(string? path) => Store;
}
static MockBlockchain()
@@ -45,7 +44,7 @@ internal static void ResetStore()
internal static DbftSettings CreateDefaultSettings()
{
var config = new Microsoft.Extensions.Configuration.ConfigurationBuilder()
- .AddInMemoryCollection(new Dictionary
+ .AddInMemoryCollection(new Dictionary
{
["ApplicationConfiguration:DBFTPlugin:RecoveryLogs"] = "ConsensusState",
["ApplicationConfiguration:DBFTPlugin:IgnoreRecoveryLogs"] = "false",
diff --git a/tests/Neo.Plugins.DBFTPlugin.Tests/MockMemoryStoreProvider.cs b/tests/Neo.Plugins.DBFTPlugin.Tests/MockMemoryStoreProvider.cs
index 4f4ff4466..f5ec2a02e 100644
--- a/tests/Neo.Plugins.DBFTPlugin.Tests/MockMemoryStoreProvider.cs
+++ b/tests/Neo.Plugins.DBFTPlugin.Tests/MockMemoryStoreProvider.cs
@@ -18,5 +18,5 @@ public class MockMemoryStoreProvider(MemoryStore memoryStore) : IStoreProvider
{
public MemoryStore MemoryStore { get; init; } = memoryStore;
public string Name => nameof(MemoryStore);
- public IStore GetStore(string path) => MemoryStore;
+ public IStore GetStore(string? path) => MemoryStore;
}
diff --git a/tests/Neo.Plugins.DBFTPlugin.Tests/MockWallet.cs b/tests/Neo.Plugins.DBFTPlugin.Tests/MockWallet.cs
index c23d1f8c7..92556a945 100644
--- a/tests/Neo.Plugins.DBFTPlugin.Tests/MockWallet.cs
+++ b/tests/Neo.Plugins.DBFTPlugin.Tests/MockWallet.cs
@@ -20,7 +20,7 @@ public class MockWallet : Wallet
{
private readonly Dictionary accounts = new();
- public MockWallet(ProtocolSettings settings) : base(null, settings)
+ public MockWallet(ProtocolSettings settings) : base(null!, settings)
{
}
@@ -59,7 +59,7 @@ public override WalletAccount CreateAccount(byte[] privateKey)
throw new NotImplementedException();
}
- public override WalletAccount CreateAccount(Contract contract, KeyPair key)
+ public override WalletAccount CreateAccount(Contract contract, KeyPair? key)
{
throw new NotImplementedException();
}
@@ -74,7 +74,7 @@ public override bool DeleteAccount(UInt160 scriptHash)
return accounts.Remove(scriptHash);
}
- public override WalletAccount GetAccount(UInt160 scriptHash)
+ public override WalletAccount? GetAccount(UInt160 scriptHash)
{
return accounts.TryGetValue(scriptHash, out var account) ? account : null;
}
diff --git a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_ConsensusService.cs b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_ConsensusService.cs
index fe1345f51..fa691edf8 100644
--- a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_ConsensusService.cs
+++ b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_ConsensusService.cs
@@ -10,7 +10,6 @@
// modifications are permitted.
using Akka.Actor;
-using Akka.TestKit;
using Akka.TestKit.MsTest;
using Neo.Extensions.IO;
using Neo.Ledger;
@@ -26,23 +25,13 @@ namespace Neo.Plugins.DBFTPlugin.Tests;
[TestClass]
public class UT_ConsensusService : TestKit
{
- private NeoSystem neoSystem;
- private TestProbe localNode;
- private TestProbe taskManager;
- private TestProbe blockchain;
- private TestProbe txRouter;
- private MockWallet testWallet;
- private MemoryStore memoryStore;
+ private NeoSystem neoSystem = null!;
+ private MockWallet testWallet = null!;
+ private MemoryStore memoryStore = null!;
[TestInitialize]
public void Setup()
{
- // Create test probes for actor dependencies
- localNode = CreateTestProbe("localNode");
- taskManager = CreateTestProbe("taskManager");
- blockchain = CreateTestProbe("blockchain");
- txRouter = CreateTestProbe("txRouter");
-
// Create memory store
memoryStore = new MemoryStore();
var storeProvider = new MockMemoryStoreProvider(memoryStore);
diff --git a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Core.cs b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Core.cs
index 5eec2bf16..99ba27e9a 100644
--- a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Core.cs
+++ b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Core.cs
@@ -10,7 +10,6 @@
// modifications are permitted.
using Akka.Actor;
-using Akka.TestKit;
using Akka.TestKit.MsTest;
using Neo.Ledger;
using Neo.Network.P2P.Payloads;
@@ -24,25 +23,15 @@ namespace Neo.Plugins.DBFTPlugin.Tests;
[TestClass]
public class UT_DBFT_Core : TestKit
{
- private NeoSystem neoSystem;
- private TestProbe localNode;
- private TestProbe taskManager;
- private TestProbe blockchain;
- private TestProbe txRouter;
- private MockWallet[] testWallets;
- private IActorRef[] consensusServices;
- private MemoryStore memoryStore;
+ private NeoSystem neoSystem = null!;
+ private MockWallet[] testWallets = null!;
+ private IActorRef[] consensusServices = null!;
+ private MemoryStore memoryStore = null!;
private const int ValidatorCount = 7;
[TestInitialize]
public void Setup()
{
- // Create test probes for actor dependencies
- localNode = CreateTestProbe("localNode");
- taskManager = CreateTestProbe("taskManager");
- blockchain = CreateTestProbe("blockchain");
- txRouter = CreateTestProbe("txRouter");
-
// Create memory store
memoryStore = new MemoryStore();
var storeProvider = new MockMemoryStoreProvider(memoryStore);
diff --git a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Failures.cs b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Failures.cs
index e7689833d..bb79dbd86 100644
--- a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Failures.cs
+++ b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Failures.cs
@@ -10,7 +10,6 @@
// modifications are permitted.
using Akka.Actor;
-using Akka.TestKit;
using Akka.TestKit.MsTest;
using Neo.Extensions.IO;
using Neo.Network.P2P.Payloads;
@@ -27,25 +26,15 @@ namespace Neo.Plugins.DBFTPlugin.Tests;
public class UT_DBFT_Failures : TestKit
{
private const int ValidatorCount = 7;
- private NeoSystem neoSystem;
- private TestProbe localNode;
- private TestProbe taskManager;
- private TestProbe blockchain;
- private TestProbe txRouter;
- private MockWallet[] testWallets;
- private IActorRef[] consensusServices;
- private MemoryStore memoryStore;
- private DbftSettings settings;
+ private NeoSystem neoSystem = null!;
+ private MockWallet[] testWallets = null!;
+ private IActorRef[] consensusServices = null!;
+ private MemoryStore memoryStore = null!;
+ private DbftSettings settings = null!;
[TestInitialize]
public void Setup()
{
- // Create test probes for actor dependencies
- localNode = CreateTestProbe("localNode");
- taskManager = CreateTestProbe("taskManager");
- blockchain = CreateTestProbe("blockchain");
- txRouter = CreateTestProbe("txRouter");
-
// Create memory store
memoryStore = new MemoryStore();
var storeProvider = new MockMemoryStoreProvider(memoryStore);
diff --git a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Integration.cs b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Integration.cs
index fb02c7ab2..3dab16972 100644
--- a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Integration.cs
+++ b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Integration.cs
@@ -22,14 +22,11 @@ namespace Neo.Plugins.DBFTPlugin.Tests;
[TestClass]
public class UT_DBFT_Integration : TestKit
{
- private NeoSystem neoSystem;
- private TestProbe localNode;
- private TestProbe taskManager;
- private TestProbe blockchain;
- private TestProbe txRouter;
- private MockWallet[] testWallets;
- private IActorRef[] consensusServices;
- private MemoryStore memoryStore;
+ private NeoSystem neoSystem = null!;
+ private TestProbe localNode = null!;
+ private MockWallet[] testWallets = null!;
+ private IActorRef[] consensusServices = null!;
+ private MemoryStore memoryStore = null!;
private const int ValidatorCount = 4; // Smaller for integration tests
[TestInitialize]
@@ -37,9 +34,6 @@ public void Setup()
{
// Create test probes for actor dependencies
localNode = CreateTestProbe("localNode");
- taskManager = CreateTestProbe("taskManager");
- blockchain = CreateTestProbe("blockchain");
- txRouter = CreateTestProbe("txRouter");
// Setup autopilot for localNode to handle consensus messages
localNode.SetAutoPilot(new MockAutoPilot((sender, message) =>
diff --git a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_MessageFlow.cs b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_MessageFlow.cs
index d1d9bbc05..369016f55 100644
--- a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_MessageFlow.cs
+++ b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_MessageFlow.cs
@@ -35,14 +35,14 @@ namespace Neo.Plugins.DBFTPlugin.Tests;
public class UT_DBFT_MessageFlow : TestKit
{
private const int ValidatorCount = 4; // Use 4 validators for faster testing
- private NeoSystem neoSystem;
- private MemoryStore memoryStore;
- private DbftSettings settings;
- private MockWallet[] testWallets;
- private IActorRef[] consensusServices;
- private ConsensusTestUtilities testHelper;
- private TestProbe networkProbe; // Simulates the network layer
- private List capturedMessages;
+ private NeoSystem neoSystem = null!;
+ private MemoryStore memoryStore = null!;
+ private DbftSettings settings = null!;
+ private MockWallet[] testWallets = null!;
+ private IActorRef[] consensusServices = null!;
+ private ConsensusTestUtilities testHelper = null!;
+ private TestProbe networkProbe = null!; // Simulates the network layer
+ private List capturedMessages = null!;
[TestInitialize]
public void Setup()
diff --git a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_NormalFlow.cs b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_NormalFlow.cs
index 87794a0fd..51fdbdd64 100644
--- a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_NormalFlow.cs
+++ b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_NormalFlow.cs
@@ -10,7 +10,6 @@
// modifications are permitted.
using Akka.Actor;
-using Akka.TestKit;
using Akka.TestKit.MsTest;
using Neo.Extensions.IO;
using Neo.Network.P2P.Payloads;
@@ -26,25 +25,15 @@ namespace Neo.Plugins.DBFTPlugin.Tests;
public class UT_DBFT_NormalFlow : TestKit
{
private const int ValidatorCount = 7;
- private NeoSystem neoSystem;
- private TestProbe localNode;
- private TestProbe taskManager;
- private TestProbe blockchain;
- private TestProbe txRouter;
- private MockWallet[] testWallets;
- private IActorRef[] consensusServices;
- private MemoryStore memoryStore;
- private DbftSettings settings;
+ private NeoSystem neoSystem = null!;
+ private MockWallet[] testWallets = null!;
+ private IActorRef[] consensusServices = null!;
+ private MemoryStore memoryStore = null!;
+ private DbftSettings settings = null!;
[TestInitialize]
public void Setup()
{
- // Create test probes for actor dependencies
- localNode = CreateTestProbe("localNode");
- taskManager = CreateTestProbe("taskManager");
- blockchain = CreateTestProbe("blockchain");
- txRouter = CreateTestProbe("txRouter");
-
// Create memory store
memoryStore = new MemoryStore();
var storeProvider = new MockMemoryStoreProvider(memoryStore);
diff --git a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Performance.cs b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Performance.cs
index d310cd8a4..815aa29f8 100644
--- a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Performance.cs
+++ b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Performance.cs
@@ -10,7 +10,6 @@
// modifications are permitted.
using Akka.Actor;
-using Akka.TestKit;
using Akka.TestKit.MsTest;
using Neo.Extensions.IO;
using Neo.Network.P2P.Payloads;
@@ -26,23 +25,13 @@ namespace Neo.Plugins.DBFTPlugin.Tests;
[TestClass]
public class UT_DBFT_Performance : TestKit
{
- private NeoSystem neoSystem;
- private TestProbe localNode;
- private TestProbe taskManager;
- private TestProbe blockchain;
- private TestProbe txRouter;
- private MemoryStore memoryStore;
- private DbftSettings settings;
+ private NeoSystem neoSystem = null!;
+ private MemoryStore memoryStore = null!;
+ private DbftSettings settings = null!;
[TestInitialize]
public void Setup()
{
- // Create test probes for actor dependencies
- localNode = CreateTestProbe("localNode");
- taskManager = CreateTestProbe("taskManager");
- blockchain = CreateTestProbe("blockchain");
- txRouter = CreateTestProbe("txRouter");
-
// Create memory store
memoryStore = new MemoryStore();
var storeProvider = new MockMemoryStoreProvider(memoryStore);
diff --git a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Recovery.cs b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Recovery.cs
index fe862ef3e..995042236 100644
--- a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Recovery.cs
+++ b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Recovery.cs
@@ -10,7 +10,6 @@
// modifications are permitted.
using Akka.Actor;
-using Akka.TestKit;
using Akka.TestKit.MsTest;
using Neo.Extensions.IO;
using Neo.Network.P2P.Payloads;
@@ -27,25 +26,15 @@ namespace Neo.Plugins.DBFTPlugin.Tests;
public class UT_DBFT_Recovery : TestKit
{
private const int ValidatorCount = 7;
- private NeoSystem neoSystem;
- private TestProbe localNode;
- private TestProbe taskManager;
- private TestProbe blockchain;
- private TestProbe txRouter;
- private MockWallet[] testWallets;
- private IActorRef[] consensusServices;
- private MemoryStore memoryStore;
- private DbftSettings settings;
+ private NeoSystem neoSystem = null!;
+ private MockWallet[] testWallets = null!;
+ private IActorRef[] consensusServices = null!;
+ private MemoryStore memoryStore = null!;
+ private DbftSettings settings = null!;
[TestInitialize]
public void Setup()
{
- // Create test probes for actor dependencies
- localNode = CreateTestProbe("localNode");
- taskManager = CreateTestProbe("taskManager");
- blockchain = CreateTestProbe("blockchain");
- txRouter = CreateTestProbe("txRouter");
-
// Create memory store
memoryStore = new MemoryStore();
var storeProvider = new MockMemoryStoreProvider(memoryStore);
diff --git a/tests/Neo.Plugins.OracleService.Tests/E2E_Https.cs b/tests/Neo.Plugins.OracleService.Tests/E2E_Https.cs
index cb307e483..1e0099236 100644
--- a/tests/Neo.Plugins.OracleService.Tests/E2E_Https.cs
+++ b/tests/Neo.Plugins.OracleService.Tests/E2E_Https.cs
@@ -25,7 +25,7 @@ namespace Neo.Plugins.OracleService.Tests;
[TestClass]
public class E2E_Https
{
- UInt160 customContract;
+ UInt160 customContract = null!;
[TestInitialize]
public void TestSetup()
@@ -65,7 +65,7 @@ public void TestE2EHttps()
Witnesses = []
}
];
- byte[] signature = txs[0].Sign(s_walletAccount.GetKey(), settings.Network);
+ byte[] signature = txs[0].Sign(s_walletAccount.GetKey()!, settings.Network);
txs[0].Witnesses = [new Witness
{
InvocationScript = new byte[] { (byte)OpCode.PUSHDATA1, (byte)signature.Length }.Concat(signature).ToArray(),
@@ -86,7 +86,7 @@ public void TestE2EHttps()
Transactions = txs,
};
block.Header.MerkleRoot ??= MerkleTree.ComputeRoot(block.Transactions.Select(t => t.Hash).ToArray());
- signature = block.Sign(s_walletAccount.GetKey(), settings.Network);
+ signature = block.Sign(s_walletAccount.GetKey()!, settings.Network);
block.Header.Witness = new Witness
{
InvocationScript = new byte[] { (byte)OpCode.PUSHDATA1, (byte)signature.Length }.Concat(signature).ToArray(),
diff --git a/tests/Neo.Plugins.OracleService.Tests/TestBlockchain.cs b/tests/Neo.Plugins.OracleService.Tests/TestBlockchain.cs
index 3c8fcee10..133e5d7fa 100644
--- a/tests/Neo.Plugins.OracleService.Tests/TestBlockchain.cs
+++ b/tests/Neo.Plugins.OracleService.Tests/TestBlockchain.cs
@@ -34,7 +34,7 @@ public static class TestBlockchain
private class StoreProvider : IStoreProvider
{
public string Name => "TestProvider";
- public IStore GetStore(string path) => s_store;
+ public IStore GetStore(string? path) => s_store;
}
static TestBlockchain()
@@ -99,7 +99,7 @@ public static void Callback(string url, byte[] userData, int code, byte[] result
Signers = [new Signer() { Account = TestUtils.ValidatorScriptHash, Scopes = WitnessScope.CalledByEntry }],
Attributes = [],
Script = script,
- Witnesses = null,
+ Witnesses = null!,
};
var engine = ApplicationEngine.Run(tx.Script, snapshot, container: tx, settings: s_theNeoSystem.Settings, gas: 1200_0000_0000);
engine.SnapshotCache.Commit();
diff --git a/tests/Neo.Plugins.OracleService.Tests/TestUtils.cs b/tests/Neo.Plugins.OracleService.Tests/TestUtils.cs
index 0bd193d25..55f79e9cf 100644
--- a/tests/Neo.Plugins.OracleService.Tests/TestUtils.cs
+++ b/tests/Neo.Plugins.OracleService.Tests/TestUtils.cs
@@ -51,6 +51,6 @@ public static NEP6Wallet GenerateTestWallet(string password)
["extra"] = null
};
Assert.AreEqual("{\"name\":\"noname\",\"version\":\"1.0\",\"scrypt\":{\"n\":2,\"r\":1,\"p\":1},\"accounts\":[],\"extra\":null}", wallet.ToString());
- return new NEP6Wallet(null, password, settings, wallet);
+ return new NEP6Wallet(null!, password, settings, wallet);
}
}
diff --git a/tests/Neo.Plugins.RestServer.Tests/Neo.Plugins.RestServer.Tests.csproj b/tests/Neo.Plugins.RestServer.Tests/Neo.Plugins.RestServer.Tests.csproj
index 8eddcec18..e914b9c25 100644
--- a/tests/Neo.Plugins.RestServer.Tests/Neo.Plugins.RestServer.Tests.csproj
+++ b/tests/Neo.Plugins.RestServer.Tests/Neo.Plugins.RestServer.Tests.csproj
@@ -1,7 +1,6 @@
- enable
Neo.Plugins.RestServer.Tests
NU1605;
diff --git a/tests/Neo.Plugins.RpcServer.Tests/TestBlockchain.cs b/tests/Neo.Plugins.RpcServer.Tests/TestBlockchain.cs
index bd6076f6d..01ddef638 100644
--- a/tests/Neo.Plugins.RpcServer.Tests/TestBlockchain.cs
+++ b/tests/Neo.Plugins.RpcServer.Tests/TestBlockchain.cs
@@ -19,14 +19,13 @@ namespace Neo.Plugins.RpcServer.Tests;
public static class TestBlockchain
{
public static readonly NeoSystem TheNeoSystem;
- public static readonly UInt160[] DefaultExtensibleWitnessWhiteList;
private static readonly MemoryStore Store = new();
internal class StoreProvider : IStoreProvider
{
public string Name => "TestProvider";
- public IStore GetStore(string path) => Store;
+ public IStore GetStore(string? path) => Store;
}
static TestBlockchain()
diff --git a/tests/Neo.Plugins.RpcServer.Tests/TestMemoryStoreProvider.cs b/tests/Neo.Plugins.RpcServer.Tests/TestMemoryStoreProvider.cs
index 7773326dd..c726a45c9 100644
--- a/tests/Neo.Plugins.RpcServer.Tests/TestMemoryStoreProvider.cs
+++ b/tests/Neo.Plugins.RpcServer.Tests/TestMemoryStoreProvider.cs
@@ -18,5 +18,5 @@ public class TestMemoryStoreProvider(MemoryStore memoryStore) : IStoreProvider
{
public MemoryStore MemoryStore { get; init; } = memoryStore;
public string Name => nameof(MemoryStore);
- public IStore GetStore(string path) => MemoryStore;
+ public IStore GetStore(string? path) => MemoryStore;
}
diff --git a/tests/Neo.Plugins.RpcServer.Tests/TestUtils.Block.cs b/tests/Neo.Plugins.RpcServer.Tests/TestUtils.Block.cs
index 82e2b23cc..31ba21b99 100644
--- a/tests/Neo.Plugins.RpcServer.Tests/TestUtils.Block.cs
+++ b/tests/Neo.Plugins.RpcServer.Tests/TestUtils.Block.cs
@@ -70,7 +70,7 @@ public static Block CreateBlockWithValidTransactions(DataCache snapshot,
{
var block = (Block)RuntimeHelpers.GetUninitializedObject(typeof(Block));
var key = NativeContract.Ledger.CreateStorageKey(Prefix_CurrentBlock);
- var state = snapshot.TryGet(key).GetInteroperable();
+ var state = snapshot.TryGet(key)!.GetInteroperable();
var header = MakeHeader(snapshot, state.Hash);
block.Header = header;
@@ -79,7 +79,7 @@ public static Block CreateBlockWithValidTransactions(DataCache snapshot,
header.MerkleRoot = MerkleTree.ComputeRoot(block.Transactions.Select(p => p.Hash).ToArray());
var contract = Contract.CreateMultiSigContract(1, TestProtocolSettings.SoleNode.StandbyCommittee);
var sc = new ContractParametersContext(snapshot, header, TestProtocolSettings.SoleNode.Network);
- var signature = header.Sign(account.GetKey(), TestProtocolSettings.SoleNode.Network);
+ var signature = header.Sign(account.GetKey()!, TestProtocolSettings.SoleNode.Network);
sc.AddSignature(contract, TestProtocolSettings.SoleNode.StandbyCommittee[0], [.. signature]);
block.Header.Witness = sc.GetWitnesses()[0];
@@ -90,7 +90,7 @@ public static void TransactionAdd(DataCache snapshot, params TransactionState[]
{
foreach (var tx in txs)
{
- var key = NativeContract.Ledger.CreateStorageKey(Prefix_Transaction, tx.Transaction.Hash);
+ var key = NativeContract.Ledger.CreateStorageKey(Prefix_Transaction, tx.Transaction!.Hash);
snapshot.Add(key, new StorageItem(tx));
}
}
diff --git a/tests/Neo.Plugins.RpcServer.Tests/TestUtils.Transaction.cs b/tests/Neo.Plugins.RpcServer.Tests/TestUtils.Transaction.cs
index 752b75309..f6af3dddd 100644
--- a/tests/Neo.Plugins.RpcServer.Tests/TestUtils.Transaction.cs
+++ b/tests/Neo.Plugins.RpcServer.Tests/TestUtils.Transaction.cs
@@ -49,13 +49,13 @@ public static Transaction CreateValidTx(DataCache snapshot, NEP6Wallet wallet, U
Assert.IsNull(data.GetSignatures(tx.Sender));
Assert.IsTrue(wallet.Sign(data));
Assert.IsTrue(data.Completed);
- Assert.HasCount(1, data.GetSignatures(tx.Sender));
+ Assert.HasCount(1, data.GetSignatures(tx.Sender)!);
tx.Witnesses = data.GetWitnesses();
return tx;
}
- public static Transaction CreateInvalidTransaction(DataCache snapshot, NEP6Wallet wallet, WalletAccount account, InvalidTransactionType type, UInt256 conflict = null)
+ public static Transaction CreateInvalidTransaction(DataCache snapshot, NEP6Wallet wallet, WalletAccount account, InvalidTransactionType type, UInt256? conflict = null)
{
var sender = account.ScriptHash;
@@ -95,7 +95,7 @@ public static Transaction CreateInvalidTransaction(DataCache snapshot, NEP6Walle
case InvalidTransactionType.Conflicting:
// To create a conflicting transaction, we'd need another valid transaction.
// For simplicity, we'll just add a Conflicts attribute with a random hash.
- tx.Attributes = [new Conflicts { Hash = conflict }];
+ tx.Attributes = [new Conflicts { Hash = conflict! }];
break;
}
@@ -103,7 +103,7 @@ public static Transaction CreateInvalidTransaction(DataCache snapshot, NEP6Walle
Assert.IsNull(data.GetSignatures(tx.Sender));
Assert.IsTrue(wallet.Sign(data));
Assert.IsTrue(data.Completed);
- Assert.HasCount(1, data.GetSignatures(tx.Sender));
+ Assert.HasCount(1, data.GetSignatures(tx.Sender)!);
tx.Witnesses = data.GetWitnesses();
if (type == InvalidTransactionType.InvalidSignature)
{
diff --git a/tests/Neo.Plugins.RpcServer.Tests/TestUtils.cs b/tests/Neo.Plugins.RpcServer.Tests/TestUtils.cs
index 4feda554c..08c12e92a 100644
--- a/tests/Neo.Plugins.RpcServer.Tests/TestUtils.cs
+++ b/tests/Neo.Plugins.RpcServer.Tests/TestUtils.cs
@@ -36,7 +36,7 @@ public static UInt160 RandomUInt160()
return new UInt160(data);
}
- public static StorageKey CreateStorageKey(this NativeContract contract, byte prefix, ISerializableSpan key = null)
+ public static StorageKey CreateStorageKey(this NativeContract contract, byte prefix, ISerializableSpan? key = null)
{
var k = new KeyBuilder(contract.Id, prefix);
if (key != null) k = k.Add(key);
@@ -59,7 +59,7 @@ public static NEP6Wallet GenerateTestWallet(string password)
["extra"] = null
};
Assert.AreEqual("{\"name\":\"noname\",\"version\":\"1.0\",\"scrypt\":{\"n\":2,\"r\":1,\"p\":1},\"accounts\":[],\"extra\":null}", wallet.ToString());
- return new NEP6Wallet(null, password, TestProtocolSettings.Default, wallet);
+ return new NEP6Wallet(null!, password, TestProtocolSettings.Default, wallet);
}
public static void StorageItemAdd(DataCache snapshot, int id, byte[] keyValue, byte[] value)
diff --git a/tests/Neo.Plugins.RpcServer.Tests/UT_Parameters.cs b/tests/Neo.Plugins.RpcServer.Tests/UT_Parameters.cs
index ec1490d4b..b60327f82 100644
--- a/tests/Neo.Plugins.RpcServer.Tests/UT_Parameters.cs
+++ b/tests/Neo.Plugins.RpcServer.Tests/UT_Parameters.cs
@@ -9,7 +9,6 @@
// Redistribution and use in source and binary forms with or without
// modifications are permitted.
-using Neo.Extensions;
using Neo.Json;
using Neo.Network.P2P.Payloads;
using Neo.Plugins.RpcServer.Model;
@@ -401,7 +400,6 @@ public void TestAdditionalEdgeCases()
// Test conversion of empty or null values
Assert.AreEqual(0, ParameterConverter.AsParameter("", typeof(int)));
- Assert.ThrowsExactly(() => _ = ParameterConverter.AsParameter(JToken.Null, typeof(int)));
// Test conversion to non-numeric types
Assert.ThrowsExactly(() => _ = ParameterConverter.AsParameter(42, typeof(DateTime)));
diff --git a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcErrorHandling.cs b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcErrorHandling.cs
index 35749e716..5bf57526d 100644
--- a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcErrorHandling.cs
+++ b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcErrorHandling.cs
@@ -25,12 +25,12 @@ namespace Neo.Plugins.RpcServer.Tests;
[TestClass]
public class UT_RpcErrorHandling
{
- private MemoryStore _memoryStore;
- private TestMemoryStoreProvider _memoryStoreProvider;
- private NeoSystem _neoSystem;
- private RpcServer _rpcServer;
- private NEP6Wallet _wallet;
- private WalletAccount _walletAccount;
+ private MemoryStore _memoryStore = null!;
+ private TestMemoryStoreProvider _memoryStoreProvider = null!;
+ private NeoSystem _neoSystem = null!;
+ private RpcServer _rpcServer = null!;
+ private NEP6Wallet _wallet = null!;
+ private WalletAccount _walletAccount = null!;
[TestInitialize]
public void TestSetup()
@@ -94,13 +94,13 @@ public async Task TestDuplicateTransactionErrorCodeInJsonResponse()
// Verify that the error code in the JSON response is -501 (Inventory already exists)
Assert.IsNotNull(response["error"]);
Console.WriteLine($"Response: {response}");
- Console.WriteLine($"Error code: {response["error"]["code"].AsNumber()}");
+ Console.WriteLine($"Error code: {response["error"]!["code"]!.AsNumber()}");
Console.WriteLine($"Expected code: {RpcError.AlreadyExists.Code}");
- Assert.AreEqual(RpcError.AlreadyExists.Code, response["error"]["code"].AsNumber());
+ Assert.AreEqual(RpcError.AlreadyExists.Code, response["error"]!["code"]!.AsNumber());
// The message might include additional data and stack trace in DEBUG mode,
// so just check that it contains the expected message
- var actualMessage = response["error"]["message"].AsString();
+ var actualMessage = response["error"]!["message"]!.AsString();
Assert.Contains(RpcError.AlreadyExists.Message, actualMessage,
$"Expected message to contain '{RpcError.AlreadyExists.Message}' but got '{actualMessage}'");
}
@@ -128,18 +128,18 @@ public async Task TestDuplicateTransactionErrorCodeWithDynamicInvoke()
};
// Process the request directly through the RPC server
- var response = await _rpcServer.ProcessRequestAsync(context, request);
+ var response = (await _rpcServer.ProcessRequestAsync(context, request))!;
// Verify that the error code in the JSON response is -501 (Inventory already exists)
Assert.IsNotNull(response["error"]);
Console.WriteLine($"Response: {response}");
- Console.WriteLine($"Error code: {response["error"]["code"].AsNumber()}");
+ Console.WriteLine($"Error code: {response["error"]!["code"]!.AsNumber()}");
Console.WriteLine($"Expected code: {RpcError.AlreadyExists.Code}");
- Assert.AreEqual(RpcError.AlreadyExists.Code, response["error"]["code"].AsNumber());
+ Assert.AreEqual(RpcError.AlreadyExists.Code, response["error"]!["code"]!.AsNumber());
// The message might include additional data and stack trace in DEBUG mode,
// so just check that it contains the expected message
- var actualMessage = response["error"]["message"].AsString();
+ var actualMessage = response["error"]!["message"]!.AsString();
Assert.Contains(RpcError.AlreadyExists.Message, actualMessage,
$"Expected message to contain '{RpcError.AlreadyExists.Message}' but got '{actualMessage}'");
}
@@ -293,18 +293,18 @@ public async Task TestDynamicInvokeExceptionUnwrapping()
};
// Process the request - this should use the standard RPC processing
- var response = await _rpcServer.ProcessRequestAsync(context, request);
+ var response = (await _rpcServer.ProcessRequestAsync(context, request))!;
// Verify that the error code in the JSON response is -501 (Inventory already exists)
Assert.IsNotNull(response["error"]);
Console.WriteLine($"Response: {response}");
- Console.WriteLine($"Error code: {response["error"]["code"].AsNumber()}");
+ Console.WriteLine($"Error code: {response["error"]!["code"]!.AsNumber()}");
Console.WriteLine($"Expected code: {RpcError.AlreadyExists.Code}");
- Assert.AreEqual(RpcError.AlreadyExists.Code, response["error"]["code"].AsNumber());
+ Assert.AreEqual(RpcError.AlreadyExists.Code, response["error"]!["code"]!.AsNumber());
// The message might include additional data and stack trace in DEBUG mode,
// so just check that it contains the expected message
- var actualMessage = response["error"]["message"].AsString();
+ var actualMessage = response["error"]!["message"]!.AsString();
Assert.Contains(RpcError.AlreadyExists.Message, actualMessage,
$"Expected message to contain '{RpcError.AlreadyExists.Message}' but got '{actualMessage}'");
}
@@ -317,8 +317,8 @@ private async Task SimulatePostRequest(string requestBody)
context.Request.Body = new MemoryStream(Encoding.UTF8.GetBytes(requestBody));
context.Request.ContentType = "application/json";
- JToken requestJson = null;
- JToken responseJson = null;
+ JToken? requestJson = null;
+ JToken responseJson;
try
{
requestJson = JToken.Parse(requestBody);
@@ -334,7 +334,7 @@ private async Task SimulatePostRequest(string requestBody)
try
{
// Extract the method and parameters
- var method = singleRequest["method"].AsString();
+ var method = singleRequest["method"]!.AsString();
var parameters = singleRequest["params"] as JArray;
// For sendrawtransaction, directly call the method to ensure proper error handling
@@ -342,7 +342,7 @@ private async Task SimulatePostRequest(string requestBody)
{
try
{
- var result = _rpcServer.SendRawTransaction(parameters[0].AsString());
+ var result = _rpcServer.SendRawTransaction(parameters[0]!.AsString());
// Create a successful response
responseJson = new JObject()
{
@@ -365,13 +365,13 @@ private async Task SimulatePostRequest(string requestBody)
else
{
// For other methods, use the standard processing
- responseJson = await _rpcServer.ProcessRequestAsync(context, singleRequest);
+ responseJson = (await _rpcServer.ProcessRequestAsync(context, singleRequest))!;
}
}
catch (Exception)
{
// Fallback to standard processing
- responseJson = await _rpcServer.ProcessRequestAsync(context, singleRequest);
+ responseJson = (await _rpcServer.ProcessRequestAsync(context, singleRequest))!;
}
}
else if (requestJson is JArray batchRequest)
diff --git a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Blockchain.cs b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Blockchain.cs
index a9b1c5a25..3aec57b9d 100644
--- a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Blockchain.cs
+++ b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Blockchain.cs
@@ -91,7 +91,7 @@ public void TestGetBlockByIndex()
public void TestGetBlock_Genesis()
{
var snapshot = _neoSystem.GetSnapshotCache();
- var genesisBlock = NativeContract.Ledger.GetBlock(snapshot, 0);
+ var genesisBlock = NativeContract.Ledger.GetBlock(snapshot, 0)!;
// Test non-verbose
var resultNonVerbose = _rpcServer.GetBlock(new BlockHashOrIndex(0), false);
@@ -103,13 +103,13 @@ public void TestGetBlock_Genesis()
var resultVerbose = _rpcServer.GetBlock(new BlockHashOrIndex(0), true);
var expectedJson = genesisBlock.ToJson(TestProtocolSettings.Default);
expectedJson["confirmations"] = NativeContract.Ledger.CurrentIndex(snapshot) - genesisBlock.Index + 1;
- Assert.AreEqual(expectedJson["hash"].AsString(), resultVerbose["hash"].AsString());
- Assert.AreEqual(expectedJson["size"].AsNumber(), resultVerbose["size"].AsNumber());
- Assert.AreEqual(expectedJson["version"].AsNumber(), resultVerbose["version"].AsNumber());
- Assert.AreEqual(expectedJson["merkleroot"].AsString(), resultVerbose["merkleroot"].AsString());
- Assert.AreEqual(expectedJson["confirmations"].AsNumber(), resultVerbose["confirmations"].AsNumber());
+ Assert.AreEqual(expectedJson["hash"]!.AsString(), resultVerbose["hash"]!.AsString());
+ Assert.AreEqual(expectedJson["size"]!.AsNumber(), resultVerbose["size"]!.AsNumber());
+ Assert.AreEqual(expectedJson["version"]!.AsNumber(), resultVerbose["version"]!.AsNumber());
+ Assert.AreEqual(expectedJson["merkleroot"]!.AsString(), resultVerbose["merkleroot"]!.AsString());
+ Assert.AreEqual(expectedJson["confirmations"]!.AsNumber(), resultVerbose["confirmations"]!.AsNumber());
// Genesis block should have 0 transactions
- Assert.IsEmpty((JArray)resultVerbose["tx"]);
+ Assert.IsEmpty((JArray)resultVerbose["tx"]!);
}
[TestMethod]
@@ -146,10 +146,10 @@ public void TestGetBlock_NoTransactions()
var resultVerbose = _rpcServer.GetBlock(new BlockHashOrIndex(block.Index), true);
var expectedJson = block.ToJson(TestProtocolSettings.Default);
expectedJson["confirmations"] = NativeContract.Ledger.CurrentIndex(snapshot) - block.Index + 1;
- Assert.AreEqual(expectedJson["hash"].AsString(), resultVerbose["hash"].AsString());
- Assert.IsEmpty((JArray)resultVerbose["tx"]);
+ Assert.AreEqual(expectedJson["hash"]!.AsString(), resultVerbose["hash"]!.AsString());
+ Assert.IsEmpty((JArray)resultVerbose["tx"]!);
- var ex = Assert.ThrowsExactly(() => _rpcServer.GetBlock(null, true));
+ var ex = Assert.ThrowsExactly(() => _rpcServer.GetBlock(null!, true));
Assert.AreEqual(RpcError.InvalidParams.Code, ex.HResult);
}
@@ -200,7 +200,7 @@ public void TestGetBlockHeader()
var header2 = headerArr.AsSerializable();
Assert.AreEqual(block.Header.ToJson(_neoSystem.Settings).ToString(), header2.ToJson(_neoSystem.Settings).ToString());
- var ex = Assert.ThrowsExactly(() => _rpcServer.GetBlockHeader(null, true));
+ var ex = Assert.ThrowsExactly(() => _rpcServer.GetBlockHeader(null!, true));
Assert.AreEqual(RpcError.InvalidParams.Code, ex.HResult);
}
@@ -230,7 +230,7 @@ public void TestGetContractState()
var ex2 = Assert.ThrowsExactly(() => _ = _rpcServer.GetContractState(new(contractState.Id)));
Assert.AreEqual(RpcError.UnknownContract.Message, ex2.Message);
- var ex3 = Assert.ThrowsExactly(() => _ = _rpcServer.GetContractState(null));
+ var ex3 = Assert.ThrowsExactly(() => _ = _rpcServer.GetContractState(null!));
Assert.AreEqual(RpcError.InvalidParams.Code, ex3.HResult);
}
@@ -242,9 +242,9 @@ public void TestGetContractState_Native_CaseInsensitive()
var resultUpper = _rpcServer.GetContractState(new ContractNameOrHashOrId("GASTOKEN"));
var resultMixed = _rpcServer.GetContractState(new ContractNameOrHashOrId("GasToken"));
- Assert.AreEqual(gasTokenHash.ToString(), ((JObject)resultLower)["hash"].AsString());
- Assert.AreEqual(gasTokenHash.ToString(), ((JObject)resultUpper)["hash"].AsString());
- Assert.AreEqual(gasTokenHash.ToString(), ((JObject)resultMixed)["hash"].AsString());
+ Assert.AreEqual(gasTokenHash.ToString(), ((JObject)resultLower)["hash"]!.AsString());
+ Assert.AreEqual(gasTokenHash.ToString(), ((JObject)resultUpper)["hash"]!.AsString());
+ Assert.AreEqual(gasTokenHash.ToString(), ((JObject)resultMixed)["hash"]!.AsString());
}
[TestMethod]
@@ -270,10 +270,10 @@ public void TestGetRawMemPool()
_neoSystem.MemPool.TryAdd(tx, snapshot);
var result = _rpcServer.GetRawMemPool();
- Assert.IsTrue(((JArray)result).Any(p => p.AsString() == tx.Hash.ToString()));
+ Assert.IsTrue(((JArray)result).Any(p => p!.AsString() == tx.Hash.ToString()));
result = _rpcServer.GetRawMemPool(true);
- Assert.IsTrue(((JArray)result["verified"]).Any(p => p.AsString() == tx.Hash.ToString()));
+ Assert.IsTrue(((JArray)result["verified"]!).Any(p => p!.AsString() == tx.Hash.ToString()));
}
[TestMethod]
@@ -290,8 +290,8 @@ public void TestGetRawMemPool_Empty()
// Test with unverified
result = _rpcServer.GetRawMemPool(true);
Assert.IsInstanceOfType(result, typeof(JObject));
- Assert.IsEmpty((JArray)((JObject)result)["verified"]);
- Assert.IsEmpty((JArray)((JObject)result)["unverified"]);
+ Assert.IsEmpty((JArray)((JObject)result)["verified"]!);
+ Assert.IsEmpty((JArray)((JObject)result)["unverified"]!);
Assert.IsTrue(((JObject)result).ContainsProperty("height"));
}
@@ -320,8 +320,8 @@ public void TestGetRawMemPool_MixedVerifiedUnverified()
// Call the RPC method
var result = _rpcServer.GetRawMemPool(true);
Assert.IsInstanceOfType(result, typeof(JObject));
- var actualVerifiedHashes = ((JArray)((JObject)result)["verified"]).Select(p => p.AsString()).ToHashSet();
- var actualUnverifiedHashes = ((JArray)((JObject)result)["unverified"]).Select(p => p.AsString()).ToHashSet();
+ var actualVerifiedHashes = ((JArray)((JObject)result)["verified"]!).Select(p => p!.AsString()).ToHashSet();
+ var actualUnverifiedHashes = ((JArray)((JObject)result)["unverified"]!).Select(p => p!.AsString()).ToHashSet();
// Assert counts and contents match the pool's state
Assert.HasCount(expectedVerifiedCount, actualVerifiedHashes);
@@ -348,7 +348,7 @@ public void TestGetRawTransaction()
var tx2 = Convert.FromBase64String(result.AsString()).AsSerializable();
Assert.AreEqual(tx.ToJson(_neoSystem.Settings).ToString(), tx2.ToJson(_neoSystem.Settings).ToString());
- var ex = Assert.ThrowsExactly(() => _ = _rpcServer.GetRawTransaction(null, true));
+ var ex = Assert.ThrowsExactly(() => _ = _rpcServer.GetRawTransaction(null!, true));
Assert.AreEqual(RpcError.InvalidParams.Code, ex.HResult);
}
@@ -378,9 +378,9 @@ public void TestGetRawTransaction_Confirmed()
Assert.IsInstanceOfType(resultVerbose, typeof(JObject));
Assert.AreEqual(expectedJson.ToString(), resultVerbose.ToString()); // Compare full JSON for simplicity here
- Assert.AreEqual(block.Hash.ToString(), ((JObject)resultVerbose)["blockhash"].AsString());
- Assert.AreEqual(expectedJson["confirmations"].AsNumber(), ((JObject)resultVerbose)["confirmations"].AsNumber());
- Assert.AreEqual(block.Header.Timestamp, ((JObject)resultVerbose)["blocktime"].AsNumber());
+ Assert.AreEqual(block.Hash.ToString(), ((JObject)resultVerbose)["blockhash"]!.AsString());
+ Assert.AreEqual(expectedJson["confirmations"]!.AsNumber(), ((JObject)resultVerbose)["confirmations"]!.AsNumber());
+ Assert.AreEqual(block.Header.Timestamp, ((JObject)resultVerbose)["blocktime"]!.AsNumber());
}
[TestMethod]
@@ -397,10 +397,10 @@ public void TestGetStorage()
var result = _rpcServer.GetStorage(new(contractState.Hash), Convert.ToBase64String(key));
Assert.AreEqual(Convert.ToBase64String(value), result.AsString());
- var ex = Assert.ThrowsExactly(() => _ = _rpcServer.GetStorage(null, Convert.ToBase64String(key)));
+ var ex = Assert.ThrowsExactly(() => _ = _rpcServer.GetStorage(null!, Convert.ToBase64String(key)));
Assert.AreEqual(RpcError.InvalidParams.Code, ex.HResult);
- var ex2 = Assert.ThrowsExactly(() => _ = _rpcServer.GetStorage(new(contractState.Hash), null));
+ var ex2 = Assert.ThrowsExactly(() => _ = _rpcServer.GetStorage(new(contractState.Hash), null!));
Assert.AreEqual(RpcError.InvalidParams.Code, ex2.HResult);
}
@@ -440,8 +440,8 @@ public void TestFindStorage()
.ForEach(i => TestUtils.StorageItemAdd(snapshot, contractState.Id, [0x01, (byte)i], [0x02]));
snapshot.Commit();
var result4 = _rpcServer.FindStorage(new(contractState.Hash), Convert.ToBase64String(new byte[] { 0x01 }), 0);
- Assert.AreEqual(RpcServersSettings.Default.FindStoragePageSize, result4["next"].AsNumber());
- Assert.IsTrue(result4["truncated"].AsBoolean());
+ Assert.AreEqual(RpcServersSettings.Default.FindStoragePageSize, result4["next"]!.AsNumber());
+ Assert.IsTrue(result4["truncated"]!.AsBoolean());
}
[TestMethod]
@@ -457,20 +457,20 @@ public void TestStorage_NativeContractName()
var result = _rpcServer.GetStorage(new("GasToken"), Convert.ToBase64String(key));
Assert.AreEqual(Convert.ToBase64String(value), result.AsString());
- var ex = Assert.ThrowsExactly(() => _ = _rpcServer.GetStorage(null, Convert.ToBase64String(key)));
+ var ex = Assert.ThrowsExactly(() => _ = _rpcServer.GetStorage(null!, Convert.ToBase64String(key)));
Assert.AreEqual(RpcError.InvalidParams.Code, ex.HResult);
- ex = Assert.ThrowsExactly(() => _ = _rpcServer.GetStorage(new("GasToken"), null));
+ ex = Assert.ThrowsExactly(() => _ = _rpcServer.GetStorage(new("GasToken"), null!));
Assert.AreEqual(RpcError.InvalidParams.Code, ex.HResult);
// FindStorage
var result2 = _rpcServer.FindStorage(new("GasToken"), Convert.ToBase64String(key), 0);
- Assert.AreEqual(Convert.ToBase64String(value), result2["results"][0]["value"].AsString());
+ Assert.AreEqual(Convert.ToBase64String(value), result2["results"]![0]!["value"]!.AsString());
- ex = Assert.ThrowsExactly(() => _ = _rpcServer.FindStorage(null, Convert.ToBase64String(key), 0));
+ ex = Assert.ThrowsExactly(() => _ = _rpcServer.FindStorage(null!, Convert.ToBase64String(key), 0));
Assert.AreEqual(RpcError.InvalidParams.Code, ex.HResult);
- ex = Assert.ThrowsExactly(() => _ = _rpcServer.FindStorage(new("GasToken"), null, 0));
+ ex = Assert.ThrowsExactly(() => _ = _rpcServer.FindStorage(new("GasToken"), null!, 0));
Assert.AreEqual(RpcError.InvalidParams.Code, ex.HResult);
}
@@ -493,16 +493,16 @@ public void TestFindStorage_Pagination()
// Get first page
var resultPage1 = _rpcServer.FindStorage(new(contractState.Hash), Convert.ToBase64String(prefix), 0);
- Assert.IsTrue(resultPage1["truncated"].AsBoolean());
- Assert.AreEqual(RpcServersSettings.Default.FindStoragePageSize, ((JArray)resultPage1["results"]).Count);
- int nextIndex = (int)resultPage1["next"].AsNumber();
+ Assert.IsTrue(resultPage1["truncated"]!.AsBoolean());
+ Assert.AreEqual(RpcServersSettings.Default.FindStoragePageSize, ((JArray)resultPage1["results"]!).Count);
+ int nextIndex = (int)resultPage1["next"]!.AsNumber();
Assert.AreEqual(RpcServersSettings.Default.FindStoragePageSize, nextIndex);
// Get second page
var resultPage2 = _rpcServer.FindStorage(new(contractState.Hash), Convert.ToBase64String(prefix), nextIndex);
- Assert.IsFalse(resultPage2["truncated"].AsBoolean());
- Assert.HasCount(5, (JArray)resultPage2["results"]);
- Assert.AreEqual(totalItems, (int)resultPage2["next"].AsNumber()); // Next should be total count
+ Assert.IsFalse(resultPage2["truncated"]!.AsBoolean());
+ Assert.HasCount(5, (JArray)resultPage2["results"]!);
+ Assert.AreEqual(totalItems, (int)resultPage2["next"]!.AsNumber()); // Next should be total count
}
[TestMethod]
@@ -524,23 +524,23 @@ public void TestFindStorage_Pagination_End()
// Get all items (assuming page size is larger than 3)
var resultPage1 = _rpcServer.FindStorage(new(contractState.Hash), Convert.ToBase64String(prefix), 0);
- Assert.IsFalse(resultPage1["truncated"].AsBoolean());
- Assert.AreEqual(totalItems, ((JArray)resultPage1["results"]).Count);
- int nextIndex = (int)resultPage1["next"].AsNumber();
+ Assert.IsFalse(resultPage1["truncated"]!.AsBoolean());
+ Assert.AreEqual(totalItems, ((JArray)resultPage1["results"]!).Count);
+ int nextIndex = (int)resultPage1["next"]!.AsNumber();
Assert.AreEqual(totalItems, nextIndex);
// Try to get next page (should be empty)
var resultPage2 = _rpcServer.FindStorage(new(contractState.Hash), Convert.ToBase64String(prefix), nextIndex);
- Assert.IsFalse(resultPage2["truncated"].AsBoolean());
- Assert.IsEmpty((JArray)resultPage2["results"]);
- Assert.AreEqual(nextIndex, (int)resultPage2["next"].AsNumber()); // Next index should remain the same
+ Assert.IsFalse(resultPage2["truncated"]!.AsBoolean());
+ Assert.IsEmpty((JArray)resultPage2["results"]!);
+ Assert.AreEqual(nextIndex, (int)resultPage2["next"]!.AsNumber()); // Next index should remain the same
var ex = Assert.ThrowsExactly(
- () => _ = _rpcServer.FindStorage(null, Convert.ToBase64String(prefix), 0));
+ () => _ = _rpcServer.FindStorage(null!, Convert.ToBase64String(prefix), 0));
Assert.AreEqual(RpcError.InvalidParams.Code, ex.HResult);
var ex2 = Assert.ThrowsExactly(
- () => _ = _rpcServer.FindStorage(new(contractState.Hash), null, 0));
+ () => _ = _rpcServer.FindStorage(new(contractState.Hash), null!, 0));
Assert.AreEqual(RpcError.InvalidParams.Code, ex2.HResult);
}
@@ -636,7 +636,7 @@ public void TestGetNativeContracts()
var snapshot = _neoSystem.GetSnapshotCache();
var result = _rpcServer.GetNativeContracts();
var states = NativeContract.Contracts
- .Select(p => NativeContract.ContractManagement.GetContract(snapshot, p.Hash).ToJson());
+ .Select(p => NativeContract.ContractManagement.GetContract(snapshot, p.Hash)!.ToJson());
var contracts = new JArray(states);
Assert.AreEqual(contracts.ToString(), result.ToString());
}
@@ -794,7 +794,7 @@ public void TestGetTransactionHeightUnknownTransaction()
Assert.AreEqual(RpcError.UnknownTransaction.Code, ex.HResult);
}
- var ex2 = Assert.ThrowsExactly(() => _ = _rpcServer.GetTransactionHeight(null));
+ var ex2 = Assert.ThrowsExactly(() => _ = _rpcServer.GetTransactionHeight(null!));
Assert.AreEqual(RpcError.InvalidParams.Code, ex2.HResult);
}
diff --git a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Node.cs b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Node.cs
index 7b4bc999b..a1e7d317d 100644
--- a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Node.cs
+++ b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Node.cs
@@ -45,7 +45,7 @@ public void TestGetPeers()
Assert.IsInstanceOfType(result, typeof(JObject));
var json = (JObject)result;
Assert.IsTrue(json.ContainsProperty("unconnected"));
- Assert.HasCount(3, json["unconnected"] as JArray);
+ Assert.HasCount(3, (JArray)json["unconnected"]!);
Assert.IsTrue(json.ContainsProperty("bad"));
Assert.IsTrue(json.ContainsProperty("connected"));
}
@@ -64,7 +64,7 @@ public void TestGetPeers_NoUnconnected()
Assert.IsInstanceOfType(result, typeof(JObject));
var json = (JObject)result;
Assert.IsTrue(json.ContainsProperty("unconnected"));
- Assert.IsEmpty(json["unconnected"] as JArray);
+ Assert.IsEmpty((JArray)json["unconnected"]!);
Assert.IsTrue(json.ContainsProperty("bad"));
Assert.IsTrue(json.ContainsProperty("connected"));
}
@@ -85,7 +85,7 @@ public void TestGetPeers_NoConnected()
Assert.IsTrue(json.ContainsProperty("unconnected"));
Assert.IsTrue(json.ContainsProperty("bad"));
Assert.IsTrue(json.ContainsProperty("connected"));
- Assert.IsEmpty(json["connected"] as JArray); // Directly check connected count
+ Assert.IsEmpty((JArray)json["connected"]!); // Directly check connected count
}
[TestMethod]
@@ -100,7 +100,7 @@ public void TestGetVersion()
Assert.IsTrue(json.ContainsProperty("useragent"));
Assert.IsTrue(json.ContainsProperty("protocol"));
- var protocol = (JObject)json["protocol"];
+ var protocol = (JObject)json["protocol"]!;
Assert.IsTrue(protocol.ContainsProperty("addressversion"));
Assert.IsTrue(protocol.ContainsProperty("network"));
Assert.IsTrue(protocol.ContainsProperty("validatorscount"));
@@ -121,21 +121,21 @@ public void TestGetVersion_HardforksStructure()
var json = (JObject)result;
Assert.IsTrue(json.ContainsProperty("protocol"));
- var protocol = (JObject)json["protocol"];
+ var protocol = (JObject)json["protocol"]!;
Assert.IsTrue(protocol.ContainsProperty("hardforks"));
- var hardforks = (JArray)protocol["hardforks"];
+ var hardforks = (JArray)protocol["hardforks"]!;
// Check if there are any hardforks defined in settings
if (hardforks.Count > 0)
{
Assert.IsTrue(hardforks.All(hf => hf is JObject)); // Each item should be an object
- foreach (JObject hfJson in hardforks)
+ foreach (JObject hfJson in hardforks.Cast())
{
Assert.IsTrue(hfJson.ContainsProperty("name"));
Assert.IsTrue(hfJson.ContainsProperty("blockheight"));
Assert.IsInstanceOfType(hfJson["name"], typeof(JString));
Assert.IsInstanceOfType(hfJson["blockheight"], typeof(JNumber));
- Assert.DoesNotStartWith("HF_", hfJson["name"].AsString()); // Check if prefix was stripped
+ Assert.DoesNotStartWith("HF_", hfJson["name"]!.AsString()); // Check if prefix was stripped
}
}
// If no hardforks are defined, the array should be empty
@@ -374,7 +374,7 @@ public void TestSubmitBlock_InvalidIndex()
[TestMethod]
public void TestSendRawTransaction_NullInput()
{
- var exception = Assert.ThrowsExactly(() => _ = _rpcServer.SendRawTransaction((string)null),
+ var exception = Assert.ThrowsExactly(() => _ = _rpcServer.SendRawTransaction(null!),
"Should throw RpcException for null input");
Assert.AreEqual(RpcError.InvalidParams.Code, exception.HResult);
}
@@ -390,7 +390,7 @@ public void TestSendRawTransaction_EmptyInput()
[TestMethod]
public void TestSubmitBlock_NullInput()
{
- var exception = Assert.ThrowsExactly(() => _ = _rpcServer.SubmitBlock((string)null),
+ var exception = Assert.ThrowsExactly(() => _ = _rpcServer.SubmitBlock(null!),
"Should throw RpcException for null input");
Assert.AreEqual(RpcError.InvalidParams.Code, exception.HResult);
}
diff --git a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.SmartContract.cs b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.SmartContract.cs
index fd053138b..0d720ea77 100644
--- a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.SmartContract.cs
+++ b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.SmartContract.cs
@@ -73,13 +73,13 @@ public void TestInvokeFunction()
Assert.AreEqual(resp["script"], NeoTotalSupplyScript);
Assert.IsTrue(resp.ContainsProperty("gasconsumed"));
Assert.IsTrue(resp.ContainsProperty("diagnostics"));
- Assert.AreEqual(resp["diagnostics"]["invokedcontracts"]["call"][0]["hash"], s_neoHash);
- Assert.IsEmpty((JArray)resp["diagnostics"]["storagechanges"]);
+ Assert.AreEqual(resp["diagnostics"]!["invokedcontracts"]!["call"]![0]!["hash"], s_neoHash);
+ Assert.IsEmpty((JArray)resp["diagnostics"]!["storagechanges"]!);
Assert.AreEqual(nameof(VMState.HALT), resp["state"]);
Assert.IsNull(resp["exception"]);
- Assert.IsEmpty((JArray)resp["notifications"]);
- Assert.AreEqual(nameof(Integer), resp["stack"][0]["type"]);
- Assert.AreEqual("100000000", resp["stack"][0]["value"]);
+ Assert.IsEmpty((JArray)resp["notifications"]!);
+ Assert.AreEqual(nameof(Integer), resp["stack"]![0]!["type"]);
+ Assert.AreEqual("100000000", resp["stack"]![0]!["value"]);
Assert.IsTrue(resp.ContainsProperty("tx"));
resp = (JObject)_rpcServer.InvokeFunction(s_neoHash, "symbol");
@@ -88,9 +88,9 @@ public void TestInvokeFunction()
Assert.IsTrue(resp.ContainsProperty("gasconsumed"));
Assert.AreEqual(nameof(VMState.HALT), resp["state"]);
Assert.IsNull(resp["exception"]);
- Assert.IsEmpty((JArray)resp["notifications"]);
- Assert.AreEqual(nameof(ByteString), resp["stack"][0]["type"]);
- Assert.AreEqual(resp["stack"][0]["value"], Convert.ToBase64String(Encoding.UTF8.GetBytes("NEO")));
+ Assert.IsEmpty((JArray)resp["notifications"]!);
+ Assert.AreEqual(nameof(ByteString), resp["stack"]![0]!["type"]);
+ Assert.AreEqual(resp["stack"]![0]!["value"], Convert.ToBase64String(Encoding.UTF8.GetBytes("NEO")));
// This call triggers not only NEO but also unclaimed GAS
resp = (JObject)_rpcServer.InvokeFunction(
@@ -109,19 +109,19 @@ public void TestInvokeFunction()
Assert.AreEqual(resp["script"], NeoTransferScript);
Assert.IsTrue(resp.ContainsProperty("gasconsumed"));
Assert.IsTrue(resp.ContainsProperty("diagnostics"));
- Assert.AreEqual(resp["diagnostics"]["invokedcontracts"]["call"][0]["hash"], s_neoHash);
- Assert.HasCount(4, (JArray)resp["diagnostics"]["storagechanges"]);
+ Assert.AreEqual(resp["diagnostics"]!["invokedcontracts"]!["call"]![0]!["hash"], s_neoHash);
+ Assert.HasCount(4, (JArray)resp["diagnostics"]!["storagechanges"]!);
Assert.AreEqual(nameof(VMState.HALT), resp["state"]);
Assert.AreEqual(resp["exception"], $"The smart contract or address {MultisigScriptHash} ({MultisigAddress}) is not found. " +
$"If this is your wallet address and you want to sign a transaction with it, make sure you have opened this wallet.");
- JArray notifications = (JArray)resp["notifications"];
+ JArray notifications = (JArray)resp["notifications"]!;
Assert.HasCount(2, notifications);
- Assert.AreEqual("Transfer", notifications[0]["eventname"].AsString());
- Assert.AreEqual(notifications[0]["contract"].AsString(), s_neoHash);
- Assert.AreEqual("1", notifications[0]["state"]["value"][2]["value"]);
- Assert.AreEqual("Transfer", notifications[1]["eventname"].AsString());
- Assert.AreEqual(notifications[1]["contract"].AsString(), s_gasHash);
- Assert.AreEqual("50000000", notifications[1]["state"]["value"][2]["value"]);
+ Assert.AreEqual("Transfer", notifications[0]!["eventname"]!.AsString());
+ Assert.AreEqual(notifications[0]!["contract"]!.AsString(), s_neoHash);
+ Assert.AreEqual("1", notifications[0]!["state"]!["value"]![2]!["value"]);
+ Assert.AreEqual("Transfer", notifications[1]!["eventname"]!.AsString());
+ Assert.AreEqual(notifications[1]!["contract"]!.AsString(), s_gasHash);
+ Assert.AreEqual("50000000", notifications[1]!["state"]!["value"]![2]!["value"]);
_rpcServer.wallet = null;
}
@@ -140,12 +140,12 @@ public void TestInvokeFunctionInvalid()
["params"] = new JArray("0", "totalSupply", new JArray([]), validatorSigner, true),
};
- var resp = _rpcServer.ProcessRequestAsync(context, json).GetAwaiter().GetResult();
+ var resp = _rpcServer.ProcessRequestAsync(context, json).GetAwaiter().GetResult()!;
Console.WriteLine(resp);
Assert.AreEqual(3, resp.Count);
Assert.IsNotNull(resp["error"]);
- Assert.AreEqual(-32602, resp["error"]["code"]);
+ Assert.AreEqual(-32602, resp["error"]!["code"]);
_rpcServer.wallet = null;
}
@@ -161,17 +161,17 @@ public void TestInvokeScript()
Assert.AreEqual(7, resp.Count);
Assert.IsTrue(resp.ContainsProperty("gasconsumed"));
Assert.IsTrue(resp.ContainsProperty("diagnostics"));
- Assert.AreEqual(resp["diagnostics"]["invokedcontracts"]["call"][0]["hash"], s_neoHash);
+ Assert.AreEqual(resp["diagnostics"]!["invokedcontracts"]!["call"]![0]!["hash"], s_neoHash);
Assert.AreEqual(nameof(VMState.HALT), resp["state"]);
Assert.IsNull(resp["exception"]);
- Assert.IsEmpty((JArray)resp["notifications"]);
- Assert.AreEqual(nameof(Integer), resp["stack"][0]["type"]);
- Assert.AreEqual("100000000", resp["stack"][0]["value"]);
+ Assert.IsEmpty((JArray)resp["notifications"]!);
+ Assert.AreEqual(nameof(Integer), resp["stack"]![0]!["type"]);
+ Assert.AreEqual("100000000", resp["stack"]![0]!["value"]);
resp = (JObject)_rpcServer.InvokeScript(Convert.FromBase64String(NeoTransferScript));
Assert.AreEqual(6, resp.Count);
- Assert.AreEqual(nameof(Boolean), resp["stack"][0]["type"]);
- Assert.IsFalse(resp["stack"][0]["value"].GetBoolean());
+ Assert.AreEqual(nameof(Boolean), resp["stack"]![0]!["type"]);
+ Assert.IsFalse(resp["stack"]![0]!["value"]!.GetBoolean());
}
[TestMethod]
@@ -181,9 +181,9 @@ public void TestInvokeFunction_FaultState()
var functionName = "nonExistentMethod";
var resp = (JObject)_rpcServer.InvokeFunction(s_neoHash, functionName, []);
- Assert.AreEqual(nameof(VMState.FAULT), resp["state"].AsString());
- Assert.IsNotNull(resp["exception"].AsString());
- Assert.Contains("doesn't exist in the contract", resp["exception"].AsString()); // Fix based on test output
+ Assert.AreEqual(nameof(VMState.FAULT), resp["state"]!.AsString());
+ Assert.IsNotNull(resp["exception"]!.AsString());
+ Assert.Contains("doesn't exist in the contract", resp["exception"]!.AsString()); // Fix based on test output
}
[TestMethod]
@@ -198,9 +198,9 @@ public void TestInvokeScript_FaultState()
}
var resp = (JObject)_rpcServer.InvokeScript(abortScript);
- Assert.AreEqual(nameof(VMState.FAULT), resp["state"].AsString());
- Assert.IsNotNull(resp["exception"].AsString());
- Assert.Contains("ABORT is executed", resp["exception"].AsString()); // Check for specific ABORT message
+ Assert.AreEqual(nameof(VMState.FAULT), resp["state"]!.AsString());
+ Assert.IsNotNull(resp["exception"]!.AsString());
+ Assert.Contains("ABORT is executed", resp["exception"]!.AsString()); // Check for specific ABORT message
}
[TestMethod]
@@ -222,10 +222,10 @@ public void TestInvokeScript_GasLimitExceeded()
var tempRpcServer = new RpcServer(_neoSystem, lowGasSettings);
var resp = (JObject)tempRpcServer.InvokeScript(loopScript);
- Assert.AreEqual(nameof(VMState.FAULT), resp["state"].AsString());
- Assert.IsNotNull(resp["exception"].AsString());
- Assert.Contains("Insufficient GAS", resp["exception"].AsString());
- Assert.IsGreaterThan(lowGasSettings.MaxGasInvoke, long.Parse(resp["gasconsumed"].AsString()));
+ Assert.AreEqual(nameof(VMState.FAULT), resp["state"]!.AsString());
+ Assert.IsNotNull(resp["exception"]!.AsString());
+ Assert.Contains("Insufficient GAS", resp["exception"]!.AsString());
+ Assert.IsGreaterThan(lowGasSettings.MaxGasInvoke, long.Parse(resp["gasconsumed"]!.AsString()));
}
[TestMethod]
@@ -342,32 +342,32 @@ public void TestInvokeScript_WithDiagnostics()
);
Assert.IsTrue(resp.ContainsProperty("diagnostics"));
- var diagnostics = (JObject)resp["diagnostics"];
+ var diagnostics = (JObject)resp["diagnostics"]!;
// Verify Invoked Contracts structure
Assert.IsTrue(diagnostics.ContainsProperty("invokedcontracts"));
- var invokedContracts = (JObject)diagnostics["invokedcontracts"];
+ var invokedContracts = (JObject)diagnostics["invokedcontracts"]!;
// Don't assert on root hash for raw script invoke, structure might differ
Assert.IsTrue(invokedContracts.ContainsProperty("call")); // Nested calls
- var calls = (JArray)invokedContracts["call"];
+ var calls = (JArray)invokedContracts["call"]!;
Assert.IsGreaterThanOrEqualTo(1, calls.Count); // Should call at least GAS contract for claim
// Also check for NEO call, as it's part of the transfer
- Assert.IsTrue(calls.Any(c => c["hash"].AsString() == s_neoHash)); // Fix based on test output
+ Assert.IsTrue(calls.Any(c => c!["hash"]!.AsString() == s_neoHash)); // Fix based on test output
// Verify Storage Changes
Assert.IsTrue(diagnostics.ContainsProperty("storagechanges"));
- var storageChanges = (JArray)diagnostics["storagechanges"];
+ var storageChanges = (JArray)diagnostics["storagechanges"]!;
Assert.IsGreaterThan(0, storageChanges.Count, "Expected storage changes for transfer");
// Check structure of a storage change item
- var firstChange = (JObject)storageChanges[0];
+ var firstChange = (JObject)storageChanges[0]!;
Assert.IsTrue(firstChange.ContainsProperty("state"));
Assert.IsTrue(firstChange.ContainsProperty("key"));
Assert.IsTrue(firstChange.ContainsProperty("value"));
- Assert.IsTrue(new[] { "Added", "Changed", "Deleted" }.Contains(firstChange["state"].AsString()));
+ Assert.IsTrue(new[] { "Added", "Changed", "Deleted" }.Contains(firstChange["state"]!.AsString()));
}
[TestMethod]
@@ -375,8 +375,8 @@ public void TestTraverseIterator()
{
// GetAllCandidates that should return 0 candidates
var resp = (JObject)_rpcServer.InvokeFunction(s_neoHash, "getAllCandidates", [], validatorSigner.AsParameter(), true);
- var sessionId = resp["session"];
- var iteratorId = resp["stack"][0]["id"];
+ var sessionId = resp["session"]!;
+ var iteratorId = resp["stack"]![0]!["id"]!;
var respArray = (JArray)_rpcServer.TraverseIterator(sessionId.AsParameter(), iteratorId.AsParameter(), 100);
Assert.IsEmpty(respArray);
@@ -403,8 +403,8 @@ public void TestTraverseIterator()
ValidUntilBlock = NativeContract.Ledger.CurrentIndex(snapshot) + _neoSystem.Settings.MaxValidUntilBlockIncrement,
Signers = [new Signer() { Account = ValidatorScriptHash, Scopes = WitnessScope.CalledByEntry }],
Attributes = Array.Empty(),
- Script = Convert.FromBase64String(resp["script"].AsString()),
- Witnesses = null,
+ Script = Convert.FromBase64String(resp["script"]!.AsString()),
+ Witnesses = null!,
};
var engine = ApplicationEngine.Run(tx.Script, snapshot, container: tx, settings: _neoSystem.Settings, gas: 1200_0000_0000);
@@ -412,18 +412,18 @@ public void TestTraverseIterator()
// GetAllCandidates that should return 1 candidate
resp = (JObject)_rpcServer.InvokeFunction(s_neoHash, "getAllCandidates", [], validatorSigner.AsParameter(), true);
- sessionId = resp["session"];
- iteratorId = resp["stack"][0]["id"];
+ sessionId = resp["session"]!;
+ iteratorId = resp["stack"]![0]!["id"]!;
respArray = (JArray)_rpcServer.TraverseIterator(sessionId.AsParameter(), iteratorId.AsParameter(), 100);
Assert.HasCount(1, respArray);
- Assert.AreEqual(nameof(Struct), respArray[0]["type"]);
+ Assert.AreEqual(nameof(Struct), respArray[0]!["type"]);
- var value = (JArray)respArray[0]["value"];
+ var value = (JArray)respArray[0]!["value"]!;
Assert.HasCount(2, value);
- Assert.AreEqual(nameof(ByteString), value[0]["type"]);
- Assert.AreEqual(value[0]["value"], Convert.ToBase64String(TestProtocolSettings.SoleNode.StandbyCommittee[0].ToArray()));
- Assert.AreEqual(nameof(Integer), value[1]["type"]);
- Assert.AreEqual("0", value[1]["value"]);
+ Assert.AreEqual(nameof(ByteString), value[0]!["type"]);
+ Assert.AreEqual(value[0]!["value"], Convert.ToBase64String(TestProtocolSettings.SoleNode.StandbyCommittee[0].ToArray()));
+ Assert.AreEqual(nameof(Integer), value[1]!["type"]);
+ Assert.AreEqual("0", value[1]!["value"]);
// No result when traversed again
respArray = (JArray)_rpcServer.TraverseIterator(sessionId.AsParameter(), iteratorId.AsParameter(), 100);
@@ -431,8 +431,8 @@ public void TestTraverseIterator()
// GetAllCandidates again
resp = (JObject)_rpcServer.InvokeFunction(s_neoHash, "getAllCandidates", [], validatorSigner.AsParameter(), true);
- sessionId = resp["session"];
- iteratorId = resp["stack"][0]["id"];
+ sessionId = resp["session"]!;
+ iteratorId = resp["stack"]![0]!["id"]!;
// Insufficient result count limit
respArray = (JArray)_rpcServer.TraverseIterator(sessionId.AsParameter(), iteratorId.AsParameter(), 0);
@@ -449,8 +449,8 @@ public void TestTraverseIterator()
// build another session that did not expire
resp = (JObject)_rpcServer.InvokeFunction(s_neoHash, "getAllCandidates", [], validatorSigner.AsParameter(), true);
- var notExpiredSessionId = resp["session"];
- var notExpiredIteratorId = resp["stack"][0]["id"];
+ var notExpiredSessionId = resp["session"]!;
+ var notExpiredIteratorId = resp["stack"]![0]!["id"]!;
_rpcServer.OnTimer(new object());
Assert.ThrowsExactly(
@@ -460,8 +460,8 @@ public void TestTraverseIterator()
// Mocking disposal
resp = (JObject)_rpcServer.InvokeFunction(s_neoHash, "getAllCandidates", [], validatorSigner.AsParameter(), true);
- sessionId = resp["session"];
- iteratorId = resp["stack"][0]["id"];
+ sessionId = resp["session"]!;
+ iteratorId = resp["stack"]![0]!["id"]!;
_rpcServer.Dispose_SmartContract();
Assert.ThrowsExactly(
@@ -493,8 +493,8 @@ public void TestTraverseIterator_CountLimitExceeded()
{
// Need an active session and iterator first
var resp = (JObject)_rpcServer.InvokeFunction(s_neoHash, "getAllCandidates", [], validatorSigner.AsParameter(), true);
- var sessionId = resp["session"];
- var iteratorId = resp["stack"][0]["id"];
+ var sessionId = resp["session"]!;
+ var iteratorId = resp["stack"]![0]!["id"]!;
// Request more items than allowed
int requestedCount = _rpcServerSettings.MaxIteratorResultItems + 1;
diff --git a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Utilities.cs b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Utilities.cs
index c5e177058..36f8047cc 100644
--- a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Utilities.cs
+++ b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Utilities.cs
@@ -25,7 +25,7 @@ public void TestListPlugins()
resp = (JArray)_rpcServer.ListPlugins();
Assert.HasCount(2, resp);
foreach (var p in resp)
- Assert.AreEqual(nameof(RpcServer), p["name"]);
+ Assert.AreEqual(nameof(RpcServer), p!["name"]);
}
[TestMethod]
@@ -34,12 +34,12 @@ public void TestValidateAddress()
var validAddr = new JString("NM7Aky765FG8NhhwtxjXRx7jEL1cnw7PBP");
var resp = (JObject)_rpcServer.ValidateAddress(validAddr.AsString());
Assert.AreEqual(resp["address"], validAddr);
- Assert.IsTrue(resp["isvalid"].GetBoolean());
+ Assert.IsTrue(resp["isvalid"]!.GetBoolean());
var invalidAddr = "ANeo2toNeo3MigrationAddressxwPB2Hz";
resp = (JObject)_rpcServer.ValidateAddress(invalidAddr);
Assert.AreEqual(resp["address"], invalidAddr);
- Assert.IsFalse(resp["isvalid"].GetBoolean());
+ Assert.IsFalse(resp["isvalid"]!.GetBoolean());
}
[TestMethod]
@@ -48,7 +48,7 @@ public void TestValidateAddress_EmptyString()
var emptyAddr = "";
var resp = (JObject)_rpcServer.ValidateAddress(emptyAddr);
Assert.AreEqual(resp["address"], emptyAddr);
- Assert.IsFalse(resp["isvalid"].GetBoolean());
+ Assert.IsFalse(resp["isvalid"]!.GetBoolean());
}
[TestMethod]
@@ -59,7 +59,7 @@ public void TestValidateAddress_InvalidChecksum()
var invalidChecksumAddr = "NM7Aky765FG8NhhwtxjXRx7jEL1cnw7PBO";
var resp = (JObject)_rpcServer.ValidateAddress(invalidChecksumAddr);
Assert.AreEqual(resp["address"], invalidChecksumAddr);
- Assert.IsFalse(resp["isvalid"].GetBoolean());
+ Assert.IsFalse(resp["isvalid"]!.GetBoolean());
}
[TestMethod]
@@ -69,12 +69,12 @@ public void TestValidateAddress_WrongLength()
var shortAddr = "NM7Aky765FG8NhhwtxjXRx7jEL1cnw7P";
var resp = (JObject)_rpcServer.ValidateAddress(shortAddr);
Assert.AreEqual(resp["address"], shortAddr);
- Assert.IsFalse(resp["isvalid"].GetBoolean());
+ Assert.IsFalse(resp["isvalid"]!.GetBoolean());
// Address too long
var longAddr = "NM7Aky765FG8NhhwtxjXRx7jEL1cnw7PBPPP";
resp = (JObject)_rpcServer.ValidateAddress(longAddr);
Assert.AreEqual(resp["address"], longAddr);
- Assert.IsFalse(resp["isvalid"].GetBoolean());
+ Assert.IsFalse(resp["isvalid"]!.GetBoolean());
}
}
diff --git a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Wallet.cs b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Wallet.cs
index a5f3b27d8..5bfce38e4 100644
--- a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Wallet.cs
+++ b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Wallet.cs
@@ -99,10 +99,10 @@ public void TestOpenInvalidWallet()
public void TestDumpPrivKey()
{
TestUtilOpenWallet();
- var account = _rpcServer.wallet.GetAccounts().FirstOrDefault();
+ var account = _rpcServer.wallet!.GetAccounts().FirstOrDefault();
Assert.IsNotNull(account);
- var privKey = account.GetKey().Export();
+ var privKey = account.GetKey()!.Export();
var address = account.Address;
var result = _rpcServer.DumpPrivKey(new JString(address).ToAddress(ProtocolSettings.Default.AddressVersion));
Assert.AreEqual(privKey, result.AsString());
@@ -140,7 +140,7 @@ public void TestGetNewAddress()
TestUtilOpenWallet();
var result = _rpcServer.GetNewAddress();
Assert.IsInstanceOfType(result, typeof(JString));
- Assert.IsTrue(_rpcServer.wallet.GetAccounts().Any(a => a.Address == result.AsString()));
+ Assert.IsTrue(_rpcServer.wallet!.GetAccounts().Any(a => a.Address == result.AsString()));
TestUtilCloseWallet();
}
@@ -195,7 +195,7 @@ public void TestGetWalletUnclaimedGas()
public void TestImportPrivKey()
{
TestUtilOpenWallet();
- var privKey = _walletAccount.GetKey().Export();
+ var privKey = _walletAccount.GetKey()!.Export();
var result = _rpcServer.ImportPrivKey(privKey);
Assert.IsInstanceOfType(result, typeof(JObject));
@@ -210,7 +210,7 @@ public void TestImportPrivKey()
[TestMethod]
public void TestImportPrivKeyNoWallet()
{
- var privKey = _walletAccount.GetKey().Export();
+ var privKey = _walletAccount.GetKey()!.Export();
var exception = Assert.ThrowsExactly(() => _ = _rpcServer.ImportPrivKey(privKey));
Assert.AreEqual(exception.HResult, RpcError.NoOpenedWallet.Code);
}
@@ -232,17 +232,17 @@ public void TestImportPrivKey_KeyAlreadyExists()
TestUtilOpenWallet();
// Get a key already in the default test wallet
- var existingAccount = _rpcServer.wallet.GetAccounts().First(a => a.HasKey);
- var existingWif = existingAccount.GetKey().Export();
+ var existingAccount = _rpcServer.wallet!.GetAccounts().First(a => a.HasKey);
+ var existingWif = existingAccount.GetKey()!.Export();
// Import the existing key
var result = (JObject)_rpcServer.ImportPrivKey(existingWif);
// Verify the returned account details match the existing one
- Assert.AreEqual(existingAccount.Address, result["address"].AsString());
- Assert.AreEqual(existingAccount.HasKey, result["haskey"].AsBoolean());
+ Assert.AreEqual(existingAccount.Address, result["address"]!.AsString());
+ Assert.AreEqual(existingAccount.HasKey, result["haskey"]!.AsBoolean());
Assert.AreEqual(existingAccount.Label, result["label"]?.AsString());
- Assert.AreEqual(existingAccount.WatchOnly, result["watchonly"].AsBoolean());
+ Assert.AreEqual(existingAccount.WatchOnly, result["watchonly"]!.AsBoolean());
// Ensure no duplicate account was created (check count remains same)
var initialCount = _rpcServer.wallet.GetAccounts().Count();
@@ -321,10 +321,10 @@ public void TestSendFrom()
Assert.AreEqual(12, resp.Count);
Assert.AreEqual(resp["sender"], ValidatorAddress);
- var signers = (JArray)resp["signers"];
+ var signers = (JArray)resp["signers"]!;
Assert.HasCount(1, signers);
- Assert.AreEqual(signers[0]["account"], ValidatorScriptHash.ToString());
- Assert.AreEqual(nameof(WitnessScope.CalledByEntry), signers[0]["scopes"]);
+ Assert.AreEqual(signers[0]!["account"], ValidatorScriptHash.ToString());
+ Assert.AreEqual(nameof(WitnessScope.CalledByEntry), signers[0]!["scopes"]);
_rpcServer.wallet = null;
}
@@ -346,10 +346,10 @@ public void TestSendMany()
Assert.AreEqual(12, resp.Count);
Assert.AreEqual(resp["sender"], ValidatorAddress);
- var signers = (JArray)resp["signers"];
+ var signers = (JArray)resp["signers"]!;
Assert.HasCount(1, signers);
- Assert.AreEqual(signers[0]["account"], ValidatorScriptHash.ToString());
- Assert.AreEqual(nameof(WitnessScope.CalledByEntry), signers[0]["scopes"]);
+ Assert.AreEqual(signers[0]!["account"], ValidatorScriptHash.ToString());
+ Assert.AreEqual(nameof(WitnessScope.CalledByEntry), signers[0]!["scopes"]);
_rpcServer.wallet = null;
}
@@ -369,10 +369,10 @@ public void TestSendToAddress()
Assert.AreEqual(12, resp.Count);
Assert.AreEqual(resp["sender"], ValidatorAddress);
- var signers = (JArray)resp["signers"];
+ var signers = (JArray)resp["signers"]!;
Assert.HasCount(1, signers);
- Assert.AreEqual(signers[0]["account"], ValidatorScriptHash.ToString());
- Assert.AreEqual(nameof(WitnessScope.CalledByEntry), signers[0]["scopes"]);
+ Assert.AreEqual(signers[0]!["account"], ValidatorScriptHash.ToString());
+ Assert.AreEqual(nameof(WitnessScope.CalledByEntry), signers[0]!["scopes"]);
_rpcServer.wallet = null;
}
@@ -528,7 +528,7 @@ public void TestGetWalletUnclaimedGas_WhenWalletNotOpen()
public void TestImportPrivKey_WhenWalletNotOpen()
{
_rpcServer.wallet = null;
- var privKey = _walletAccount.GetKey().Export();
+ var privKey = _walletAccount.GetKey()!.Export();
var exception = Assert.ThrowsExactly(
() => _ = _rpcServer.ImportPrivKey(privKey),
"Should throw RpcException for no opened wallet");
@@ -604,17 +604,17 @@ public void TestCancelTransaction()
"1"
);
- var txHash = resp["hash"];
+ var txHash = resp["hash"]!;
resp = (JObject)_rpcServer.CancelTransaction(
txHash.AsParameter(), new JArray(ValidatorAddress).AsParameter(), "1");
Assert.AreEqual(12, resp.Count);
Assert.AreEqual(resp["sender"], ValidatorAddress);
- var signers = (JArray)resp["signers"];
+ var signers = (JArray)resp["signers"]!;
Assert.HasCount(1, signers);
- Assert.AreEqual(signers[0]["account"], ValidatorScriptHash.ToString());
- Assert.AreEqual(nameof(WitnessScope.None), signers[0]["scopes"]);
- Assert.AreEqual(nameof(TransactionAttributeType.Conflicts), resp["attributes"][0]["type"]);
+ Assert.AreEqual(signers[0]!["account"], ValidatorScriptHash.ToString());
+ Assert.AreEqual(nameof(WitnessScope.None), signers[0]!["scopes"]);
+ Assert.AreEqual(nameof(TransactionAttributeType.Conflicts), resp["attributes"]![0]!["type"]);
_rpcServer.wallet = null;
}
@@ -683,7 +683,7 @@ public void TestInvokeContractVerify()
);
Assert.AreEqual(nameof(VMState.HALT), deployResp["state"]);
- var deployedScriptHash = new UInt160(Convert.FromBase64String(deployResp["notifications"][0]["state"]["value"][0]["value"].AsString()));
+ var deployedScriptHash = new UInt160(Convert.FromBase64String(deployResp["notifications"]![0]!["state"]!["value"]![0]!["value"]!.AsString()));
var snapshot = _neoSystem.GetSnapshotCache();
var tx = new Transaction
{
@@ -691,8 +691,8 @@ public void TestInvokeContractVerify()
ValidUntilBlock = NativeContract.Ledger.CurrentIndex(snapshot) + _neoSystem.Settings.MaxValidUntilBlockIncrement,
Signers = [new Signer() { Account = ValidatorScriptHash, Scopes = WitnessScope.CalledByEntry }],
Attributes = Array.Empty(),
- Script = Convert.FromBase64String(deployResp["script"].AsString()),
- Witnesses = null,
+ Script = Convert.FromBase64String(deployResp["script"]!.AsString()),
+ Witnesses = null!,
};
var engine = ApplicationEngine.Run(tx.Script, snapshot, container: tx, settings: _neoSystem.Settings, gas: 1200_0000_0000);
@@ -701,12 +701,12 @@ public void TestInvokeContractVerify()
// invoke verify without signer; should return false
var resp = (JObject)_rpcServer.InvokeContractVerify(deployedScriptHash);
Assert.AreEqual(nameof(VMState.HALT), resp["state"]);
- Assert.IsFalse(resp["stack"][0]["value"].AsBoolean());
+ Assert.IsFalse(resp["stack"]![0]!["value"]!.AsBoolean());
// invoke verify with signer; should return true
resp = (JObject)_rpcServer.InvokeContractVerify(deployedScriptHash, [], validatorSigner.AsParameter());
Assert.AreEqual(nameof(VMState.HALT), resp["state"]);
- Assert.IsTrue(resp["stack"][0]["value"].AsBoolean());
+ Assert.IsTrue(resp["stack"]![0]!["value"]!.AsBoolean());
// invoke verify with wrong input value; should FAULT
resp = (JObject)_rpcServer.InvokeContractVerify(
@@ -718,7 +718,7 @@ public void TestInvokeContractVerify()
);
Assert.AreEqual(nameof(VMState.FAULT), resp["state"]);
Assert.IsNotNull(resp["exception"]);
- Assert.Contains("hashOrPubkey", resp["exception"].AsString());
+ Assert.Contains("hashOrPubkey", resp["exception"]!.AsString());
// invoke verify with 1 param and signer; should return true
resp = (JObject)_rpcServer.InvokeContractVerify(
@@ -729,7 +729,7 @@ public void TestInvokeContractVerify()
validatorSigner.AsParameter()
);
Assert.AreEqual(nameof(VMState.HALT), resp["state"]);
- Assert.IsTrue(resp["stack"][0]["value"].AsBoolean());
+ Assert.IsTrue(resp["stack"]![0]!["value"]!.AsBoolean());
// invoke verify with 2 param (which does not exist); should throw Exception
Assert.ThrowsExactly(
diff --git a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.cs b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.cs
index b79f9a775..e5a567fd3 100644
--- a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.cs
+++ b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.cs
@@ -26,13 +26,13 @@ namespace Neo.Plugins.RpcServer.Tests;
[TestClass]
public partial class UT_RpcServer
{
- private NeoSystem _neoSystem;
- private RpcServersSettings _rpcServerSettings;
- private RpcServer _rpcServer;
- private TestMemoryStoreProvider _memoryStoreProvider;
- private MemoryStore _memoryStore;
+ private NeoSystem _neoSystem = null!;
+ private RpcServersSettings _rpcServerSettings = null!;
+ private RpcServer _rpcServer = null!;
+ private TestMemoryStoreProvider _memoryStoreProvider = null!;
+ private MemoryStore _memoryStore = null!;
private readonly NEP6Wallet _wallet = TestUtils.GenerateTestWallet("123");
- private WalletAccount _walletAccount;
+ private WalletAccount _walletAccount = null!;
[TestInitialize]
public void TestSetup()
@@ -131,8 +131,8 @@ private async Task SimulatePostRequest(string requestBody)
context.Request.Body = new MemoryStream(Encoding.UTF8.GetBytes(requestBody));
context.Request.ContentType = "application/json";
- JToken requestJson = null;
- JToken responseJson = null;
+ JToken? requestJson = null;
+ JToken responseJson;
try
{
requestJson = JToken.Parse(requestBody);
@@ -145,7 +145,7 @@ private async Task SimulatePostRequest(string requestBody)
if (requestJson is JObject singleRequest)
{
- responseJson = await _rpcServer.ProcessRequestAsync(context, singleRequest);
+ responseJson = (await _rpcServer.ProcessRequestAsync(context, singleRequest))!;
}
else if (requestJson is JArray batchRequest)
{
@@ -185,7 +185,7 @@ public async Task TestProcessRequest_MalformedJsonPostBody()
var response = await SimulatePostRequest(malformedJson);
Assert.IsNotNull(response["error"]);
- Assert.AreEqual(RpcError.BadRequest.Code, response["error"]["code"].AsNumber());
+ Assert.AreEqual(RpcError.BadRequest.Code, response["error"]!["code"]!.AsNumber());
}
[TestMethod]
@@ -195,7 +195,7 @@ public async Task TestProcessRequest_EmptyBatch()
var response = await SimulatePostRequest(emptyBatchJson);
Assert.IsNotNull(response["error"]);
- Assert.AreEqual(RpcError.InvalidRequest.Code, response["error"]["code"].AsNumber());
+ Assert.AreEqual(RpcError.InvalidRequest.Code, response["error"]!["code"]!.AsNumber());
}
[TestMethod]
@@ -217,24 +217,24 @@ public async Task TestProcessRequest_MixedBatch()
Assert.HasCount(4, batchResults);
// Check response 1 (valid getblockcount)
- Assert.IsNull(batchResults[0]["error"]);
- Assert.IsNotNull(batchResults[0]["result"]);
- Assert.AreEqual(1, batchResults[0]["id"].AsNumber());
+ Assert.IsNull(batchResults[0]!["error"]);
+ Assert.IsNotNull(batchResults[0]!["result"]);
+ Assert.AreEqual(1, batchResults[0]!["id"]!.AsNumber());
// Check response 2 (invalid method)
- Assert.IsNotNull(batchResults[1]["error"]);
- Assert.AreEqual(RpcError.MethodNotFound.Code, batchResults[1]["error"]["code"].AsNumber());
- Assert.AreEqual(2, batchResults[1]["id"].AsNumber());
+ Assert.IsNotNull(batchResults[1]!["error"]);
+ Assert.AreEqual(RpcError.MethodNotFound.Code, batchResults[1]!["error"]!["code"]!.AsNumber());
+ Assert.AreEqual(2, batchResults[1]!["id"]!.AsNumber());
// Check response 3 (invalid params for getblock)
- Assert.IsNotNull(batchResults[2]["error"]);
- Assert.AreEqual(RpcError.InvalidParams.Code, batchResults[2]["error"]["code"].AsNumber());
- Assert.AreEqual(3, batchResults[2]["id"].AsNumber());
+ Assert.IsNotNull(batchResults[2]!["error"]);
+ Assert.AreEqual(RpcError.InvalidParams.Code, batchResults[2]!["error"]!["code"]!.AsNumber());
+ Assert.AreEqual(3, batchResults[2]!["id"]!.AsNumber());
// Check response 4 (valid getversion)
- Assert.IsNull(batchResults[3]["error"]);
- Assert.IsNotNull(batchResults[3]["result"]);
- Assert.AreEqual(4, batchResults[3]["id"].AsNumber());
+ Assert.IsNull(batchResults[3]!["error"]);
+ Assert.IsNotNull(batchResults[3]!["result"]);
+ Assert.AreEqual(4, batchResults[3]!["id"]!.AsNumber());
}
private class MockRpcMethods
@@ -289,65 +289,65 @@ public async Task TestRegisterMethods()
var output = new StreamReader(responseBody).ReadToEnd();
// Parse the JSON response and check the result
- var responseJson = JToken.Parse(output);
+ var responseJson = JToken.Parse(output)!;
Assert.IsNotNull(responseJson["result"]);
- Assert.AreEqual("string test", responseJson["result"].AsString());
+ Assert.AreEqual("string test", responseJson["result"]!.AsString());
Assert.AreEqual(200, context.Response.StatusCode);
}
[TestMethod]
public void TestNullableParameter()
{
- var method = typeof(MockRpcMethods).GetMethod("GetMockMethod");
+ var method = typeof(MockRpcMethods).GetMethod("GetMockMethod")!;
var parameter = RpcServer.AsRpcParameter(method.GetParameters()[0]);
Assert.IsTrue(parameter.Required);
Assert.AreEqual(typeof(string), parameter.Type);
Assert.AreEqual("info", parameter.Name);
- method = typeof(MockRpcMethods).GetMethod("NullableMethod");
+ method = typeof(MockRpcMethods).GetMethod("NullableMethod")!;
parameter = RpcServer.AsRpcParameter(method.GetParameters()[0]);
Assert.IsFalse(parameter.Required);
Assert.AreEqual(typeof(string), parameter.Type);
Assert.AreEqual("info", parameter.Name);
- method = typeof(MockRpcMethods).GetMethod("NullContextMethod");
+ method = typeof(MockRpcMethods).GetMethod("NullContextMethod")!;
parameter = RpcServer.AsRpcParameter(method.GetParameters()[0]);
Assert.IsFalse(parameter.Required);
Assert.AreEqual(typeof(string), parameter.Type);
Assert.AreEqual("info", parameter.Name);
- method = typeof(MockRpcMethods).GetMethod("OptionalMethod");
+ method = typeof(MockRpcMethods).GetMethod("OptionalMethod")!;
parameter = RpcServer.AsRpcParameter(method.GetParameters()[0]);
Assert.IsFalse(parameter.Required);
Assert.AreEqual(typeof(string), parameter.Type);
Assert.AreEqual("info", parameter.Name);
Assert.AreEqual("default", parameter.DefaultValue);
- method = typeof(MockRpcMethods).GetMethod("IntMethod");
+ method = typeof(MockRpcMethods).GetMethod("IntMethod")!;
parameter = RpcServer.AsRpcParameter(method.GetParameters()[0]);
Assert.IsTrue(parameter.Required);
Assert.AreEqual(typeof(int), parameter.Type);
Assert.AreEqual("info", parameter.Name);
- method = typeof(MockRpcMethods).GetMethod("IntNullableMethod");
+ method = typeof(MockRpcMethods).GetMethod("IntNullableMethod")!;
parameter = RpcServer.AsRpcParameter(method.GetParameters()[0]);
Assert.IsFalse(parameter.Required);
Assert.AreEqual(typeof(int?), parameter.Type);
Assert.AreEqual("info", parameter.Name);
- method = typeof(MockRpcMethods).GetMethod("NotNullMethod");
+ method = typeof(MockRpcMethods).GetMethod("NotNullMethod")!;
parameter = RpcServer.AsRpcParameter(method.GetParameters()[0]);
Assert.IsTrue(parameter.Required);
Assert.AreEqual(typeof(string), parameter.Type);
Assert.AreEqual("info", parameter.Name);
- method = typeof(MockRpcMethods).GetMethod("AllowNullMethod");
+ method = typeof(MockRpcMethods).GetMethod("AllowNullMethod")!;
parameter = RpcServer.AsRpcParameter(method.GetParameters()[0]);
Assert.IsFalse(parameter.Required);
Assert.AreEqual(typeof(string), parameter.Type);
Assert.AreEqual("info", parameter.Name);
- method = typeof(MockRpcMethods).GetMethod("DisallowNullMethod");
+ method = typeof(MockRpcMethods).GetMethod("DisallowNullMethod")!;
parameter = RpcServer.AsRpcParameter(method.GetParameters()[0]);
Assert.IsTrue(parameter.Required);
Assert.AreEqual(typeof(string), parameter.Type);
diff --git a/tests/Neo.Plugins.SQLiteWallet.Tests/Neo.Plugins.SQLiteWallet.Tests.csproj b/tests/Neo.Plugins.SQLiteWallet.Tests/Neo.Plugins.SQLiteWallet.Tests.csproj
index 47da73925..567df669d 100644
--- a/tests/Neo.Plugins.SQLiteWallet.Tests/Neo.Plugins.SQLiteWallet.Tests.csproj
+++ b/tests/Neo.Plugins.SQLiteWallet.Tests/Neo.Plugins.SQLiteWallet.Tests.csproj
@@ -1,9 +1,5 @@
-
- enable
-
-
diff --git a/tests/Neo.Plugins.SignClient.Tests/Neo.Plugins.SignClient.Tests.csproj b/tests/Neo.Plugins.SignClient.Tests/Neo.Plugins.SignClient.Tests.csproj
index 902a893fe..01a70f33c 100644
--- a/tests/Neo.Plugins.SignClient.Tests/Neo.Plugins.SignClient.Tests.csproj
+++ b/tests/Neo.Plugins.SignClient.Tests/Neo.Plugins.SignClient.Tests.csproj
@@ -1,9 +1,5 @@
-
- enable
-
-
diff --git a/tests/Neo.Plugins.StateService.Tests/Neo.Plugins.StateService.Tests.csproj b/tests/Neo.Plugins.StateService.Tests/Neo.Plugins.StateService.Tests.csproj
index addc3b7ce..0b644b74d 100644
--- a/tests/Neo.Plugins.StateService.Tests/Neo.Plugins.StateService.Tests.csproj
+++ b/tests/Neo.Plugins.StateService.Tests/Neo.Plugins.StateService.Tests.csproj
@@ -1,9 +1,5 @@
-
- enable
-
-
diff --git a/tests/Neo.Plugins.Storage.Tests/StoreTest.cs b/tests/Neo.Plugins.Storage.Tests/StoreTest.cs
index 916e23ae1..f49de0889 100644
--- a/tests/Neo.Plugins.Storage.Tests/StoreTest.cs
+++ b/tests/Neo.Plugins.Storage.Tests/StoreTest.cs
@@ -21,8 +21,8 @@ public class StoreTest
{
private const string Path_leveldb = "Data_LevelDB_UT";
private const string Path_rocksdb = "Data_RocksDB_UT";
- private static LevelDBStore s_levelDbStore;
- private static RocksDBStore s_rocksDBStore;
+ private static LevelDBStore s_levelDbStore = null!;
+ private static RocksDBStore s_rocksDBStore = null!;
[AssemblyInitialize]
public static void OnStart(TestContext testContext)