@muirglacier/jellyfish-transaction
Version:
A collection of TypeScript + JavaScript tools and libraries for DeFi Blockchain developers to build decentralized finance for Bitcoin
776 lines • 28.8 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.OP_CODES = exports.OP_UNMAPPED = exports.numAsOPCode = void 0;
const smart_buffer_1 = require("smart-buffer");
const jellyfish_buffer_1 = require("@muirglacier/jellyfish-buffer");
const _buffer_1 = require("./_buffer");
const opcode_1 = require("./opcode");
const data_1 = require("./data");
const dftx_1 = require("./dftx");
const dftx_2 = require("./dftx/dftx");
const constants = __importStar(require("./constants"));
const control = __importStar(require("./control"));
const stack = __importStar(require("./stack"));
const splice = __importStar(require("./splice"));
const bitwise = __importStar(require("./bitwise"));
const arithmetic = __importStar(require("./arithmetic"));
const crypto = __importStar(require("./crypto"));
const expansion = __importStar(require("./expansion"));
const invalid = __importStar(require("./invalid"));
const dftx_pool_1 = require("./dftx/dftx_pool");
const dftx_token_1 = require("./dftx/dftx_token");
const dftx_account_1 = require("./dftx/dftx_account");
const dftx_oracles_1 = require("./dftx/dftx_oracles");
const dftx_loans_1 = require("./dftx/dftx_loans");
const dftx_misc_1 = require("./dftx/dftx_misc");
const dftx_governance_1 = require("./dftx/dftx_governance");
const dftx_icxorderbook_1 = require("./dftx/dftx_icxorderbook");
const dftx_masternode_1 = require("./dftx/dftx_masternode");
/**
* @param num to map as OPCode, 1 byte long
*/
function numAsOPCode(num) {
if (num > 0xff) {
throw new Error('OPCode should be 1 byte.');
}
const opCode = HEX_MAPPING[num];
if (opCode !== undefined) {
return opCode;
}
return new OP_UNMAPPED(num);
}
exports.numAsOPCode = numAsOPCode;
/**
* Unmapped OPCode are codes that don't yet have a class for it yet.
*/
class OP_UNMAPPED extends opcode_1.StaticCode {
constructor(code) {
super(code, `OP_UNMAPPED_CODE_${code.toString()}`);
}
}
exports.OP_UNMAPPED = OP_UNMAPPED;
/**
* All static OP_CODES & DEFI Custom Tx scripting
* @see https://github.com/DeFiCh/ain/blob/master/src/script/script.h
*/
exports.OP_CODES = {
/**
* Read SmartBuffer and create OPCode[] stack.
*
* Using P2WPKH redeem script as an example.
*
* Input Example: 1600140e7c0ab18b305bc987a266dc06de26fcfab4b56a
* 0x16 (VarUInt)
* 0x00 (OP_0)
* 6ab5b4fafc26de06dc66a287c95b308bb10a7c0e (formatted as big endian)
*
* Output Example:
* OP_0
* OP_PUSHDATA<RIPEMD160(SHA256(pubkey))>
*
* @param {SmartBuffer} buffer to read from
* @return {OPCode[]} read from buffer to OPCode
*/
fromBuffer(buffer) {
const length = jellyfish_buffer_1.readVarUInt(buffer);
if (length === 0) {
return [];
}
return _buffer_1.toOPCodes(smart_buffer_1.SmartBuffer.fromBuffer(buffer.readBuffer(length)));
},
/**
* Converts OPCode[] and write it into SmartBuffer.
*
* Using P2PKH redeem script as an example.
*
* Input Example:
* OP_DUP
* OP_HASH160
* OP_PUSHDATA<RIPEMD160(SHA256(pubkey))>
* OP_EQUALVERIFY
* OP_CHECKSIG
*
* Output Example: 1976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac
* 0x19 (VarUInt)
* 0x76 (OP_DUP)
* 0xa9 (OP_HASH160)
* 5981aa7f16f0e20cd5b2216abe4d7eeedb42de3b (formatted as big endian)
* 0x88 (OP_EQUALVERIFY)
* 0xac (OP_CHECKSIG)
*
* @param {OPCode[]} stack to convert into raw buffer
* @param {SmartBuffer} buffer to write to
*/
toBuffer(stack, buffer) {
const buffs = _buffer_1.toBuffer(stack);
// Write the len of buffer in bytes and then all the buffer
jellyfish_buffer_1.writeVarUInt(buffs.length, buffer);
buffer.writeBuffer(buffs);
},
OP_DEFI_TX: (dftx) => {
return new dftx_1.OP_DEFI_TX(dftx);
},
OP_DEFI_TX_POOL_SWAP: (poolSwap) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_pool_1.CPoolSwap.OP_CODE,
name: dftx_pool_1.CPoolSwap.OP_NAME,
data: poolSwap
});
},
OP_DEFI_TX_COMPOSITE_SWAP: (compositeSwap) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_pool_1.CCompositeSwap.OP_CODE,
name: dftx_pool_1.CCompositeSwap.OP_NAME,
data: compositeSwap
});
},
OP_DEFI_TX_POOL_ADD_LIQUIDITY: (poolAddLiquidity) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_pool_1.CPoolAddLiquidity.OP_CODE,
name: dftx_pool_1.CPoolAddLiquidity.OP_NAME,
data: poolAddLiquidity
});
},
OP_DEFI_TX_POOL_REMOVE_LIQUIDITY: (poolRemoveLiquidity) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_pool_1.CPoolRemoveLiquidity.OP_CODE,
name: dftx_pool_1.CPoolRemoveLiquidity.OP_NAME,
data: poolRemoveLiquidity
});
},
OP_DEFI_TX_POOL_CREATE_PAIR: (poolCreatePair) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_pool_1.CPoolCreatePair.OP_CODE,
name: dftx_pool_1.CPoolCreatePair.OP_NAME,
data: poolCreatePair
});
},
OP_DEFI_TX_POOL_UPDATE_PAIR: (poolCreatePair) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_pool_1.CPoolUpdatePair.OP_CODE,
name: dftx_pool_1.CPoolUpdatePair.OP_NAME,
data: poolCreatePair
});
},
OP_DEFI_TX_TOKEN_MINT: (tokenMint) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_token_1.CTokenMint.OP_CODE,
name: dftx_token_1.CTokenMint.OP_NAME,
data: tokenMint
});
},
OP_DEFI_TX_TOKEN_CREATE: (tokenCreate) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_token_1.CTokenCreate.OP_CODE,
name: dftx_token_1.CTokenCreate.OP_NAME,
data: tokenCreate
});
},
OP_DEFI_TX_TOKEN_UPDATE: (tokenUpdate) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_token_1.CTokenUpdate.OP_CODE,
name: dftx_token_1.CTokenUpdate.OP_NAME,
data: tokenUpdate
});
},
OP_DEFI_TX_TOKEN_UPDATE_ANY: (tokenUpdateAny) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_token_1.CTokenUpdateAny.OP_CODE,
name: dftx_token_1.CTokenUpdateAny.OP_NAME,
data: tokenUpdateAny
});
},
OP_DEFI_TX_UTXOS_TO_ACCOUNT: (utxosToAccount) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_account_1.CUtxosToAccount.OP_CODE,
name: dftx_account_1.CUtxosToAccount.OP_NAME,
data: utxosToAccount
});
},
OP_DEFI_TX_ACCOUNT_TO_UTXOS: (accountToUtxos) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_account_1.CAccountToUtxos.OP_CODE,
name: dftx_account_1.CAccountToUtxos.OP_NAME,
data: accountToUtxos
});
},
OP_DEFI_TX_ACCOUNT_TO_ACCOUNT: (accountToAccount) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_account_1.CAccountToAccount.OP_CODE,
name: dftx_account_1.CAccountToAccount.OP_NAME,
data: accountToAccount
});
},
OP_DEFI_TX_ANY_ACCOUNT_TO_ACCOUNT: (anyAccountToAccount) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_account_1.CAnyAccountToAccount.OP_CODE,
name: dftx_account_1.CAnyAccountToAccount.OP_NAME,
data: anyAccountToAccount
});
},
OP_DEFI_TX_APPOINT_ORACLE: (appointOracle) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_oracles_1.CAppointOracle.OP_CODE,
name: dftx_oracles_1.CAppointOracle.OP_NAME,
data: appointOracle
});
},
OP_DEFI_TX_REMOVE_ORACLE: (removeOracle) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_oracles_1.CRemoveOracle.OP_CODE,
name: dftx_oracles_1.CRemoveOracle.OP_NAME,
data: removeOracle
});
},
OP_DEFI_TX_UPDATE_ORACLE: (updateOracle) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_oracles_1.CUpdateOracle.OP_CODE,
name: dftx_oracles_1.CUpdateOracle.OP_NAME,
data: updateOracle
});
},
OP_DEFI_TX_SET_ORACLE_DATA: (setOracleData) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_oracles_1.CSetOracleData.OP_CODE,
name: dftx_oracles_1.CSetOracleData.OP_NAME,
data: setOracleData
});
},
OP_DEFI_TX_AUTO_AUTH_PREP: () => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_misc_1.CAutoAuthPrep.OP_CODE,
name: dftx_misc_1.CAutoAuthPrep.OP_NAME,
data: null
});
},
OP_DEFI_TX_CREATE_MASTER_NODE: (createMasterNode) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_masternode_1.CCreateMasternode.OP_CODE,
name: dftx_masternode_1.CCreateMasternode.OP_NAME,
data: createMasterNode
});
},
OP_DEFI_TX_RESIGN_MASTER_NODE: (resignMasternode) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_masternode_1.CResignMasternode.OP_CODE,
name: dftx_masternode_1.CResignMasternode.OP_NAME,
data: resignMasternode
});
},
OP_DEFI_TX_SET_GOVERNANCE: (setGovernance) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_governance_1.CSetGovernance.OP_CODE,
name: dftx_governance_1.CSetGovernance.OP_NAME,
data: setGovernance
});
},
OP_DEFI_TX_SET_GOVERNANCE_HEIGHT: (setGovernanceHeight) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_governance_1.CSetGovernanceHeight.OP_CODE,
name: dftx_governance_1.CSetGovernanceHeight.OP_NAME,
data: setGovernanceHeight
});
},
OP_DEFI_TX_ICX_CREATE_ORDER: (createOrder) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_icxorderbook_1.CICXCreateOrder.OP_CODE,
name: dftx_icxorderbook_1.CICXCreateOrder.OP_NAME,
data: createOrder
});
},
OP_DEFI_TX_ICX_MAKE_OFFER: (makeOffer) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_icxorderbook_1.CICXMakeOffer.OP_CODE,
name: dftx_icxorderbook_1.CICXMakeOffer.OP_NAME,
data: makeOffer
});
},
OP_DEFI_TX_ICX_CLOSE_ORDER: (closeOrder) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_icxorderbook_1.CICXCloseOrder.OP_CODE,
name: dftx_icxorderbook_1.CICXCloseOrder.OP_NAME,
data: closeOrder
});
},
OP_DEFI_TX_ICX_CLOSE_OFFER: (closeOffer) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_icxorderbook_1.CICXCloseOffer.OP_CODE,
name: dftx_icxorderbook_1.CICXCloseOffer.OP_NAME,
data: closeOffer
});
},
OP_DEFI_TX_CREATE_CFP: (createCfp) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_governance_1.CCreateCfp.OP_CODE,
name: dftx_governance_1.CCreateCfp.OP_NAME,
data: createCfp
});
},
OP_DEFI_TX_CREATE_VOC: (createVoc) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_governance_1.CCreateVoc.OP_CODE,
name: dftx_governance_1.CCreateVoc.OP_NAME,
data: createVoc
});
},
OP_DEFI_TX_VOTE: (vote) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_governance_1.CVote.OP_CODE,
name: dftx_governance_1.CVote.OP_NAME,
data: vote
});
},
OP_DEFI_TX_ICX_SUBMIT_DFC_HTLC: (icxSubmitDFCHTLC) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_icxorderbook_1.CICXSubmitDFCHTLC.OP_CODE,
name: dftx_icxorderbook_1.CICXSubmitDFCHTLC.OP_NAME,
data: icxSubmitDFCHTLC
});
},
OP_DEFI_TX_ICX_SUBMIT_EXT_HTLC: (icxSubmitEXTHTLC) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_icxorderbook_1.CICXSubmitEXTHTLC.OP_CODE,
name: dftx_icxorderbook_1.CICXSubmitEXTHTLC.OP_NAME,
data: icxSubmitEXTHTLC
});
},
OP_DEFI_TX_ICX_CLAIM_DFC_HTLC: (icxClaimDFCHTLC) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_icxorderbook_1.CICXClaimDFCHTLC.OP_CODE,
name: dftx_icxorderbook_1.CICXClaimDFCHTLC.OP_NAME,
data: icxClaimDFCHTLC
});
},
OP_DEFI_TX_SET_LOAN_SCHEME: (setLoanScheme) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_loans_1.CSetLoanScheme.OP_CODE,
name: dftx_loans_1.CSetLoanScheme.OP_NAME,
data: setLoanScheme
});
},
OP_DEFI_TX_DESTROY_LOAN_SCHEME: (destroyLoanScheme) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_loans_1.CDestroyLoanScheme.OP_CODE,
name: dftx_loans_1.CDestroyLoanScheme.OP_NAME,
data: destroyLoanScheme
});
},
OP_DEFI_TX_SET_DEFAULT_LOAN_SCHEME: (setDefaultLoanScheme) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_loans_1.CSetDefaultLoanScheme.OP_CODE,
name: dftx_loans_1.CSetDefaultLoanScheme.OP_NAME,
data: setDefaultLoanScheme
});
},
OP_DEFI_TX_SET_COLLATERAL_TOKEN: (setCollateralToken) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_loans_1.CSetCollateralToken.OP_CODE,
name: dftx_loans_1.CSetCollateralToken.OP_NAME,
data: setCollateralToken
});
},
OP_DEFI_TX_SET_LOAN_TOKEN: (setLoanToken) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_loans_1.CSetLoanToken.OP_CODE,
name: dftx_loans_1.CSetLoanToken.OP_NAME,
data: setLoanToken
});
},
OP_DEFI_TX_UPDATE_LOAN_TOKEN: (updateLoanToken) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_loans_1.CUpdateLoanToken.OP_CODE,
name: dftx_loans_1.CUpdateLoanToken.OP_NAME,
data: updateLoanToken
});
},
OP_DEFI_TX_CREATE_VAULT: (createVault) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_loans_1.CCreateVault.OP_CODE,
name: dftx_loans_1.CCreateVault.OP_NAME,
data: createVault
});
},
OP_DEFI_TX_UPDATE_VAULT: (updateVault) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_loans_1.CUpdateVault.OP_CODE,
name: dftx_loans_1.CUpdateVault.OP_NAME,
data: updateVault
});
},
OP_DEFI_TX_DEPOSIT_TO_VAULT: (depositToVault) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_loans_1.CDepositToVault.OP_CODE,
name: dftx_loans_1.CDepositToVault.OP_NAME,
data: depositToVault
});
},
OP_DEFI_TX_WITHDRAW_FROM_VAULT: (WithdrawFromVault) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_loans_1.CWithdrawFromVault.OP_CODE,
name: dftx_loans_1.CWithdrawFromVault.OP_NAME,
data: WithdrawFromVault
});
},
OP_DEFI_TX_CLOSE_VAULT: (closeVault) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_loans_1.CCloseVault.OP_CODE,
name: dftx_loans_1.CCloseVault.OP_NAME,
data: closeVault
});
},
OP_DEFI_TX_TAKE_LOAN: (takeLoan) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_loans_1.CTakeLoan.OP_CODE,
name: dftx_loans_1.CTakeLoan.OP_NAME,
data: takeLoan
});
},
OP_DEFI_TX_PAYBACK_LOAN: (paybackLoan) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_loans_1.CPaybackLoan.OP_CODE,
name: dftx_loans_1.CPaybackLoan.OP_NAME,
data: paybackLoan
});
},
OP_DEFI_TX_AUCTION_BID: (placeAuctionBid) => {
return new dftx_1.OP_DEFI_TX({
signature: dftx_2.CDfTx.SIGNATURE,
type: dftx_loans_1.CPlaceAuctionBid.OP_CODE,
name: dftx_loans_1.CPlaceAuctionBid.OP_NAME,
data: placeAuctionBid
});
},
OP_0: new constants.OP_0(),
OP_FALSE: new constants.OP_FALSE(),
/**
* OP_PUSHDATA1 use OP_PUSHDATA
* OP_PUSHDATA2 use OP_PUSHDATA
* OP_PUSHDATA4 use OP_PUSHDATA
* @param {Buffer} buffer
* @param {'little' | 'big'} endian order
*/
OP_PUSHDATA: (buffer, endian) => {
return new data_1.OP_PUSHDATA(buffer, endian);
},
/**
* @param {Buffer} buffer in little endian
*/
OP_PUSHDATA_LE: (buffer) => {
return new data_1.OP_PUSHDATA(buffer, 'little');
},
/**
* @param {string} hex in little endian
*/
OP_PUSHDATA_HEX_LE: (hex) => {
return new data_1.OP_PUSHDATA(Buffer.from(hex, 'hex'), 'little');
},
// TODO: to map everything as class
// to be separated into concerns, stack, arithmetic, crypto, etc...
OP_1NEGATE: new constants.OP_1NEGATE(),
OP_RESERVED: new constants.OP_RESERVED(),
OP_1: new constants.OP_1(),
OP_TRUE: new constants.OP_TRUE(),
OP_2: new constants.OP_2(),
OP_3: new constants.OP_3(),
OP_4: new constants.OP_4(),
OP_5: new constants.OP_5(),
OP_6: new constants.OP_6(),
OP_7: new constants.OP_7(),
OP_8: new constants.OP_8(),
OP_9: new constants.OP_9(),
OP_10: new constants.OP_10(),
OP_11: new constants.OP_11(),
OP_12: new constants.OP_12(),
OP_13: new constants.OP_13(),
OP_14: new constants.OP_14(),
OP_15: new constants.OP_15(),
OP_16: new constants.OP_16(),
// control
OP_NOP: new control.OP_NOP(),
OP_VER: new control.OP_VER(),
OP_IF: new control.OP_IF(),
OP_NOTIF: new control.OP_NOTIF(),
OP_VERIF: new control.OP_VERIF(),
OP_VERNOTIF: new control.OP_VERNOTIF(),
OP_ELSE: new control.OP_ELSE(),
OP_ENDIF: new control.OP_ENDIF(),
OP_VERIFY: new control.OP_VERIFY(),
OP_RETURN: new control.OP_RETURN(),
// stack
OP_TOALTSTACK: new stack.OP_TOALTSTACK(),
OP_FROMALTSTACK: new stack.OP_FROMALTSTACK(),
OP_2DROP: new stack.OP_2DROP(),
OP_2DUP: new stack.OP_2DUP(),
OP_3DUP: new stack.OP_3DUP(),
OP_2OVER: new stack.OP_2OVER(),
OP_2ROT: new stack.OP_2ROT(),
OP_2SWAP: new stack.OP_2SWAP(),
OP_IFDUP: new stack.OP_IFDUP(),
OP_DEPTH: new stack.OP_DEPTH(),
OP_DROP: new stack.OP_DROP(),
OP_DUP: new stack.OP_DUP(),
OP_NIP: new stack.OP_NIP(),
OP_OVER: new stack.OP_OVER(),
OP_PICK: new stack.OP_PICK(),
OP_ROLL: new stack.OP_ROLL(),
OP_ROT: new stack.OP_ROT(),
OP_SWAP: new stack.OP_SWAP(),
OP_TUCK: new stack.OP_TUCK(),
// splice
OP_CAT: new splice.OP_CAT(),
OP_SUBSTR: new splice.OP_SUBSTR(),
OP_LEFT: new splice.OP_LEFT(),
OP_RIGHT: new splice.OP_RIGHT(),
OP_SIZE: new splice.OP_SIZE(),
// bitwise
OP_INVERT: new bitwise.OP_INVERT(),
OP_AND: new bitwise.OP_AND(),
OP_OR: new bitwise.OP_OR(),
OP_XOR: new bitwise.OP_XOR(),
OP_EQUAL: new bitwise.OP_EQUAL(),
OP_EQUALVERIFY: new bitwise.OP_EQUALVERIFY(),
OP_RESERVED1: new bitwise.OP_RESERVED1(),
OP_RESERVED2: new bitwise.OP_RESERVED2(),
// numeric
OP_1ADD: new arithmetic.OP_1ADD(),
OP_1SUB: new arithmetic.OP_1SUB(),
OP_2MUL: new arithmetic.OP_2MUL(),
OP_2DIV: new arithmetic.OP_2DIV(),
OP_NEGATE: new arithmetic.OP_NEGATE(),
OP_ABS: new arithmetic.OP_ABS(),
OP_NOT: new arithmetic.OP_NOT(),
OP_0NOTEQUAL: new arithmetic.OP_0NOTEQUAL(),
OP_ADD: new arithmetic.OP_ADD(),
OP_SUB: new arithmetic.OP_SUB(),
OP_MUL: new arithmetic.OP_MUL(),
OP_DIV: new arithmetic.OP_DIV(),
OP_MOD: new arithmetic.OP_MOD(),
OP_LSHIFT: new arithmetic.OP_LSHIFT(),
OP_RSHIFT: new arithmetic.OP_RSHIFT(),
OP_BOOLAND: new arithmetic.OP_BOOLAND(),
OP_BOOLOR: new arithmetic.OP_BOOLOR(),
OP_NUMEQUAL: new arithmetic.OP_NUMEQUAL(),
OP_NUMEQUALVERIFY: new arithmetic.OP_NUMEQUALVERIFY(),
OP_NUMNOTEQUAL: new arithmetic.OP_NUMNOTEQUAL(),
OP_LESSTHAN: new arithmetic.OP_LESSTHAN(),
OP_GREATERTHAN: new arithmetic.OP_GREATERTHAN(),
OP_LESSTHANOREQUAL: new arithmetic.OP_LESSTHANOREQUAL(),
OP_GREATERTHANOREQUAL: new arithmetic.OP_GREATERTHANOREQUAL(),
OP_MIN: new arithmetic.OP_MIN(),
OP_MAX: new arithmetic.OP_MAX(),
OP_WITHIN: new arithmetic.OP_WITHIN(),
// crypto
OP_RIPEMD160: new crypto.OP_RIPEMD160(),
OP_SHA1: new crypto.OP_SHA1(),
OP_SHA256: new crypto.OP_SHA256(),
OP_HASH160: new crypto.OP_HASH160(),
OP_HASH256: new crypto.OP_HASH256(),
OP_CODESEPARATOR: new crypto.OP_CODESEPARATOR(),
OP_CHECKSIG: new crypto.OP_CHECKSIG(),
OP_CHECKSIGVERIFY: new crypto.OP_CHECKSIGVERIFY(),
OP_CHECKMULTISIG: new crypto.OP_CHECKMULTISIG(),
OP_CHECKMULTISIGVERIFY: new crypto.OP_CHECKMULTISIGVERIFY(),
// expansion
OP_NOP1: new expansion.OP_NOP1(),
OP_CHECKLOCKTIMEVERIFY: new expansion.OP_CHECKLOCKTIMEVERIFY(),
OP_NOP2: new expansion.OP_NOP2(),
OP_CHECKSEQUENCEVERIFY: new expansion.OP_CHECKSEQUENCEVERIFY(),
OP_NOP3: new expansion.OP_NOP3(),
OP_NOP4: new expansion.OP_NOP4(),
OP_NOP5: new expansion.OP_NOP5(),
OP_NOP6: new expansion.OP_NOP6(),
OP_NOP7: new expansion.OP_NOP7(),
OP_NOP8: new expansion.OP_NOP8(),
OP_NOP9: new expansion.OP_NOP9(),
OP_NOP10: new expansion.OP_NOP10(),
// invalid
OP_INVALIDOPCODE: new invalid.OP_INVALIDOPCODE()
};
/**
* Hex code mapping of all static OP_CODES
*/
const HEX_MAPPING = {
0x00: exports.OP_CODES.OP_0,
0x4f: exports.OP_CODES.OP_1NEGATE,
0x50: exports.OP_CODES.OP_RESERVED,
0x51: exports.OP_CODES.OP_1,
0x52: exports.OP_CODES.OP_2,
0x53: exports.OP_CODES.OP_3,
0x54: exports.OP_CODES.OP_4,
0x55: exports.OP_CODES.OP_5,
0x56: exports.OP_CODES.OP_6,
0x57: exports.OP_CODES.OP_7,
0x58: exports.OP_CODES.OP_8,
0x59: exports.OP_CODES.OP_9,
0x5a: exports.OP_CODES.OP_10,
0x5b: exports.OP_CODES.OP_11,
0x5c: exports.OP_CODES.OP_12,
0x5d: exports.OP_CODES.OP_13,
0x5e: exports.OP_CODES.OP_14,
0x5f: exports.OP_CODES.OP_15,
0x60: exports.OP_CODES.OP_16,
// control
0x61: exports.OP_CODES.OP_NOP,
0x62: exports.OP_CODES.OP_VER,
0x63: exports.OP_CODES.OP_IF,
0x64: exports.OP_CODES.OP_NOTIF,
0x65: exports.OP_CODES.OP_VERIF,
0x66: exports.OP_CODES.OP_VERNOTIF,
0x67: exports.OP_CODES.OP_ELSE,
0x68: exports.OP_CODES.OP_ENDIF,
0x69: exports.OP_CODES.OP_VERIFY,
0x6a: exports.OP_CODES.OP_RETURN,
// stack
0x6b: exports.OP_CODES.OP_TOALTSTACK,
0x6c: exports.OP_CODES.OP_FROMALTSTACK,
0x6d: exports.OP_CODES.OP_2DROP,
0x6e: exports.OP_CODES.OP_2DUP,
0x6f: exports.OP_CODES.OP_3DUP,
0x70: exports.OP_CODES.OP_2OVER,
0x71: exports.OP_CODES.OP_2ROT,
0x72: exports.OP_CODES.OP_2SWAP,
0x73: exports.OP_CODES.OP_IFDUP,
0x74: exports.OP_CODES.OP_DEPTH,
0x75: exports.OP_CODES.OP_DROP,
0x76: exports.OP_CODES.OP_DUP,
0x77: exports.OP_CODES.OP_NIP,
0x78: exports.OP_CODES.OP_OVER,
0x79: exports.OP_CODES.OP_PICK,
0x7a: exports.OP_CODES.OP_ROLL,
0x7b: exports.OP_CODES.OP_ROT,
0x7c: exports.OP_CODES.OP_SWAP,
0x7d: exports.OP_CODES.OP_TUCK,
// splice
0x7e: exports.OP_CODES.OP_CAT,
0x7f: exports.OP_CODES.OP_SUBSTR,
0x80: exports.OP_CODES.OP_LEFT,
0x81: exports.OP_CODES.OP_RIGHT,
0x82: exports.OP_CODES.OP_SIZE,
// bitwise
0x83: exports.OP_CODES.OP_INVERT,
0x84: exports.OP_CODES.OP_AND,
0x85: exports.OP_CODES.OP_OR,
0x86: exports.OP_CODES.OP_XOR,
0x87: exports.OP_CODES.OP_EQUAL,
0x88: exports.OP_CODES.OP_EQUALVERIFY,
0x89: exports.OP_CODES.OP_RESERVED1,
0x8a: exports.OP_CODES.OP_RESERVED2,
// numeric
0x8b: exports.OP_CODES.OP_1ADD,
0x8c: exports.OP_CODES.OP_1SUB,
0x8d: exports.OP_CODES.OP_2MUL,
0x8e: exports.OP_CODES.OP_2DIV,
0x8f: exports.OP_CODES.OP_NEGATE,
0x90: exports.OP_CODES.OP_ABS,
0x91: exports.OP_CODES.OP_NOT,
0x92: exports.OP_CODES.OP_0NOTEQUAL,
0x93: exports.OP_CODES.OP_ADD,
0x94: exports.OP_CODES.OP_SUB,
0x95: exports.OP_CODES.OP_MUL,
0x96: exports.OP_CODES.OP_DIV,
0x97: exports.OP_CODES.OP_MOD,
0x98: exports.OP_CODES.OP_LSHIFT,
0x99: exports.OP_CODES.OP_RSHIFT,
0x9a: exports.OP_CODES.OP_BOOLAND,
0x9b: exports.OP_CODES.OP_BOOLOR,
0x9c: exports.OP_CODES.OP_NUMEQUAL,
0x9d: exports.OP_CODES.OP_NUMEQUALVERIFY,
0x9e: exports.OP_CODES.OP_NUMNOTEQUAL,
0x9f: exports.OP_CODES.OP_LESSTHAN,
0xa0: exports.OP_CODES.OP_GREATERTHAN,
0xa1: exports.OP_CODES.OP_LESSTHANOREQUAL,
0xa2: exports.OP_CODES.OP_GREATERTHANOREQUAL,
0xa3: exports.OP_CODES.OP_MIN,
0xa4: exports.OP_CODES.OP_MAX,
0xa5: exports.OP_CODES.OP_WITHIN,
// crypto
0xa6: exports.OP_CODES.OP_RIPEMD160,
0xa7: exports.OP_CODES.OP_SHA1,
0xa8: exports.OP_CODES.OP_SHA256,
0xa9: exports.OP_CODES.OP_HASH160,
0xaa: exports.OP_CODES.OP_HASH256,
0xab: exports.OP_CODES.OP_CODESEPARATOR,
0xac: exports.OP_CODES.OP_CHECKSIG,
0xad: exports.OP_CODES.OP_CHECKSIGVERIFY,
0xae: exports.OP_CODES.OP_CHECKMULTISIG,
0xaf: exports.OP_CODES.OP_CHECKMULTISIGVERIFY,
// expansion
0xb0: exports.OP_CODES.OP_NOP1,
0xb1: exports.OP_CODES.OP_CHECKLOCKTIMEVERIFY,
0xb2: exports.OP_CODES.OP_CHECKSEQUENCEVERIFY,
0xb3: exports.OP_CODES.OP_NOP4,
0xb4: exports.OP_CODES.OP_NOP5,
0xb5: exports.OP_CODES.OP_NOP6,
0xb6: exports.OP_CODES.OP_NOP7,
0xb7: exports.OP_CODES.OP_NOP8,
0xb8: exports.OP_CODES.OP_NOP9,
0xb9: exports.OP_CODES.OP_NOP10,
// invalid
0xff: exports.OP_CODES.OP_INVALIDOPCODE
};
//# sourceMappingURL=mapping.js.map