UNPKG

@coolwallet/btc

Version:
912 lines (746 loc) 100 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports.getScriptSigningActions = getScriptSigningActions; exports.getScriptSigningPreActions = getScriptSigningPreActions; exports.getBTCArgument = getBTCArgument; exports.getWitness0Argument = getWitness0Argument; exports.getWitness1Argument = getWitness1Argument; exports.getUSDTArgument = getUSDTArgument; exports.getUSDTNewArgument = getUSDTNewArgument; var _core = require("@coolwallet/core"); var cryptoUtil = _interopRequireWildcard(require("./cryptoUtil")); var bufferUtil = _interopRequireWildcard(require("./bufferUtil")); var txUtil = _interopRequireWildcard(require("./transactionUtil")); var varuint = _interopRequireWildcard(require("./varuintUtil")); var _param = require("../config/param"); var _types = require("../config/types"); var _param2 = require("@coolwallet/core/lib/config/param"); var _versionUtil = require("./versionUtil"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } // script type 14, 15 only support for se version greater than 330. var getExtraTransactionType = function getExtraTransactionType(cardType, seVersion, redeemScriptType) { if ((0, _versionUtil.shouldUseLegacyScript10Or11)(cardType, seVersion)) { return redeemScriptType === _types.ScriptType.P2PKH ? '10' : '11'; } else { return redeemScriptType === _types.ScriptType.P2PKH ? '14' : '15'; } }; var getPath = /*#__PURE__*/function () { var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(addressIndex, purpose, pathType) { var path; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return _core.utils.getPath(_param.COIN_TYPE, addressIndex, 5, pathType, purpose); case 2: path = _context.sent; path = '15' + path; return _context.abrupt("return", path); case 5: case "end": return _context.stop(); } } }, _callee); })); return function getPath(_x, _x2, _x3) { return _ref.apply(this, arguments); }; }(); function getScriptSigningActions(_x4, _x5, _x6, _x7, _x8, _x9) { return _getScriptSigningActions.apply(this, arguments); } function _getScriptSigningActions() { _getScriptSigningActions = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee9(transport, redeemScriptType, appId, appPrivateKey, preparedData, seVersion) { var utxoArguments, extraTransactionType, actions, _actions, _utxoArguments, _actions2; return regeneratorRuntime.wrap(function _callee9$(_context9) { while (1) { switch (_context9.prev = _context9.next) { case 0: if (!((0, _versionUtil.shouldUseLegacyUtxoScript)(transport.cardType, seVersion) || redeemScriptType === _types.ScriptType.P2PKH)) { _context9.next = 7; break; } utxoArguments = preparedData.preparedInputs.map( /*#__PURE__*/function () { var _ref4 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(preparedInput) { var path, SEPath, outPoint, inputScriptType, inputAmount, inputHash; return regeneratorRuntime.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: _context4.next = 2; return getPath(preparedInput.addressIndex); case 2: path = _context4.sent; SEPath = Buffer.from("".concat(path), 'hex'); outPoint = preparedInput.preOutPointBuf; // TODO if (redeemScriptType === _types.ScriptType.P2PKH || redeemScriptType === _types.ScriptType.P2WPKH || redeemScriptType === _types.ScriptType.P2SH_P2WPKH) { inputScriptType = varuint.encode(0); } else { //(scriptType == ScriptType.P2WSH) inputScriptType = varuint.encode(1); } inputAmount = preparedInput.preValueBuf.reverse(); inputHash = cryptoUtil.hash160(preparedInput.pubkeyBuf); return _context4.abrupt("return", Buffer.concat([SEPath, outPoint, inputScriptType, inputAmount, inputHash]).toString('hex')); case 9: case "end": return _context4.stop(); } } }, _callee4); })); return function (_x32) { return _ref4.apply(this, arguments); }; }()); extraTransactionType = getExtraTransactionType(transport.cardType, seVersion, redeemScriptType); actions = utxoArguments.map(function (utxoArgument) { return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5() { return regeneratorRuntime.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: _context5.t0 = _core.tx.command; _context5.t1 = transport; _context5.t2 = appId; _context5.t3 = appPrivateKey; _context5.next = 6; return utxoArgument; case 6: _context5.t4 = _context5.sent; _context5.t5 = extraTransactionType; return _context5.abrupt("return", _context5.t0.executeUtxoScript.call(_context5.t0, _context5.t1, _context5.t2, _context5.t3, _context5.t4, _context5.t5)); case 9: case "end": return _context5.stop(); } } }, _callee5); })); }); return _context9.abrupt("return", { actions: actions }); case 7: if (!(redeemScriptType === _types.ScriptType.P2TR)) { _context9.next = 12; break; } _actions = preparedData.preparedInputs.map(function (preparedInput, index) { return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee6() { var SEPath; return regeneratorRuntime.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: _context6.t0 = Buffer; _context6.next = 3; return getPath(preparedInput.addressIndex, preparedInput.purposeIndex, _param2.PathType.BIP340); case 3: _context6.t1 = _context6.sent; SEPath = _context6.t0.from.call(_context6.t0, _context6.t1, 'hex'); return _context6.abrupt("return", _core.tx.command.executeUtxoSegmentScript(transport, appId, appPrivateKey, Buffer.concat([SEPath, bufferUtil.toReverseUintBuffer(index, 4)]).toString('hex'))); case 6: case "end": return _context6.stop(); } } }, _callee6); })); }); return _context9.abrupt("return", { actions: _actions }); case 12: _utxoArguments = preparedData.preparedInputs.map( /*#__PURE__*/function () { var _ref7 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee7(preparedInput) { var SEPath, outPoint, inputScript, _pubkeyToAddressAndOu, outScript, inputAmount; return regeneratorRuntime.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: _context7.t0 = Buffer; _context7.next = 3; return getPath(preparedInput.addressIndex, preparedInput.purposeIndex); case 3: _context7.t1 = _context7.sent; SEPath = _context7.t0.from.call(_context7.t0, _context7.t1, 'hex'); outPoint = preparedInput.preOutPointBuf; _context7.t2 = redeemScriptType; _context7.next = _context7.t2 === _types.ScriptType.P2SH_P2WPKH ? 9 : _context7.t2 === _types.ScriptType.P2WPKH ? 9 : _context7.t2 === _types.ScriptType.P2WSH ? 12 : 14; break; case 9: _pubkeyToAddressAndOu = (0, txUtil.pubkeyToAddressAndOutScript)(preparedInput.pubkeyBuf, _types.ScriptType.P2PKH), outScript = _pubkeyToAddressAndOu.outScript; inputScript = outScript; return _context7.abrupt("break", 15); case 12: inputScript = Buffer.from('', 'hex'); return _context7.abrupt("break", 15); case 14: throw new _core.error.SDKError(getScriptSigningActions.name, "Unsupport ScriptType '".concat(redeemScriptType, "'")); case 15: inputAmount = preparedInput.preValueBuf; return _context7.abrupt("return", Buffer.concat([SEPath, outPoint, Buffer.from(inputScript.length.toString(16), 'hex'), inputScript, inputAmount]).toString('hex')); case 17: case "end": return _context7.stop(); } } }, _callee7); })); return function (_x33) { return _ref7.apply(this, arguments); }; }()); _actions2 = _utxoArguments.map(function (utxoArgument) { return /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee8() { return regeneratorRuntime.wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: _context8.t0 = _core.tx.command; _context8.t1 = transport; _context8.t2 = appId; _context8.t3 = appPrivateKey; _context8.next = 6; return utxoArgument; case 6: _context8.t4 = _context8.sent; return _context8.abrupt("return", _context8.t0.executeUtxoSegmentScript.call(_context8.t0, _context8.t1, _context8.t2, _context8.t3, _context8.t4)); case 8: case "end": return _context8.stop(); } } }, _callee8); })); }); return _context9.abrupt("return", { actions: _actions2 }); case 15: case "end": return _context9.stop(); } } }, _callee9); })); return _getScriptSigningActions.apply(this, arguments); } function getScriptSigningPreActions(transport, appId, appPrivateKey, script, inputArgument) { // const argument = "00" + getBTCArgument(redeemScriptType, inputs, output, change);// keylength zero var argument = '00' + inputArgument; // keylength zero console.debug('argument: ', argument); var preActions = []; var sendScript = /*#__PURE__*/function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() { return regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return _core.tx.command.sendScript(transport, script); case 2: case "end": return _context2.stop(); } } }, _callee2); })); return function sendScript() { return _ref2.apply(this, arguments); }; }(); preActions.push(sendScript); var sendArgument = /*#__PURE__*/function () { var _ref3 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() { return regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return _core.tx.command.executeScript(transport, appId, appPrivateKey, argument); case 2: case "end": return _context3.stop(); } } }, _callee3); })); return function sendArgument() { return _ref3.apply(this, arguments); }; }(); preActions.push(sendArgument); return { preActions: preActions }; } function getBTCArgument(_x10, _x11, _x12, _x13) { return _getBTCArgument.apply(this, arguments); } function _getBTCArgument() { _getBTCArgument = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee10(scriptType, inputs, output, change) { var _txUtil$addressToOutS, outputType, outputHash, outputScriptType, outputHashBuf, outputAmount, haveChange, changeScriptType, changeAmount, changePath, prevouts, hashPrevouts, sequences, hashSequence; return regeneratorRuntime.wrap(function _callee10$(_context10) { while (1) { switch (_context10.prev = _context10.next) { case 0: _txUtil$addressToOutS = txUtil.addressToOutScript(output.address), outputType = _txUtil$addressToOutS.scriptType, outputHash = _txUtil$addressToOutS.outHash; if (outputHash) { _context10.next = 3; break; } throw new _core.error.SDKError(getBTCArgument.name, "OutputHash Undefined"); case 3: if (!(outputType === _types.ScriptType.P2PKH || outputType === _types.ScriptType.P2SH_P2WPKH || outputType === _types.ScriptType.P2WPKH)) { _context10.next = 8; break; } outputScriptType = varuint.encode(outputType); outputHashBuf = Buffer.from("000000000000000000000000".concat(outputHash.toString('hex')), 'hex'); _context10.next = 14; break; case 8: if (!(outputType === _types.ScriptType.P2WSH)) { _context10.next = 13; break; } outputScriptType = varuint.encode(outputType); outputHashBuf = Buffer.from(outputHash.toString('hex'), 'hex'); _context10.next = 14; break; case 13: throw new _core.error.SDKError(getBTCArgument.name, "Unsupport ScriptType '".concat(outputType, "'")); case 14: outputAmount = bufferUtil.toUintBuffer(output.value, 8); //[haveChange(1B)] [changeScriptType(1B)] [changeAmount(8B)] [changePath(21B)] if (!change) { _context10.next = 28; break; } if (change.pubkeyBuf) { _context10.next = 18; break; } throw new _core.error.SDKError(getBTCArgument.name, 'Public Key not exists !!'); case 18: haveChange = varuint.encode(1); changeScriptType = bufferUtil.toUintBuffer(scriptType, 1); changeAmount = bufferUtil.toUintBuffer(change.value, 8); _context10.t0 = Buffer; _context10.next = 24; return _core.utils.getPath(_param.COIN_TYPE, change.addressIndex); case 24: _context10.t1 = _context10.sent; changePath = _context10.t0.from.call(_context10.t0, _context10.t1, 'hex'); _context10.next = 32; break; case 28: haveChange = Buffer.from('00', 'hex'); changeScriptType = Buffer.from('00', 'hex'); changeAmount = bufferUtil.toUintBuffer(0, 8); //)Buffer.from('0000000000000000', 'hex'); changePath = bufferUtil.toUintBuffer(0, 21); //Buffer.from('000000000000000000000000000000000000000000', 'hex'); case 32: prevouts = inputs.map(function (input) { return Buffer.concat([Buffer.from(input.preTxHash, 'hex').reverse(), bufferUtil.toReverseUintBuffer(input.preIndex, 4)]); }); hashPrevouts = cryptoUtil.doubleSha256(Buffer.concat(prevouts)); sequences = inputs.map(function (input) { return Buffer.concat([input.sequence ? bufferUtil.toReverseUintBuffer(input.sequence, 4) : Buffer.from('ffffffff', 'hex')]); }); hashSequence = cryptoUtil.doubleSha256(Buffer.concat(sequences)); return _context10.abrupt("return", Buffer.concat([outputScriptType, outputAmount, outputHashBuf, haveChange, changeScriptType, changeAmount, changePath, hashPrevouts, hashSequence]).toString('hex')); case 37: case "end": return _context10.stop(); } } }, _callee10); })); return _getBTCArgument.apply(this, arguments); } function getWitness0Argument(_x14, _x15, _x16, _x17) { return _getWitness0Argument.apply(this, arguments); } function _getWitness0Argument() { _getWitness0Argument = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee11(scriptType, inputs, output, change) { var _txUtil$addressToOutS2, outputType, scriptPubKey, reverseVersion, prevouts, hashPrevouts, sequences, hashSequences, zeroPadding, outputScriptType, outputHashBuf, outputAmount, haveChange, changeScriptType, changeAmount, changePath, reverseSequence, reverseLockTime, reverseHashType; return regeneratorRuntime.wrap(function _callee11$(_context11) { while (1) { switch (_context11.prev = _context11.next) { case 0: _txUtil$addressToOutS2 = txUtil.addressToOutScript(output.address), outputType = _txUtil$addressToOutS2.scriptType, scriptPubKey = _txUtil$addressToOutS2.scriptPubKey; if (scriptPubKey) { _context11.next = 3; break; } throw new _core.error.SDKError(getWitness0Argument.name, "OutputHash Undefined"); case 3: reverseVersion = Buffer.from('02000000', 'hex'); prevouts = inputs.map(function (input) { return Buffer.concat([Buffer.from(input.preTxHash, 'hex').reverse(), bufferUtil.toReverseUintBuffer(input.preIndex, 4)]); }); hashPrevouts = cryptoUtil.doubleSha256(Buffer.concat(prevouts)); sequences = inputs.map(function (input) { return Buffer.concat([input.sequence ? bufferUtil.toReverseUintBuffer(input.sequence, 4) : Buffer.from('ffffffff', 'hex')]); }); hashSequences = cryptoUtil.doubleSha256(Buffer.concat(sequences)); zeroPadding = Buffer.from('00000000', 'hex'); if (!(outputType === _types.ScriptType.P2PKH || outputType === _types.ScriptType.P2SH_P2WPKH || outputType === _types.ScriptType.P2WPKH)) { _context11.next = 14; break; } outputScriptType = varuint.encode(outputType); outputHashBuf = Buffer.from("000000000000000000000000".concat(scriptPubKey.toString('hex')), 'hex'); _context11.next = 20; break; case 14: if (!(outputType === _types.ScriptType.P2WSH || outputType === _types.ScriptType.P2TR)) { _context11.next = 19; break; } outputScriptType = varuint.encode(outputType); outputHashBuf = scriptPubKey; _context11.next = 20; break; case 19: throw new _core.error.SDKError(getBTCArgument.name, "Unsupport ScriptType '".concat(outputType, "'")); case 20: outputAmount = bufferUtil.toUintBuffer(output.value, 8); //[haveChange(1B)] [changeScriptType(1B)] [changeAmount(8B)] [changePath(21B)] if (!change) { _context11.next = 34; break; } if (change.pubkeyBuf) { _context11.next = 24; break; } throw new _core.error.SDKError(getWitness0Argument.name, 'Public Key not exists !!'); case 24: haveChange = varuint.encode(1); changeScriptType = bufferUtil.toUintBuffer(scriptType, 1); changeAmount = bufferUtil.toUintBuffer(change.value, 8); _context11.t0 = Buffer; _context11.next = 30; return _core.utils.getPath(_param.COIN_TYPE, change.addressIndex, 5, _param2.PathType.BIP32, change.purposeIndex); case 30: _context11.t1 = _context11.sent; changePath = _context11.t0.from.call(_context11.t0, _context11.t1, 'hex'); _context11.next = 38; break; case 34: haveChange = Buffer.from('00', 'hex'); changeScriptType = Buffer.from('00', 'hex'); changeAmount = bufferUtil.toUintBuffer(0, 8); //)Buffer.from('0000000000000000', 'hex'); changePath = bufferUtil.toUintBuffer(0, 21); //Buffer.from('000000000000000000000000000000000000000000', 'hex'); case 38: reverseSequence = Buffer.from('fdffffff', 'hex'); reverseLockTime = Buffer.from('00000000', 'hex'); reverseHashType = Buffer.from('01000000', 'hex'); return _context11.abrupt("return", Buffer.concat([reverseVersion, hashPrevouts, hashSequences, zeroPadding, outputScriptType, outputAmount, outputHashBuf, haveChange, changeScriptType, changeAmount, changePath, reverseSequence, reverseLockTime, reverseHashType]).toString('hex')); case 42: case "end": return _context11.stop(); } } }, _callee11); })); return _getWitness0Argument.apply(this, arguments); } function getWitness1Argument(_x18, _x19, _x20, _x21) { return _getWitness1Argument.apply(this, arguments); } function _getWitness1Argument() { _getWitness1Argument = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee12(scriptType, inputs, output, change) { var _txUtil$addressToOutS3, outputType, scriptPubKey, reverseVersion, reverseLockTime, prevouts, hashPrevouts, amounts, hashAmounts, scriptPubkeys, hashScriptPubkeys, sequences, hashSequences, zeroPadding, outputHashBuf, outputScriptType, outputAmount, haveChange, changeScriptType, changeAmount, changePath; return regeneratorRuntime.wrap(function _callee12$(_context12) { while (1) { switch (_context12.prev = _context12.next) { case 0: _txUtil$addressToOutS3 = txUtil.addressToOutScript(output.address), outputType = _txUtil$addressToOutS3.scriptType, scriptPubKey = _txUtil$addressToOutS3.scriptPubKey; if (scriptPubKey) { _context12.next = 3; break; } throw new _core.error.SDKError(getWitness1Argument.name, "OutputHash Undefined"); case 3: reverseVersion = Buffer.from('02000000', 'hex'); reverseLockTime = Buffer.from('00000000', 'hex'); prevouts = inputs.map(function (input) { return Buffer.concat([Buffer.from(input.preTxHash, 'hex').reverse(), bufferUtil.toReverseUintBuffer(input.preIndex, 4)]); }); hashPrevouts = cryptoUtil.sha256(Buffer.concat(prevouts)); amounts = inputs.map(function (input) { return Buffer.concat([(0, txUtil.toReverseUintBuffer)(input.preValue, 8)]); }); hashAmounts = cryptoUtil.sha256(Buffer.concat(amounts)); scriptPubkeys = inputs.map(function (input) { var inputScript; switch (scriptType) { case _types.ScriptType.P2SH_P2WPKH: case _types.ScriptType.P2WPKH: case _types.ScriptType.P2TR: { if (!input.pubkeyBuf) { throw new _core.error.SDKError(getWitness1Argument.name, 'Public Key not exists !!'); } var _pubkeyToAddressAndOu2 = (0, txUtil.pubkeyToAddressAndOutScript)(input.pubkeyBuf, scriptType), outScript = _pubkeyToAddressAndOu2.outScript; inputScript = outScript; break; } case _types.ScriptType.P2WSH: inputScript = Buffer.from('', 'hex'); break; default: throw new _core.error.SDKError(getScriptSigningActions.name, "Unsupport ScriptType '".concat(scriptType)); } return Buffer.concat([Buffer.from(inputScript.length.toString(16), 'hex'), inputScript]); }); hashScriptPubkeys = cryptoUtil.sha256(Buffer.concat(scriptPubkeys)); sequences = inputs.map(function (input) { return Buffer.concat([input.sequence ? bufferUtil.toReverseUintBuffer(input.sequence, 4) : Buffer.from('fdffffff', 'hex')]); }); hashSequences = cryptoUtil.sha256(Buffer.concat(sequences)); zeroPadding = Buffer.from('00000000', 'hex'); if (!(outputType === _types.ScriptType.P2PKH || outputType === _types.ScriptType.P2SH_P2WPKH || outputType === _types.ScriptType.P2WPKH)) { _context12.next = 18; break; } outputHashBuf = Buffer.from("000000000000000000000000".concat(scriptPubKey.toString('hex')), 'hex'); _context12.next = 23; break; case 18: if (!(outputType === _types.ScriptType.P2WSH || outputType === _types.ScriptType.P2TR)) { _context12.next = 22; break; } outputHashBuf = scriptPubKey; _context12.next = 23; break; case 22: throw new _core.error.SDKError(getBTCArgument.name, "Unsupport ScriptType '".concat(outputType, "'")); case 23: outputScriptType = varuint.encode(outputType); outputAmount = bufferUtil.toUintBuffer(output.value, 8); //[haveChange(1B)] [changeScriptType(1B)] [changeAmount(8B)] [changePath(21B)] if (!change) { _context12.next = 38; break; } if (change.pubkeyBuf) { _context12.next = 28; break; } throw new _core.error.SDKError(getWitness1Argument.name, 'Public Key not exists !!'); case 28: haveChange = varuint.encode(1); changeScriptType = bufferUtil.toUintBuffer(scriptType, 1); changeAmount = bufferUtil.toUintBuffer(change.value, 8); _context12.t0 = Buffer; _context12.next = 34; return _core.utils.getPath(_param.COIN_TYPE, change.addressIndex, 5, _param2.PathType.BIP340, change.purposeIndex); case 34: _context12.t1 = _context12.sent; changePath = _context12.t0.from.call(_context12.t0, _context12.t1, 'hex'); _context12.next = 42; break; case 38: haveChange = Buffer.from('00', 'hex'); changeScriptType = Buffer.from('00', 'hex'); changeAmount = bufferUtil.toUintBuffer(0, 8); //)Buffer.from('0000000000000000', 'hex'); changePath = bufferUtil.toUintBuffer(0, 21); //Buffer.from('000000000000000000000000000000000000000000', 'hex'); case 42: return _context12.abrupt("return", Buffer.concat([reverseVersion, reverseLockTime, hashPrevouts, hashAmounts, hashScriptPubkeys, hashSequences, zeroPadding, outputScriptType, outputAmount, outputHashBuf, haveChange, changeScriptType, changeAmount, changePath]).toString('hex')); case 43: case "end": return _context12.stop(); } } }, _callee12); })); return _getWitness1Argument.apply(this, arguments); } function getUSDTArgument(_x22, _x23, _x24, _x25, _x26) { return _getUSDTArgument.apply(this, arguments); } function _getUSDTArgument() { _getUSDTArgument = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee13(scriptType, inputs, output, value, change) { var _txUtil$addressToOutS4, outputType, outputHash, outputScriptType, outputHashBuf, outputAmount, haveChange, changeScriptType, changeAmount, changePath, prevouts, hashPrevouts, sequences, hashSequence, usdtAmount; return regeneratorRuntime.wrap(function _callee13$(_context13) { while (1) { switch (_context13.prev = _context13.next) { case 0: _txUtil$addressToOutS4 = txUtil.addressToOutScript(output.address), outputType = _txUtil$addressToOutS4.scriptType, outputHash = _txUtil$addressToOutS4.outHash; if (outputHash) { _context13.next = 3; break; } throw new _core.error.SDKError(getBTCArgument.name, "OutputHash Undefined"); case 3: if (!(outputType === _types.ScriptType.P2PKH || outputType === _types.ScriptType.P2SH_P2WPKH || outputType === _types.ScriptType.P2WPKH)) { _context13.next = 8; break; } outputScriptType = varuint.encode(outputType); outputHashBuf = Buffer.from("000000000000000000000000".concat(outputHash.toString('hex')), 'hex'); _context13.next = 14; break; case 8: if (!(outputType === _types.ScriptType.P2WSH)) { _context13.next = 13; break; } outputScriptType = varuint.encode(outputType); outputHashBuf = Buffer.from(outputHash.toString('hex'), 'hex'); _context13.next = 14; break; case 13: throw new _core.error.SDKError(getBTCArgument.name, "Unsupport ScriptType '".concat(outputType, "'")); case 14: outputAmount = bufferUtil.toUintBuffer(output.value, 8); //[haveChange(1B)] [changeScriptType(1B)] [changeAmount(8B)] [changePath(21B)] if (!change) { _context13.next = 28; break; } if (change.pubkeyBuf) { _context13.next = 18; break; } throw new _core.error.SDKError(getBTCArgument.name, 'Public Key not exists !!'); case 18: haveChange = varuint.encode(1); changeScriptType = bufferUtil.toUintBuffer(scriptType, 1); changeAmount = bufferUtil.toUintBuffer(change.value, 8); _context13.t0 = Buffer; _context13.next = 24; return _core.utils.getPath(_param.COIN_TYPE, change.addressIndex); case 24: _context13.t1 = _context13.sent; changePath = _context13.t0.from.call(_context13.t0, _context13.t1, 'hex'); _context13.next = 32; break; case 28: haveChange = Buffer.from('00', 'hex'); changeScriptType = Buffer.from('00', 'hex'); changeAmount = bufferUtil.toUintBuffer(0, 8); //)Buffer.from('0000000000000000', 'hex'); changePath = bufferUtil.toUintBuffer(0, 21); //Buffer.from('000000000000000000000000000000000000000000', 'hex'); case 32: prevouts = inputs.map(function (input) { return Buffer.concat([Buffer.from(input.preTxHash, 'hex').reverse(), bufferUtil.toReverseUintBuffer(input.preIndex, 4)]); }); hashPrevouts = cryptoUtil.doubleSha256(Buffer.concat(prevouts)); sequences = inputs.map(function (input) { return Buffer.concat([input.sequence ? bufferUtil.toReverseUintBuffer(input.sequence, 4) : Buffer.from('ffffffff', 'hex')]); }); hashSequence = cryptoUtil.doubleSha256(Buffer.concat(sequences)); usdtAmount = bufferUtil.toUintBuffer(value, 8); return _context13.abrupt("return", Buffer.concat([outputScriptType, outputAmount, outputHashBuf, haveChange, changeScriptType, changeAmount, changePath, hashPrevouts, hashSequence, usdtAmount]).toString('hex')); case 38: case "end": return _context13.stop(); } } }, _callee13); })); return _getUSDTArgument.apply(this, arguments); } function getUSDTNewArgument(_x27, _x28, _x29, _x30, _x31) { return _getUSDTNewArgument.apply(this, arguments); } function _getUSDTNewArgument() { _getUSDTNewArgument = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee14(scriptType, inputs, output, value, change) { var _txUtil$addressToOutS5, outputType, outputHash, reverseVersion, prevouts, hashPrevouts, sequences, hashSequences, zeroPadding, usdtDust, outputScriptType, outputHashBuf, usdtAmount, haveChange, changeScriptType, changeAmount, changePath, reverseSequence, reverseLockTime, reverseHashType; return regeneratorRuntime.wrap(function _callee14$(_context14) { while (1) { switch (_context14.prev = _context14.next) { case 0: _txUtil$addressToOutS5 = txUtil.addressToOutScript(output.address), outputType = _txUtil$addressToOutS5.scriptType, outputHash = _txUtil$addressToOutS5.outHash; if (outputHash) { _context14.next = 3; break; } throw new _core.error.SDKError(getBTCArgument.name, "OutputHash Undefined"); case 3: reverseVersion = Buffer.from('02000000', 'hex'); prevouts = inputs.map(function (input) { return Buffer.concat([Buffer.from(input.preTxHash, 'hex').reverse(), bufferUtil.toReverseUintBuffer(input.preIndex, 4)]); }); hashPrevouts = cryptoUtil.doubleSha256(Buffer.concat(prevouts)); sequences = inputs.map(function (input) { return Buffer.concat([input.sequence ? bufferUtil.toReverseUintBuffer(input.sequence, 4) : Buffer.from('ffffffff', 'hex')]); }); hashSequences = cryptoUtil.doubleSha256(Buffer.concat(sequences)); zeroPadding = Buffer.from('00000000', 'hex'); usdtDust = bufferUtil.toUintBuffer(output.value, 8); if (!(outputType === _types.ScriptType.P2PKH || outputType === _types.ScriptType.P2SH_P2WPKH || outputType === _types.ScriptType.P2WPKH)) { _context14.next = 15; break; } outputScriptType = varuint.encode(outputType); outputHashBuf = Buffer.from("000000000000000000000000".concat(outputHash.toString('hex')), 'hex'); _context14.next = 21; break; case 15: if (!(outputType === _types.ScriptType.P2WSH)) { _context14.next = 20; break; } outputScriptType = varuint.encode(outputType); outputHashBuf = Buffer.from(outputHash.toString('hex'), 'hex'); _context14.next = 21; break; case 20: throw new _core.error.SDKError(getBTCArgument.name, "Unsupport ScriptType '".concat(outputType, "'")); case 21: usdtAmount = bufferUtil.toUintBuffer(value, 8); //[haveChange(1B)] [changeScriptType(1B)] [changeAmount(8B)] [changePath(21B)] if (!change) { _context14.next = 35; break; } if (change.pubkeyBuf) { _context14.next = 25; break; } throw new _core.error.SDKError(getWitness1Argument.name, 'Public Key not exists !!'); case 25: haveChange = varuint.encode(1); changeScriptType = bufferUtil.toUintBuffer(scriptType, 1); changeAmount = bufferUtil.toUintBuffer(change.value, 8); _context14.t0 = Buffer; _context14.next = 31; return _core.utils.getPath(_param.COIN_TYPE, change.addressIndex, 5, _param2.PathType.BIP32, change.purposeIndex); case 31: _context14.t1 = _context14.sent; changePath = _context14.t0.from.call(_context14.t0, _context14.t1, 'hex'); _context14.next = 39; break; case 35: haveChange = Buffer.from('00', 'hex'); changeScriptType = Buffer.from('00', 'hex'); changeAmount = bufferUtil.toUintBuffer(0, 8); //)Buffer.from('0000000000000000', 'hex'); changePath = bufferUtil.toUintBuffer(0, 21); //Buffer.from('000000000000000000000000000000000000000000', 'hex'); case 39: reverseSequence = Buffer.from('fdffffff', 'hex'); reverseLockTime = Buffer.from('00000000', 'hex'); reverseHashType = Buffer.from('01000000', 'hex'); return _context14.abrupt("return", Buffer.concat([reverseVersion, hashPrevouts, hashSequences, zeroPadding, outputScriptType, usdtDust, usdtAmount, outputHashBuf, haveChange, changeScriptType, changeAmount, changePath, reverseSequence, reverseLockTime, reverseHashType]).toString('hex')); case 43: case "end": return _context14.stop(); } } }, _callee14); })); return _getUSDTNewArgument.apply(this, arguments); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zY3JpcHRVdGlsLnRzIl0sIm5hbWVzIjpbImdldEV4dHJhVHJhbnNhY3Rpb25UeXBlIiwiY2FyZFR5cGUiLCJzZVZlcnNpb24iLCJyZWRlZW1TY3JpcHRUeXBlIiwiU2NyaXB0VHlwZSIsIlAyUEtIIiwiZ2V0UGF0aCIsImFkZHJlc3NJbmRleCIsInB1cnBvc2UiLCJwYXRoVHlwZSIsInV0aWxzIiwiQ09JTl9UWVBFIiwicGF0aCIsImdldFNjcmlwdFNpZ25pbmdBY3Rpb25zIiwidHJhbnNwb3J0IiwiYXBwSWQiLCJhcHBQcml2YXRlS2V5IiwicHJlcGFyZWREYXRhIiwidXR4b0FyZ3VtZW50cyIsInByZXBhcmVkSW5wdXRzIiwibWFwIiwicHJlcGFyZWRJbnB1dCIsIlNFUGF0aCIsIkJ1ZmZlciIsImZyb20iLCJvdXRQb2ludCIsInByZU91dFBvaW50QnVmIiwiUDJXUEtIIiwiUDJTSF9QMldQS0giLCJpbnB1dFNjcmlwdFR5cGUiLCJ2YXJ1aW50IiwiZW5jb2RlIiwiaW5wdXRBbW91bnQiLCJwcmVWYWx1ZUJ1ZiIsInJldmVyc2UiLCJpbnB1dEhhc2giLCJjcnlwdG9VdGlsIiwiaGFzaDE2MCIsInB1YmtleUJ1ZiIsImNvbmNhdCIsInRvU3RyaW5nIiwiZXh0cmFUcmFuc2FjdGlvblR5cGUiLCJhY3Rpb25zIiwidXR4b0FyZ3VtZW50IiwidHgiLCJjb21tYW5kIiwiZXhlY3V0ZVV0eG9TY3JpcHQiLCJQMlRSIiwiaW5kZXgiLCJwdXJwb3NlSW5kZXgiLCJQYXRoVHlwZSIsIkJJUDM0MCIsImV4ZWN1dGVVdHhvU2VnbWVudFNjcmlwdCIsImJ1ZmZlclV0aWwiLCJ0b1JldmVyc2VVaW50QnVmZmVyIiwiUDJXU0giLCJvdXRTY3JpcHQiLCJpbnB1dFNjcmlwdCIsImVycm9yIiwiU0RLRXJyb3IiLCJuYW1lIiwibGVuZ3RoIiwiZ2V0U2NyaXB0U2lnbmluZ1ByZUFjdGlvbnMiLCJzY3JpcHQiLCJpbnB1dEFyZ3VtZW50IiwiYXJndW1lbnQiLCJjb25zb2xlIiwiZGVidWciLCJwcmVBY3Rpb25zIiwic2VuZFNjcmlwdCIsInB1c2giLCJzZW5kQXJndW1lbnQiLCJleGVjdXRlU2NyaXB0IiwiZ2V0QlRDQXJndW1lbnQiLCJzY3JpcHRUeXBlIiwiaW5wdXRzIiwib3V0cHV0IiwiY2hhbmdlIiwidHhVdGlsIiwiYWRkcmVzc1RvT3V0U2NyaXB0IiwiYWRkcmVzcyIsIm91dHB1dFR5cGUiLCJvdXRwdXRIYXNoIiwib3V0SGFzaCIsIm91dHB1dFNjcmlwdFR5cGUiLCJvdXRwdXRIYXNoQnVmIiwib3V0cHV0QW1vdW50IiwidG9VaW50QnVmZmVyIiwidmFsdWUiLCJoYXZlQ2hhbmdlIiwiY2hhbmdlU2NyaXB0VHlwZSIsImNoYW5nZUFtb3VudCIsImNoYW5nZVBhdGgiLCJwcmV2b3V0cyIsImlucHV0IiwicHJlVHhIYXNoIiwicHJlSW5kZXgiLCJoYXNoUHJldm91dHMiLCJkb3VibGVTaGEyNTYiLCJzZXF1ZW5jZXMiLCJzZXF1ZW5jZSIsImhhc2hTZXF1ZW5jZSIsImdldFdpdG5lc3MwQXJndW1lbnQiLCJzY3JpcHRQdWJLZXkiLCJyZXZlcnNlVmVyc2lvbiIsImhhc2hTZXF1ZW5jZXMiLCJ6ZXJvUGFkZGluZyIsIkJJUDMyIiwicmV2ZXJzZVNlcXVlbmNlIiwicmV2ZXJzZUxvY2tUaW1lIiwicmV2ZXJzZUhhc2hUeXBlIiwiZ2V0V2l0bmVzczFBcmd1bWVudCIsInNoYTI1NiIsImFtb3VudHMiLCJwcmVWYWx1ZSIsImhhc2hBbW91bnRzIiwic2NyaXB0UHVia2V5cyIsImhhc2hTY3JpcHRQdWJrZXlzIiwiZ2V0VVNEVEFyZ3VtZW50IiwidXNkdEFtb3VudCIsImdldFVTRFROZXdBcmd1bWVudCIsInVzZHREdXN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFDQTs7Ozs7Ozs7OztBQUVBO0FBQ0EsSUFBTUEsdUJBQXVCLEdBQUcsU0FBMUJB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