Cleanup nonce encoding
This commit is contained in:
parent
5074a8c8d3
commit
b3c7a6a478
@ -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();
|
||||
});
|
||||
});
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
8
types/types.d.ts
vendored
8
types/types.d.ts
vendored
@ -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<TokenInfo>;
|
||||
export declare function amountToCoin(lookup: ReadonlyArray<TokenInfo>, 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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user