UNPKG

meta-contract-debug

Version:

Meta Contract SDK

828 lines (712 loc) 22.6 kB
/* eslint-disable @typescript-eslint/ban-types */ // Type definitions for mvc 1.5.5 // Project: https://github.com/moneybutton/bsv // Forked From: https://github.com/bitpay/bitcore-lib // Definitions by: Lautaro Dragan <https://github.com/lautarodragan> // Definitions extended by: David Case <https://github.com/shruggr> // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped import BN_P = require('../bn.js') /// <reference types="bn.js" /> export class Opcode { static OP_0: number static OP_PUSHDATA1: number static OP_PUSHDATA2: number static OP_PUSHDATA4: number static OP_1NEGATE: number static OP_RESERVED: number static OP_TRUE: number static OP_1: number static OP_2: number static OP_3: number static OP_4: number static OP_5: number static OP_6: number static OP_7: number static OP_8: number static OP_9: number static OP_10: number static OP_11: number static OP_12: number static OP_13: number static OP_14: number static OP_15: number static OP_16: number // control static OP_NOP: number static OP_VER: number static OP_IF: number static OP_NOTIF: number static OP_VERIF: number static OP_VERNOTIF: number static OP_ELSE: number static OP_ENDIF: number static OP_VERIFY: number static OP_RETURN: number // stack ops static OP_TOALTSTACK: number static OP_FROMALTSTACK: number static OP_2DROP: number static OP_2DUP: number static OP_3DUP: number static OP_2OVER: number static OP_2ROT: number static OP_2SWAP: number static OP_IFDUP: number static OP_DEPTH: number static OP_DROP: number static OP_DUP: number static OP_NIP: number static OP_OVER: number static OP_PICK: number static OP_ROLL: number static OP_ROT: number static OP_SWAP: number static OP_TUCK: number // splice ops static OP_CAT: number static OP_SPLIT: number static OP_NUM2BIN: number static OP_BIN2NUM: number static OP_SIZE: number // bit logic static OP_INVERT: number static OP_AND: number static OP_OR: number static OP_XOR: number static OP_EQUAL: number static OP_EQUALVERIFY: number static OP_RESERVED1: number static OP_RESERVED2: number // numeric static OP_1ADD: number static OP_1SUB: number static OP_2MUL: number static OP_2DIV: number static OP_NEGATE: number static OP_ABS: number static OP_NOT: number static OP_0NOTEQUAL: number static OP_ADD: number static OP_SUB: number static OP_MUL: number static OP_DIV: number static OP_MOD: number static OP_LSHIFT: number static OP_RSHIFT: number static OP_BOOLAND: number static OP_BOOLOR: number static OP_NUMEQUAL: number static OP_NUMEQUALVERIFY: number static OP_NUMNOTEQUAL: number static OP_LESSTHAN: number static OP_GREATERTHAN: number static OP_LESSTHANOREQUAL: number static OP_GREATERTHANOREQUAL: number static OP_MIN: number static OP_MAX: number static OP_WITHIN: number // crypto static OP_RIPEMD160: number static OP_SHA1: number static OP_SHA256: number static OP_HASH160: number static OP_HASH256: number static OP_CODESEPARATOR: number static OP_CHECKSIG: number static OP_CHECKSIGVERIFY: number static OP_CHECKMULTISIG: number static OP_CHECKMULTISIGVERIFY: number static OP_CHECKLOCKTIMEVERIFY: number static OP_CHECKSEQUENCEVERIFY: number // expansion static OP_NOP1: number static OP_NOP2: number static OP_NOP3: number static OP_NOP4: number static OP_NOP5: number static OP_NOP6: number static OP_NOP7: number static OP_NOP8: number static OP_NOP9: number static OP_NOP10: number // template matching params static OP_PUBKEYHASH: number static OP_PUBKEY: number static OP_INVALIDOPCODE: number } export namespace encoding { class Base58 {} class Base58Check {} class BufferReader { constructor(buf: Buffer) readUInt8(): number readUInt16BE(): number readUInt16LE(): number readUInt32BE(): number readUInt32LE(): number readInt32LE(): number readUInt64BEBN(): number readUInt64LEBN(): number readVarintNum(): number readVarLengthBuffer(): Buffer readVarintBuf(): Buffer readVarintBN(): crypto.BN reverse(): this readReverse(len: number): Buffer } class BufferWriter { writeUInt8(n: number): this writeUInt16BE(n: number): this writeUInt16LE(n: number): this writeUInt32BE(n: number): this writeUInt32LE(n: number): this writeInt32LE(n: number): this writeUInt64BEBN(n: number): this writeUInt64LEBN(n: number): this writeVarintNum(n: number): this writeVarintBN(n: crypto.BN): this writeReverse(buf: Buffer): this toBuffer(): Buffer } class Varint {} } export namespace crypto { interface IOpts { endian: 'big' | 'little' size?: number } class BN extends BN_P { static fromSM(buf: Buffer, opts?: IOpts): BN neg(): BN add(one: BN): BN toSM(opts?: IOpts): Buffer toNumber(): number static fromBuffer(buf: Buffer, opts?: IOpts): BN //toBuffer(opts?: IOpts): Buffer; static fromHex(hex: string, opts?: IOpts): BN } namespace ECDSA { function sign(message: Buffer, key: PrivateKey, endian?: string): Signature function verify(hashbuf: Buffer, sig: Signature, pubkey: PublicKey, endian?: 'little'): boolean } namespace Hash { function sha1(buffer: Buffer): Buffer function sha256(buffer: Buffer): Buffer function sha256sha256(buffer: Buffer): Buffer function sha256ripemd160(buffer: Buffer): Buffer function sha512(buffer: Buffer): Buffer function ripemd160(buffer: Buffer): Buffer function sha256hmac(data: Buffer, key: Buffer): Buffer function sha512hmac(data: Buffer, key: Buffer): Buffer } namespace Random { function getRandomBuffer(size: number): Buffer } class Point { static fromX(odd: boolean, x: crypto.BN | string): Point static getG(): any static getN(): crypto.BN getX(): crypto.BN getY(): crypto.BN validate(): this mul(n: crypto.BN): Point } class Signature { static fromDER(sig: Buffer): Signature static fromString(data: string): Signature static SIGHASH_ALL: number static SIGHASH_NONE: number static SIGHASH_SINGLE: number static SIGHASH_FORKID: number static SIGHASH_ANYONECANPAY: number r: BN s: BN nhashtype: number toString(): string toBuffer(): Buffer toDER(): Buffer isTxDER(buf: Buffer): boolean hasLowS(): boolean toTxFormat(): Buffer set(obj: { r?: BN; s?: BN; i?: number; compressed?: boolean; nhashtype?: number }): this } } export namespace Transaction { interface IUnspentOutput { address?: string txId: string outputIndex: number script: string satoshis: number } class UnspentOutput { static fromObject(o: IUnspentOutput): UnspentOutput constructor(data: IUnspentOutput) inspect(): string toObject(): IUnspentOutput toString(): string } class Output { readonly script: Script satoshis: number readonly satoshisBN: crypto.BN spentTxId: string | null constructor(data: object) setScript(script: Script | string | Buffer): this inspect(): string toObject(): object getSize(): number toBufferWriter(writer?: encoding.BufferWriter): encoding.BufferWriter } export namespace Input { class PublicKeyHash extends Input { /** * @param {Transaction} transaction - the transaction to be signed * @param {PrivateKey} privateKey - the private key with which to sign the transaction * @param {number} index - the index of the input in the transaction input vector * @param {number=} sigtype - the type of signature, defaults to Signature.SIGHASH_ALL * @param {Buffer=} hashData - the precalculated hash of the public key associated with the privateKey provided * @return {Array} of objects that can be */ getSignatures( transaction: Transaction, privateKey: PrivateKey, index: number, sigtype: number, hashData: Buffer ): Signature[] } } class Input { prevTxId: Buffer readonly outputIndex: number readonly sequenceNumber: number readonly script: Script output?: Output constructor(params: object) isValidSignature(tx: Transaction, sig: any): boolean setScript(script: Script): this /** * Add the provided signature * * @param {Object} signature * @param {PublicKey} signature.publicKey * @param {Signature} signature.signature * @param {number=} signature.sigtype * @return {PublicKeyHashInput} this, for chaining */ addSignature(transaction: Transaction, signature: Signature): this /** * Clear the input's signature * @return {PublicKeyHashInput} this, for chaining */ clearSignatures(): this /** * Query whether the input is signed * @return {boolean} */ isFullySigned(): boolean _estimateSize(): number } class Signature { constructor(arg: Signature | string | object) signature: crypto.Signature publicKey: PublicKey prevTxId: Buffer outputIndex: number inputIndex: number sigtype: number } namespace Sighash { function sighashPreimage( transaction: Transaction, sighashType: number, inputNumber: number, subscript: Script, satoshisBN: crypto.BN, flags?: number ): Buffer function sighash( transaction: Transaction, sighashType: number, inputNumber: number, subscript: Script, satoshisBN: crypto.BN, flags?: number ): Buffer function sign( transaction: Transaction, privateKey: PrivateKey, sighashType: number, inputIndex: number, subscript: Script, satoshisBN: crypto.BN, flags?: number ): crypto.Signature function verify( transaction: Transaction, signature: Signature, publicKey: PublicKey, inputIndex: number, subscript: Script, satoshisBN: crypto.BN, flags?: number ): boolean } } export class Transaction { static DUST_AMOUNT: number static CHANGE_OUTPUT_MAX_SIZE: number inputs: Transaction.Input[] outputs: Transaction.Output[] readonly id: string readonly hash: string readonly inputAmount: number readonly outputAmount: number nid: string nLockTime: number version: number //temporary _fee: number _outputAmount: number _changeIndex: number _removeOutput(index: number) constructor(serialized?: any) from(utxos: Transaction.IUnspentOutput | Transaction.IUnspentOutput[]): this to(address: Address[] | Address | string, amount: number): this change(address: Address | string): this fee(amount: number): this feePerKb(amount: number): this sign(privateKey: PrivateKey[] | string[] | PrivateKey | string): this applySignature(sig: crypto.Signature): this addInput(input: Transaction.Input, outputScript?: Script | string, satoshis?: number): this addOutput(output: Transaction.Output): this addData(value: Buffer | string): this lockUntilDate(time: Date | number): this lockUntilBlockHeight(height: number): this hasWitnesses(): boolean getFee(): number getChangeOutput(): Transaction.Output | null getLockTime(): Date | number verify(): string | boolean isCoinbase(): boolean enableRBF(): this isRBF(): boolean inspect(): string serialize(opts?: object | boolean): string uncheckedSerialize(): string toObject(): any toBuffer(): Buffer isFullySigned(): boolean getSerializationError(opts?: object): any _getUnspentValue(): number _estimateFee(): number _estimateSize(): number } export class ECIES { constructor(opts?: any, algorithm?: string) privateKey(privateKey: PrivateKey): ECIES publicKey(publicKey: PublicKey): ECIES encrypt(message: string | Buffer): Buffer decrypt(encbuf: Buffer): Buffer } export class Block { hash: string height: number transactions: Transaction[] header: { time: number prevHash: string } constructor(data: Buffer | object) } export class PrivateKey { constructor(key?: string | PrivateKey, network?: Networks.Type) readonly bn: crypto.BN readonly publicKey: PublicKey readonly compressed: boolean readonly network: Networks.Network toAddress(network: Networks.Type): Address toPublicKey(): PublicKey toString(): string toObject(): object toJSON(): object toWIF(): string toHex(): string toBigNumber(): any //BN; toBuffer(): Buffer inspect(): string static fromString(str: string): PrivateKey static fromWIF(str: string): PrivateKey static fromRandom(network?: string): PrivateKey static fromBuffer(buf: Buffer, network: string | Networks.Type): PrivateKey static fromHex(hex: string, network: string | Networks.Type): PrivateKey static getValidationError(data: string): any | null static isValid(data: string): boolean } export class PublicKey { constructor(source: string | PublicKey | crypto.Point, extra?: object) readonly point: crypto.Point readonly compressed: boolean readonly network: Networks.Network toDER(): Buffer toObject(): object toBuffer(): Buffer toAddress(network?: string | Networks.Type): Address toString(): string toHex(): string inspect(): string static fromPrivateKey(privateKey: PrivateKey): PublicKey static fromBuffer(buf: Buffer, strict?: boolean): PublicKey static fromDER(buf: Buffer, strict?: boolean): PublicKey //static fromPoint(point: Point, compressed: boolean): PublicKey; //static fromX(odd: boolean, x: Point): PublicKey; static fromString(str: string): PublicKey static fromHex(hex: string): PublicKey static getValidationError(data: string): any | null static isValid(data: string): boolean } export class Message { constructor(message: string | Buffer) readonly messageBuffer: Buffer sign(privateKey: PrivateKey): string verify(address: string | Address, signature: string): boolean toObject(): object toJSON(): string toString(): string inspect(): string static sign(message: string | Buffer, privateKey: PrivateKey): string static verify(message: string | Buffer, address: string | Address, signature: string): boolean static MAGIC_BYTES: Buffer static magicHash(): string static fromString(str: string): Message static fromJSON(json: string): Message static fromObject(obj: object): Message } export class Mnemonic { constructor(data: string | Array<string>, wordList?: Array<string>) readonly wordList: Array<string> readonly phrase: string toSeed(passphrase?: string): Buffer toHDPrivateKey(passphrase: string, network: string | number): HDPrivateKey toString(): string inspect(): string static fromRandom(wordlist?: Array<string>): Mnemonic static fromString(mnemonic: string, wordList?: Array<string>): Mnemonic static isValid(mnemonic: string, wordList?: Array<string>): boolean static fromSeed(seed: Buffer, wordlist: Array<string>): Mnemonic } export class HDPrivateKey { constructor(data?: string | Buffer | object) readonly hdPublicKey: HDPublicKey readonly xprivkey: Buffer readonly xpubkey: Buffer readonly network: Networks.Network readonly depth: number readonly privateKey: PrivateKey readonly publicKey: PublicKey readonly fingerPrint: Buffer derive(arg: string | number, hardened?: boolean): HDPrivateKey deriveChild(arg: string | number, hardened?: boolean): HDPrivateKey deriveNonCompliantChild(arg: string | number, hardened?: boolean): HDPrivateKey toString(): string toObject(): object toJSON(): object toBuffer(): Buffer toHex(): string inspect(): string static fromRandom(): HDPrivateKey static fromString(str: string): HDPrivateKey static fromObject(obj: object): HDPrivateKey static fromSeed(hexa: string | Buffer, network: string | Networks.Type): HDPrivateKey static fromBuffer(buf: Buffer): HDPrivateKey static fromHex(hex: string): HDPrivateKey static isValidPath(arg: string | number, hardened: boolean): boolean static isValidSerialized(data: string | Buffer, network?: string | Networks.Type): boolean static getSerializedError(data: string | Buffer, network?: string | Networks.Type): any | null } export class HDPublicKey { constructor(arg: string | Buffer | object) readonly xpubkey: Buffer readonly network: Networks.Network readonly depth: number readonly publicKey: PublicKey readonly fingerPrint: Buffer derive(arg: string | number, hardened?: boolean): HDPublicKey deriveChild(arg: string | number, hardened?: boolean): HDPublicKey toString(): string toObject(): object toJSON(): object toBuffer(): Buffer toHex(): string inspect(): string static fromString(str: string): HDPublicKey static fromObject(obj: object): HDPublicKey static fromBuffer(buf: Buffer): HDPublicKey static fromHex(hex: string): HDPublicKey static fromHDPrivateKey(hdPrivateKey: HDPrivateKey): HDPublicKey static isValidPath(arg: string | number): boolean static isValidSerialized(data: string | Buffer, network?: string | Networks.Type): boolean static getSerializedError(data: string | Buffer, network?: string | Networks.Type): any | null } export namespace Script { const types: { DATA_OUT: string } interface IOpChunk { buf: Buffer len: number opcodenum: number } function buildMultisigOut(publicKeys: PublicKey[], threshold: number, opts: object): Script function buildMultisigIn( pubkeys: PublicKey[], threshold: number, signatures: Buffer[], opts: object ): Script function buildPublicKeyHashOut(address: Address | PublicKey | string): Script function buildPublicKeyOut(pubkey: PublicKey): Script function buildDataOut(data: string | Buffer, encoding?: string): Script function buildSafeDataOut(data: (string | Buffer)[]): Script function buildScriptHashOut(script: Script): Script function buildPublicKeyIn(signature: crypto.Signature | Buffer, sigtype: number): Script function buildPublicKeyHashIn( publicKey: PublicKey, signature: crypto.Signature | Buffer, sigtype: number ): Script function fromAddress(address: string | Address): Script function fromASM(str: string): Script function fromHex(hex: string): Script function fromString(str: string): Script function fromBuffer(buf: Buffer): Script function empty(): Script namespace Interpreter { interface InterpretState { step: any mainstack: any altstack: any } type StepListenerFunction = (step: any, stack: any[], altstack: any[]) => void } export class Interpreter { static SCRIPT_ENABLE_MAGNETIC_OPCODES: number static SCRIPT_ENABLE_MONOLITH_OPCODES: number static SCRIPT_VERIFY_STRICTENC: number static SCRIPT_ENABLE_SIGHASH_FORKID: number static SCRIPT_VERIFY_LOW_S: number static SCRIPT_VERIFY_NULLFAIL: number static SCRIPT_VERIFY_DERSIG: number static SCRIPT_VERIFY_MINIMALDATA: number static SCRIPT_VERIFY_NULLDUMMY: number static SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS: number static SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY: number static SCRIPT_VERIFY_CHECKSEQUENCEVERIFY: number static MAX_SCRIPT_ELEMENT_SIZE: number static MAXIMUM_ELEMENT_SIZE: number stepListener?: Interpreter.StepListenerFunction errstr?: string verify: ( inputScript: Script, outputScript: Script, txn: Transaction, nin: number, flags: any, satoshisBN: crypto.BN ) => boolean } } export class Script { constructor(data?: string | object) chunks: Array<Script.IOpChunk> set(obj: object): this toBuffer(): Buffer toASM(): string toString(): string toHex(): string isPublicKeyHashOut(): boolean isPublicKeyHashIn(): boolean getPublicKey(): Buffer getPublicKeyHash(): Buffer isPublicKeyOut(): boolean isPublicKeyIn(): boolean isScriptHashOut(): boolean isWitnessScriptHashOut(): boolean isWitnessPublicKeyHashOut(): boolean isWitnessProgram(): boolean isScriptHashIn(): boolean isMultisigOut(): boolean isMultisigIn(): boolean isDataOut(): boolean isSafeDataOut(): boolean getData(): Buffer isPushOnly(): boolean classify(): string classifyInput(): string classifyOutput(): string isStandard(): boolean prepend(obj: any): this add(obj: any): this hasCodeseparators(): boolean removeCodeseparators(): this equals(script: Script): boolean getAddressInfo(): Address | boolean findAndDelete(script: Script): this checkMinimalPush(i: number): boolean getSignatureOperationsCount(accurate: boolean): number toAddress(network?: string): Address } export namespace Networks { type Type = 'mainnet' | 'livenet' | 'testnet' interface Network { readonly name: string readonly alias: string } const livenet: Network const mainnet: Network const testnet: Network function add(data: any): Network function remove(network: Network): void function get(args: string | number | Network, keys: string | string[]): Network } export class Address { readonly hashBuffer: Buffer readonly network: Networks.Network readonly type: string constructor( data: Buffer | Uint8Array | string | object, network?: Networks.Type | string, type?: string ) static fromString(address: string, network: Networks.Type): Address static fromPublicKey(data: PublicKey, network: Networks.Type): Address static fromPrivateKey(privateKey: PrivateKey, network: Networks.Type): Address static fromPublicKeyHash(hash: Buffer | Uint8Array, network: Networks.Type): Address static fromScriptHash(hash: Buffer | Uint8Array, network: Networks.Type): Address toBuffer(): Buffer } export class Unit { static fromBTC(amount: number): Unit static fromMilis(amount: number): Unit static fromBits(amount: number): Unit static fromSatoshis(amount: number): Unit constructor(amount: number, unitPreference: string) toBTC(): number toMilis(): number toBits(): number toSatoshis(): number } export namespace util { namespace preconditions { function checkState(condition: any, message: any) function checkArgument(condition: any, argumentName: string, message?: any, docsPath?: string) function checkArgumentType(argument, type, argumentName) } } export namespace deps { namespace _ { function isString(t: any): boolean function isNumber(t: any): boolean } }