diff --git a/Lib9c b/Lib9c index a5dd5bdf9..570818fda 160000 --- a/Lib9c +++ b/Lib9c @@ -1 +1 @@ -Subproject commit a5dd5bdf928d819b063a0c193fb9608e9f84f6e9 +Subproject commit 570818fda746f6f43bb55af8789b006b24edee7f diff --git a/Libplanet.Extensions.ForkableActionEvaluator.Tests/ForkableActionEvaluatorTest.cs b/Libplanet.Extensions.ForkableActionEvaluator.Tests/ForkableActionEvaluatorTest.cs index fe68994d0..0885937ae 100644 --- a/Libplanet.Extensions.ForkableActionEvaluator.Tests/ForkableActionEvaluatorTest.cs +++ b/Libplanet.Extensions.ForkableActionEvaluator.Tests/ForkableActionEvaluatorTest.cs @@ -8,6 +8,7 @@ using Libplanet.Crypto; using Libplanet.Types.Tx; using ArgumentOutOfRangeException = System.ArgumentOutOfRangeException; +using Libplanet.Types.Evidence; namespace Libplanet.Extensions.ForkableActionEvaluator.Tests; @@ -135,4 +136,6 @@ public MockBlock(long blockIndex) public BlockCommit? LastCommit { get; } public IReadOnlyList Transactions { get; } public HashDigest PreEvaluationHash { get; } + public IReadOnlyList Evidence { get; } + public HashDigest? EvidenceHash { get; } } diff --git a/Libplanet.Extensions.ForkableActionEvaluator/Libplanet.Extensions.ForkableActionEvaluator.csproj b/Libplanet.Extensions.ForkableActionEvaluator/Libplanet.Extensions.ForkableActionEvaluator.csproj index e08d0e851..db1c4f310 100644 --- a/Libplanet.Extensions.ForkableActionEvaluator/Libplanet.Extensions.ForkableActionEvaluator.csproj +++ b/Libplanet.Extensions.ForkableActionEvaluator/Libplanet.Extensions.ForkableActionEvaluator.csproj @@ -7,7 +7,7 @@ - + diff --git a/Libplanet.Extensions.PluggedActionEvaluator/Libplanet.Extensions.PluggedActionEvaluator.csproj b/Libplanet.Extensions.PluggedActionEvaluator/Libplanet.Extensions.PluggedActionEvaluator.csproj index 78e3b7dcd..a0db16957 100644 --- a/Libplanet.Extensions.PluggedActionEvaluator/Libplanet.Extensions.PluggedActionEvaluator.csproj +++ b/Libplanet.Extensions.PluggedActionEvaluator/Libplanet.Extensions.PluggedActionEvaluator.csproj @@ -7,7 +7,7 @@ - + diff --git a/Libplanet.Headless/Libplanet.Headless.csproj b/Libplanet.Headless/Libplanet.Headless.csproj index b8e446219..5a3a2b286 100644 --- a/Libplanet.Headless/Libplanet.Headless.csproj +++ b/Libplanet.Headless/Libplanet.Headless.csproj @@ -19,9 +19,9 @@ - - - + + + diff --git a/NineChronicles.Headless.Executable.Tests/Commands/ChainCommandTest.cs b/NineChronicles.Headless.Executable.Tests/Commands/ChainCommandTest.cs index 252930e5e..5b9d5af5e 100644 --- a/NineChronicles.Headless.Executable.Tests/Commands/ChainCommandTest.cs +++ b/NineChronicles.Headless.Executable.Tests/Commands/ChainCommandTest.cs @@ -439,6 +439,7 @@ private Block MineGenesisBlock() block.Hash, DateTimeOffset.UtcNow, validator.PublicKey, + null, VoteFlag.PreCommit).Sign(validator))) : null; } diff --git a/NineChronicles.Headless.Executable.Tests/Commands/GenesisHelper.cs b/NineChronicles.Headless.Executable.Tests/Commands/GenesisHelper.cs index 97be5dc34..26b8984ca 100644 --- a/NineChronicles.Headless.Executable.Tests/Commands/GenesisHelper.cs +++ b/NineChronicles.Headless.Executable.Tests/Commands/GenesisHelper.cs @@ -109,7 +109,7 @@ public static void AppendEmptyBlock(BlockChain blockChain) block.Hash, new[] { - new VoteMetadata(block.Index, 0, block.Hash, block.Timestamp, ValidatorKey.PublicKey, VoteFlag.PreCommit).Sign(ValidatorKey), + new VoteMetadata(block.Index, 0, block.Hash, block.Timestamp, ValidatorKey.PublicKey, null, VoteFlag.PreCommit).Sign(ValidatorKey), }.ToImmutableArray()); blockChain.Append(block, blockCommit); } diff --git a/NineChronicles.Headless.Executable.Tests/NineChronicles.Headless.Executable.Tests.csproj b/NineChronicles.Headless.Executable.Tests/NineChronicles.Headless.Executable.Tests.csproj index 07a7df259..601591534 100644 --- a/NineChronicles.Headless.Executable.Tests/NineChronicles.Headless.Executable.Tests.csproj +++ b/NineChronicles.Headless.Executable.Tests/NineChronicles.Headless.Executable.Tests.csproj @@ -16,12 +16,12 @@ - + - + diff --git a/NineChronicles.Headless.Executable.sln b/NineChronicles.Headless.Executable.sln index ef9053828..533888054 100644 --- a/NineChronicles.Headless.Executable.sln +++ b/NineChronicles.Headless.Executable.sln @@ -7,7 +7,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Headless", "Libpl EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Headless.Tests", "Libplanet.Headless.Tests\Libplanet.Headless.Tests.csproj", "{0B82AB6A-32B1-4F76-B965-B56B052057D4}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Analyzers", "Lib9c\.Libplanet\Libplanet.Analyzers\Libplanet.Analyzers.csproj", "{AACC51F4-D38A-4094-BF50-BDC981848517}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Analyzers", "Lib9c\.Libplanet\tools\Libplanet.Analyzers\Libplanet.Analyzers.csproj", "{AACC51F4-D38A-4094-BF50-BDC981848517}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NineChronicles.Headless", "NineChronicles.Headless\NineChronicles.Headless.csproj", "{AE6FE611-BB8E-4E85-8623-34608EC868CD}" EndProject @@ -19,17 +19,17 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lib9c", "Lib9c\Lib9c\Lib9c. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NineChronicles.RPC.Shared", "NineChronicles.RPC.Shared\NineChronicles.RPC.Shared\NineChronicles.RPC.Shared.csproj", "{106573F6-F9C1-41B7-8F02-40E76F177C24}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet", "Lib9c\.Libplanet\Libplanet\Libplanet.csproj", "{E18779D4-103C-42D2-A94F-EEB801B32750}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet", "Lib9c\.Libplanet\src\Libplanet\Libplanet.csproj", "{E18779D4-103C-42D2-A94F-EEB801B32750}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.RocksDBStore", "Lib9c\.Libplanet\Libplanet.RocksDBStore\Libplanet.RocksDBStore.csproj", "{2C079592-8EDC-4911-AFF9-828419E0FDC1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.RocksDBStore", "Lib9c\.Libplanet\src\Libplanet.RocksDBStore\Libplanet.RocksDBStore.csproj", "{2C079592-8EDC-4911-AFF9-828419E0FDC1}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Stun", "Lib9c\.Libplanet\Libplanet.Stun\Libplanet.Stun.csproj", "{3B2875B4-B6C6-4929-B885-18A922110ED2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Stun", "Lib9c\.Libplanet\src\Libplanet.Stun\Libplanet.Stun.csproj", "{3B2875B4-B6C6-4929-B885-18A922110ED2}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NineChronicles.Headless.Executable.Tests", "NineChronicles.Headless.Executable.Tests\NineChronicles.Headless.Executable.Tests.csproj", "{6E38A2CF-B93F-4CD5-9CAC-DE121998FF18}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Extensions.Cocona", "Lib9c\.Libplanet\Libplanet.Extensions.Cocona\Libplanet.Extensions.Cocona.csproj", "{B1C7C07A-2394-4778-A328-D536C7FC3CDD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Extensions.Cocona", "Lib9c\.Libplanet\tools\Libplanet.Extensions.Cocona\Libplanet.Extensions.Cocona.csproj", "{B1C7C07A-2394-4778-A328-D536C7FC3CDD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Explorer", "Lib9c\.Libplanet\Libplanet.Explorer\Libplanet.Explorer.csproj", "{D1AAC8D1-742F-4E71-A3B3-651069B6C0F7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Explorer", "Lib9c\.Libplanet\tools\Libplanet.Explorer\Libplanet.Explorer.csproj", "{D1AAC8D1-742F-4E71-A3B3-651069B6C0F7}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{4D8FC180-CD64-4774-B9BF-BF290C01BB1A}" ProjectSection(SolutionItems) = preProject @@ -38,7 +38,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lib9c.DevExtensions", "Lib9c\Lib9c.DevExtensions\Lib9c.DevExtensions.csproj", "{8411BF58-22E7-4174-AEE6-7332FE690906}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Net", "Lib9c\.Libplanet\Libplanet.Net\Libplanet.Net.csproj", "{858AEAB3-CC9C-41C4-9727-4243708FD803}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Net", "Lib9c\.Libplanet\src\Libplanet.Net\Libplanet.Net.csproj", "{858AEAB3-CC9C-41C4-9727-4243708FD803}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lib9c.MessagePack", "Lib9c\Lib9c.MessagePack\Lib9c.MessagePack.csproj", "{A9513460-EE7A-455F-A823-5005DB6BA8FC}" EndProject @@ -60,15 +60,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Extensions.Forkab EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Libplanet", ".Libplanet", "{69F04D28-2B2E-454D-9B15-4D708EEEA8B5}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Action", "Lib9c\.Libplanet\Libplanet.Action\Libplanet.Action.csproj", "{EB464A50-9976-4DEA-B170-F72C4FB73A9C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Action", "Lib9c\.Libplanet\src\Libplanet.Action\Libplanet.Action.csproj", "{EB464A50-9976-4DEA-B170-F72C4FB73A9C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Common", "Lib9c\.Libplanet\Libplanet.Common\Libplanet.Common.csproj", "{95FB2620-540C-4498-9DAE-65198E89680C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Common", "Lib9c\.Libplanet\src\Libplanet.Common\Libplanet.Common.csproj", "{95FB2620-540C-4498-9DAE-65198E89680C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Types", "Lib9c\.Libplanet\Libplanet.Types\Libplanet.Types.csproj", "{FC65B031-F6EE-4561-A365-47B6FDD1C114}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Types", "Lib9c\.Libplanet\src\Libplanet.Types\Libplanet.Types.csproj", "{FC65B031-F6EE-4561-A365-47B6FDD1C114}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Store", "Lib9c\.Libplanet\Libplanet.Store\Libplanet.Store.csproj", "{2FF6DADC-5E7A-4F03-94D5-2CF50DED8C29}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Store", "Lib9c\.Libplanet\src\Libplanet.Store\Libplanet.Store.csproj", "{2FF6DADC-5E7A-4F03-94D5-2CF50DED8C29}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Crypto", "Lib9c\.Libplanet\Libplanet.Crypto\Libplanet.Crypto.csproj", "{2C3AD392-38A1-4E07-B1F9-694EE4A1E0C0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Crypto", "Lib9c\.Libplanet\src\Libplanet.Crypto\Libplanet.Crypto.csproj", "{2C3AD392-38A1-4E07-B1F9-694EE4A1E0C0}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Extensions.ActionEvaluatorCommonComponents", "Lib9c\.Libplanet.Extensions.ActionEvaluatorCommonComponents\Libplanet.Extensions.ActionEvaluatorCommonComponents.csproj", "{A6922395-36E5-4B0A-BEBD-9BCE34D08722}" EndProject @@ -78,9 +78,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libplanet.Extensions.Plugge EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lib9c.Plugin.Shared", "Lib9c\.Lib9c.Plugin.Shared\Lib9c.Plugin.Shared.csproj", "{3D32DA34-E619-429F-8421-848FF4F14417}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Libplanet.Mocks", "Lib9c\.Libplanet\Libplanet.Mocks\Libplanet.Mocks.csproj", "{F79B695B-6FCC-43F5-AEE4-88E484382B9B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Libplanet.Mocks", "Lib9c\.Libplanet\test\Libplanet.Mocks\Libplanet.Mocks.csproj", "{F79B695B-6FCC-43F5-AEE4-88E484382B9B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Libplanet.Store.Remote", "Lib9c\.Libplanet\Libplanet.Store.Remote\Libplanet.Store.Remote.csproj", "{D1E15F81-8765-4DCA-9299-675415686C23}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Libplanet.Store.Remote", "Lib9c\.Libplanet\src\Libplanet.Store.Remote\Libplanet.Store.Remote.csproj", "{D1E15F81-8765-4DCA-9299-675415686C23}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/NineChronicles.Headless.Executable/Commands/ReplayCommand.Privates.cs b/NineChronicles.Headless.Executable/Commands/ReplayCommand.Privates.cs index db3d3d223..5037b6a8a 100644 --- a/NineChronicles.Headless.Executable/Commands/ReplayCommand.Privates.cs +++ b/NineChronicles.Headless.Executable/Commands/ReplayCommand.Privates.cs @@ -10,6 +10,7 @@ using Libplanet.Action.State; using Libplanet.Types.Tx; using Serilog; +using Libplanet.Types.Evidence; namespace NineChronicles.Headless.Executable.Commands { @@ -61,6 +62,8 @@ public ActionContext( // NOTE: Replay does not support block actions. public IReadOnlyList Txs => ImmutableList.Empty; + public IReadOnlyList Evidence => ImmutableList.Empty; + public void UseGas(long gas) { } diff --git a/NineChronicles.Headless.Executable/Commands/ReplayCommand.cs b/NineChronicles.Headless.Executable/Commands/ReplayCommand.cs index 94606a02f..1fe5c4f9a 100644 --- a/NineChronicles.Headless.Executable/Commands/ReplayCommand.cs +++ b/NineChronicles.Headless.Executable/Commands/ReplayCommand.cs @@ -413,11 +413,14 @@ public int RemoteTx( var stateRootHash = HashDigest.FromString(block!.StateRootHash!); var privateKey = new PrivateKey(); var blockMetadata = new BlockMetadata( - 0, DateTimeOffset.Now, privateKey.PublicKey, null, null, null); + 0, DateTimeOffset.Now, privateKey.PublicKey, null, null, null, null); var blockContent = new BlockContent(blockMetadata); var preEvaluationBlock = blockContent.Propose(); var b = preEvaluationBlock.Sign(privateKey, stateRootHash); - return new BlockDigest(b.Header, ImmutableArray>.Empty); + return new BlockDigest( + header: b.Header, + txIds: ImmutableArray>.Empty, + evidenceIds: ImmutableArray>.Empty); } }; diff --git a/NineChronicles.Headless.Executable/Commands/StateCommand.cs b/NineChronicles.Headless.Executable/Commands/StateCommand.cs index e7c8f963d..1bf1877cf 100644 --- a/NineChronicles.Headless.Executable/Commands/StateCommand.cs +++ b/NineChronicles.Headless.Executable/Commands/StateCommand.cs @@ -125,7 +125,8 @@ IStateStore stateStore throw new CommandExitedException($"The block of {blockHash} doesn't exist.", -1); var preEvalBlock = new PreEvaluationBlock( block, - block.Transactions + block.Transactions, + block.Evidence ); stderr.WriteLine( "[{0}/{1}] Executing block #{2} {3}...", diff --git a/NineChronicles.Headless.Executable/NineChronicles.Headless.Executable.csproj b/NineChronicles.Headless.Executable/NineChronicles.Headless.Executable.csproj index 6de9ef47e..d58c7fbca 100644 --- a/NineChronicles.Headless.Executable/NineChronicles.Headless.Executable.csproj +++ b/NineChronicles.Headless.Executable/NineChronicles.Headless.Executable.csproj @@ -24,6 +24,12 @@ + + + + + + @@ -42,10 +48,11 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive + - + diff --git a/NineChronicles.Headless.Executable/Program.cs b/NineChronicles.Headless.Executable/Program.cs index fe5ec281a..00677e2fd 100644 --- a/NineChronicles.Headless.Executable/Program.cs +++ b/NineChronicles.Headless.Executable/Program.cs @@ -41,6 +41,8 @@ using OpenTelemetry; using OpenTelemetry.Metrics; using Nekoyume; +using OpenTelemetry.Resources; +using OpenTelemetry.Trace; namespace NineChronicles.Headless.Executable { @@ -474,15 +476,40 @@ IActionLoader MakeSingleActionLoader() MaxTransactionPerBlock = headlessConfig.MaxTransactionPerBlock }; var arenaMemoryCache = new StateMemoryCache(); + string otlpEndpoint = Environment.GetEnvironmentVariable("OTLP_ENDPOINT") ?? "http://localhost:4317"; hostBuilder.ConfigureServices(services => { services.AddSingleton(_ => standaloneContext); services.AddSingleton>(); services.AddOpenTelemetry() + .ConfigureResource(resource => resource.AddService( + serviceName: Assembly.GetEntryAssembly()?.GetName().Name ?? "NineChronicles.Headless", + serviceVersion: Assembly.GetEntryAssembly()?.GetName().Version?.ToString(), + serviceInstanceId: Environment.MachineName + ).AddAttributes(new Dictionary + { + { "deployment.environment", Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Unknown" }, + })) .WithMetrics( builder => builder .AddMeter("NineChronicles") - .AddPrometheusExporter()); + .AddMeter("MagicOnion.Server") + .AddAspNetCoreInstrumentation() + .AddRuntimeInstrumentation() + .AddPrometheusExporter()) + .WithTracing( + builder => builder + .AddSource("Lib9c.Action.HackAndSlash") + .AddSource("Libplanet.Action.State") + .AddSource("Libplanet.Blockchain.BlockChainStates") + //.AddAspNetCoreInstrumentation() + .AddGrpcClientInstrumentation() + .AddProcessor(new Pyroscope.OpenTelemetry.PyroscopeSpanProcessor()) + .AddOtlpExporter(opt => + { + opt.Endpoint = new Uri(otlpEndpoint, UriKind.Absolute); + }) + ); // worker if (arenaParticipantsSync) diff --git a/NineChronicles.Headless.Executable/Store/AnonymousStore.cs b/NineChronicles.Headless.Executable/Store/AnonymousStore.cs index c703c9bc5..ee450e50a 100644 --- a/NineChronicles.Headless.Executable/Store/AnonymousStore.cs +++ b/NineChronicles.Headless.Executable/Store/AnonymousStore.cs @@ -5,6 +5,7 @@ using Libplanet.Crypto; using Libplanet.Store; using Libplanet.Types.Blocks; +using Libplanet.Types.Evidence; using Libplanet.Types.Tx; namespace NineChronicles.Headless.Executable.Store; @@ -49,9 +50,15 @@ public class AnonymousStore : IStore public Action PutBlockCommit { get; set; } public Action DeleteBlockCommit { get; set; } public Func> GetBlockCommitHashes { get; set; } - public Func?> GetNextStateRootHash { get; set; } - public Action> PutNextStateRootHash { get; set; } - public Action DeleteNextStateRootHash { get; set; } + public Func> IteratePendingEvidenceIds { get; set; } + public Func GetPendingEvidence { get; set; } + public Func GetCommittedEvidence { get; set; } + public Action PutPendingEvidence { get; set; } + public Action PutCommittedEvidence { get; set; } + public Action DeletePendingEvidence { get; set; } + public Action DeleteCommittedEvidence { get; set; } + public Func ContainsPendingEvidence { get; set; } + public Func ContainsCommittedEvidence { get; set; } #pragma warning restore CS8618 void IDisposable.Dispose() @@ -243,18 +250,48 @@ IEnumerable IStore.GetBlockCommitHashes() return GetBlockCommitHashes(); } - HashDigest? IStore.GetNextStateRootHash(BlockHash blockHash) + IEnumerable IStore.IteratePendingEvidenceIds() { - return GetNextStateRootHash(blockHash); + return IteratePendingEvidenceIds(); } - void IStore.PutNextStateRootHash(BlockHash blockHash, HashDigest nextStateRootHash) + EvidenceBase? IStore.GetPendingEvidence(EvidenceId evidenceId) { - PutNextStateRootHash(blockHash, nextStateRootHash); + return GetPendingEvidence(evidenceId); } - void IStore.DeleteNextStateRootHash(BlockHash blockHash) + EvidenceBase? IStore.GetCommittedEvidence(EvidenceId evidenceId) { - DeleteNextStateRootHash(blockHash); + return GetCommittedEvidence(evidenceId); + } + + void IStore.PutPendingEvidence(EvidenceBase evidence) + { + PutPendingEvidence(evidence); + } + + void IStore.PutCommittedEvidence(EvidenceBase evidence) + { + PutCommittedEvidence(evidence); + } + + void IStore.DeletePendingEvidence(EvidenceId evidenceId) + { + DeletePendingEvidence(evidenceId); + } + + void IStore.DeleteCommittedEvidence(EvidenceId evidenceId) + { + DeleteCommittedEvidence(evidenceId); + } + + bool IStore.ContainsPendingEvidence(EvidenceId evidenceId) + { + return ContainsPendingEvidence(evidenceId); + } + + bool IStore.ContainsCommittedEvidence(EvidenceId evidenceId) + { + return ContainsCommittedEvidence(evidenceId); } } diff --git a/NineChronicles.Headless.Tests/GraphQLTestUtils.cs b/NineChronicles.Headless.Tests/GraphQLTestUtils.cs index 9ef27e239..fbb31bb66 100644 --- a/NineChronicles.Headless.Tests/GraphQLTestUtils.cs +++ b/NineChronicles.Headless.Tests/GraphQLTestUtils.cs @@ -172,7 +172,7 @@ InitializeStates initializeStates 0, block.Hash, ValidatorPrivateKeys.Select( - k => new VoteMetadata(block.Index, 0, block.Hash, block.Timestamp, k.PublicKey, VoteFlag.PreCommit).Sign(k)) + k => new VoteMetadata(block.Index, 0, block.Hash, block.Timestamp, k.PublicKey, null, VoteFlag.PreCommit).Sign(k)) .ToImmutableArray()); blockchain.Append(block, blockCommit); diff --git a/NineChronicles.Headless.Tests/GraphTypes/GraphQLTestBase.cs b/NineChronicles.Headless.Tests/GraphTypes/GraphQLTestBase.cs index fe63fda43..b6ff30cbd 100644 --- a/NineChronicles.Headless.Tests/GraphTypes/GraphQLTestBase.cs +++ b/NineChronicles.Headless.Tests/GraphTypes/GraphQLTestBase.cs @@ -244,6 +244,7 @@ protected LibplanetNodeService CreateLibplanetNodeService( hash, DateTimeOffset.UtcNow, validator.PublicKey, + null, VoteFlag.PreCommit).Sign(validator)).ToImmutableArray()) : (BlockCommit?)null; } diff --git a/NineChronicles.Headless.Tests/GraphTypes/TransactionHeadlessQueryTest.cs b/NineChronicles.Headless.Tests/GraphTypes/TransactionHeadlessQueryTest.cs index 34ce0ce3b..9cb5a7c67 100644 --- a/NineChronicles.Headless.Tests/GraphTypes/TransactionHeadlessQueryTest.cs +++ b/NineChronicles.Headless.Tests/GraphTypes/TransactionHeadlessQueryTest.cs @@ -427,6 +427,7 @@ private Task ExecuteAsync(string query) hash, DateTimeOffset.UtcNow, validator.PublicKey, + null, VoteFlag.PreCommit).Sign(validator))) : (BlockCommit?)null; } diff --git a/NineChronicles.Headless/GraphQLServiceExtensions.cs b/NineChronicles.Headless/GraphQLServiceExtensions.cs index d25679287..07e1d6bca 100644 --- a/NineChronicles.Headless/GraphQLServiceExtensions.cs +++ b/NineChronicles.Headless/GraphQLServiceExtensions.cs @@ -56,6 +56,7 @@ public static IServiceCollection AddLibplanetScalarTypes(this IServiceCollection services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); + services.TryAddSingleton(); return services; } @@ -77,11 +78,13 @@ public static IServiceCollection AddLibplanetExplorer(this IServiceCollection se services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); + services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); services.TryAddSingleton(); + services.TryAddSingleton(); services.TryAddSingleton(_ => new StateQuery() { Name = "LibplanetStateQuery", diff --git a/NineChronicles.Headless/NineChronicles.Headless.csproj b/NineChronicles.Headless/NineChronicles.Headless.csproj index 6586f21b1..f01b9ba12 100644 --- a/NineChronicles.Headless/NineChronicles.Headless.csproj +++ b/NineChronicles.Headless/NineChronicles.Headless.csproj @@ -21,8 +21,8 @@ - - + + @@ -36,14 +36,15 @@ - - - - + + + + + @@ -64,6 +65,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive +