From 69b6a928927f4d1d6c63bc6fc0199a3ef20b00ef Mon Sep 17 00:00:00 2001 From: Bryan Chen Date: Sat, 9 Nov 2024 00:34:56 +1300 Subject: [PATCH] fixes --- Node/Tests/NodeTests/ChainSpecTests.swift | 6 ++++-- RPC/Sources/RPC/Handlers/ChainHandler.swift | 15 +++++++++------ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Node/Tests/NodeTests/ChainSpecTests.swift b/Node/Tests/NodeTests/ChainSpecTests.swift index 10a04055..bf09de32 100644 --- a/Node/Tests/NodeTests/ChainSpecTests.swift +++ b/Node/Tests/NodeTests/ChainSpecTests.swift @@ -18,12 +18,14 @@ struct ChainSpecTests { for preset in GenesisPreset.allCases { let genesis = Genesis.preset(preset) let chainspec = try await genesis.load() - let backend = try StateBackend(InMemoryBackend(store: chainspec.getState()), config: chainspec.getConfig(), rootHash: Data32()) + let backend = try StateBackend(InMemoryBackend(), config: chainspec.getConfig(), rootHash: Data32()) + let state = try chainspec.getState() + try await backend.writeRaw(state.map { (key: $0.key, value: $0.value) }) let block = try chainspec.getBlock() let config = try chainspec.getConfig() let recentHistory = try await backend.read(StateKeys.RecentHistoryKey()) - #expect(recentHistory.items.last?.headerHash == block.hash) + #expect(recentHistory?.items.last?.headerHash == block.hash) // Verify config matches preset #expect(config == preset.config) diff --git a/RPC/Sources/RPC/Handlers/ChainHandler.swift b/RPC/Sources/RPC/Handlers/ChainHandler.swift index 880d261a..47686eb5 100644 --- a/RPC/Sources/RPC/Handlers/ChainHandler.swift +++ b/RPC/Sources/RPC/Handlers/ChainHandler.swift @@ -38,18 +38,21 @@ struct ChainHandler { throw JSONError(code: -32602, message: "Invalid block hash") } let state = try await source.getState(hash: data32) + guard let state else { + return JSON.null + } // return state root for now - return [ - "stateRoot": state?.stateRoot.description, - "blockHash": hash.description, + return await [ + "stateRoot": state.value.stateRoot.toHexString(), + "blockHash": hash, ] } else { // return best block state by default let block = try await source.getBestBlock() let state = try await source.getState(hash: block.hash) - return [ - "stateRoot": state?.stateRoot.description, - "blockHash": block.hash.description, + return await [ + "stateRoot": state?.value.stateRoot.toHexString(), + "blockHash": block.hash.toHexString(), ] } }