@dashevo/dashcore-lib
Version:
A pure and powerful JavaScript Dash library.
292 lines (253 loc) • 8.8 kB
TypeScript
import { Address } from '../Address';
import { Network } from '../Network';
import { PublicKey } from '../PublicKey';
import { Signature } from '../crypto/Signature';
/**
* A Bitcoin transaction script. Each transaction's inputs and outputs
* has a script that is evaluated to validate its spending.
*
* See https://en.bitcoin.it/wiki/Script
*
* @constructor
* @param {Object|string|Buffer=} from optional data to populate script
*/
export class Script {
constructor(from: any | string | Buffer);
chunks: any[];
/**
* @returns {boolean} if this is a pay to pubkey hash output script
*/
isPublicKeyHashOut(): boolean;
/**
* @returns {boolean} if this is a pay to public key hash input script
*/
isPublicKeyHashIn(): boolean;
/**
* @returns {boolean} if this is a public key output script
*/
isPublicKeyOut(): boolean;
/**
* @returns {boolean} if this is a pay to public key input script
*/
isPublicKeyIn(): boolean;
/**
* @returns {boolean} if this is a p2sh output script
*/
isScriptHashOut(): boolean;
/**
* @returns {boolean} if this is a p2sh input script
* Note that these are frequently indistinguishable from pubkeyhashin
*/
isScriptHashIn(): boolean;
/**
* @returns {boolean} if this is a mutlsig output script
*/
isMultisigOut(): boolean;
/**
* @returns {boolean} if this is a multisig input script
*/
isMultisigIn(): boolean;
/**
* @returns {boolean} true if this is a valid standard OP_RETURN output
*/
isDataOut(): boolean;
/**
* Retrieve the associated data for this script.
* In the case of a pay to public key hash or P2SH, return the hash.
* In the case of a standard OP_RETURN, return the data
* @returns {Buffer}
*/
getData(): Buffer;
/**
* @returns {boolean} if the script is only composed of data pushing
* opcodes or small int opcodes (OP_0, OP_1, ..., OP_16)
*/
isPushOnly(): boolean;
/**
* @returns {object} The Script type if it is a known form,
* or Script.UNKNOWN if it isn't
*/
classify(): any;
/**
* @returns {object} The Script type if it is a known form,
* or Script.UNKNOWN if it isn't
*/
classifyOutput(): any;
/**
* @returns {object} The Script type if it is a known form,
* or Script.UNKNOWN if it isn't
*/
classifyInput(): any;
/**
* @returns {boolean} if script is one of the known types
*/
isStandard(): boolean;
/**
* Adds a script element at the start of the script.
* @param {*} obj a string, number, Opcode, Buffer, or object to add
* @returns {Script} this script instance
*/
prepend(obj: any): Script;
/**
* Compares a script with another script
*/
equals(): void;
/**
* Adds a script element to the end of the script.
*
* @param {*} obj a string, number, Opcode, Buffer, or object to add
* @returns {Script} this script instance
*
*/
add(obj: any): Script;
/**
* @returns {Script} a new Multisig output script for given public keys,
* requiring m of those public keys to spend
* @param {PublicKey[]} publicKeys - list of all public keys controlling the output
* @param {number} threshold - amount of required signatures to spend the output
* @param {Object=} opts - Several options:
* - noSorting: defaults to false, if true, don't sort the given
* public keys before creating the script
*/
static buildMultisigOut(
publicKeys: PublicKey[],
threshold: number,
opts?: any
): Script;
/**
* A new Multisig input script for the given public keys, requiring m of those public keys to spend
*
* @param {PublicKey[]} pubkeys list of all public keys controlling the output
* @param {number} threshold amount of required signatures to spend the output
* @param {Array} signatures and array of signature buffers to append to the script
* @param {Object=} opts
* @param {boolean=} opts.noSorting don't sort the given public keys before creating the script (false by default)
* @param {Script=} opts.cachedMultisig don't recalculate the redeemScript
*
* @returns {Script}
*/
static buildMultisigIn(
pubkeys: PublicKey[],
threshold: number,
signatures: any[],
opts?: {
noSorting?: boolean;
cachedMultisig?: Script;
}
): Script;
/**
* A new P2SH Multisig input script for the given public keys, requiring m of those public keys to spend
*
* @param {PublicKey[]} pubkeys list of all public keys controlling the output
* @param {number} threshold amount of required signatures to spend the output
* @param {Array} signatures and array of signature buffers to append to the script
* @param {Object=} opts
* @param {boolean=} opts.noSorting don't sort the given public keys before creating the script (false by default)
* @param {Script=} opts.cachedMultisig don't recalculate the redeemScript
*
* @returns {Script}
*/
static buildP2SHMultisigIn(
pubkeys: PublicKey[],
threshold: number,
signatures: any[],
opts?: {
noSorting?: boolean;
cachedMultisig?: Script;
}
): Script;
/**
* @returns {Script} a new pay to public key hash output for the given
* address or public key
* @param {(Address|PublicKey)} to - destination address or public key
*/
static buildPublicKeyHashOut(to: Address | PublicKey): Script;
/**
* @returns {Script} a new pay to public key output for the given
* public key
*/
static buildPublicKeyOut(): Script;
/**
* @returns {Script} a new OP_RETURN script with data
* @param {(string|Buffer)} data - the data to embed in the output
* @param {(string)} encoding - the type of encoding of the string
*/
static buildDataOut(data: string | Buffer, encoding: string): Script;
/**
* @param {Script|Address} script - the redeemScript for the new p2sh output.
* It can also be a p2sh address
* @returns {Script} new pay to script hash script for given script
*/
static buildScriptHashOut(script: Script | Address): Script;
/**
* Builds a scriptSig (a script for an input) that signs a public key output script.
*
* @param {Signature|Buffer} signature - a Signature object, or the signature in DER canonical encoding
* @param {number=} sigtype - the type of the signature (defaults to SIGHASH_ALL)
*/
static buildPublicKeyIn(
signature: Signature | Buffer,
sigtype?: number
): void;
/**
* Builds a scriptSig (a script for an input) that signs a public key hash
* output script.
*
* @param {Buffer|string|PublicKey} publicKey
* @param {Signature|Buffer} signature - a Signature object, or the signature in DER canonical encoding
* @param {number=} sigtype - the type of the signature (defaults to SIGHASH_ALL)
*/
static buildPublicKeyHashIn(
publicKey: Buffer | string | PublicKey,
signature: Signature | Buffer,
sigtype?: number
): void;
/**
* @returns {Script} an empty script
*/
static empty(): Script;
/**
* @returns {Script} a new pay to script hash script that pays to this script
*/
toScriptHashOut(): Script;
/**
* @return {Script} an output script built from the address
*/
static fromAddress(): Script;
/**
* Will return the associated address information object
* @return {Address|boolean}
*/
getAddressInfo(): Address | boolean;
/**
* @param {Network=} network
* @return {Address|boolean} the associated address for this script if possible, or false
*/
toAddress(network?: Network): Address | boolean;
/**
* Analogous to bitcoind's FindAndDelete. Find and delete equivalent chunks,
* typically used with push data chunks. Note that this will find and delete
* not just the same data, but the same data with the same push data op as
* produced by default. i.e., if a pushdata in a tx does not use the minimal
* pushdata op, then when you try to remove the data it is pushing, it will not
* be removed, because they do not use the same pushdata op.
*/
findAndDelete(): void;
/**
* Comes from bitcoind's script interpreter CheckMinimalPush function
* @returns {boolean} if the chunk {i} is the smallest way to push that particular data.
*/
checkMinimalPush(): boolean;
/**
* Comes from bitcoind's script DecodeOP_N function
* @param {number} opcode
* @returns {number} numeric value in range of 0 to 16
*/
_decodeOP_N(opcode: number): number;
/**
* Comes from bitcoind's script GetSigOpCount(boolean) function
* @param {boolean} use current (true) or pre-version-0.6 (false) logic
* @returns {number} number of signature operations required by this script
*/
getSignatureOperationsCount(use: boolean): number;
}