From 649fcdebaba3ac517e0208a2724299cecd5de1bc Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Thu, 11 Feb 2021 21:08:09 +0100 Subject: [PATCH 1/2] Reorganize ReadonlyDateWithNanoseconds --- .../tendermint-rpc/src/adaptors/v0-33/hasher.spec.ts | 2 +- packages/tendermint-rpc/src/encodings.spec.ts | 2 +- packages/tendermint-rpc/src/encodings.ts | 3 ++- packages/tendermint-rpc/src/index.ts | 9 +++++++-- packages/tendermint-rpc/src/responses.ts | 7 +------ packages/tendermint-rpc/src/types.ts | 8 +++++++- 6 files changed, 19 insertions(+), 12 deletions(-) diff --git a/packages/tendermint-rpc/src/adaptors/v0-33/hasher.spec.ts b/packages/tendermint-rpc/src/adaptors/v0-33/hasher.spec.ts index 1933923f..cc3081b2 100644 --- a/packages/tendermint-rpc/src/adaptors/v0-33/hasher.spec.ts +++ b/packages/tendermint-rpc/src/adaptors/v0-33/hasher.spec.ts @@ -1,7 +1,7 @@ import { fromBase64, fromHex } from "@cosmjs/encoding"; import { ReadonlyDate } from "readonly-date"; -import { ReadonlyDateWithNanoseconds } from "../../responses"; +import { ReadonlyDateWithNanoseconds } from "../../types"; import { hashBlock, hashTx } from "./hasher"; describe("Hasher", () => { diff --git a/packages/tendermint-rpc/src/encodings.spec.ts b/packages/tendermint-rpc/src/encodings.spec.ts index ea89db8e..88750e68 100644 --- a/packages/tendermint-rpc/src/encodings.spec.ts +++ b/packages/tendermint-rpc/src/encodings.spec.ts @@ -9,7 +9,7 @@ import { encodeTime, encodeVersion, } from "./encodings"; -import { ReadonlyDateWithNanoseconds } from "./responses"; +import { ReadonlyDateWithNanoseconds } from "./types"; describe("encodings", () => { describe("DateTime", () => { diff --git a/packages/tendermint-rpc/src/encodings.ts b/packages/tendermint-rpc/src/encodings.ts index 5a97754d..59f6e042 100644 --- a/packages/tendermint-rpc/src/encodings.ts +++ b/packages/tendermint-rpc/src/encodings.ts @@ -1,7 +1,8 @@ import { fromRfc3339, toUtf8 } from "@cosmjs/encoding"; import { Int53 } from "@cosmjs/math"; -import { BlockId, ReadonlyDateWithNanoseconds, Version } from "./responses"; +import { BlockId, Version } from "./responses"; +import { ReadonlyDateWithNanoseconds } from "./types"; /** * A runtime checker that ensures a given value is set (i.e. not undefined or null) diff --git a/packages/tendermint-rpc/src/index.ts b/packages/tendermint-rpc/src/index.ts index d08f42d7..df736fb1 100644 --- a/packages/tendermint-rpc/src/index.ts +++ b/packages/tendermint-rpc/src/index.ts @@ -56,7 +56,6 @@ export { NodeInfo, ProofOp, QueryProof, - ReadonlyDateWithNanoseconds, Response, StatusResponse, SyncInfo, @@ -73,4 +72,10 @@ export { VoteType, } from "./responses"; export { HttpClient, WebsocketClient } from "./rpcclients"; // TODO: Why do we export those outside of this package? -export { BlockIdFlag, CommitSignature, ValidatorEd25519Pubkey, ValidatorPubkey } from "./types"; +export { + BlockIdFlag, + CommitSignature, + ReadonlyDateWithNanoseconds, + ValidatorEd25519Pubkey, + ValidatorPubkey, +} from "./types"; diff --git a/packages/tendermint-rpc/src/responses.ts b/packages/tendermint-rpc/src/responses.ts index a2e820fa..83e7ab65 100644 --- a/packages/tendermint-rpc/src/responses.ts +++ b/packages/tendermint-rpc/src/responses.ts @@ -1,6 +1,6 @@ import { ReadonlyDate } from "readonly-date"; -import { CommitSignature, ValidatorPubkey } from "./types"; +import { CommitSignature, ReadonlyDateWithNanoseconds, ValidatorPubkey } from "./types"; export type Response = | AbciInfoResponse @@ -253,11 +253,6 @@ export interface Version { readonly app: number; } -export interface ReadonlyDateWithNanoseconds extends ReadonlyDate { - /* Nanoseconds after the time stored in a vanilla ReadonlyDate (millisecond granularity) */ - readonly nanoseconds?: number; -} - // https://github.com/tendermint/tendermint/blob/v0.31.8/docs/spec/blockchain/blockchain.md export interface Header { // basic block info diff --git a/packages/tendermint-rpc/src/types.ts b/packages/tendermint-rpc/src/types.ts index 9e268ea3..c71a10f7 100644 --- a/packages/tendermint-rpc/src/types.ts +++ b/packages/tendermint-rpc/src/types.ts @@ -1,5 +1,11 @@ // Types in this file are exported outside of the @cosmjs/tendermint-rpc package, // e.g. as part of a request or response +import { ReadonlyDate } from "readonly-date"; + +export interface ReadonlyDateWithNanoseconds extends ReadonlyDate { + /* Nanoseconds after the time stored in a vanilla ReadonlyDate (millisecond granularity) */ + readonly nanoseconds?: number; +} export interface ValidatorEd25519Pubkey { readonly algorithm: "ed25519"; @@ -23,6 +29,6 @@ export enum BlockIdFlag { export interface CommitSignature { blockIdFlag: BlockIdFlag; validatorAddress: Uint8Array; - timestamp?: Date; + timestamp?: ReadonlyDateWithNanoseconds; signature: Uint8Array; } From f1dbc29db030acef241f9fc717cedeb77424aea5 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Thu, 11 Feb 2021 21:10:31 +0100 Subject: [PATCH 2/2] Update parsing logic to preserve nanoseconds --- packages/tendermint-rpc/src/adaptors/v0-33/responses.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tendermint-rpc/src/adaptors/v0-33/responses.ts b/packages/tendermint-rpc/src/adaptors/v0-33/responses.ts index eb950974..93d17ec8 100644 --- a/packages/tendermint-rpc/src/adaptors/v0-33/responses.ts +++ b/packages/tendermint-rpc/src/adaptors/v0-33/responses.ts @@ -417,7 +417,7 @@ function decodeCommitSignature(data: RpcSignature): CommitSignature { return { blockIdFlag: decodeBlockIdFlag(data.block_id_flag), validatorAddress: fromHex(data.validator_address), - timestamp: new Date(assertNotEmpty(data.timestamp)), + timestamp: DateTime.decode(assertNotEmpty(data.timestamp)), signature: fromBase64(assertNotEmpty(data.signature)), }; }