UNPKG

dpos-offline

Version:

Offline Signing Transactions for DPOS Blockchains

167 lines (144 loc) 4.19 kB
import { As } from 'type-tagger'; /** * An Address. */ export type Address = string & As<'address'>; /** * A recipient address */ export type RecipientId = Address; /** * Holds public and private key. */ export interface IKeypair { readonly publicKey: Buffer & As<'publicKey'>; readonly privateKey: Buffer & As<'privateKey'>; } /** * SenderType is used to identify a sender. */ // tslint:disable-next-line export type SenderType = { publicKey?: Buffer & As<'publicKey'>, address?: Address }; /** * Codec Transactions type */ export interface ICoinCodecTxs<T, K extends {sender?: SenderType, kind: string}, PostableFormat = any> { /** * The hosting codec object */ _codec: ICoinCodec<this, any>; /** * Transforms a generic transaction interface object to an inner transaction type to be used for future operations * such as signing, verification ... * @param tx the tx to transform * @param args extra opts args. */ transform(tx: K, ...args: any[]): T; /** * Computes the bytes of such transaction * @param tx transaction to compute bytes from */ bytes(tx: T): Buffer; /** * Computes signature of a transaction using provided credentials * @param tx The transaction object * @param kp keypair or secret in string format */ calcSignature(tx: T, kp: IKeypair | string): Buffer & As<'signature'>; /** * Signs (Modifies) transaction with provided credentials * @param tx The transaction object * @param kp keypair or secret in string format */ sign(tx: T, kp: IKeypair | string): T; /** * Verifies transaction signature * @param tx The transaction object * @param signature Signature * @param pubKey Public key */ verify(tx: T, signature?: Buffer & As<'signature'>, pubKey?: Buffer & As<'publicKey'>): boolean; /** * Creates and signs * @param tx The transaction pojo * @param kp keypair or secret in string format * @param inRawFormat true Optional. If provided the returning object will be not in postable format */ createAndSign(tx: K, kp: IKeypair | string): PostableFormat; // tslint:disable-next-line max-line-length createAndSign(tx: K, kp: IKeypair | string, inRawFormat: true): T; /** * Converts a tx from internal to postable format * @param tx */ toPostable(tx: T): PostableFormat; /** * Converts a tx from postable to internal format * @param tx */ fromPostable(tx: PostableFormat): T; /** * Computes and returns the transaction identifier * @param tx */ identifier(tx: T): string & As<'txIdentifier'>; } /** * Messages Codec structure */ export interface ICoinCodecMsgs { /** * The hosting codec */ _codec: ICoinCodec<any, this>; /** * Encodes and signs the given message with th provided credentials * @param msg Message in buffer or string format * @param kp keypair or secret in string format */ sign: (msg: Buffer | string, kp: IKeypair) => Buffer & As<'signature'>; /** * Verifies the signature of given message * @param msg Original signed message * @param signature Signature buffer * @param publicKey Public key buffer */ verify: (msg: Buffer | string, signature: Buffer & As<'signature'>, publicKey: Buffer & As<'publicKey'>) => boolean; } /** * Coin Codec interface */ export interface ICoinCodec<TXs extends ICoinCodecTxs<any, any, any>, MSGs extends ICoinCodecMsgs> { /** * Transactions namespace */ txs: TXs; /** * Messages Namespace */ msgs: MSGs; /** * Raw utilities for low level stuff */ raw: { /** * Low level signing method */ sign(buf: Buffer, kp: IKeypair): Buffer & As<'signature'>; /** * Low level verify method */ verify(bytes: Buffer, signature: Buffer & As<'signature'>, publicKey: Buffer & As<'publicKey'>): boolean; }; /** * Creates keypair object from given secret * @param secret */ deriveKeypair(secret: Buffer | string): IKeypair; /** * Calculates address from publicKey * @param publicKey * @param args extra arguments */ calcAddress(publicKey: (Buffer | string) & As<'publicKey'>, ...args: any[]): Address; }