From b3c7a6a4783daa482bb39d387d7c74134995a328 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Thu, 23 Jan 2020 15:10:53 +0100 Subject: [PATCH] Cleanup nonce encoding --- src/types.spec.ts | 19 ++++++++++++++++--- src/types.ts | 9 ++++++++- types/types.d.ts | 8 ++++++-- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/types.spec.ts b/src/types.spec.ts index 87f07fe7..42d2bd79 100644 --- a/src/types.spec.ts +++ b/src/types.spec.ts @@ -3,13 +3,26 @@ import { accountToNonce, nonceToAccountNumber, nonceToSequence } from "./types"; describe("nonceEncoding", () => { it("works for input in range", () => { - const nonce = accountToNonce("1234", "7890"); + const nonce = accountToNonce({ + accountNumber: "1234", + sequence: "7890", + }); expect(nonceToAccountNumber(nonce)).toEqual("1234"); expect(nonceToSequence(nonce)).toEqual("7890"); }); it("errors on input too large", () => { - expect(() => accountToNonce("1234567890", "7890")).toThrow(); - expect(() => accountToNonce("178", "97320247923")).toThrow(); + expect(() => + accountToNonce({ + accountNumber: "1234567890", + sequence: "7890", + }), + ).toThrow(); + expect(() => + accountToNonce({ + accountNumber: "178", + sequence: "97320247923", + }), + ).toThrow(); }); }); diff --git a/src/types.ts b/src/types.ts index 2ebcec1c..d2f1ab85 100644 --- a/src/types.ts +++ b/src/types.ts @@ -46,9 +46,16 @@ const maxAcct = 1 << 23; // tslint:disable-next-line:no-bitwise const maxSeq = 1 << 20; +// NonceInfo is the data we need from account to create a nonce +// Use this so no confusion about order of arguments +export interface NonceInfo { + readonly accountNumber: string; + readonly sequence: string; +} + // this (lossily) encodes the two pieces of info (uint64) needed to sign into // one (53-bit) number. Cross your fingers. -export function accountToNonce(accountNumber: string, sequence: string): Nonce { +export function accountToNonce({ accountNumber, sequence }: NonceInfo): Nonce { const acct = parseInt(accountNumber, 10); const seq = parseInt(sequence, 10); diff --git a/types/types.d.ts b/types/types.d.ts index eda75b7b..292d0e16 100644 --- a/types/types.d.ts +++ b/types/types.d.ts @@ -1,4 +1,4 @@ -import { Amount, Token, Nonce } from "@iov/bcp"; +import { Amount, Nonce, Token } from "@iov/bcp"; import amino from "@tendermint/amino-js"; export declare type AminoTx = amino.Tx & { readonly value: amino.StdTx; @@ -10,6 +10,10 @@ export interface TokenInfo extends Token { export declare type TokenInfos = ReadonlyArray; export declare function amountToCoin(lookup: ReadonlyArray, amount: Amount): amino.Coin; export declare function coinToAmount(tokens: TokenInfos, coin: amino.Coin): Amount; -export declare function accountToNonce(accountNumber: string, sequence: string): Nonce; +export interface NonceInfo { + readonly accountNumber: string; + readonly sequence: string; +} +export declare function accountToNonce({ accountNumber, sequence }: NonceInfo): Nonce; export declare function nonceToAccountNumber(nonce: Nonce): string; export declare function nonceToSequence(nonce: Nonce): string;