@taquito/sapling 15.1.0 → 16.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/taquito-sapling.js +1 -2
- package/dist/lib/taquito-sapling.js.map +1 -1
- package/dist/lib/version.js +2 -2
- package/dist/taquito-sapling.es6.js +0 -1
- package/dist/taquito-sapling.es6.js.map +1 -1
- package/dist/taquito-sapling.umd.js +0 -1
- package/dist/taquito-sapling.umd.js.map +1 -1
- package/package.json +7 -7
|
@@ -276,8 +276,7 @@ class SaplingToolkit {
|
|
|
276
276
|
if (!input.isSpent && sumSelectedInputs.isLessThan(amountMutez)) {
|
|
277
277
|
const txAmount = helpers_1.convertValueToBigNumber(input.value);
|
|
278
278
|
sumSelectedInputs = sumSelectedInputs.plus(txAmount);
|
|
279
|
-
|
|
280
|
-
const { isSpent } = input, rest = __rest(input, ["isSpent"]);
|
|
279
|
+
const { isSpent: _isSpent } = input, rest = __rest(input, ["isSpent"]);
|
|
281
280
|
inputsToSpend.push(rest);
|
|
282
281
|
}
|
|
283
282
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taquito-sapling.js","sourceRoot":"","sources":["../../src/taquito-sapling.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,+CAAqC;AACrC,8CAA6E;AAC7E,0CASwB;AACxB,mCAA2D;AAC3D,yDAAsE;AAEtE,oEAAgE;AAChE,+FAA0F;AAS1F,oGAA8F;AAC9F,2CAA+D;AAG/D,6FAA0F;AAAjF,sIAAA,wBAAwB,OAAA;AACjC,8EAA0E;AAAjE,2HAAA,kBAAkB,OAAA;AAC3B,gFAA4E;AAAnE,6HAAA,mBAAmB,OAAA;AAC5B,8EAA0E;AAAjE,2HAAA,kBAAkB,OAAA;AAE3B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAa,cAAc;IAUzB,YACE,IAGC,EACD,sBAA8C,EAC9C,YAA4B,EAC5B,MAAM,GAAG,IAAI,2BAAiB,EAAE,EAChC,aAAa,GAAG,IAAI,8BAAa,EAAE,EACnC,gBAAgB,GAAG,IAAI,wDAAyB,CAC9C,IAAI,EACJ,aAAa,EACb,sBAAsB,EACtB,YAAY,CACb;QAvBH,uCAA0C;QAC1C,6BAA+B;QAC/B,mCAAyB;QACzB,4BAAkB;QAClB,gCAA8B;QAC9B,0BAAgB;QAChB,iCAA8B;QAC9B,oCAA6C;QAC7C,4CAAgE;QAiB9D,uBAAA,IAAI,wBAAwB,IAAI,CAAC,aAAa,EAAC;QAC/C,uBAAA,IAAI,cAAc,sBAAsB,CAAC,SAAS,EAAC;QACnD,uBAAA,IAAI,oBAAoB,sBAAsB,CAAC,eAAe,EAAC;QAC/D,uBAAA,IAAI,aAAa,sBAAsB,CAAC,QAAQ,EAAC;QACjD,uBAAA,IAAI,iBAAiB,YAAY,EAAC;QAClC,uBAAA,IAAI,WAAW,MAAM,EAAC;QACtB,uBAAA,IAAI,kBAAkB,aAAa,EAAC;QACpC,uBAAA,IAAI,qBAAqB,gBAAgB,EAAC;IAC5C,CAAC;IAED;;OAEG;IACG,2BAA2B;;YAC/B,IAAI,wBAAkD,CAAC;YAEvD,IAAI,wDAA+B,EAAE;gBACnC,MAAM,iBAAiB,GAAG,MAAM,mDAA0B,4BAA4B,EAAE,CAAC;gBACzF,wBAAwB,GAAG,IAAI,qDAAwB,CACrD,iBAAiB,EACjB,IAAI,CAAC,oBAAoB,EAAE,8CAE5B,CAAC;gBACF,uBAAA,IAAI,6BAA6B,wBAAwB,EAAC;aAC3D;YACD,+DAAsC;QACxC,CAAC;KAAA;IAED;;;;;;;OAOG;IACG,0BAA0B,CAAC,gBAAgD;;YAC/E,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAClE,gBAAgB,EAChB,IAAI,CAAC,iCAAiC,CACvC,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAElC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,gDAAuB,gBAAgB,CAC3F,cAAc,EACd,WAAW,EACX,8BAAkB,CACnB,CAAC;YAEF,MAAM,eAAe,GAAG,6CAAoB,uBAAuB,CAAC;gBAClE,MAAM;gBACN,OAAO;gBACP,OAAO;gBACP,IAAI;gBACJ,SAAS,EAAE,8BAAkB;gBAC7B,SAAS;aACV,CAAC,CAAC;YAEH,OAAO,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;KAAA;IAED;;;;;;OAMG;IACG,4BAA4B,CAAC,kBAAmD;;YACpF,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAClE,CAAC,kBAAkB,CAAC,EACpB,IAAI,CAAC,kCAAkC,CACxC,CAAC;YAEF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAEnE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,sBAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAE7F,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,gDAAuB,eAAe,CAC1F,EAAE,EACF,WAAW,EACX,SAAS,EACT,YAAY,CACb,CAAC;YAEF,MAAM,eAAe,GAAG,6CAAoB,uBAAuB,CAAC;gBAClE,MAAM;gBACN,OAAO;gBACP,OAAO;gBACP,IAAI;gBACJ,SAAS;gBACT,SAAS;aACV,CAAC,CAAC;YAEH,OAAO,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;KAAA;IAED;;;;;;;OAOG;IACG,yBAAyB,CAAC,eAA+C;;YAC7E,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAClE,eAAe,EACf,IAAI,CAAC,iCAAiC,CACvC,CAAC;YAEF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACjE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,gDAAuB,eAAe,CAC1F,cAAc,EACd,WAAW,EACX,8BAAkB,EAClB,YAAY,CACb,CAAC;YAEF,MAAM,eAAe,GAAG,6CAAoB,uBAAuB,CAAC;gBAClE,MAAM;gBACN,OAAO;gBACP,OAAO;gBACP,IAAI;gBACJ,SAAS,EAAE,8BAAkB;gBAC7B,SAAS;aACV,CAAC,CAAC;YAEH,OAAO,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;KAAA;IAEO,uBAAuB,CAC7B,QAAwC,EACxC,mBAAyC;QAEzC,MAAM,cAAc,GAId,EAAE,CAAC;QAET,IAAI,WAAW,GAAG,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC;QAEnC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;;YACzB,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK;gBAC7B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACzB,CAAC,CAAC,cAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;YACnD,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,sBAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YAC3D,MAAM,IAAI,SAAG,KAAK,CAAC,IAAI,mCAAI,wBAAY,CAAC;YACxC,IAAI,IAAI,CAAC,MAAM,0CAAiB,EAAE;gBAChC,MAAM,IAAI,mBAAW,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;aACtD;YAED,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;IACzC,CAAC;IAEa,OAAO;;YACnB,8CAAqB;gBACnB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,4CAAmB,kBAAkB,CAAC,EAAE,EAAE,0CAAiB,EAAE,EAAE,MAAM,CAAC,CAAC;gBAC9F,OAAO,IAAI,CAAC;aACb;iBAAM;gBACL,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,4CAAmB,wBAAwB,iDAEhE,MAAM,CACP,CAAC;gBACF,OAAO,IAAI,CAAC;aACb;QACH,CAAC;KAAA;IACa,eAAe,CAAC,WAAmB;;YAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAEtC,IAAI,GAAW,CAAC;YAChB,QAAQ,IAAI,EAAE;gBACZ,KAAK,KAAK,CAAC,CAAC;oBACV,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBAC/B,MAAM;iBACP;gBACD,KAAK,KAAK,CAAC,CAAC;oBACV,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBAC/B,MAAM;iBACP;gBACD,KAAK,KAAK,CAAC,CAAC;oBACV,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBAC/B,MAAM;iBACP;gBACD,OAAO,CAAC,CAAC;oBACP,MAAM,IAAI,uBAAe,CAAC,WAAW,EAAE,gDAAgD,CAAC,CAAC;iBAC1F;aACF;YAED,MAAM,kBAAkB,GAAG,kBAAU,CAAC,WAAW,EAAE,cAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACjE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAC7E,MAAM,iBAAiB,GAAG,MAAM,sCAAa,QAAQ,CAAC;gBACpD,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAC/C,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;aACxB,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;KAAA;IAEO,kCAAkC,CAAC,EAAU;QACnD,IAAI,uBAAe,CAAC,EAAE,CAAC,KAAK,wBAAgB,CAAC,KAAK,EAAE;YAClD,MAAM,IAAI,2BAAmB,CAC3B,EAAE,EACF,qEAAqE,CACtE,CAAC;SACH;IACH,CAAC;IAEO,iCAAiC,CAAC,EAAU;QAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAM,CAAC,IAAI,CAAC,EAAE;YAC/B,MAAM,IAAI,2BAAmB,CAAC,EAAE,EAAE,sDAAsD,CAAC,CAAC;SAC3F;IACH,CAAC;IAEO,oBAAoB;QAC1B,IAAI,iBAAoC,CAAC;QACzC,8CAAqB;YACnB,iBAAiB,GAAG,EAAE,SAAS,0CAAiB,EAAE,CAAC;SACpD;aAAM;YACL,iBAAiB,GAAG,EAAE,eAAe,gDAAuB,EAAE,CAAC;SAChE;QACD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAEa,mBAAmB,CAAC,WAAsB;;YACtD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;YAEjE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,eAAe,CAAC,qCAAqC,EAAE,CAAC;YAEnF,MAAM,aAAa,GAAY,EAAE,CAAC;YAClC,IAAI,iBAAiB,GAAG,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC;YAEzC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACzB,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,iBAAiB,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;oBAC/D,MAAM,QAAQ,GAAG,iCAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACtD,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACrD,
|
|
1
|
+
{"version":3,"file":"taquito-sapling.js","sourceRoot":"","sources":["../../src/taquito-sapling.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/version.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.VERSION = void 0;
|
|
4
4
|
// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!
|
|
5
5
|
exports.VERSION = {
|
|
6
|
-
"commitHash": "
|
|
7
|
-
"version": "
|
|
6
|
+
"commitHash": "49a724eb9d4947e2aed19bfa1462fa7ae7848add",
|
|
7
|
+
"version": "16.0.0"
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=version.js.map
|
|
@@ -1438,7 +1438,6 @@ class SaplingToolkit {
|
|
|
1438
1438
|
if (!input.isSpent && sumSelectedInputs.isLessThan(amountMutez)) {
|
|
1439
1439
|
const txAmount = convertValueToBigNumber(input.value);
|
|
1440
1440
|
sumSelectedInputs = sumSelectedInputs.plus(txAmount);
|
|
1441
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1442
1441
|
const rest = __rest(input, ["isSpent"]);
|
|
1443
1442
|
inputsToSpend.push(rest);
|
|
1444
1443
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taquito-sapling.es6.js","sources":["../src/error.ts","../src/sapling-tx-viewer/helpers.ts","../src/sapling-forger/sapling-forger.ts","../src/constants.ts","../src/sapling-tx-viewer/sapling-transaction-viewer.ts","../src/sapling-state/utils.ts","../src/sapling-state/sapling-state.ts","../src/sapling-module-wrapper.ts","../src/sapling-tx-builder/sapling-transactions-builder.ts","../src/sapling-keys/helpers.ts","../src/sapling-keys/in-memory-spending-key.ts","../src/sapling-keys/in-memory-viewing-key.ts","../src/sapling-keys/in-memory-proving-key.ts","../src/taquito-sapling.ts"],"sourcesContent":["/**\n * @category Error\n * @description Error indicating that the spending key is invalid\n */\nexport class InvalidSpendingKey extends Error {\n public name = 'InvalidSpendingKey';\n constructor(sk: string, reason = 'The spending key is invalid') {\n super(`${reason}: ${sk}`);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates an invalid Merkle root being passed\n */\nexport class InvalidMerkleRootError extends Error {\n public name = 'InvalidMerkleRootError';\n constructor(public root: string) {\n super(`The following Merkle tree is invalid: ${JSON.stringify(root)}`);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates a failure when trying to construct the Merkle tree\n */\nexport class TreeConstructionFailure extends Error {\n public name = 'TreeConstructionFailure';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error indicating that the memo is invalid\n */\nexport class InvalidMemo extends Error {\n public name = 'InvalidMemo';\n constructor(memo: string, errorDetail: string) {\n super(`The memo '${memo}' is invalid. ${errorDetail}`);\n }\n}\n\n/**\n * @category Error\n * @description Error indicating that there is not enough balance to prepare the sapling transaction\n */\nexport class InsufficientBalance extends Error {\n public name = 'InsufficientBalance';\n constructor(realBalance: string, amountToSpend: string) {\n super(`Unable to spend ${amountToSpend} mutez while the balance is only ${realBalance} mutez.`);\n }\n}\n\n/**\n * @category Error\n * @description Error indicating that a parameter is invalid\n */\nexport class InvalidParameter extends Error {\n public name = 'InvalidParameter';\n constructor(message: string) {\n super(message);\n }\n}\n","import { b58cencode, bytes2Char, Prefix, prefix } from '@taquito/utils';\nimport BigNumber from 'bignumber.js';\nimport { Input } from '../types';\n\nexport function memoHexToUtf8(memo: string) {\n const memoNoPadding = removeZeroPaddedBytesRight(memo);\n return memoNoPadding === '' ? memoNoPadding : bytes2Char(memoNoPadding);\n}\n\nfunction removeZeroPaddedBytesRight(memo: string) {\n const matchZeroRight = memo.match(/^(.*?)(00)+$/);\n return matchZeroRight ? matchZeroRight[1] : memo;\n}\n\nexport function readableFormat(saplingTransactionProperties: Omit<Input, 'position'>) {\n return {\n value: convertValueToBigNumber(saplingTransactionProperties.value),\n memo: memoHexToUtf8(Buffer.from(saplingTransactionProperties.memo).toString('hex')),\n paymentAddress: b58cencode(saplingTransactionProperties.paymentAddress, prefix[Prefix.ZET1]),\n };\n}\n\nexport function convertValueToBigNumber(value: Uint8Array) {\n return new BigNumber(Buffer.from(value).toString('hex'), 16);\n}\n\nexport function bufToUint8Array(buffer: Buffer) {\n return new Uint8Array(\n buffer.buffer,\n buffer.byteOffset,\n buffer.byteLength / Uint8Array.BYTES_PER_ELEMENT\n );\n}\n","import {\n SaplingTransactionInput,\n SaplingTransaction,\n SaplingTransactionOutput,\n SaplingTransactionPlaintext,\n} from '../types';\nimport { char2Bytes, toHexBuf } from '@taquito/utils';\nimport BigNumber from 'bignumber.js';\n\nexport class SaplingForger {\n /**\n * @description Forge sapling transactions\n * @param spendDescriptions the list of spend descriptions\n * @param outputDescriptions the list of output descriptions\n * @param signature signature hash\n * @param balance balance of the Sapling contract (input/output difference)\n * @param root root of the merkle tree\n * @returns Forged sapling transaction of type Buffer\n */\n forgeSaplingTransaction(tx: SaplingTransaction): Buffer {\n const spendBuf = this.forgeSpendDescriptions(tx.inputs);\n const spend = Buffer.concat([toHexBuf(spendBuf.length, 32), spendBuf]);\n\n const outputBuf = this.forgeOutputDescriptions(tx.outputs);\n const output = Buffer.concat([toHexBuf(outputBuf.length, 32), outputBuf]);\n\n const root = Buffer.from(tx.root, 'hex');\n\n return Buffer.concat([\n spend,\n output,\n tx.signature,\n toHexBuf(tx.balance, 64),\n root,\n toHexBuf(tx.boundData.length, 32),\n tx.boundData,\n ]);\n }\n\n /**\n * @description Forge list of spend descriptions\n * @param spendDescriptions list of spend descriptions\n * @returns concatenated forged bytes of type Buffer\n */\n forgeSpendDescriptions(spendDescriptions: SaplingTransactionInput[]): Buffer {\n const descriptions = [];\n\n for (const i of spendDescriptions) {\n const buff = this.forgeSpendDescription(i);\n descriptions.push(buff);\n }\n\n return Buffer.concat(descriptions);\n }\n\n forgeSpendDescription(desc: SaplingTransactionInput): Buffer {\n return Buffer.concat([\n desc.commitmentValue,\n desc.nullifier,\n desc.publicKeyReRandomization,\n desc.proof,\n desc.signature,\n ]);\n }\n\n /**\n * @description Forge list of output descriptions\n * @param outputDescriptions list of output descriptions\n * @returns concatenated forged bytes of type Buffer\n */\n forgeOutputDescriptions(outputDescriptions: SaplingTransactionOutput[]): Buffer {\n const descriptions = [];\n\n for (const i of outputDescriptions) {\n const buff = this.forgeOutputDescription(i);\n descriptions.push(buff);\n }\n\n return Buffer.concat(descriptions);\n }\n\n forgeOutputDescription(desc: SaplingTransactionOutput): Buffer {\n const ct = desc.ciphertext;\n\n return Buffer.concat([\n desc.commitment,\n desc.proof,\n ct.commitmentValue,\n ct.ephemeralPublicKey,\n toHexBuf(ct.payloadEnc.length, 32),\n ct.payloadEnc,\n ct.nonceEnc,\n ct.payloadOut,\n ct.nonceOut,\n ]);\n }\n\n forgeUnsignedTxInput(unsignedSpendDescription: Omit<SaplingTransactionInput, 'signature'>) {\n return Buffer.concat([\n unsignedSpendDescription.commitmentValue,\n unsignedSpendDescription.nullifier,\n unsignedSpendDescription.publicKeyReRandomization,\n unsignedSpendDescription.proof,\n ]);\n }\n\n forgeTransactionPlaintext(txPlainText: SaplingTransactionPlaintext) {\n const encodedMemo = Buffer.from(\n char2Bytes(txPlainText.memo).padEnd(txPlainText.memoSize, '0'),\n 'hex'\n );\n return Buffer.concat([\n txPlainText.diversifier,\n toHexBuf(new BigNumber(txPlainText.amount), 64),\n txPlainText.randomCommitmentTrapdoor,\n toHexBuf(txPlainText.memoSize, 32),\n encodedMemo,\n ]);\n }\n}\n","export const KDF_KEY = 'KDFSaplingForTezosV1';\nexport const OCK_KEY = 'OCK_keystringderivation_TEZOS';\nexport const DEFAULT_MEMO = '';\nexport const DEFAULT_BOUND_DATA = Buffer.from('', 'hex');\n","import * as sapling from '@airgap/sapling-wasm';\nimport BigNumber from 'bignumber.js';\nimport { hex2buf, mergebuf } from '@taquito/utils';\nimport { CommitmentsAndCiphertexts, SaplingDiffResponse } from '@taquito/rpc';\nimport blake from 'blakejs';\nimport { openSecretBox } from '@stablelib/nacl';\nimport { InMemoryViewingKey } from '../sapling-keys/in-memory-viewing-key';\nimport { bufToUint8Array, convertValueToBigNumber, readableFormat } from './helpers';\nimport { KDF_KEY, OCK_KEY } from '../constants';\nimport { Input, SaplingContractId, SaplingIncomingAndOutgoingTransaction } from '../types';\nimport { InvalidParameter } from '../error';\nimport { TzReadProvider } from '@taquito/taquito';\n\n/**\n * @description Allows to retrieve and decrypt sapling transactions using on a viewing key\n *\n * @param inMemoryViewingKey Holds the sapling viewing key\n * @param saplingContractId Address of the sapling contract or sapling id if the smart contract contains multiple sapling states\n * @param readProvider Allows to read data from the blockchain\n */\nexport class SaplingTransactionViewer {\n #viewingKeyProvider: InMemoryViewingKey;\n #readProvider: TzReadProvider;\n #saplingContractId: SaplingContractId;\n\n constructor(\n inMemoryViewingKey: InMemoryViewingKey,\n saplingContractId: SaplingContractId,\n readProvider: TzReadProvider\n ) {\n this.#viewingKeyProvider = inMemoryViewingKey;\n this.#saplingContractId = saplingContractId;\n this.#readProvider = readProvider;\n }\n\n /**\n * @description Retrieve the unspent balance associated with the configured viewing key and sapling state\n *\n * @returns the balance in mutez represented as a BigNumber\n *\n */\n async getBalance(): Promise<BigNumber> {\n let balance = new BigNumber(0);\n const { commitments_and_ciphertexts, nullifiers } = await this.getSaplingDiff();\n for (let i = 0; i < commitments_and_ciphertexts.length; i++) {\n const decrypted = await this.decryptCiphertextAsReceiver(commitments_and_ciphertexts[i]);\n if (decrypted) {\n const valueBigNumber = convertValueToBigNumber(decrypted.value);\n const isSpent = await this.isSpent(\n decrypted.paymentAddress,\n valueBigNumber.toString(),\n decrypted.randomCommitmentTrapdoor,\n i,\n nullifiers\n );\n if (!isSpent) {\n balance = balance.plus(valueBigNumber);\n }\n }\n }\n return balance;\n }\n\n /**\n * @description Retrieve all the incoming and outgoing transactions associated with the configured viewing key.\n * The response properties are in Uint8Array format; use the getIncomingAndOutgoingTransactions method for readable properties\n *\n */\n async getIncomingAndOutgoingTransactionsRaw() {\n const incoming = [];\n const outgoing = [];\n\n const { commitments_and_ciphertexts, nullifiers } = await this.getSaplingDiff();\n\n for (let i = 0; i < commitments_and_ciphertexts.length; i++) {\n const decryptedAsReceiver = await this.decryptCiphertextAsReceiver(\n commitments_and_ciphertexts[i]\n );\n const decryptedAsSender = await this.decryptCiphertextAsSender(\n commitments_and_ciphertexts[i]\n );\n if (decryptedAsReceiver) {\n const balance = convertValueToBigNumber(decryptedAsReceiver.value);\n const isSpent = await this.isSpent(\n decryptedAsReceiver.paymentAddress,\n balance.toString(),\n decryptedAsReceiver.randomCommitmentTrapdoor,\n i,\n nullifiers\n );\n incoming.push({ ...decryptedAsReceiver, isSpent, position: i });\n }\n if (decryptedAsSender) {\n outgoing.push(decryptedAsSender);\n }\n }\n return {\n incoming,\n outgoing,\n };\n }\n\n /**\n * @description Retrieve all the incoming and outgoing decoded transactions associated with the configured viewing key\n *\n */\n async getIncomingAndOutgoingTransactions(): Promise<SaplingIncomingAndOutgoingTransaction> {\n const tx = await this.getIncomingAndOutgoingTransactionsRaw();\n const incoming = tx.incoming.map(({ isSpent, ...rest }) => {\n return { ...readableFormat(rest), isSpent };\n });\n const outgoing = tx.outgoing.map((outgoingTx) => {\n return readableFormat(outgoingTx);\n });\n return { incoming, outgoing };\n }\n\n private async getSaplingDiff() {\n let saplingDiffResponse: SaplingDiffResponse;\n if (this.#saplingContractId.saplingId) {\n saplingDiffResponse = await this.#readProvider.getSaplingDiffById(\n { id: this.#saplingContractId.saplingId },\n 'head'\n );\n } else if (this.#saplingContractId.contractAddress) {\n saplingDiffResponse = await this.#readProvider.getSaplingDiffByContract(\n this.#saplingContractId.contractAddress,\n 'head'\n );\n } else {\n throw new InvalidParameter(\n 'A contract address or a sapling id was expected in the SaplingTransactionViewer constructor.'\n );\n }\n return saplingDiffResponse;\n }\n\n private async decryptCiphertextAsReceiver(\n commitmentsAndCiphertexts: CommitmentsAndCiphertexts\n ): Promise<Omit<Input, 'position'> | undefined> {\n const commitment = commitmentsAndCiphertexts[0];\n const { epk, payload_enc, nonce_enc } = commitmentsAndCiphertexts[1];\n\n const incomingViewingKey = await this.#viewingKeyProvider.getIncomingViewingKey();\n const keyAgreement = await sapling.keyAgreement(epk, incomingViewingKey);\n const keyAgreementHash = blake.blake2b(keyAgreement, Buffer.from(KDF_KEY), 32);\n\n const decrypted = await this.decryptCiphertext(\n keyAgreementHash,\n hex2buf(nonce_enc),\n hex2buf(payload_enc)\n );\n\n if (decrypted) {\n const {\n diversifier,\n value,\n randomCommitmentTrapdoor: rcm,\n memo,\n } = this.extractTransactionProperties(decrypted);\n const paymentAddress = bufToUint8Array(\n await sapling.getRawPaymentAddressFromIncomingViewingKey(incomingViewingKey, diversifier)\n );\n\n try {\n const valid = await sapling.verifyCommitment(\n commitment,\n paymentAddress,\n convertValueToBigNumber(value).toString(),\n rcm\n );\n if (valid) {\n return { value, memo, paymentAddress, randomCommitmentTrapdoor: rcm };\n }\n } catch (ex: any) {\n if (!/invalid value/.test(ex)) {\n throw ex;\n }\n }\n }\n }\n\n private async decryptCiphertextAsSender(\n commitmentsAndCiphertexts: CommitmentsAndCiphertexts\n ): Promise<Omit<Input, 'position'> | undefined> {\n const commitment = commitmentsAndCiphertexts[0];\n const { epk, payload_enc, nonce_enc, payload_out, nonce_out, cv } =\n commitmentsAndCiphertexts[1];\n\n const outgoingViewingKey = await this.#viewingKeyProvider.getOutgoingViewingKey();\n const concat = cv.concat(commitment, epk, outgoingViewingKey.toString('hex'));\n const outgoingCipherKey = blake.blake2b(Buffer.from(concat, 'hex'), Buffer.from(OCK_KEY), 32);\n\n const decryptedOut = await this.decryptCiphertext(\n outgoingCipherKey,\n hex2buf(nonce_out),\n hex2buf(payload_out)\n );\n\n if (decryptedOut) {\n const { recipientDiversifiedTransmissionKey: pkd, ephemeralPrivateKey: esk } =\n this.extractPkdAndEsk(decryptedOut);\n const keyAgreement = await sapling.keyAgreement(pkd, esk);\n const keyAgreementHash = blake.blake2b(keyAgreement, Buffer.from(KDF_KEY), 32);\n\n const decryptedEnc = await this.decryptCiphertext(\n keyAgreementHash,\n hex2buf(nonce_enc),\n hex2buf(payload_enc)\n );\n\n if (decryptedEnc) {\n const {\n diversifier,\n value,\n randomCommitmentTrapdoor: rcm,\n memo,\n } = this.extractTransactionProperties(decryptedEnc);\n const paymentAddress = mergebuf(diversifier, pkd);\n\n try {\n const isValid = await sapling.verifyCommitment(\n commitment,\n paymentAddress,\n convertValueToBigNumber(value).toString(),\n rcm\n );\n if (isValid) {\n return { value, memo, paymentAddress, randomCommitmentTrapdoor: rcm };\n }\n } catch (ex: any) {\n if (!/invalid value/.test(ex)) {\n throw ex;\n }\n }\n }\n }\n }\n\n private async decryptCiphertext(\n keyAgreementHash: Uint8Array,\n nonce: Uint8Array,\n payload: Uint8Array\n ) {\n return openSecretBox(keyAgreementHash, nonce, payload);\n }\n\n private extractTransactionProperties(decrypted: Uint8Array) {\n return {\n diversifier: decrypted.slice(0, 11),\n value: decrypted.slice(11, 19),\n randomCommitmentTrapdoor: decrypted.slice(19, 51),\n memoSize: decrypted.slice(51, 55),\n memo: decrypted.slice(55),\n };\n }\n\n private extractPkdAndEsk(decrypted: Uint8Array) {\n return {\n recipientDiversifiedTransmissionKey: decrypted.slice(0, 32),\n ephemeralPrivateKey: decrypted.slice(32),\n };\n }\n\n private async isSpent(\n address: Uint8Array,\n value: string,\n randomCommitmentTrapdoor: Uint8Array,\n position: number,\n nullifiers: string[]\n ) {\n const computedNullifier = await sapling.computeNullifier(\n this.#viewingKeyProvider.getFullViewingKey(),\n address,\n value,\n randomCommitmentTrapdoor,\n position\n );\n return nullifiers.includes(computedNullifier.toString('hex'));\n }\n}\n","/**\n *\n * @param leaves nodes in the tree that we would like to make pairs from\n * @returns a paired/chunked array: [a, b, c, d] => [[a, b], [c, d]]\n */\nexport function pairNodes<T>(leaves: T[]): (T | undefined)[][] {\n const pairs: (T | undefined)[][] = new Array(Math.ceil(leaves.length / 2));\n\n for (let i = 0; i < leaves.length / 2; i++) {\n pairs[i] = leaves.slice(i * 2, i * 2 + 2);\n }\n\n return pairs;\n}\n\n/**\n * @description helper function to assist in Lazy initializing an object\n */\nexport class Lazy<T> {\n private isInitialized = false;\n\n private value?: T = undefined;\n\n constructor(private readonly init: () => Promise<T>) {}\n\n // initializes the lazily initiated object\n public async get(): Promise<T> {\n if (!this.isInitialized) {\n this.value = await this.init();\n this.isInitialized = true;\n }\n\n return this.value as T;\n }\n}\n\n/**\n *\n * @param hex hexadecimal string we would like to swap\n * @returns a hexadecimal string with swapped endians\n */\nexport const changeEndianness = (hex: string): string => {\n if (hex.length % 2 != 0) {\n hex = '0' + hex;\n }\n const bytes = hex.match(/.{2}/g) || [];\n\n return bytes.reverse().join('');\n};\n","/**\n * Some code in this file was originally written or inspired by Airgap-it\n * https://github.com/airgap-it/airgap-coin-lib/blob/master/LICENSE.md\n *\n */\n\nimport { SaplingDiffResponse, SaplingTransactionCiphertext } from '@taquito/rpc';\nimport { InvalidMerkleRootError, TreeConstructionFailure } from '../error';\nimport { merkleHash } from '@airgap/sapling-wasm';\nimport { Lazy, pairNodes, changeEndianness } from './utils';\nimport { hex2Bytes, num2PaddedHex } from '@taquito/utils';\nimport BigNumber from 'bignumber.js';\nimport { MerkleTree, SaplingStateTree } from '../types';\n\n/**\n * @description The SaplingState class's main purpose is to provide a Merkle path for the forger and the transaction builder, so that it may verify that the Sapling transaction is valid\n *\n */\nexport class SaplingState {\n private stateTree: SaplingStateTree | undefined;\n\n private readonly uncommittedMerkleHash: string =\n '0100000000000000000000000000000000000000000000000000000000000000';\n private readonly uncommittedMerkleHashes: Lazy<Buffer[]> = new Lazy(() =>\n this.createUncommittedMerkleHashes()\n );\n\n constructor(public readonly height: number) {}\n\n public async getStateTree(\n stateDiff: SaplingDiffResponse,\n constructTree = true\n ): Promise<SaplingStateTree> {\n if (this.stateTree !== undefined && this.stateTree.root === stateDiff.root) {\n return this.stateTree;\n }\n\n const commitments: string[] = stateDiff.commitments_and_ciphertexts.map(\n ([commitment, _]: [string, SaplingTransactionCiphertext]) => commitment\n );\n\n let merkleTree: MerkleTree;\n if (constructTree) {\n merkleTree = await this.constructMerkleTree(commitments, 0);\n await this.validateMerkleTree(merkleTree, stateDiff.root);\n }\n\n this.stateTree = {\n height: this.height,\n size: commitments.length,\n root: stateDiff.root,\n tree: merkleTree,\n };\n\n return this.stateTree;\n }\n\n /**\n *\n * @param stateTree stateTree parameter that holds information details on our Merkle tree\n * @param position position of the hash in the Merkle tree\n * @returns a promise of a string that serves as the Merkle path that can be passed on to the Sapling forger or the transaction builder\n */\n public async getWitness(stateTree: SaplingStateTree, position: BigNumber): Promise<string> {\n const heightBuffer: Buffer = hex2Bytes(changeEndianness(num2PaddedHex(stateTree.height)));\n const posBuffer: Buffer = hex2Bytes(changeEndianness(num2PaddedHex(position, 64)));\n\n const neighbouringHashes: Buffer[] = await this.getNeighbouringHashes(\n [],\n stateTree.height,\n position,\n stateTree.tree\n );\n\n const witness: Buffer = neighbouringHashes\n .map((hash: Buffer) =>\n Buffer.concat([hex2Bytes(changeEndianness(num2PaddedHex(hash.length))), hash])\n )\n .reverse()\n .reduce((acc: Buffer, next: Buffer) => Buffer.concat([acc, next]));\n\n return Buffer.concat([heightBuffer, witness, posBuffer]).toString('hex');\n }\n\n /**\n *\n * @param leaves array of leaves or nodes that we want to construct the Merkle tree from\n * @param height height of the desired Merkle tree\n * @returns a promise of MerkleTree type object\n */\n private async constructMerkleTree(leaves: MerkleTree[], height: number): Promise<MerkleTree> {\n if (height === this.height && leaves.length === 1) {\n return leaves[0];\n }\n\n if (height === this.height || leaves.length > Math.pow(2, this.height - 1 - height)) {\n throw new TreeConstructionFailure(\n 'Children length exceeds maximum number of nodes in a merkle tree'\n );\n }\n\n const pairedLeaves: MerkleTree[][] = pairNodes(leaves);\n\n const updatedLeaves: MerkleTree[] = await Promise.all(\n pairedLeaves.map(async (chunk: MerkleTree[]) => {\n const left: Buffer = await this.getMerkleHash(chunk[0], height);\n const right: Buffer = await this.getMerkleHash(chunk[1], height);\n\n const parentHash = await merkleHash(height, left, right);\n\n return [parentHash.toString('hex'), chunk[0], chunk[1]] as [string, MerkleTree, MerkleTree];\n })\n );\n\n return this.constructMerkleTree(updatedLeaves, height + 1);\n }\n\n private async getMerkleHash(tree: MerkleTree, height: number): Promise<Buffer> {\n if (tree === undefined) {\n return (await this.uncommittedMerkleHashes.get())[height];\n } else if (typeof tree === 'string') {\n return Buffer.from(tree, 'hex');\n } else {\n return Buffer.from(tree[0], 'hex');\n }\n }\n\n /**\n *\n * @returns hashes of empty or null values to fill in the Merkle tree\n */\n private async createUncommittedMerkleHashes(): Promise<Buffer[]> {\n const res: Buffer[] = new Array(this.height);\n\n res[0] = Buffer.from(this.uncommittedMerkleHash, 'hex');\n for (let i = 0; i < this.height; i++) {\n const hash: Buffer = res[i];\n res[i + 1] = await merkleHash(i, hash, hash);\n }\n\n return res;\n }\n\n /**\n *\n * @param tree Merkle tree to validate\n * @param expectedRoot the expected merkle root to validate against\n */\n private async validateMerkleTree(tree: MerkleTree, expectedRoot: string) {\n const root: Buffer = await this.getMerkleHash(tree, this.height - 1);\n\n if (root.toString('hex') !== expectedRoot) {\n throw new InvalidMerkleRootError(root.toString('hex'));\n }\n }\n\n /**\n *\n * @param acc accumulator variable for the recursive function\n * @param height height of the tree\n * @param position position of the hash we would like find the neighbours of\n * @param tree the Merkle tree that we want to traverse\n * @returns the accumulated Buffer array of neighbouring hashes\n */\n private async getNeighbouringHashes(\n acc: Buffer[],\n height: number,\n position: BigNumber,\n tree: MerkleTree\n ): Promise<Buffer[]> {\n if (typeof tree === 'undefined') {\n throw new Error();\n } else if (typeof tree === 'string') {\n return acc;\n } else {\n let nextPos, nextTree, otherTree;\n\n const fullTree: BigNumber = new BigNumber(2).pow(height - 1);\n if (position.lt(fullTree)) {\n nextPos = position;\n nextTree = tree[1];\n otherTree = tree[2];\n } else {\n nextPos = position.minus(fullTree);\n nextTree = tree[2];\n otherTree = tree[1];\n }\n return this.getNeighbouringHashes(\n [await this.getMerkleHash(otherTree, height - 1), ...acc],\n height - 1,\n nextPos,\n nextTree\n );\n }\n }\n}\n","import * as sapling from '@airgap/sapling-wasm';\nimport { randomBytes } from '@stablelib/random';\nimport { ParametersOutputProof } from './types';\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst saplingOutputParams = require('../saplingOutputParams');\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst saplingSpendParams = require('../saplingSpendParams');\n\nexport class SaplingWrapper {\n async withProvingContext<T>(action: (context: number) => Promise<T>) {\n await this.initSaplingParameters();\n return sapling.withProvingContext(action);\n }\n\n getRandomBytes(length: number) {\n return randomBytes(length);\n }\n\n async randR() {\n return sapling.randR();\n }\n\n async getOutgoingViewingKey(vk: Buffer) {\n return sapling.getOutgoingViewingKey(vk);\n }\n\n async preparePartialOutputDescription(parametersOutputProof: ParametersOutputProof) {\n const partialOutputDesc = await sapling.preparePartialOutputDescription(\n parametersOutputProof.saplingContext,\n parametersOutputProof.address,\n parametersOutputProof.randomCommitmentTrapdoor,\n parametersOutputProof.ephemeralPrivateKey,\n parametersOutputProof.amount\n );\n return {\n commitmentValue: partialOutputDesc.cv,\n commitment: partialOutputDesc.cm,\n proof: partialOutputDesc.proof,\n };\n }\n\n async getDiversifiedFromRawPaymentAddress(decodedDestination: Uint8Array) {\n return sapling.getDiversifiedFromRawPaymentAddress(decodedDestination);\n }\n\n async deriveEphemeralPublicKey(diversifier: Buffer, esk: Buffer) {\n return sapling.deriveEphemeralPublicKey(diversifier, esk);\n }\n\n async getPkdFromRawPaymentAddress(destination: Uint8Array) {\n return sapling.getPkdFromRawPaymentAddress(destination);\n }\n\n async keyAgreement(p: Buffer, sk: Buffer) {\n return sapling.keyAgreement(p, sk);\n }\n\n async createBindingSignature(\n saplingContext: number,\n balance: string,\n transactionSigHash: Uint8Array\n ) {\n return sapling.createBindingSignature(saplingContext, balance, transactionSigHash);\n }\n\n async initSaplingParameters() {\n const spendParams = Buffer.from(saplingSpendParams.saplingSpendParams, 'base64');\n const outputParams = Buffer.from(saplingOutputParams.saplingOutputParams, 'base64');\n\n return sapling.initParameters(spendParams, outputParams);\n }\n}\n","import blake from 'blakejs';\nimport { secretBox } from '@stablelib/nacl';\nimport { DEFAULT_MEMO, KDF_KEY, OCK_KEY } from '../constants';\nimport { SaplingForger } from '../sapling-forger/sapling-forger';\nimport BigNumber from 'bignumber.js';\nimport {\n Input,\n SaplingTransactionOutput,\n SaplingTransactionInput,\n ParametersBindingSig,\n ChosenSpendableInputs,\n ParametersOutputDescription,\n ParametersCiphertext,\n Ciphertext,\n SaplingContractDetails,\n SaplingTransaction,\n SaplingTransactionParams,\n} from '../types';\nimport { SaplingDiffResponse } from '@taquito/rpc';\nimport { b58cdecode, Prefix, prefix } from '@taquito/utils';\nimport { TzReadProvider } from '@taquito/taquito';\nimport { convertValueToBigNumber } from '../sapling-tx-viewer/helpers';\nimport { SaplingState } from '../sapling-state/sapling-state';\nimport { SaplingWrapper } from '../sapling-module-wrapper';\nimport { InMemorySpendingKey } from '../sapling-keys/in-memory-spending-key';\nimport { InMemoryProvingKey } from '../sapling-keys/in-memory-proving-key';\n\nexport class SaplingTransactionBuilder {\n #inMemorySpendingKey: InMemorySpendingKey;\n #inMemoryProvingKey: InMemoryProvingKey | undefined;\n #saplingForger: SaplingForger;\n #contractAddress: string;\n #saplingId: string | undefined;\n #memoSize: number;\n #readProvider: TzReadProvider;\n #saplingWrapper: SaplingWrapper;\n #chainId: string | undefined;\n #saplingState: SaplingState;\n\n constructor(\n keys: {\n saplingSigner: InMemorySpendingKey;\n saplingProver?: InMemoryProvingKey;\n },\n saplingForger: SaplingForger,\n saplingContractDetails: SaplingContractDetails,\n readProvider: TzReadProvider,\n saplingWrapper = new SaplingWrapper()\n ) {\n this.#saplingForger = saplingForger;\n this.#contractAddress = saplingContractDetails.contractAddress;\n this.#memoSize = saplingContractDetails.memoSize;\n this.#inMemorySpendingKey = keys.saplingSigner;\n this.#inMemoryProvingKey = keys.saplingProver;\n this.#saplingState = new SaplingState(32);\n this.#saplingId = saplingContractDetails.saplingId;\n this.#saplingWrapper = saplingWrapper;\n this.#readProvider = readProvider;\n }\n\n async createShieldedTx(\n saplingTransactionParams: SaplingTransactionParams[],\n txTotalAmount: BigNumber,\n boundData: Buffer\n ): Promise<Pick<SaplingTransaction, 'inputs' | 'outputs' | 'signature' | 'balance'>> {\n const rcm = await this.#saplingWrapper.randR();\n\n const balance = this.calculateTransactionBalance('0', txTotalAmount.toString());\n\n const { signature, inputs, outputs } = await this.#saplingWrapper.withProvingContext(\n async (saplingContext: number) => {\n const outputs: SaplingTransactionOutput[] = [];\n const inputs: SaplingTransactionInput[] = [];\n\n for (const i in saplingTransactionParams) {\n outputs.push(\n await this.prepareSaplingOutputDescription({\n saplingContext,\n address: b58cdecode(saplingTransactionParams[i].to, prefix[Prefix.ZET1]),\n amount: saplingTransactionParams[i].amount,\n memo: saplingTransactionParams[i].memo,\n randomCommitmentTrapdoor: rcm,\n })\n );\n }\n\n const signature = await this.createBindingSignature({\n saplingContext,\n inputs,\n outputs,\n balance,\n boundData,\n });\n return { signature, inputs, outputs };\n }\n );\n\n return {\n inputs,\n outputs,\n signature,\n balance,\n };\n }\n\n async createSaplingTx(\n saplingTransactionParams: SaplingTransactionParams[],\n txTotalAmount: BigNumber,\n boundData: Buffer,\n chosenInputs: ChosenSpendableInputs\n ) {\n const randomCommitmentTrapdoor = await this.#saplingWrapper.randR();\n const saplingViewer = await this.#inMemorySpendingKey.getSaplingViewingKeyProvider();\n const outgoingViewingKey = await saplingViewer.getOutgoingViewingKey();\n\n const { signature, balance, inputs, outputs } = await this.#saplingWrapper.withProvingContext(\n async (saplingContext: number) => {\n const outputs: SaplingTransactionOutput[] = [];\n const inputs: SaplingTransactionInput[] = [];\n\n inputs.push(\n ...(await this.prepareSaplingSpendDescription(saplingContext, chosenInputs.inputsToSpend))\n );\n\n let sumAmountOutput = new BigNumber(0);\n\n for (const i in saplingTransactionParams) {\n sumAmountOutput = sumAmountOutput.plus(new BigNumber(saplingTransactionParams[i].amount));\n\n outputs.push(\n await this.prepareSaplingOutputDescription({\n saplingContext,\n address: b58cdecode(saplingTransactionParams[i].to, prefix[Prefix.ZET1]),\n amount: saplingTransactionParams[i].amount,\n memo: saplingTransactionParams[i].memo,\n randomCommitmentTrapdoor,\n outgoingViewingKey,\n })\n );\n }\n\n if (chosenInputs.sumSelectedInputs.isGreaterThan(sumAmountOutput)) {\n const payBackAddress = (await saplingViewer.getAddress()).address;\n\n const { payBackOutput, payBackAmount } = await this.createPaybackOutput(\n {\n saplingContext,\n address: b58cdecode(payBackAddress, prefix[Prefix.ZET1]),\n amount: txTotalAmount.toString(),\n memo: DEFAULT_MEMO,\n randomCommitmentTrapdoor: randomCommitmentTrapdoor,\n outgoingViewingKey: outgoingViewingKey,\n },\n chosenInputs.sumSelectedInputs\n );\n\n sumAmountOutput = sumAmountOutput.plus(new BigNumber(payBackAmount));\n outputs.push(payBackOutput);\n }\n\n const balance = this.calculateTransactionBalance(\n chosenInputs.sumSelectedInputs.toString(),\n sumAmountOutput.toString()\n );\n\n const signature = await this.createBindingSignature({\n saplingContext,\n inputs,\n outputs,\n balance,\n boundData,\n });\n\n return { signature, balance, inputs, outputs };\n }\n );\n\n return {\n inputs,\n outputs,\n signature,\n balance,\n };\n }\n\n // sum of values of inputs minus sums of values of output equals balance\n calculateTransactionBalance(inputTotal: string, outputTotal: string) {\n return new BigNumber(inputTotal).minus(new BigNumber(outputTotal));\n }\n\n async prepareSaplingOutputDescription(\n parametersOutputDescription: ParametersOutputDescription\n ): Promise<SaplingTransactionOutput> {\n const ephemeralPrivateKey = await this.#saplingWrapper.randR();\n const { commitmentValue, commitment, proof } =\n await this.#saplingWrapper.preparePartialOutputDescription({\n saplingContext: parametersOutputDescription.saplingContext,\n address: parametersOutputDescription.address,\n randomCommitmentTrapdoor: parametersOutputDescription.randomCommitmentTrapdoor,\n ephemeralPrivateKey,\n amount: parametersOutputDescription.amount,\n });\n\n const diversifier = await this.#saplingWrapper.getDiversifiedFromRawPaymentAddress(\n parametersOutputDescription.address\n );\n const ephemeralPublicKey = await this.#saplingWrapper.deriveEphemeralPublicKey(\n diversifier,\n ephemeralPrivateKey\n );\n const outgoingCipherKey = parametersOutputDescription.outgoingViewingKey\n ? blake.blake2b(\n Buffer.concat([\n commitmentValue,\n commitment,\n ephemeralPublicKey,\n parametersOutputDescription.outgoingViewingKey,\n ]),\n Buffer.from(OCK_KEY),\n 32\n )\n : this.#saplingWrapper.getRandomBytes(32);\n const ciphertext = await this.encryptCiphertext({\n address: parametersOutputDescription.address,\n ephemeralPrivateKey,\n diversifier,\n outgoingCipherKey,\n amount: parametersOutputDescription.amount,\n randomCommitmentTrapdoor: parametersOutputDescription.randomCommitmentTrapdoor,\n memo: parametersOutputDescription.memo,\n });\n\n return {\n commitment,\n proof,\n ciphertext: {\n ...ciphertext,\n commitmentValue,\n ephemeralPublicKey,\n },\n };\n }\n\n async prepareSaplingSpendDescription(saplingContext: number, inputsToSpend: Input[]) {\n const publicKeyReRandomization = await this.#saplingWrapper.randR();\n\n let stateDiff: SaplingDiffResponse;\n if (this.#saplingId) {\n stateDiff = await this.#readProvider.getSaplingDiffById({ id: this.#saplingId }, 'head');\n } else {\n stateDiff = await this.#readProvider.getSaplingDiffByContract(this.#contractAddress, 'head');\n }\n\n const stateTree = await this.#saplingState.getStateTree(stateDiff, true);\n\n const saplingSpendDescriptions: SaplingTransactionInput[] = [];\n\n for (let i = 0; i < inputsToSpend.length; i++) {\n const amount = convertValueToBigNumber(inputsToSpend[i].value).toString();\n const witness = await this.#saplingState.getWitness(\n stateTree,\n new BigNumber(inputsToSpend[i].position)\n );\n\n const unsignedSpendDescription = this.#inMemoryProvingKey\n ? await this.#inMemoryProvingKey.prepareSpendDescription({\n saplingContext,\n address: inputsToSpend[i].paymentAddress,\n randomCommitmentTrapdoor: inputsToSpend[i].randomCommitmentTrapdoor,\n publicKeyReRandomization,\n amount,\n root: stateDiff.root,\n witness,\n })\n : await this.#inMemorySpendingKey.prepareSpendDescription({\n saplingContext,\n address: inputsToSpend[i].paymentAddress,\n randomCommitmentTrapdoor: inputsToSpend[i].randomCommitmentTrapdoor,\n publicKeyReRandomization,\n amount,\n root: stateDiff.root,\n witness,\n });\n\n const unsignedSpendDescriptionBytes =\n this.#saplingForger.forgeUnsignedTxInput(unsignedSpendDescription);\n const hash = blake.blake2b(unsignedSpendDescriptionBytes, await this.getAntiReplay(), 32);\n const spendDescription = await this.#inMemorySpendingKey.signSpendDescription({\n publicKeyReRandomization,\n unsignedSpendDescription,\n hash,\n });\n\n if (spendDescription.signature === undefined) {\n throw new Error('Spend signing failed');\n }\n saplingSpendDescriptions.push(spendDescription);\n }\n\n return saplingSpendDescriptions;\n }\n\n async encryptCiphertext(\n parametersCiphertext: ParametersCiphertext\n ): Promise<Pick<Ciphertext, 'payloadEnc' | 'nonceEnc' | 'payloadOut' | 'nonceOut'>> {\n const recipientDiversifiedTransmissionKey =\n await this.#saplingWrapper.getPkdFromRawPaymentAddress(parametersCiphertext.address);\n const keyAgreement = await this.#saplingWrapper.keyAgreement(\n recipientDiversifiedTransmissionKey,\n parametersCiphertext.ephemeralPrivateKey\n );\n const keyAgreementHash = blake.blake2b(keyAgreement, Buffer.from(KDF_KEY), 32);\n const nonceEnc = Buffer.from(this.#saplingWrapper.getRandomBytes(24));\n\n const transactionPlaintext = this.#saplingForger.forgeTransactionPlaintext({\n diversifier: parametersCiphertext.diversifier,\n amount: parametersCiphertext.amount,\n randomCommitmentTrapdoor: parametersCiphertext.randomCommitmentTrapdoor,\n memoSize: this.#memoSize * 2,\n memo: parametersCiphertext.memo,\n });\n\n const nonceOut = Buffer.from(this.#saplingWrapper.getRandomBytes(24));\n const payloadEnc = Buffer.from(secretBox(keyAgreementHash, nonceEnc, transactionPlaintext));\n const payloadOut = Buffer.from(\n secretBox(\n parametersCiphertext.outgoingCipherKey,\n nonceOut,\n Buffer.concat([\n recipientDiversifiedTransmissionKey,\n parametersCiphertext.ephemeralPrivateKey,\n ])\n )\n );\n\n return { payloadEnc, nonceEnc, payloadOut, nonceOut };\n }\n\n async createPaybackOutput(params: ParametersOutputDescription, sumSelectedInputs: BigNumber) {\n const payBackAmount = sumSelectedInputs.minus(params.amount).toString();\n const payBackOutput = await this.prepareSaplingOutputDescription({\n saplingContext: params.saplingContext,\n address: params.address,\n amount: payBackAmount,\n memo: params.memo,\n randomCommitmentTrapdoor: params.randomCommitmentTrapdoor,\n outgoingViewingKey: params.outgoingViewingKey,\n });\n\n return { payBackOutput, payBackAmount };\n }\n\n async createBindingSignature(parametersBindingSig: ParametersBindingSig) {\n const outputs = this.#saplingForger.forgeOutputDescriptions(parametersBindingSig.outputs);\n const inputs = this.#saplingForger.forgeSpendDescriptions(parametersBindingSig.inputs);\n const transactionSigHash = blake.blake2b(\n Buffer.concat([inputs, outputs, parametersBindingSig.boundData]),\n await this.getAntiReplay(),\n 32\n );\n\n return this.#saplingWrapper.createBindingSignature(\n parametersBindingSig.saplingContext,\n parametersBindingSig.balance.toFixed(),\n transactionSigHash\n );\n }\n\n async getAntiReplay() {\n let chainId = this.#chainId;\n if (!chainId) {\n chainId = await this.#readProvider.getChainId();\n this.#chainId = chainId;\n }\n return Buffer.from(`${this.#contractAddress}${chainId}`);\n }\n}\n","import { InvalidSpendingKey } from '../error';\nimport toBuffer from 'typedarray-to-buffer';\nimport { openSecretBox } from '@stablelib/nacl';\nimport pbkdf2 from 'pbkdf2';\nimport { Prefix, prefix, b58cdecode } from '@taquito/utils';\n\nexport function decryptKey(spendingKey: string, password?: string) {\n const keyArr = b58cdecode(spendingKey, prefix[Prefix.SASK]);\n // exit first if no password and key is encrypted\n if (!password && spendingKey.slice(0, 4) !== 'sask') {\n throw new InvalidSpendingKey(spendingKey, 'no password Provided to decrypt');\n }\n\n if (password && spendingKey.slice(0, 4) !== 'sask') {\n const salt = toBuffer(keyArr.slice(0, 8));\n const encryptedSk = toBuffer(keyArr.slice(8));\n\n const encryptionKey = pbkdf2.pbkdf2Sync(password, salt, 32768, 32, 'sha512');\n const decrypted = openSecretBox(\n new Uint8Array(encryptionKey),\n new Uint8Array(24),\n new Uint8Array(encryptedSk)\n );\n if (!decrypted) {\n throw new InvalidSpendingKey(spendingKey, 'Encrypted Spending Key or Password Incorrect');\n }\n\n return toBuffer(decrypted);\n } else {\n return toBuffer(keyArr);\n }\n}\n","import { InvalidSpendingKey } from '../error';\nimport { InMemoryViewingKey } from './in-memory-viewing-key';\nimport * as sapling from '@airgap/sapling-wasm';\nimport { Prefix, prefix, b58cencode, ValidationResult } from '@taquito/utils';\nimport * as bip39 from 'bip39';\nimport {\n ParametersSpendProof,\n ParametersSpendSig,\n SaplingSpendDescription,\n SaplingTransactionInput,\n} from '../types';\nimport { decryptKey } from './helpers';\n\n/**\n * @description holds the spending key, create proof and signature for spend descriptions\n * can instantiate from mnemonic word list or decrypt a encrypted spending key\n * with access to instantiate a InMemoryViewingKey\n */\nexport class InMemorySpendingKey {\n #spendingKeyBuf: Buffer;\n #saplingViewingKey: InMemoryViewingKey | undefined;\n /**\n *\n * @param spendingKey unencrypted sask... or encrypted MMXj...\n * @param password required for MMXj encrypted keys\n */\n constructor(spendingKey: string, password?: string) {\n this.#spendingKeyBuf = decryptKey(spendingKey, password);\n }\n\n /**\n *\n * @param mnemonic string of words\n * @param derivationPath tezos current standard 'm/'\n * @returns InMemorySpendingKey class instantiated\n */\n static async fromMnemonic(mnemonic: string, derivationPath = 'm/') {\n // no password passed here. password provided only changes from sask -> MMXj\n const fullSeed = await bip39.mnemonicToSeed(mnemonic);\n\n const first32: Buffer = fullSeed.slice(0, 32);\n const second32: Buffer = fullSeed.slice(32);\n // reduce seed bytes must be 32 bytes reflecting both halves\n const seed = Buffer.from(first32.map((byte, index) => byte ^ second32[index]));\n\n const spendingKeyArr = new Uint8Array(\n await sapling.getExtendedSpendingKey(seed, derivationPath)\n );\n\n const spendingKey = b58cencode(spendingKeyArr, prefix[Prefix.SASK]);\n\n if (ValidationResult.VALID !== 3) {\n throw new InvalidSpendingKey(spendingKey);\n }\n\n return new InMemorySpendingKey(spendingKey);\n }\n\n /**\n *\n * @returns InMemoryViewingKey instantiated class\n */\n async getSaplingViewingKeyProvider() {\n let viewingKey: Buffer;\n if (!this.#saplingViewingKey) {\n viewingKey = await sapling.getExtendedFullViewingKeyFromSpendingKey(this.#spendingKeyBuf);\n this.#saplingViewingKey = new InMemoryViewingKey(viewingKey.toString('hex'));\n }\n\n return this.#saplingViewingKey;\n }\n\n /**\n * @description Prepare an unsigned sapling spend description using the spending key\n * @param parametersSpendProof.saplingContext The sapling proving context\n * @param parametersSpendProof.address The address of the input\n * @param parametersSpendProof.randomCommitmentTrapdoor The randomness of the commitment\n * @param parametersSpendProof.publicKeyReRandomization The re-randomization of the public key\n * @param parametersSpendProof.amount The value of the input\n * @param parametersSpendProof.root The root of the merkle tree\n * @param parametersSpendProof.witness The path of the commitment in the tree\n * @param derivationPath tezos current standard 'm/'\n * @returns The unsigned spend description\n */\n async prepareSpendDescription(\n parametersSpendProof: ParametersSpendProof\n ): Promise<Omit<SaplingSpendDescription, 'signature'>> {\n const spendDescription = await sapling.prepareSpendDescriptionWithSpendingKey(\n parametersSpendProof.saplingContext,\n this.#spendingKeyBuf,\n parametersSpendProof.address,\n parametersSpendProof.randomCommitmentTrapdoor,\n parametersSpendProof.publicKeyReRandomization,\n parametersSpendProof.amount,\n parametersSpendProof.root,\n parametersSpendProof.witness\n );\n return {\n commitmentValue: spendDescription.cv,\n nullifier: spendDescription.nf,\n publicKeyReRandomization: spendDescription.rk,\n rtAnchor: spendDescription.rt,\n proof: spendDescription.proof,\n };\n }\n\n /**\n * @description Sign a sapling spend description\n * @param parametersSpendSig.publicKeyReRandomization The re-randomization of the public key\n * @param parametersSpendSig.unsignedSpendDescription The unsigned Spend description\n * @param parametersSpendSig.hash The data to be signed\n * @returns The signed spend description\n */\n async signSpendDescription(\n parametersSpendSig: ParametersSpendSig\n ): Promise<SaplingTransactionInput> {\n const signedSpendDescription = await sapling.signSpendDescription(\n {\n cv: parametersSpendSig.unsignedSpendDescription.commitmentValue,\n rt: parametersSpendSig.unsignedSpendDescription.rtAnchor,\n nf: parametersSpendSig.unsignedSpendDescription.nullifier,\n rk: parametersSpendSig.unsignedSpendDescription.publicKeyReRandomization,\n proof: parametersSpendSig.unsignedSpendDescription.proof,\n },\n this.#spendingKeyBuf,\n parametersSpendSig.publicKeyReRandomization,\n parametersSpendSig.hash\n );\n return {\n commitmentValue: signedSpendDescription.cv,\n nullifier: signedSpendDescription.nf,\n publicKeyReRandomization: signedSpendDescription.rk,\n proof: signedSpendDescription.proof,\n signature: signedSpendDescription.spendAuthSig,\n };\n }\n\n /**\n * @description Return a proof authorizing key from the configured spending key\n */\n async getProvingKey() {\n const provingKey = await sapling.getProofAuthorizingKey(this.#spendingKeyBuf);\n return provingKey.toString('hex');\n }\n}\n","import { b58cencode, Prefix, prefix } from '@taquito/utils';\nimport * as sapling from '@airgap/sapling-wasm';\nimport { InMemorySpendingKey } from './in-memory-spending-key';\n\n/**\n * @description Holds the viewing key\n */\nexport class InMemoryViewingKey {\n #fullViewingKey: Buffer;\n constructor(fullViewingKey: string) {\n this.#fullViewingKey = Buffer.from(fullViewingKey, 'hex');\n }\n\n /**\n * @description Allows to instantiate the InMemoryViewingKey from an encrypted/unencrypted spending key\n *\n * @param spendingKey Base58Check-encoded spending key\n * @param password Optional password to decrypt the spending key\n * @example\n * ```\n * await InMemoryViewingKey.fromSpendingKey('sask27SLmU9herddHz4qFJBLMjWYMbJF8RtS579w9ej9mfCYK7VUdyCJPHK8AzW9zMsopGZEkYeNjAY7Zz1bkM7CGu8eKLzrjBLTMC5wWJDhxiK91ahA29rhDRsHdJDV2u2jFwb2MNUix8JW7sAkAqYVaJpCehTBPgRQ1KqKwqqUaNmuD8kazd4Q8MCWmgbWs21Yuomdqyi9FLigjRp7oY4m5adaVU19Nj1AHvsMY2tePeU2L')\n * ```\n *\n */\n static async fromSpendingKey(spendingKey: string, password?: string) {\n const inMemorySpendingkey = new InMemorySpendingKey(spendingKey, password);\n return inMemorySpendingkey.getSaplingViewingKeyProvider();\n }\n\n /**\n * @description Retrieve the full viewing key\n * @returns Buffer representing the full viewing key\n *\n */\n getFullViewingKey() {\n return this.#fullViewingKey;\n }\n\n /**\n * @description Retrieve the outgoing viewing key\n * @returns Buffer representing the outgoing viewing key\n *\n */\n async getOutgoingViewingKey() {\n return sapling.getOutgoingViewingKey(this.#fullViewingKey);\n }\n\n /**\n * @description Retrieve the incoming viewing key\n * @returns Buffer representing the incoming viewing key\n *\n */\n async getIncomingViewingKey() {\n return sapling.getIncomingViewingKey(this.#fullViewingKey);\n }\n\n /**\n * @description Retrieve a payment address\n * @param addressIndex used to determine which diversifier should be used to derive the address, default is 0\n * @returns Base58Check-encoded address and its index\n *\n */\n async getAddress(addressIndex?: number) {\n const { index, raw } = await sapling.getPaymentAddressFromViewingKey(\n this.#fullViewingKey,\n addressIndex\n );\n return {\n address: b58cencode(raw, prefix[Prefix.ZET1]),\n addressIndex: index.readInt32LE(),\n };\n }\n}\n","import * as sapling from '@airgap/sapling-wasm';\nimport { ParametersSpendProof, SaplingSpendDescription } from '../types';\nimport { decryptKey } from './helpers';\n\n/**\n * @description holds the proving key, create proof for spend descriptions\n * The class can be instantiated from a proving key or a spending key\n */\nexport class InMemoryProvingKey {\n #provingKey: Buffer;\n\n constructor(provingKey: string) {\n this.#provingKey = Buffer.from(provingKey, 'hex');\n }\n\n /**\n * @description Allows to instantiate the InMemoryProvingKey from an encrypted/unencrypted spending key\n *\n * @param spendingKey Base58Check-encoded spending key\n * @param password Optional password to decrypt the spending key\n * @example\n * ```\n * await InMemoryProvingKey.fromSpendingKey('sask27SLmU9herddHz4qFJBLMjWYMbJF8RtS579w9ej9mfCYK7VUdyCJPHK8AzW9zMsopGZEkYeNjAY7Zz1bkM7CGu8eKLzrjBLTMC5wWJDhxiK91ahA29rhDRsHdJDV2u2jFwb2MNUix8JW7sAkAqYVaJpCehTBPgRQ1KqKwqqUaNmuD8kazd4Q8MCWmgbWs21Yuomdqyi9FLigjRp7oY4m5adaVU19Nj1AHvsMY2tePeU2L')\n * ```\n *\n */\n static async fromSpendingKey(spendingKey: string, password?: string) {\n const decodedSpendingKey = decryptKey(spendingKey, password);\n const provingKey = await sapling.getProofAuthorizingKey(decodedSpendingKey);\n return new InMemoryProvingKey(provingKey.toString('hex'));\n }\n\n /**\n * @description Prepare an unsigned sapling spend description using the proving key\n *\n * @param parametersSpendProof.saplingContext The sapling proving context\n * @param parametersSpendProof.address The address of the input\n * @param parametersSpendProof.randomCommitmentTrapdoor The randomness of the commitment\n * @param parametersSpendProof.publicKeyReRandomization The re-randomization of the public key\n * @param parametersSpendProof.amount The value of the input\n * @param parametersSpendProof.root The root of the merkle tree\n * @param parametersSpendProof.witness The path of the commitment in the tree\n * @param derivationPath tezos current standard 'm/'\n * @returns The unsinged spend description\n */\n async prepareSpendDescription(\n parametersSpendProof: Omit<ParametersSpendProof, 'spendingKey'>\n ): Promise<Omit<SaplingSpendDescription, 'signature'>> {\n const spendDescription = await sapling.prepareSpendDescriptionWithAuthorizingKey(\n parametersSpendProof.saplingContext,\n this.#provingKey,\n parametersSpendProof.address,\n parametersSpendProof.randomCommitmentTrapdoor,\n parametersSpendProof.publicKeyReRandomization,\n parametersSpendProof.amount,\n parametersSpendProof.root,\n parametersSpendProof.witness\n );\n return {\n commitmentValue: spendDescription.cv,\n nullifier: spendDescription.nf,\n publicKeyReRandomization: spendDescription.rk,\n rtAnchor: spendDescription.rt,\n proof: spendDescription.proof,\n };\n }\n}\n","/**\n * @packageDocumentation\n * @module @taquito/sapling\n */\n\nimport BigNumber from 'bignumber.js';\nimport { MichelCodecPacker, Packer, TzReadProvider } from '@taquito/taquito';\nimport {\n b58cdecode,\n format,\n InvalidAddressError,\n InvalidKeyError,\n prefix,\n Prefix,\n validateKeyHash,\n ValidationResult,\n} from '@taquito/utils';\nimport { InsufficientBalance, InvalidMemo } from './error';\nimport { convertValueToBigNumber } from './sapling-tx-viewer/helpers';\nimport { InMemorySpendingKey } from './sapling-keys/in-memory-spending-key';\nimport { SaplingForger } from './sapling-forger/sapling-forger';\nimport { SaplingTransactionViewer } from './sapling-tx-viewer/sapling-transaction-viewer';\nimport {\n ChosenSpendableInputs,\n Input,\n ParametersSaplingTransaction,\n ParametersUnshieldedTransaction,\n SaplingContractDetails,\n SaplingContractId,\n} from './types';\nimport { SaplingTransactionBuilder } from './sapling-tx-builder/sapling-transactions-builder';\nimport { DEFAULT_BOUND_DATA, DEFAULT_MEMO } from './constants';\nimport { InMemoryProvingKey } from './sapling-keys/in-memory-proving-key';\n\nexport { SaplingTransactionViewer } from './sapling-tx-viewer/sapling-transaction-viewer';\nexport { InMemoryViewingKey } from './sapling-keys/in-memory-viewing-key';\nexport { InMemorySpendingKey } from './sapling-keys/in-memory-spending-key';\nexport { InMemoryProvingKey } from './sapling-keys/in-memory-proving-key';\n\n/**\n * @description Class that surfaces all of the sapling capability allowing to read from a sapling state and prepare transactions\n *\n * @param keys.saplingSigner Holds the sapling spending key\n * @param keys.saplingProver (Optional) Allows to generate the proofs with the proving key rather than the spending key\n * @param saplingContractDetails Contains the address of the sapling contract, the memo size, and an optional sapling id that must be defined if the sapling contract contains more than one sapling state\n * @param readProvider Allows to read data from the blockchain\n * @param packer (Optional) Allows packing data. Use the `MichelCodecPacker` by default.\n * @param saplingForger (Optional) Allows serializing the sapling transactions. Use the `SaplingForger` by default.\n * @param saplingTxBuilder (Optional) Allows to prepare the sapling transactions. Use the `SaplingTransactionBuilder` by default.\n * @example\n * ```\n * const inMemorySpendingKey = await InMemorySpendingKey.fromMnemonic('YOUR_MNEMONIC');\n * const readProvider = new RpcReadAdapter(new RpcClient('https://YOUR_PREFERRED_RPC_URL'))\n *\n * const saplingToolkit = new SaplingToolkit(\n * { saplingSigner: inMemorySpendingKey },\n * { contractAddress: SAPLING_CONTRACT_ADDRESS, memoSize: 8 },\n * readProvider\n * )\n * ```\n */\nexport class SaplingToolkit {\n #inMemorySpendingKey: InMemorySpendingKey;\n #saplingId: string | undefined;\n #contractAddress: string;\n #memoSize: number;\n #readProvider: TzReadProvider;\n #packer: Packer;\n #saplingForger: SaplingForger;\n #saplingTxBuilder: SaplingTransactionBuilder;\n #saplingTransactionViewer: SaplingTransactionViewer | undefined;\n constructor(\n keys: {\n saplingSigner: InMemorySpendingKey;\n saplingProver?: InMemoryProvingKey;\n },\n saplingContractDetails: SaplingContractDetails,\n readProvider: TzReadProvider,\n packer = new MichelCodecPacker(),\n saplingForger = new SaplingForger(),\n saplingTxBuilder = new SaplingTransactionBuilder(\n keys,\n saplingForger,\n saplingContractDetails,\n readProvider\n )\n ) {\n this.#inMemorySpendingKey = keys.saplingSigner;\n this.#saplingId = saplingContractDetails.saplingId;\n this.#contractAddress = saplingContractDetails.contractAddress;\n this.#memoSize = saplingContractDetails.memoSize;\n this.#readProvider = readProvider;\n this.#packer = packer;\n this.#saplingForger = saplingForger;\n this.#saplingTxBuilder = saplingTxBuilder;\n }\n\n /**\n * @description Get an instance of `SaplingTransactionViewer` which allows to retrieve and decrypt sapling transactions and calculate the unspent balance.\n */\n async getSaplingTransactionViewer() {\n let saplingTransactionViewer: SaplingTransactionViewer;\n\n if (!this.#saplingTransactionViewer) {\n const saplingViewingKey = await this.#inMemorySpendingKey.getSaplingViewingKeyProvider();\n saplingTransactionViewer = new SaplingTransactionViewer(\n saplingViewingKey,\n this.getSaplingContractId(),\n this.#readProvider\n );\n this.#saplingTransactionViewer = saplingTransactionViewer;\n }\n return this.#saplingTransactionViewer;\n }\n\n /**\n * @description Prepare a shielded transaction\n * @param shieldedTxParams `to` is the payment address that will receive the shielded tokens (zet).\n * `amount` is the amount of shielded tokens in tez by default.\n * `mutez` needs to be set to true if the amount of shielded tokens is in mutez.\n * `memo` is an empty string by default.\n * @returns a string representing the sapling transaction\n */\n async prepareShieldedTransaction(shieldedTxParams: ParametersSaplingTransaction[]) {\n const { formatedParams, totalAmount } = this.formatTransactionParams(\n shieldedTxParams,\n this.validateDestinationSaplingAddress\n );\n const root = await this.getRoot();\n\n const { inputs, outputs, signature, balance } = await this.#saplingTxBuilder.createShieldedTx(\n formatedParams,\n totalAmount,\n DEFAULT_BOUND_DATA\n );\n\n const forgedSaplingTx = this.#saplingForger.forgeSaplingTransaction({\n inputs,\n outputs,\n balance,\n root,\n boundData: DEFAULT_BOUND_DATA,\n signature,\n });\n\n return forgedSaplingTx.toString('hex');\n }\n\n /**\n * @description Prepare an unshielded transaction\n * @param unshieldedTxParams `to` is the Tezos address that will receive the unshielded tokens (tz1, tz2 or tz3).\n * `amount` is the amount of unshielded tokens in tez by default.\n * `mutez` needs to be set to true if the amount of unshielded tokens is in mutez.\n * @returns a string representing the sapling transaction.\n */\n async prepareUnshieldedTransaction(unshieldedTxParams: ParametersUnshieldedTransaction) {\n const { formatedParams, totalAmount } = this.formatTransactionParams(\n [unshieldedTxParams],\n this.validateDestinationImplicitAddress\n );\n\n const boundData = await this.createBoundData(formatedParams[0].to);\n\n const root = await this.getRoot();\n const chosenInputs = await this.selectInputsToSpend(new BigNumber(formatedParams[0].amount));\n\n const { inputs, outputs, signature, balance } = await this.#saplingTxBuilder.createSaplingTx(\n [],\n totalAmount,\n boundData,\n chosenInputs\n );\n\n const forgedSaplingTx = this.#saplingForger.forgeSaplingTransaction({\n inputs,\n outputs,\n balance,\n root,\n boundData,\n signature,\n });\n\n return forgedSaplingTx.toString('hex');\n }\n\n /**\n * @description Prepare a sapling transaction (zet to zet)\n * @param saplingTxParams `to` is the payment address that will receive the shielded tokens (zet).\n * `amount` is the amount of unshielded tokens in tez by default.\n * `mutez` needs to be set to true if the amount of unshielded tokens is in mutez.\n * `memo` is an empty string by default.\n * @returns a string representing the sapling transaction.\n */\n async prepareSaplingTransaction(saplingTxParams: ParametersSaplingTransaction[]) {\n const { formatedParams, totalAmount } = this.formatTransactionParams(\n saplingTxParams,\n this.validateDestinationSaplingAddress\n );\n\n const root = await this.getRoot();\n const chosenInputs = await this.selectInputsToSpend(totalAmount);\n const { inputs, outputs, signature, balance } = await this.#saplingTxBuilder.createSaplingTx(\n formatedParams,\n totalAmount,\n DEFAULT_BOUND_DATA,\n chosenInputs\n );\n\n const forgedSaplingTx = this.#saplingForger.forgeSaplingTransaction({\n inputs,\n outputs,\n balance,\n root,\n boundData: DEFAULT_BOUND_DATA,\n signature,\n });\n\n return forgedSaplingTx.toString('hex');\n }\n\n private formatTransactionParams(\n txParams: ParametersSaplingTransaction[],\n validateDestination: (to: string) => void\n ) {\n const formatedParams: {\n to: string;\n amount: string;\n memo: string;\n }[] = [];\n\n let totalAmount = new BigNumber(0);\n\n txParams.forEach((param) => {\n validateDestination(param.to);\n const amountMutez = param.mutez\n ? param.amount.toString()\n : format('tz', 'mutez', param.amount).toString();\n totalAmount = totalAmount.plus(new BigNumber(amountMutez));\n const memo = param.memo ?? DEFAULT_MEMO;\n if (memo.length > this.#memoSize) {\n throw new InvalidMemo(memo, 'The memo is too long.');\n }\n\n formatedParams.push({ to: param.to, amount: amountMutez, memo });\n });\n\n return { formatedParams, totalAmount };\n }\n\n private async getRoot() {\n if (this.#saplingId) {\n const { root } = await this.#readProvider.getSaplingDiffById({ id: this.#saplingId }, 'head');\n return root;\n } else {\n const { root } = await this.#readProvider.getSaplingDiffByContract(\n this.#contractAddress,\n 'head'\n );\n return root;\n }\n }\n private async createBoundData(destination: string) {\n const pref = destination.substr(0, 3);\n\n let pad: Buffer;\n switch (pref) {\n case 'tz1': {\n pad = Buffer.from('00', 'hex');\n break;\n }\n case 'tz2': {\n pad = Buffer.from('01', 'hex');\n break;\n }\n case 'tz3': {\n pad = Buffer.from('02', 'hex');\n break;\n }\n default: {\n throw new InvalidKeyError(destination, \"The 'to' parameter contains an invalid prefix.\");\n }\n }\n\n const decodedDestination = b58cdecode(destination, prefix[pref]);\n const padDestination = Buffer.concat([pad, Buffer.from(decodedDestination)]);\n const packedDestination = await this.#packer.packData({\n data: { bytes: padDestination.toString('hex') },\n type: { prim: 'bytes' },\n });\n\n return Buffer.from(packedDestination.packed, 'hex');\n }\n\n private validateDestinationImplicitAddress(to: string) {\n if (validateKeyHash(to) !== ValidationResult.VALID) {\n throw new InvalidAddressError(\n to,\n \"The 'to' parameter must be a Tezos public key hash (tz1, tz2, tz3).\"\n );\n }\n }\n\n private validateDestinationSaplingAddress(to: string) {\n if (!to.startsWith(Prefix.ZET1)) {\n throw new InvalidAddressError(to, \"The 'to' parameter must be a sapling address (zet1).\");\n }\n }\n\n private getSaplingContractId() {\n let saplingContractId: SaplingContractId;\n if (this.#saplingId) {\n saplingContractId = { saplingId: this.#saplingId };\n } else {\n saplingContractId = { contractAddress: this.#contractAddress };\n }\n return saplingContractId;\n }\n\n private async selectInputsToSpend(amountMutez: BigNumber): Promise<ChosenSpendableInputs> {\n const saplingTxViewer = await this.getSaplingTransactionViewer();\n\n const { incoming } = await saplingTxViewer.getIncomingAndOutgoingTransactionsRaw();\n\n const inputsToSpend: Input[] = [];\n let sumSelectedInputs = new BigNumber(0);\n\n incoming.forEach((input) => {\n if (!input.isSpent && sumSelectedInputs.isLessThan(amountMutez)) {\n const txAmount = convertValueToBigNumber(input.value);\n sumSelectedInputs = sumSelectedInputs.plus(txAmount);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { isSpent, ...rest } = input;\n inputsToSpend.push(rest);\n }\n });\n\n if (sumSelectedInputs.isLessThan(new BigNumber(amountMutez))) {\n throw new InsufficientBalance(sumSelectedInputs.toString(), amountMutez.toString());\n }\n return { inputsToSpend, sumSelectedInputs };\n }\n}\n"],"names":["_readProvider","_inMemorySpendingKey","_saplingForger","_contractAddress","_saplingId","_memoSize"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"taquito-sapling.es6.js","sources":["../src/error.ts","../src/sapling-tx-viewer/helpers.ts","../src/sapling-forger/sapling-forger.ts","../src/constants.ts","../src/sapling-tx-viewer/sapling-transaction-viewer.ts","../src/sapling-state/utils.ts","../src/sapling-state/sapling-state.ts","../src/sapling-module-wrapper.ts","../src/sapling-tx-builder/sapling-transactions-builder.ts","../src/sapling-keys/helpers.ts","../src/sapling-keys/in-memory-spending-key.ts","../src/sapling-keys/in-memory-viewing-key.ts","../src/sapling-keys/in-memory-proving-key.ts","../src/taquito-sapling.ts"],"sourcesContent":["/**\n * @category Error\n * @description Error indicating that the spending key is invalid\n */\nexport class InvalidSpendingKey extends Error {\n public name = 'InvalidSpendingKey';\n constructor(sk: string, reason = 'The spending key is invalid') {\n super(`${reason}: ${sk}`);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates an invalid Merkle root being passed\n */\nexport class InvalidMerkleRootError extends Error {\n public name = 'InvalidMerkleRootError';\n constructor(public root: string) {\n super(`The following Merkle tree is invalid: ${JSON.stringify(root)}`);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates a failure when trying to construct the Merkle tree\n */\nexport class TreeConstructionFailure extends Error {\n public name = 'TreeConstructionFailure';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error indicating that the memo is invalid\n */\nexport class InvalidMemo extends Error {\n public name = 'InvalidMemo';\n constructor(memo: string, errorDetail: string) {\n super(`The memo '${memo}' is invalid. ${errorDetail}`);\n }\n}\n\n/**\n * @category Error\n * @description Error indicating that there is not enough balance to prepare the sapling transaction\n */\nexport class InsufficientBalance extends Error {\n public name = 'InsufficientBalance';\n constructor(realBalance: string, amountToSpend: string) {\n super(`Unable to spend ${amountToSpend} mutez while the balance is only ${realBalance} mutez.`);\n }\n}\n\n/**\n * @category Error\n * @description Error indicating that a parameter is invalid\n */\nexport class InvalidParameter extends Error {\n public name = 'InvalidParameter';\n constructor(message: string) {\n super(message);\n }\n}\n","import { b58cencode, bytes2Char, Prefix, prefix } from '@taquito/utils';\nimport BigNumber from 'bignumber.js';\nimport { Input } from '../types';\n\nexport function memoHexToUtf8(memo: string) {\n const memoNoPadding = removeZeroPaddedBytesRight(memo);\n return memoNoPadding === '' ? memoNoPadding : bytes2Char(memoNoPadding);\n}\n\nfunction removeZeroPaddedBytesRight(memo: string) {\n const matchZeroRight = memo.match(/^(.*?)(00)+$/);\n return matchZeroRight ? matchZeroRight[1] : memo;\n}\n\nexport function readableFormat(saplingTransactionProperties: Omit<Input, 'position'>) {\n return {\n value: convertValueToBigNumber(saplingTransactionProperties.value),\n memo: memoHexToUtf8(Buffer.from(saplingTransactionProperties.memo).toString('hex')),\n paymentAddress: b58cencode(saplingTransactionProperties.paymentAddress, prefix[Prefix.ZET1]),\n };\n}\n\nexport function convertValueToBigNumber(value: Uint8Array) {\n return new BigNumber(Buffer.from(value).toString('hex'), 16);\n}\n\nexport function bufToUint8Array(buffer: Buffer) {\n return new Uint8Array(\n buffer.buffer,\n buffer.byteOffset,\n buffer.byteLength / Uint8Array.BYTES_PER_ELEMENT\n );\n}\n","import {\n SaplingTransactionInput,\n SaplingTransaction,\n SaplingTransactionOutput,\n SaplingTransactionPlaintext,\n} from '../types';\nimport { char2Bytes, toHexBuf } from '@taquito/utils';\nimport BigNumber from 'bignumber.js';\n\nexport class SaplingForger {\n /**\n * @description Forge sapling transactions\n * @param spendDescriptions the list of spend descriptions\n * @param outputDescriptions the list of output descriptions\n * @param signature signature hash\n * @param balance balance of the Sapling contract (input/output difference)\n * @param root root of the merkle tree\n * @returns Forged sapling transaction of type Buffer\n */\n forgeSaplingTransaction(tx: SaplingTransaction): Buffer {\n const spendBuf = this.forgeSpendDescriptions(tx.inputs);\n const spend = Buffer.concat([toHexBuf(spendBuf.length, 32), spendBuf]);\n\n const outputBuf = this.forgeOutputDescriptions(tx.outputs);\n const output = Buffer.concat([toHexBuf(outputBuf.length, 32), outputBuf]);\n\n const root = Buffer.from(tx.root, 'hex');\n\n return Buffer.concat([\n spend,\n output,\n tx.signature,\n toHexBuf(tx.balance, 64),\n root,\n toHexBuf(tx.boundData.length, 32),\n tx.boundData,\n ]);\n }\n\n /**\n * @description Forge list of spend descriptions\n * @param spendDescriptions list of spend descriptions\n * @returns concatenated forged bytes of type Buffer\n */\n forgeSpendDescriptions(spendDescriptions: SaplingTransactionInput[]): Buffer {\n const descriptions = [];\n\n for (const i of spendDescriptions) {\n const buff = this.forgeSpendDescription(i);\n descriptions.push(buff);\n }\n\n return Buffer.concat(descriptions);\n }\n\n forgeSpendDescription(desc: SaplingTransactionInput): Buffer {\n return Buffer.concat([\n desc.commitmentValue,\n desc.nullifier,\n desc.publicKeyReRandomization,\n desc.proof,\n desc.signature,\n ]);\n }\n\n /**\n * @description Forge list of output descriptions\n * @param outputDescriptions list of output descriptions\n * @returns concatenated forged bytes of type Buffer\n */\n forgeOutputDescriptions(outputDescriptions: SaplingTransactionOutput[]): Buffer {\n const descriptions = [];\n\n for (const i of outputDescriptions) {\n const buff = this.forgeOutputDescription(i);\n descriptions.push(buff);\n }\n\n return Buffer.concat(descriptions);\n }\n\n forgeOutputDescription(desc: SaplingTransactionOutput): Buffer {\n const ct = desc.ciphertext;\n\n return Buffer.concat([\n desc.commitment,\n desc.proof,\n ct.commitmentValue,\n ct.ephemeralPublicKey,\n toHexBuf(ct.payloadEnc.length, 32),\n ct.payloadEnc,\n ct.nonceEnc,\n ct.payloadOut,\n ct.nonceOut,\n ]);\n }\n\n forgeUnsignedTxInput(unsignedSpendDescription: Omit<SaplingTransactionInput, 'signature'>) {\n return Buffer.concat([\n unsignedSpendDescription.commitmentValue,\n unsignedSpendDescription.nullifier,\n unsignedSpendDescription.publicKeyReRandomization,\n unsignedSpendDescription.proof,\n ]);\n }\n\n forgeTransactionPlaintext(txPlainText: SaplingTransactionPlaintext) {\n const encodedMemo = Buffer.from(\n char2Bytes(txPlainText.memo).padEnd(txPlainText.memoSize, '0'),\n 'hex'\n );\n return Buffer.concat([\n txPlainText.diversifier,\n toHexBuf(new BigNumber(txPlainText.amount), 64),\n txPlainText.randomCommitmentTrapdoor,\n toHexBuf(txPlainText.memoSize, 32),\n encodedMemo,\n ]);\n }\n}\n","export const KDF_KEY = 'KDFSaplingForTezosV1';\nexport const OCK_KEY = 'OCK_keystringderivation_TEZOS';\nexport const DEFAULT_MEMO = '';\nexport const DEFAULT_BOUND_DATA = Buffer.from('', 'hex');\n","import * as sapling from '@airgap/sapling-wasm';\nimport BigNumber from 'bignumber.js';\nimport { hex2buf, mergebuf } from '@taquito/utils';\nimport { CommitmentsAndCiphertexts, SaplingDiffResponse } from '@taquito/rpc';\nimport blake from 'blakejs';\nimport { openSecretBox } from '@stablelib/nacl';\nimport { InMemoryViewingKey } from '../sapling-keys/in-memory-viewing-key';\nimport { bufToUint8Array, convertValueToBigNumber, readableFormat } from './helpers';\nimport { KDF_KEY, OCK_KEY } from '../constants';\nimport { Input, SaplingContractId, SaplingIncomingAndOutgoingTransaction } from '../types';\nimport { InvalidParameter } from '../error';\nimport { TzReadProvider } from '@taquito/taquito';\n\n/**\n * @description Allows to retrieve and decrypt sapling transactions using on a viewing key\n *\n * @param inMemoryViewingKey Holds the sapling viewing key\n * @param saplingContractId Address of the sapling contract or sapling id if the smart contract contains multiple sapling states\n * @param readProvider Allows to read data from the blockchain\n */\nexport class SaplingTransactionViewer {\n #viewingKeyProvider: InMemoryViewingKey;\n #readProvider: TzReadProvider;\n #saplingContractId: SaplingContractId;\n\n constructor(\n inMemoryViewingKey: InMemoryViewingKey,\n saplingContractId: SaplingContractId,\n readProvider: TzReadProvider\n ) {\n this.#viewingKeyProvider = inMemoryViewingKey;\n this.#saplingContractId = saplingContractId;\n this.#readProvider = readProvider;\n }\n\n /**\n * @description Retrieve the unspent balance associated with the configured viewing key and sapling state\n *\n * @returns the balance in mutez represented as a BigNumber\n *\n */\n async getBalance(): Promise<BigNumber> {\n let balance = new BigNumber(0);\n const { commitments_and_ciphertexts, nullifiers } = await this.getSaplingDiff();\n for (let i = 0; i < commitments_and_ciphertexts.length; i++) {\n const decrypted = await this.decryptCiphertextAsReceiver(commitments_and_ciphertexts[i]);\n if (decrypted) {\n const valueBigNumber = convertValueToBigNumber(decrypted.value);\n const isSpent = await this.isSpent(\n decrypted.paymentAddress,\n valueBigNumber.toString(),\n decrypted.randomCommitmentTrapdoor,\n i,\n nullifiers\n );\n if (!isSpent) {\n balance = balance.plus(valueBigNumber);\n }\n }\n }\n return balance;\n }\n\n /**\n * @description Retrieve all the incoming and outgoing transactions associated with the configured viewing key.\n * The response properties are in Uint8Array format; use the getIncomingAndOutgoingTransactions method for readable properties\n *\n */\n async getIncomingAndOutgoingTransactionsRaw() {\n const incoming = [];\n const outgoing = [];\n\n const { commitments_and_ciphertexts, nullifiers } = await this.getSaplingDiff();\n\n for (let i = 0; i < commitments_and_ciphertexts.length; i++) {\n const decryptedAsReceiver = await this.decryptCiphertextAsReceiver(\n commitments_and_ciphertexts[i]\n );\n const decryptedAsSender = await this.decryptCiphertextAsSender(\n commitments_and_ciphertexts[i]\n );\n if (decryptedAsReceiver) {\n const balance = convertValueToBigNumber(decryptedAsReceiver.value);\n const isSpent = await this.isSpent(\n decryptedAsReceiver.paymentAddress,\n balance.toString(),\n decryptedAsReceiver.randomCommitmentTrapdoor,\n i,\n nullifiers\n );\n incoming.push({ ...decryptedAsReceiver, isSpent, position: i });\n }\n if (decryptedAsSender) {\n outgoing.push(decryptedAsSender);\n }\n }\n return {\n incoming,\n outgoing,\n };\n }\n\n /**\n * @description Retrieve all the incoming and outgoing decoded transactions associated with the configured viewing key\n *\n */\n async getIncomingAndOutgoingTransactions(): Promise<SaplingIncomingAndOutgoingTransaction> {\n const tx = await this.getIncomingAndOutgoingTransactionsRaw();\n const incoming = tx.incoming.map(({ isSpent, ...rest }) => {\n return { ...readableFormat(rest), isSpent };\n });\n const outgoing = tx.outgoing.map((outgoingTx) => {\n return readableFormat(outgoingTx);\n });\n return { incoming, outgoing };\n }\n\n private async getSaplingDiff() {\n let saplingDiffResponse: SaplingDiffResponse;\n if (this.#saplingContractId.saplingId) {\n saplingDiffResponse = await this.#readProvider.getSaplingDiffById(\n { id: this.#saplingContractId.saplingId },\n 'head'\n );\n } else if (this.#saplingContractId.contractAddress) {\n saplingDiffResponse = await this.#readProvider.getSaplingDiffByContract(\n this.#saplingContractId.contractAddress,\n 'head'\n );\n } else {\n throw new InvalidParameter(\n 'A contract address or a sapling id was expected in the SaplingTransactionViewer constructor.'\n );\n }\n return saplingDiffResponse;\n }\n\n private async decryptCiphertextAsReceiver(\n commitmentsAndCiphertexts: CommitmentsAndCiphertexts\n ): Promise<Omit<Input, 'position'> | undefined> {\n const commitment = commitmentsAndCiphertexts[0];\n const { epk, payload_enc, nonce_enc } = commitmentsAndCiphertexts[1];\n\n const incomingViewingKey = await this.#viewingKeyProvider.getIncomingViewingKey();\n const keyAgreement = await sapling.keyAgreement(epk, incomingViewingKey);\n const keyAgreementHash = blake.blake2b(keyAgreement, Buffer.from(KDF_KEY), 32);\n\n const decrypted = await this.decryptCiphertext(\n keyAgreementHash,\n hex2buf(nonce_enc),\n hex2buf(payload_enc)\n );\n\n if (decrypted) {\n const {\n diversifier,\n value,\n randomCommitmentTrapdoor: rcm,\n memo,\n } = this.extractTransactionProperties(decrypted);\n const paymentAddress = bufToUint8Array(\n await sapling.getRawPaymentAddressFromIncomingViewingKey(incomingViewingKey, diversifier)\n );\n\n try {\n const valid = await sapling.verifyCommitment(\n commitment,\n paymentAddress,\n convertValueToBigNumber(value).toString(),\n rcm\n );\n if (valid) {\n return { value, memo, paymentAddress, randomCommitmentTrapdoor: rcm };\n }\n } catch (ex: any) {\n if (!/invalid value/.test(ex)) {\n throw ex;\n }\n }\n }\n }\n\n private async decryptCiphertextAsSender(\n commitmentsAndCiphertexts: CommitmentsAndCiphertexts\n ): Promise<Omit<Input, 'position'> | undefined> {\n const commitment = commitmentsAndCiphertexts[0];\n const { epk, payload_enc, nonce_enc, payload_out, nonce_out, cv } =\n commitmentsAndCiphertexts[1];\n\n const outgoingViewingKey = await this.#viewingKeyProvider.getOutgoingViewingKey();\n const concat = cv.concat(commitment, epk, outgoingViewingKey.toString('hex'));\n const outgoingCipherKey = blake.blake2b(Buffer.from(concat, 'hex'), Buffer.from(OCK_KEY), 32);\n\n const decryptedOut = await this.decryptCiphertext(\n outgoingCipherKey,\n hex2buf(nonce_out),\n hex2buf(payload_out)\n );\n\n if (decryptedOut) {\n const { recipientDiversifiedTransmissionKey: pkd, ephemeralPrivateKey: esk } =\n this.extractPkdAndEsk(decryptedOut);\n const keyAgreement = await sapling.keyAgreement(pkd, esk);\n const keyAgreementHash = blake.blake2b(keyAgreement, Buffer.from(KDF_KEY), 32);\n\n const decryptedEnc = await this.decryptCiphertext(\n keyAgreementHash,\n hex2buf(nonce_enc),\n hex2buf(payload_enc)\n );\n\n if (decryptedEnc) {\n const {\n diversifier,\n value,\n randomCommitmentTrapdoor: rcm,\n memo,\n } = this.extractTransactionProperties(decryptedEnc);\n const paymentAddress = mergebuf(diversifier, pkd);\n\n try {\n const isValid = await sapling.verifyCommitment(\n commitment,\n paymentAddress,\n convertValueToBigNumber(value).toString(),\n rcm\n );\n if (isValid) {\n return { value, memo, paymentAddress, randomCommitmentTrapdoor: rcm };\n }\n } catch (ex: any) {\n if (!/invalid value/.test(ex)) {\n throw ex;\n }\n }\n }\n }\n }\n\n private async decryptCiphertext(\n keyAgreementHash: Uint8Array,\n nonce: Uint8Array,\n payload: Uint8Array\n ) {\n return openSecretBox(keyAgreementHash, nonce, payload);\n }\n\n private extractTransactionProperties(decrypted: Uint8Array) {\n return {\n diversifier: decrypted.slice(0, 11),\n value: decrypted.slice(11, 19),\n randomCommitmentTrapdoor: decrypted.slice(19, 51),\n memoSize: decrypted.slice(51, 55),\n memo: decrypted.slice(55),\n };\n }\n\n private extractPkdAndEsk(decrypted: Uint8Array) {\n return {\n recipientDiversifiedTransmissionKey: decrypted.slice(0, 32),\n ephemeralPrivateKey: decrypted.slice(32),\n };\n }\n\n private async isSpent(\n address: Uint8Array,\n value: string,\n randomCommitmentTrapdoor: Uint8Array,\n position: number,\n nullifiers: string[]\n ) {\n const computedNullifier = await sapling.computeNullifier(\n this.#viewingKeyProvider.getFullViewingKey(),\n address,\n value,\n randomCommitmentTrapdoor,\n position\n );\n return nullifiers.includes(computedNullifier.toString('hex'));\n }\n}\n","/**\n *\n * @param leaves nodes in the tree that we would like to make pairs from\n * @returns a paired/chunked array: [a, b, c, d] => [[a, b], [c, d]]\n */\nexport function pairNodes<T>(leaves: T[]): (T | undefined)[][] {\n const pairs: (T | undefined)[][] = new Array(Math.ceil(leaves.length / 2));\n\n for (let i = 0; i < leaves.length / 2; i++) {\n pairs[i] = leaves.slice(i * 2, i * 2 + 2);\n }\n\n return pairs;\n}\n\n/**\n * @description helper function to assist in Lazy initializing an object\n */\nexport class Lazy<T> {\n private isInitialized = false;\n\n private value?: T = undefined;\n\n constructor(private readonly init: () => Promise<T>) {}\n\n // initializes the lazily initiated object\n public async get(): Promise<T> {\n if (!this.isInitialized) {\n this.value = await this.init();\n this.isInitialized = true;\n }\n\n return this.value as T;\n }\n}\n\n/**\n *\n * @param hex hexadecimal string we would like to swap\n * @returns a hexadecimal string with swapped endians\n */\nexport const changeEndianness = (hex: string): string => {\n if (hex.length % 2 != 0) {\n hex = '0' + hex;\n }\n const bytes = hex.match(/.{2}/g) || [];\n\n return bytes.reverse().join('');\n};\n","/**\n * Some code in this file was originally written or inspired by Airgap-it\n * https://github.com/airgap-it/airgap-coin-lib/blob/master/LICENSE.md\n *\n */\n\nimport { SaplingDiffResponse, SaplingTransactionCiphertext } from '@taquito/rpc';\nimport { InvalidMerkleRootError, TreeConstructionFailure } from '../error';\nimport { merkleHash } from '@airgap/sapling-wasm';\nimport { Lazy, pairNodes, changeEndianness } from './utils';\nimport { hex2Bytes, num2PaddedHex } from '@taquito/utils';\nimport BigNumber from 'bignumber.js';\nimport { MerkleTree, SaplingStateTree } from '../types';\n\n/**\n * @description The SaplingState class's main purpose is to provide a Merkle path for the forger and the transaction builder, so that it may verify that the Sapling transaction is valid\n *\n */\nexport class SaplingState {\n private stateTree: SaplingStateTree | undefined;\n\n private readonly uncommittedMerkleHash: string =\n '0100000000000000000000000000000000000000000000000000000000000000';\n private readonly uncommittedMerkleHashes: Lazy<Buffer[]> = new Lazy(() =>\n this.createUncommittedMerkleHashes()\n );\n\n constructor(public readonly height: number) {}\n\n public async getStateTree(\n stateDiff: SaplingDiffResponse,\n constructTree = true\n ): Promise<SaplingStateTree> {\n if (this.stateTree !== undefined && this.stateTree.root === stateDiff.root) {\n return this.stateTree;\n }\n\n const commitments: string[] = stateDiff.commitments_and_ciphertexts.map(\n ([commitment, _]: [string, SaplingTransactionCiphertext]) => commitment\n );\n\n let merkleTree: MerkleTree;\n if (constructTree) {\n merkleTree = await this.constructMerkleTree(commitments, 0);\n await this.validateMerkleTree(merkleTree, stateDiff.root);\n }\n\n this.stateTree = {\n height: this.height,\n size: commitments.length,\n root: stateDiff.root,\n tree: merkleTree,\n };\n\n return this.stateTree;\n }\n\n /**\n *\n * @param stateTree stateTree parameter that holds information details on our Merkle tree\n * @param position position of the hash in the Merkle tree\n * @returns a promise of a string that serves as the Merkle path that can be passed on to the Sapling forger or the transaction builder\n */\n public async getWitness(stateTree: SaplingStateTree, position: BigNumber): Promise<string> {\n const heightBuffer: Buffer = hex2Bytes(changeEndianness(num2PaddedHex(stateTree.height)));\n const posBuffer: Buffer = hex2Bytes(changeEndianness(num2PaddedHex(position, 64)));\n\n const neighbouringHashes: Buffer[] = await this.getNeighbouringHashes(\n [],\n stateTree.height,\n position,\n stateTree.tree\n );\n\n const witness: Buffer = neighbouringHashes\n .map((hash: Buffer) =>\n Buffer.concat([hex2Bytes(changeEndianness(num2PaddedHex(hash.length))), hash])\n )\n .reverse()\n .reduce((acc: Buffer, next: Buffer) => Buffer.concat([acc, next]));\n\n return Buffer.concat([heightBuffer, witness, posBuffer]).toString('hex');\n }\n\n /**\n *\n * @param leaves array of leaves or nodes that we want to construct the Merkle tree from\n * @param height height of the desired Merkle tree\n * @returns a promise of MerkleTree type object\n */\n private async constructMerkleTree(leaves: MerkleTree[], height: number): Promise<MerkleTree> {\n if (height === this.height && leaves.length === 1) {\n return leaves[0];\n }\n\n if (height === this.height || leaves.length > Math.pow(2, this.height - 1 - height)) {\n throw new TreeConstructionFailure(\n 'Children length exceeds maximum number of nodes in a merkle tree'\n );\n }\n\n const pairedLeaves: MerkleTree[][] = pairNodes(leaves);\n\n const updatedLeaves: MerkleTree[] = await Promise.all(\n pairedLeaves.map(async (chunk: MerkleTree[]) => {\n const left: Buffer = await this.getMerkleHash(chunk[0], height);\n const right: Buffer = await this.getMerkleHash(chunk[1], height);\n\n const parentHash = await merkleHash(height, left, right);\n\n return [parentHash.toString('hex'), chunk[0], chunk[1]] as [string, MerkleTree, MerkleTree];\n })\n );\n\n return this.constructMerkleTree(updatedLeaves, height + 1);\n }\n\n private async getMerkleHash(tree: MerkleTree, height: number): Promise<Buffer> {\n if (tree === undefined) {\n return (await this.uncommittedMerkleHashes.get())[height];\n } else if (typeof tree === 'string') {\n return Buffer.from(tree, 'hex');\n } else {\n return Buffer.from(tree[0], 'hex');\n }\n }\n\n /**\n *\n * @returns hashes of empty or null values to fill in the Merkle tree\n */\n private async createUncommittedMerkleHashes(): Promise<Buffer[]> {\n const res: Buffer[] = new Array(this.height);\n\n res[0] = Buffer.from(this.uncommittedMerkleHash, 'hex');\n for (let i = 0; i < this.height; i++) {\n const hash: Buffer = res[i];\n res[i + 1] = await merkleHash(i, hash, hash);\n }\n\n return res;\n }\n\n /**\n *\n * @param tree Merkle tree to validate\n * @param expectedRoot the expected merkle root to validate against\n */\n private async validateMerkleTree(tree: MerkleTree, expectedRoot: string) {\n const root: Buffer = await this.getMerkleHash(tree, this.height - 1);\n\n if (root.toString('hex') !== expectedRoot) {\n throw new InvalidMerkleRootError(root.toString('hex'));\n }\n }\n\n /**\n *\n * @param acc accumulator variable for the recursive function\n * @param height height of the tree\n * @param position position of the hash we would like find the neighbours of\n * @param tree the Merkle tree that we want to traverse\n * @returns the accumulated Buffer array of neighbouring hashes\n */\n private async getNeighbouringHashes(\n acc: Buffer[],\n height: number,\n position: BigNumber,\n tree: MerkleTree\n ): Promise<Buffer[]> {\n if (typeof tree === 'undefined') {\n throw new Error();\n } else if (typeof tree === 'string') {\n return acc;\n } else {\n let nextPos, nextTree, otherTree;\n\n const fullTree: BigNumber = new BigNumber(2).pow(height - 1);\n if (position.lt(fullTree)) {\n nextPos = position;\n nextTree = tree[1];\n otherTree = tree[2];\n } else {\n nextPos = position.minus(fullTree);\n nextTree = tree[2];\n otherTree = tree[1];\n }\n return this.getNeighbouringHashes(\n [await this.getMerkleHash(otherTree, height - 1), ...acc],\n height - 1,\n nextPos,\n nextTree\n );\n }\n }\n}\n","import * as sapling from '@airgap/sapling-wasm';\nimport { randomBytes } from '@stablelib/random';\nimport { ParametersOutputProof } from './types';\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst saplingOutputParams = require('../saplingOutputParams');\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst saplingSpendParams = require('../saplingSpendParams');\n\nexport class SaplingWrapper {\n async withProvingContext<T>(action: (context: number) => Promise<T>) {\n await this.initSaplingParameters();\n return sapling.withProvingContext(action);\n }\n\n getRandomBytes(length: number) {\n return randomBytes(length);\n }\n\n async randR() {\n return sapling.randR();\n }\n\n async getOutgoingViewingKey(vk: Buffer) {\n return sapling.getOutgoingViewingKey(vk);\n }\n\n async preparePartialOutputDescription(parametersOutputProof: ParametersOutputProof) {\n const partialOutputDesc = await sapling.preparePartialOutputDescription(\n parametersOutputProof.saplingContext,\n parametersOutputProof.address,\n parametersOutputProof.randomCommitmentTrapdoor,\n parametersOutputProof.ephemeralPrivateKey,\n parametersOutputProof.amount\n );\n return {\n commitmentValue: partialOutputDesc.cv,\n commitment: partialOutputDesc.cm,\n proof: partialOutputDesc.proof,\n };\n }\n\n async getDiversifiedFromRawPaymentAddress(decodedDestination: Uint8Array) {\n return sapling.getDiversifiedFromRawPaymentAddress(decodedDestination);\n }\n\n async deriveEphemeralPublicKey(diversifier: Buffer, esk: Buffer) {\n return sapling.deriveEphemeralPublicKey(diversifier, esk);\n }\n\n async getPkdFromRawPaymentAddress(destination: Uint8Array) {\n return sapling.getPkdFromRawPaymentAddress(destination);\n }\n\n async keyAgreement(p: Buffer, sk: Buffer) {\n return sapling.keyAgreement(p, sk);\n }\n\n async createBindingSignature(\n saplingContext: number,\n balance: string,\n transactionSigHash: Uint8Array\n ) {\n return sapling.createBindingSignature(saplingContext, balance, transactionSigHash);\n }\n\n async initSaplingParameters() {\n const spendParams = Buffer.from(saplingSpendParams.saplingSpendParams, 'base64');\n const outputParams = Buffer.from(saplingOutputParams.saplingOutputParams, 'base64');\n\n return sapling.initParameters(spendParams, outputParams);\n }\n}\n","import blake from 'blakejs';\nimport { secretBox } from '@stablelib/nacl';\nimport { DEFAULT_MEMO, KDF_KEY, OCK_KEY } from '../constants';\nimport { SaplingForger } from '../sapling-forger/sapling-forger';\nimport BigNumber from 'bignumber.js';\nimport {\n Input,\n SaplingTransactionOutput,\n SaplingTransactionInput,\n ParametersBindingSig,\n ChosenSpendableInputs,\n ParametersOutputDescription,\n ParametersCiphertext,\n Ciphertext,\n SaplingContractDetails,\n SaplingTransaction,\n SaplingTransactionParams,\n} from '../types';\nimport { SaplingDiffResponse } from '@taquito/rpc';\nimport { b58cdecode, Prefix, prefix } from '@taquito/utils';\nimport { TzReadProvider } from '@taquito/taquito';\nimport { convertValueToBigNumber } from '../sapling-tx-viewer/helpers';\nimport { SaplingState } from '../sapling-state/sapling-state';\nimport { SaplingWrapper } from '../sapling-module-wrapper';\nimport { InMemorySpendingKey } from '../sapling-keys/in-memory-spending-key';\nimport { InMemoryProvingKey } from '../sapling-keys/in-memory-proving-key';\n\nexport class SaplingTransactionBuilder {\n #inMemorySpendingKey: InMemorySpendingKey;\n #inMemoryProvingKey: InMemoryProvingKey | undefined;\n #saplingForger: SaplingForger;\n #contractAddress: string;\n #saplingId: string | undefined;\n #memoSize: number;\n #readProvider: TzReadProvider;\n #saplingWrapper: SaplingWrapper;\n #chainId: string | undefined;\n #saplingState: SaplingState;\n\n constructor(\n keys: {\n saplingSigner: InMemorySpendingKey;\n saplingProver?: InMemoryProvingKey;\n },\n saplingForger: SaplingForger,\n saplingContractDetails: SaplingContractDetails,\n readProvider: TzReadProvider,\n saplingWrapper = new SaplingWrapper()\n ) {\n this.#saplingForger = saplingForger;\n this.#contractAddress = saplingContractDetails.contractAddress;\n this.#memoSize = saplingContractDetails.memoSize;\n this.#inMemorySpendingKey = keys.saplingSigner;\n this.#inMemoryProvingKey = keys.saplingProver;\n this.#saplingState = new SaplingState(32);\n this.#saplingId = saplingContractDetails.saplingId;\n this.#saplingWrapper = saplingWrapper;\n this.#readProvider = readProvider;\n }\n\n async createShieldedTx(\n saplingTransactionParams: SaplingTransactionParams[],\n txTotalAmount: BigNumber,\n boundData: Buffer\n ): Promise<Pick<SaplingTransaction, 'inputs' | 'outputs' | 'signature' | 'balance'>> {\n const rcm = await this.#saplingWrapper.randR();\n\n const balance = this.calculateTransactionBalance('0', txTotalAmount.toString());\n\n const { signature, inputs, outputs } = await this.#saplingWrapper.withProvingContext(\n async (saplingContext: number) => {\n const outputs: SaplingTransactionOutput[] = [];\n const inputs: SaplingTransactionInput[] = [];\n\n for (const i in saplingTransactionParams) {\n outputs.push(\n await this.prepareSaplingOutputDescription({\n saplingContext,\n address: b58cdecode(saplingTransactionParams[i].to, prefix[Prefix.ZET1]),\n amount: saplingTransactionParams[i].amount,\n memo: saplingTransactionParams[i].memo,\n randomCommitmentTrapdoor: rcm,\n })\n );\n }\n\n const signature = await this.createBindingSignature({\n saplingContext,\n inputs,\n outputs,\n balance,\n boundData,\n });\n return { signature, inputs, outputs };\n }\n );\n\n return {\n inputs,\n outputs,\n signature,\n balance,\n };\n }\n\n async createSaplingTx(\n saplingTransactionParams: SaplingTransactionParams[],\n txTotalAmount: BigNumber,\n boundData: Buffer,\n chosenInputs: ChosenSpendableInputs\n ) {\n const randomCommitmentTrapdoor = await this.#saplingWrapper.randR();\n const saplingViewer = await this.#inMemorySpendingKey.getSaplingViewingKeyProvider();\n const outgoingViewingKey = await saplingViewer.getOutgoingViewingKey();\n\n const { signature, balance, inputs, outputs } = await this.#saplingWrapper.withProvingContext(\n async (saplingContext: number) => {\n const outputs: SaplingTransactionOutput[] = [];\n const inputs: SaplingTransactionInput[] = [];\n\n inputs.push(\n ...(await this.prepareSaplingSpendDescription(saplingContext, chosenInputs.inputsToSpend))\n );\n\n let sumAmountOutput = new BigNumber(0);\n\n for (const i in saplingTransactionParams) {\n sumAmountOutput = sumAmountOutput.plus(new BigNumber(saplingTransactionParams[i].amount));\n\n outputs.push(\n await this.prepareSaplingOutputDescription({\n saplingContext,\n address: b58cdecode(saplingTransactionParams[i].to, prefix[Prefix.ZET1]),\n amount: saplingTransactionParams[i].amount,\n memo: saplingTransactionParams[i].memo,\n randomCommitmentTrapdoor,\n outgoingViewingKey,\n })\n );\n }\n\n if (chosenInputs.sumSelectedInputs.isGreaterThan(sumAmountOutput)) {\n const payBackAddress = (await saplingViewer.getAddress()).address;\n\n const { payBackOutput, payBackAmount } = await this.createPaybackOutput(\n {\n saplingContext,\n address: b58cdecode(payBackAddress, prefix[Prefix.ZET1]),\n amount: txTotalAmount.toString(),\n memo: DEFAULT_MEMO,\n randomCommitmentTrapdoor: randomCommitmentTrapdoor,\n outgoingViewingKey: outgoingViewingKey,\n },\n chosenInputs.sumSelectedInputs\n );\n\n sumAmountOutput = sumAmountOutput.plus(new BigNumber(payBackAmount));\n outputs.push(payBackOutput);\n }\n\n const balance = this.calculateTransactionBalance(\n chosenInputs.sumSelectedInputs.toString(),\n sumAmountOutput.toString()\n );\n\n const signature = await this.createBindingSignature({\n saplingContext,\n inputs,\n outputs,\n balance,\n boundData,\n });\n\n return { signature, balance, inputs, outputs };\n }\n );\n\n return {\n inputs,\n outputs,\n signature,\n balance,\n };\n }\n\n // sum of values of inputs minus sums of values of output equals balance\n calculateTransactionBalance(inputTotal: string, outputTotal: string) {\n return new BigNumber(inputTotal).minus(new BigNumber(outputTotal));\n }\n\n async prepareSaplingOutputDescription(\n parametersOutputDescription: ParametersOutputDescription\n ): Promise<SaplingTransactionOutput> {\n const ephemeralPrivateKey = await this.#saplingWrapper.randR();\n const { commitmentValue, commitment, proof } =\n await this.#saplingWrapper.preparePartialOutputDescription({\n saplingContext: parametersOutputDescription.saplingContext,\n address: parametersOutputDescription.address,\n randomCommitmentTrapdoor: parametersOutputDescription.randomCommitmentTrapdoor,\n ephemeralPrivateKey,\n amount: parametersOutputDescription.amount,\n });\n\n const diversifier = await this.#saplingWrapper.getDiversifiedFromRawPaymentAddress(\n parametersOutputDescription.address\n );\n const ephemeralPublicKey = await this.#saplingWrapper.deriveEphemeralPublicKey(\n diversifier,\n ephemeralPrivateKey\n );\n const outgoingCipherKey = parametersOutputDescription.outgoingViewingKey\n ? blake.blake2b(\n Buffer.concat([\n commitmentValue,\n commitment,\n ephemeralPublicKey,\n parametersOutputDescription.outgoingViewingKey,\n ]),\n Buffer.from(OCK_KEY),\n 32\n )\n : this.#saplingWrapper.getRandomBytes(32);\n const ciphertext = await this.encryptCiphertext({\n address: parametersOutputDescription.address,\n ephemeralPrivateKey,\n diversifier,\n outgoingCipherKey,\n amount: parametersOutputDescription.amount,\n randomCommitmentTrapdoor: parametersOutputDescription.randomCommitmentTrapdoor,\n memo: parametersOutputDescription.memo,\n });\n\n return {\n commitment,\n proof,\n ciphertext: {\n ...ciphertext,\n commitmentValue,\n ephemeralPublicKey,\n },\n };\n }\n\n async prepareSaplingSpendDescription(saplingContext: number, inputsToSpend: Input[]) {\n const publicKeyReRandomization = await this.#saplingWrapper.randR();\n\n let stateDiff: SaplingDiffResponse;\n if (this.#saplingId) {\n stateDiff = await this.#readProvider.getSaplingDiffById({ id: this.#saplingId }, 'head');\n } else {\n stateDiff = await this.#readProvider.getSaplingDiffByContract(this.#contractAddress, 'head');\n }\n\n const stateTree = await this.#saplingState.getStateTree(stateDiff, true);\n\n const saplingSpendDescriptions: SaplingTransactionInput[] = [];\n\n for (let i = 0; i < inputsToSpend.length; i++) {\n const amount = convertValueToBigNumber(inputsToSpend[i].value).toString();\n const witness = await this.#saplingState.getWitness(\n stateTree,\n new BigNumber(inputsToSpend[i].position)\n );\n\n const unsignedSpendDescription = this.#inMemoryProvingKey\n ? await this.#inMemoryProvingKey.prepareSpendDescription({\n saplingContext,\n address: inputsToSpend[i].paymentAddress,\n randomCommitmentTrapdoor: inputsToSpend[i].randomCommitmentTrapdoor,\n publicKeyReRandomization,\n amount,\n root: stateDiff.root,\n witness,\n })\n : await this.#inMemorySpendingKey.prepareSpendDescription({\n saplingContext,\n address: inputsToSpend[i].paymentAddress,\n randomCommitmentTrapdoor: inputsToSpend[i].randomCommitmentTrapdoor,\n publicKeyReRandomization,\n amount,\n root: stateDiff.root,\n witness,\n });\n\n const unsignedSpendDescriptionBytes =\n this.#saplingForger.forgeUnsignedTxInput(unsignedSpendDescription);\n const hash = blake.blake2b(unsignedSpendDescriptionBytes, await this.getAntiReplay(), 32);\n const spendDescription = await this.#inMemorySpendingKey.signSpendDescription({\n publicKeyReRandomization,\n unsignedSpendDescription,\n hash,\n });\n\n if (spendDescription.signature === undefined) {\n throw new Error('Spend signing failed');\n }\n saplingSpendDescriptions.push(spendDescription);\n }\n\n return saplingSpendDescriptions;\n }\n\n async encryptCiphertext(\n parametersCiphertext: ParametersCiphertext\n ): Promise<Pick<Ciphertext, 'payloadEnc' | 'nonceEnc' | 'payloadOut' | 'nonceOut'>> {\n const recipientDiversifiedTransmissionKey =\n await this.#saplingWrapper.getPkdFromRawPaymentAddress(parametersCiphertext.address);\n const keyAgreement = await this.#saplingWrapper.keyAgreement(\n recipientDiversifiedTransmissionKey,\n parametersCiphertext.ephemeralPrivateKey\n );\n const keyAgreementHash = blake.blake2b(keyAgreement, Buffer.from(KDF_KEY), 32);\n const nonceEnc = Buffer.from(this.#saplingWrapper.getRandomBytes(24));\n\n const transactionPlaintext = this.#saplingForger.forgeTransactionPlaintext({\n diversifier: parametersCiphertext.diversifier,\n amount: parametersCiphertext.amount,\n randomCommitmentTrapdoor: parametersCiphertext.randomCommitmentTrapdoor,\n memoSize: this.#memoSize * 2,\n memo: parametersCiphertext.memo,\n });\n\n const nonceOut = Buffer.from(this.#saplingWrapper.getRandomBytes(24));\n const payloadEnc = Buffer.from(secretBox(keyAgreementHash, nonceEnc, transactionPlaintext));\n const payloadOut = Buffer.from(\n secretBox(\n parametersCiphertext.outgoingCipherKey,\n nonceOut,\n Buffer.concat([\n recipientDiversifiedTransmissionKey,\n parametersCiphertext.ephemeralPrivateKey,\n ])\n )\n );\n\n return { payloadEnc, nonceEnc, payloadOut, nonceOut };\n }\n\n async createPaybackOutput(params: ParametersOutputDescription, sumSelectedInputs: BigNumber) {\n const payBackAmount = sumSelectedInputs.minus(params.amount).toString();\n const payBackOutput = await this.prepareSaplingOutputDescription({\n saplingContext: params.saplingContext,\n address: params.address,\n amount: payBackAmount,\n memo: params.memo,\n randomCommitmentTrapdoor: params.randomCommitmentTrapdoor,\n outgoingViewingKey: params.outgoingViewingKey,\n });\n\n return { payBackOutput, payBackAmount };\n }\n\n async createBindingSignature(parametersBindingSig: ParametersBindingSig) {\n const outputs = this.#saplingForger.forgeOutputDescriptions(parametersBindingSig.outputs);\n const inputs = this.#saplingForger.forgeSpendDescriptions(parametersBindingSig.inputs);\n const transactionSigHash = blake.blake2b(\n Buffer.concat([inputs, outputs, parametersBindingSig.boundData]),\n await this.getAntiReplay(),\n 32\n );\n\n return this.#saplingWrapper.createBindingSignature(\n parametersBindingSig.saplingContext,\n parametersBindingSig.balance.toFixed(),\n transactionSigHash\n );\n }\n\n async getAntiReplay() {\n let chainId = this.#chainId;\n if (!chainId) {\n chainId = await this.#readProvider.getChainId();\n this.#chainId = chainId;\n }\n return Buffer.from(`${this.#contractAddress}${chainId}`);\n }\n}\n","import { InvalidSpendingKey } from '../error';\nimport toBuffer from 'typedarray-to-buffer';\nimport { openSecretBox } from '@stablelib/nacl';\nimport pbkdf2 from 'pbkdf2';\nimport { Prefix, prefix, b58cdecode } from '@taquito/utils';\n\nexport function decryptKey(spendingKey: string, password?: string) {\n const keyArr = b58cdecode(spendingKey, prefix[Prefix.SASK]);\n // exit first if no password and key is encrypted\n if (!password && spendingKey.slice(0, 4) !== 'sask') {\n throw new InvalidSpendingKey(spendingKey, 'no password Provided to decrypt');\n }\n\n if (password && spendingKey.slice(0, 4) !== 'sask') {\n const salt = toBuffer(keyArr.slice(0, 8));\n const encryptedSk = toBuffer(keyArr.slice(8));\n\n const encryptionKey = pbkdf2.pbkdf2Sync(password, salt, 32768, 32, 'sha512');\n const decrypted = openSecretBox(\n new Uint8Array(encryptionKey),\n new Uint8Array(24),\n new Uint8Array(encryptedSk)\n );\n if (!decrypted) {\n throw new InvalidSpendingKey(spendingKey, 'Encrypted Spending Key or Password Incorrect');\n }\n\n return toBuffer(decrypted);\n } else {\n return toBuffer(keyArr);\n }\n}\n","import { InvalidSpendingKey } from '../error';\nimport { InMemoryViewingKey } from './in-memory-viewing-key';\nimport * as sapling from '@airgap/sapling-wasm';\nimport { Prefix, prefix, b58cencode, ValidationResult } from '@taquito/utils';\nimport * as bip39 from 'bip39';\nimport {\n ParametersSpendProof,\n ParametersSpendSig,\n SaplingSpendDescription,\n SaplingTransactionInput,\n} from '../types';\nimport { decryptKey } from './helpers';\n\n/**\n * @description holds the spending key, create proof and signature for spend descriptions\n * can instantiate from mnemonic word list or decrypt a encrypted spending key\n * with access to instantiate a InMemoryViewingKey\n */\nexport class InMemorySpendingKey {\n #spendingKeyBuf: Buffer;\n #saplingViewingKey: InMemoryViewingKey | undefined;\n /**\n *\n * @param spendingKey unencrypted sask... or encrypted MMXj...\n * @param password required for MMXj encrypted keys\n */\n constructor(spendingKey: string, password?: string) {\n this.#spendingKeyBuf = decryptKey(spendingKey, password);\n }\n\n /**\n *\n * @param mnemonic string of words\n * @param derivationPath tezos current standard 'm/'\n * @returns InMemorySpendingKey class instantiated\n */\n static async fromMnemonic(mnemonic: string, derivationPath = 'm/') {\n // no password passed here. password provided only changes from sask -> MMXj\n const fullSeed = await bip39.mnemonicToSeed(mnemonic);\n\n const first32: Buffer = fullSeed.slice(0, 32);\n const second32: Buffer = fullSeed.slice(32);\n // reduce seed bytes must be 32 bytes reflecting both halves\n const seed = Buffer.from(first32.map((byte, index) => byte ^ second32[index]));\n\n const spendingKeyArr = new Uint8Array(\n await sapling.getExtendedSpendingKey(seed, derivationPath)\n );\n\n const spendingKey = b58cencode(spendingKeyArr, prefix[Prefix.SASK]);\n\n if (ValidationResult.VALID !== 3) {\n throw new InvalidSpendingKey(spendingKey);\n }\n\n return new InMemorySpendingKey(spendingKey);\n }\n\n /**\n *\n * @returns InMemoryViewingKey instantiated class\n */\n async getSaplingViewingKeyProvider() {\n let viewingKey: Buffer;\n if (!this.#saplingViewingKey) {\n viewingKey = await sapling.getExtendedFullViewingKeyFromSpendingKey(this.#spendingKeyBuf);\n this.#saplingViewingKey = new InMemoryViewingKey(viewingKey.toString('hex'));\n }\n\n return this.#saplingViewingKey;\n }\n\n /**\n * @description Prepare an unsigned sapling spend description using the spending key\n * @param parametersSpendProof.saplingContext The sapling proving context\n * @param parametersSpendProof.address The address of the input\n * @param parametersSpendProof.randomCommitmentTrapdoor The randomness of the commitment\n * @param parametersSpendProof.publicKeyReRandomization The re-randomization of the public key\n * @param parametersSpendProof.amount The value of the input\n * @param parametersSpendProof.root The root of the merkle tree\n * @param parametersSpendProof.witness The path of the commitment in the tree\n * @param derivationPath tezos current standard 'm/'\n * @returns The unsigned spend description\n */\n async prepareSpendDescription(\n parametersSpendProof: ParametersSpendProof\n ): Promise<Omit<SaplingSpendDescription, 'signature'>> {\n const spendDescription = await sapling.prepareSpendDescriptionWithSpendingKey(\n parametersSpendProof.saplingContext,\n this.#spendingKeyBuf,\n parametersSpendProof.address,\n parametersSpendProof.randomCommitmentTrapdoor,\n parametersSpendProof.publicKeyReRandomization,\n parametersSpendProof.amount,\n parametersSpendProof.root,\n parametersSpendProof.witness\n );\n return {\n commitmentValue: spendDescription.cv,\n nullifier: spendDescription.nf,\n publicKeyReRandomization: spendDescription.rk,\n rtAnchor: spendDescription.rt,\n proof: spendDescription.proof,\n };\n }\n\n /**\n * @description Sign a sapling spend description\n * @param parametersSpendSig.publicKeyReRandomization The re-randomization of the public key\n * @param parametersSpendSig.unsignedSpendDescription The unsigned Spend description\n * @param parametersSpendSig.hash The data to be signed\n * @returns The signed spend description\n */\n async signSpendDescription(\n parametersSpendSig: ParametersSpendSig\n ): Promise<SaplingTransactionInput> {\n const signedSpendDescription = await sapling.signSpendDescription(\n {\n cv: parametersSpendSig.unsignedSpendDescription.commitmentValue,\n rt: parametersSpendSig.unsignedSpendDescription.rtAnchor,\n nf: parametersSpendSig.unsignedSpendDescription.nullifier,\n rk: parametersSpendSig.unsignedSpendDescription.publicKeyReRandomization,\n proof: parametersSpendSig.unsignedSpendDescription.proof,\n },\n this.#spendingKeyBuf,\n parametersSpendSig.publicKeyReRandomization,\n parametersSpendSig.hash\n );\n return {\n commitmentValue: signedSpendDescription.cv,\n nullifier: signedSpendDescription.nf,\n publicKeyReRandomization: signedSpendDescription.rk,\n proof: signedSpendDescription.proof,\n signature: signedSpendDescription.spendAuthSig,\n };\n }\n\n /**\n * @description Return a proof authorizing key from the configured spending key\n */\n async getProvingKey() {\n const provingKey = await sapling.getProofAuthorizingKey(this.#spendingKeyBuf);\n return provingKey.toString('hex');\n }\n}\n","import { b58cencode, Prefix, prefix } from '@taquito/utils';\nimport * as sapling from '@airgap/sapling-wasm';\nimport { InMemorySpendingKey } from './in-memory-spending-key';\n\n/**\n * @description Holds the viewing key\n */\nexport class InMemoryViewingKey {\n #fullViewingKey: Buffer;\n constructor(fullViewingKey: string) {\n this.#fullViewingKey = Buffer.from(fullViewingKey, 'hex');\n }\n\n /**\n * @description Allows to instantiate the InMemoryViewingKey from an encrypted/unencrypted spending key\n *\n * @param spendingKey Base58Check-encoded spending key\n * @param password Optional password to decrypt the spending key\n * @example\n * ```\n * await InMemoryViewingKey.fromSpendingKey('sask27SLmU9herddHz4qFJBLMjWYMbJF8RtS579w9ej9mfCYK7VUdyCJPHK8AzW9zMsopGZEkYeNjAY7Zz1bkM7CGu8eKLzrjBLTMC5wWJDhxiK91ahA29rhDRsHdJDV2u2jFwb2MNUix8JW7sAkAqYVaJpCehTBPgRQ1KqKwqqUaNmuD8kazd4Q8MCWmgbWs21Yuomdqyi9FLigjRp7oY4m5adaVU19Nj1AHvsMY2tePeU2L')\n * ```\n *\n */\n static async fromSpendingKey(spendingKey: string, password?: string) {\n const inMemorySpendingkey = new InMemorySpendingKey(spendingKey, password);\n return inMemorySpendingkey.getSaplingViewingKeyProvider();\n }\n\n /**\n * @description Retrieve the full viewing key\n * @returns Buffer representing the full viewing key\n *\n */\n getFullViewingKey() {\n return this.#fullViewingKey;\n }\n\n /**\n * @description Retrieve the outgoing viewing key\n * @returns Buffer representing the outgoing viewing key\n *\n */\n async getOutgoingViewingKey() {\n return sapling.getOutgoingViewingKey(this.#fullViewingKey);\n }\n\n /**\n * @description Retrieve the incoming viewing key\n * @returns Buffer representing the incoming viewing key\n *\n */\n async getIncomingViewingKey() {\n return sapling.getIncomingViewingKey(this.#fullViewingKey);\n }\n\n /**\n * @description Retrieve a payment address\n * @param addressIndex used to determine which diversifier should be used to derive the address, default is 0\n * @returns Base58Check-encoded address and its index\n *\n */\n async getAddress(addressIndex?: number) {\n const { index, raw } = await sapling.getPaymentAddressFromViewingKey(\n this.#fullViewingKey,\n addressIndex\n );\n return {\n address: b58cencode(raw, prefix[Prefix.ZET1]),\n addressIndex: index.readInt32LE(),\n };\n }\n}\n","import * as sapling from '@airgap/sapling-wasm';\nimport { ParametersSpendProof, SaplingSpendDescription } from '../types';\nimport { decryptKey } from './helpers';\n\n/**\n * @description holds the proving key, create proof for spend descriptions\n * The class can be instantiated from a proving key or a spending key\n */\nexport class InMemoryProvingKey {\n #provingKey: Buffer;\n\n constructor(provingKey: string) {\n this.#provingKey = Buffer.from(provingKey, 'hex');\n }\n\n /**\n * @description Allows to instantiate the InMemoryProvingKey from an encrypted/unencrypted spending key\n *\n * @param spendingKey Base58Check-encoded spending key\n * @param password Optional password to decrypt the spending key\n * @example\n * ```\n * await InMemoryProvingKey.fromSpendingKey('sask27SLmU9herddHz4qFJBLMjWYMbJF8RtS579w9ej9mfCYK7VUdyCJPHK8AzW9zMsopGZEkYeNjAY7Zz1bkM7CGu8eKLzrjBLTMC5wWJDhxiK91ahA29rhDRsHdJDV2u2jFwb2MNUix8JW7sAkAqYVaJpCehTBPgRQ1KqKwqqUaNmuD8kazd4Q8MCWmgbWs21Yuomdqyi9FLigjRp7oY4m5adaVU19Nj1AHvsMY2tePeU2L')\n * ```\n *\n */\n static async fromSpendingKey(spendingKey: string, password?: string) {\n const decodedSpendingKey = decryptKey(spendingKey, password);\n const provingKey = await sapling.getProofAuthorizingKey(decodedSpendingKey);\n return new InMemoryProvingKey(provingKey.toString('hex'));\n }\n\n /**\n * @description Prepare an unsigned sapling spend description using the proving key\n *\n * @param parametersSpendProof.saplingContext The sapling proving context\n * @param parametersSpendProof.address The address of the input\n * @param parametersSpendProof.randomCommitmentTrapdoor The randomness of the commitment\n * @param parametersSpendProof.publicKeyReRandomization The re-randomization of the public key\n * @param parametersSpendProof.amount The value of the input\n * @param parametersSpendProof.root The root of the merkle tree\n * @param parametersSpendProof.witness The path of the commitment in the tree\n * @param derivationPath tezos current standard 'm/'\n * @returns The unsinged spend description\n */\n async prepareSpendDescription(\n parametersSpendProof: Omit<ParametersSpendProof, 'spendingKey'>\n ): Promise<Omit<SaplingSpendDescription, 'signature'>> {\n const spendDescription = await sapling.prepareSpendDescriptionWithAuthorizingKey(\n parametersSpendProof.saplingContext,\n this.#provingKey,\n parametersSpendProof.address,\n parametersSpendProof.randomCommitmentTrapdoor,\n parametersSpendProof.publicKeyReRandomization,\n parametersSpendProof.amount,\n parametersSpendProof.root,\n parametersSpendProof.witness\n );\n return {\n commitmentValue: spendDescription.cv,\n nullifier: spendDescription.nf,\n publicKeyReRandomization: spendDescription.rk,\n rtAnchor: spendDescription.rt,\n proof: spendDescription.proof,\n };\n }\n}\n","/**\n * @packageDocumentation\n * @module @taquito/sapling\n */\n\nimport BigNumber from 'bignumber.js';\nimport { MichelCodecPacker, Packer, TzReadProvider } from '@taquito/taquito';\nimport {\n b58cdecode,\n format,\n InvalidAddressError,\n InvalidKeyError,\n prefix,\n Prefix,\n validateKeyHash,\n ValidationResult,\n} from '@taquito/utils';\nimport { InsufficientBalance, InvalidMemo } from './error';\nimport { convertValueToBigNumber } from './sapling-tx-viewer/helpers';\nimport { InMemorySpendingKey } from './sapling-keys/in-memory-spending-key';\nimport { SaplingForger } from './sapling-forger/sapling-forger';\nimport { SaplingTransactionViewer } from './sapling-tx-viewer/sapling-transaction-viewer';\nimport {\n ChosenSpendableInputs,\n Input,\n ParametersSaplingTransaction,\n ParametersUnshieldedTransaction,\n SaplingContractDetails,\n SaplingContractId,\n} from './types';\nimport { SaplingTransactionBuilder } from './sapling-tx-builder/sapling-transactions-builder';\nimport { DEFAULT_BOUND_DATA, DEFAULT_MEMO } from './constants';\nimport { InMemoryProvingKey } from './sapling-keys/in-memory-proving-key';\n\nexport { SaplingTransactionViewer } from './sapling-tx-viewer/sapling-transaction-viewer';\nexport { InMemoryViewingKey } from './sapling-keys/in-memory-viewing-key';\nexport { InMemorySpendingKey } from './sapling-keys/in-memory-spending-key';\nexport { InMemoryProvingKey } from './sapling-keys/in-memory-proving-key';\n\n/**\n * @description Class that surfaces all of the sapling capability allowing to read from a sapling state and prepare transactions\n *\n * @param keys.saplingSigner Holds the sapling spending key\n * @param keys.saplingProver (Optional) Allows to generate the proofs with the proving key rather than the spending key\n * @param saplingContractDetails Contains the address of the sapling contract, the memo size, and an optional sapling id that must be defined if the sapling contract contains more than one sapling state\n * @param readProvider Allows to read data from the blockchain\n * @param packer (Optional) Allows packing data. Use the `MichelCodecPacker` by default.\n * @param saplingForger (Optional) Allows serializing the sapling transactions. Use the `SaplingForger` by default.\n * @param saplingTxBuilder (Optional) Allows to prepare the sapling transactions. Use the `SaplingTransactionBuilder` by default.\n * @example\n * ```\n * const inMemorySpendingKey = await InMemorySpendingKey.fromMnemonic('YOUR_MNEMONIC');\n * const readProvider = new RpcReadAdapter(new RpcClient('https://YOUR_PREFERRED_RPC_URL'))\n *\n * const saplingToolkit = new SaplingToolkit(\n * { saplingSigner: inMemorySpendingKey },\n * { contractAddress: SAPLING_CONTRACT_ADDRESS, memoSize: 8 },\n * readProvider\n * )\n * ```\n */\nexport class SaplingToolkit {\n #inMemorySpendingKey: InMemorySpendingKey;\n #saplingId: string | undefined;\n #contractAddress: string;\n #memoSize: number;\n #readProvider: TzReadProvider;\n #packer: Packer;\n #saplingForger: SaplingForger;\n #saplingTxBuilder: SaplingTransactionBuilder;\n #saplingTransactionViewer: SaplingTransactionViewer | undefined;\n constructor(\n keys: {\n saplingSigner: InMemorySpendingKey;\n saplingProver?: InMemoryProvingKey;\n },\n saplingContractDetails: SaplingContractDetails,\n readProvider: TzReadProvider,\n packer = new MichelCodecPacker(),\n saplingForger = new SaplingForger(),\n saplingTxBuilder = new SaplingTransactionBuilder(\n keys,\n saplingForger,\n saplingContractDetails,\n readProvider\n )\n ) {\n this.#inMemorySpendingKey = keys.saplingSigner;\n this.#saplingId = saplingContractDetails.saplingId;\n this.#contractAddress = saplingContractDetails.contractAddress;\n this.#memoSize = saplingContractDetails.memoSize;\n this.#readProvider = readProvider;\n this.#packer = packer;\n this.#saplingForger = saplingForger;\n this.#saplingTxBuilder = saplingTxBuilder;\n }\n\n /**\n * @description Get an instance of `SaplingTransactionViewer` which allows to retrieve and decrypt sapling transactions and calculate the unspent balance.\n */\n async getSaplingTransactionViewer() {\n let saplingTransactionViewer: SaplingTransactionViewer;\n\n if (!this.#saplingTransactionViewer) {\n const saplingViewingKey = await this.#inMemorySpendingKey.getSaplingViewingKeyProvider();\n saplingTransactionViewer = new SaplingTransactionViewer(\n saplingViewingKey,\n this.getSaplingContractId(),\n this.#readProvider\n );\n this.#saplingTransactionViewer = saplingTransactionViewer;\n }\n return this.#saplingTransactionViewer;\n }\n\n /**\n * @description Prepare a shielded transaction\n * @param shieldedTxParams `to` is the payment address that will receive the shielded tokens (zet).\n * `amount` is the amount of shielded tokens in tez by default.\n * `mutez` needs to be set to true if the amount of shielded tokens is in mutez.\n * `memo` is an empty string by default.\n * @returns a string representing the sapling transaction\n */\n async prepareShieldedTransaction(shieldedTxParams: ParametersSaplingTransaction[]) {\n const { formatedParams, totalAmount } = this.formatTransactionParams(\n shieldedTxParams,\n this.validateDestinationSaplingAddress\n );\n const root = await this.getRoot();\n\n const { inputs, outputs, signature, balance } = await this.#saplingTxBuilder.createShieldedTx(\n formatedParams,\n totalAmount,\n DEFAULT_BOUND_DATA\n );\n\n const forgedSaplingTx = this.#saplingForger.forgeSaplingTransaction({\n inputs,\n outputs,\n balance,\n root,\n boundData: DEFAULT_BOUND_DATA,\n signature,\n });\n\n return forgedSaplingTx.toString('hex');\n }\n\n /**\n * @description Prepare an unshielded transaction\n * @param unshieldedTxParams `to` is the Tezos address that will receive the unshielded tokens (tz1, tz2 or tz3).\n * `amount` is the amount of unshielded tokens in tez by default.\n * `mutez` needs to be set to true if the amount of unshielded tokens is in mutez.\n * @returns a string representing the sapling transaction.\n */\n async prepareUnshieldedTransaction(unshieldedTxParams: ParametersUnshieldedTransaction) {\n const { formatedParams, totalAmount } = this.formatTransactionParams(\n [unshieldedTxParams],\n this.validateDestinationImplicitAddress\n );\n\n const boundData = await this.createBoundData(formatedParams[0].to);\n\n const root = await this.getRoot();\n const chosenInputs = await this.selectInputsToSpend(new BigNumber(formatedParams[0].amount));\n\n const { inputs, outputs, signature, balance } = await this.#saplingTxBuilder.createSaplingTx(\n [],\n totalAmount,\n boundData,\n chosenInputs\n );\n\n const forgedSaplingTx = this.#saplingForger.forgeSaplingTransaction({\n inputs,\n outputs,\n balance,\n root,\n boundData,\n signature,\n });\n\n return forgedSaplingTx.toString('hex');\n }\n\n /**\n * @description Prepare a sapling transaction (zet to zet)\n * @param saplingTxParams `to` is the payment address that will receive the shielded tokens (zet).\n * `amount` is the amount of unshielded tokens in tez by default.\n * `mutez` needs to be set to true if the amount of unshielded tokens is in mutez.\n * `memo` is an empty string by default.\n * @returns a string representing the sapling transaction.\n */\n async prepareSaplingTransaction(saplingTxParams: ParametersSaplingTransaction[]) {\n const { formatedParams, totalAmount } = this.formatTransactionParams(\n saplingTxParams,\n this.validateDestinationSaplingAddress\n );\n\n const root = await this.getRoot();\n const chosenInputs = await this.selectInputsToSpend(totalAmount);\n const { inputs, outputs, signature, balance } = await this.#saplingTxBuilder.createSaplingTx(\n formatedParams,\n totalAmount,\n DEFAULT_BOUND_DATA,\n chosenInputs\n );\n\n const forgedSaplingTx = this.#saplingForger.forgeSaplingTransaction({\n inputs,\n outputs,\n balance,\n root,\n boundData: DEFAULT_BOUND_DATA,\n signature,\n });\n\n return forgedSaplingTx.toString('hex');\n }\n\n private formatTransactionParams(\n txParams: ParametersSaplingTransaction[],\n validateDestination: (to: string) => void\n ) {\n const formatedParams: {\n to: string;\n amount: string;\n memo: string;\n }[] = [];\n\n let totalAmount = new BigNumber(0);\n\n txParams.forEach((param) => {\n validateDestination(param.to);\n const amountMutez = param.mutez\n ? param.amount.toString()\n : format('tz', 'mutez', param.amount).toString();\n totalAmount = totalAmount.plus(new BigNumber(amountMutez));\n const memo = param.memo ?? DEFAULT_MEMO;\n if (memo.length > this.#memoSize) {\n throw new InvalidMemo(memo, 'The memo is too long.');\n }\n\n formatedParams.push({ to: param.to, amount: amountMutez, memo });\n });\n\n return { formatedParams, totalAmount };\n }\n\n private async getRoot() {\n if (this.#saplingId) {\n const { root } = await this.#readProvider.getSaplingDiffById({ id: this.#saplingId }, 'head');\n return root;\n } else {\n const { root } = await this.#readProvider.getSaplingDiffByContract(\n this.#contractAddress,\n 'head'\n );\n return root;\n }\n }\n private async createBoundData(destination: string) {\n const pref = destination.substr(0, 3);\n\n let pad: Buffer;\n switch (pref) {\n case 'tz1': {\n pad = Buffer.from('00', 'hex');\n break;\n }\n case 'tz2': {\n pad = Buffer.from('01', 'hex');\n break;\n }\n case 'tz3': {\n pad = Buffer.from('02', 'hex');\n break;\n }\n default: {\n throw new InvalidKeyError(destination, \"The 'to' parameter contains an invalid prefix.\");\n }\n }\n\n const decodedDestination = b58cdecode(destination, prefix[pref]);\n const padDestination = Buffer.concat([pad, Buffer.from(decodedDestination)]);\n const packedDestination = await this.#packer.packData({\n data: { bytes: padDestination.toString('hex') },\n type: { prim: 'bytes' },\n });\n\n return Buffer.from(packedDestination.packed, 'hex');\n }\n\n private validateDestinationImplicitAddress(to: string) {\n if (validateKeyHash(to) !== ValidationResult.VALID) {\n throw new InvalidAddressError(\n to,\n \"The 'to' parameter must be a Tezos public key hash (tz1, tz2, tz3).\"\n );\n }\n }\n\n private validateDestinationSaplingAddress(to: string) {\n if (!to.startsWith(Prefix.ZET1)) {\n throw new InvalidAddressError(to, \"The 'to' parameter must be a sapling address (zet1).\");\n }\n }\n\n private getSaplingContractId() {\n let saplingContractId: SaplingContractId;\n if (this.#saplingId) {\n saplingContractId = { saplingId: this.#saplingId };\n } else {\n saplingContractId = { contractAddress: this.#contractAddress };\n }\n return saplingContractId;\n }\n\n private async selectInputsToSpend(amountMutez: BigNumber): Promise<ChosenSpendableInputs> {\n const saplingTxViewer = await this.getSaplingTransactionViewer();\n\n const { incoming } = await saplingTxViewer.getIncomingAndOutgoingTransactionsRaw();\n\n const inputsToSpend: Input[] = [];\n let sumSelectedInputs = new BigNumber(0);\n\n incoming.forEach((input) => {\n if (!input.isSpent && sumSelectedInputs.isLessThan(amountMutez)) {\n const txAmount = convertValueToBigNumber(input.value);\n sumSelectedInputs = sumSelectedInputs.plus(txAmount);\n const { isSpent: _isSpent, ...rest } = input;\n inputsToSpend.push(rest);\n }\n });\n\n if (sumSelectedInputs.isLessThan(new BigNumber(amountMutez))) {\n throw new InsufficientBalance(sumSelectedInputs.toString(), amountMutez.toString());\n }\n return { inputsToSpend, sumSelectedInputs };\n }\n}\n"],"names":["_readProvider","_inMemorySpendingKey","_saplingForger","_contractAddress","_saplingId","_memoSize"],"mappings":"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"}
|
|
@@ -1459,7 +1459,6 @@
|
|
|
1459
1459
|
if (!input.isSpent && sumSelectedInputs.isLessThan(amountMutez)) {
|
|
1460
1460
|
const txAmount = convertValueToBigNumber(input.value);
|
|
1461
1461
|
sumSelectedInputs = sumSelectedInputs.plus(txAmount);
|
|
1462
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
1463
1462
|
const rest = __rest(input, ["isSpent"]);
|
|
1464
1463
|
inputsToSpend.push(rest);
|
|
1465
1464
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taquito-sapling.umd.js","sources":["../src/error.ts","../src/sapling-tx-viewer/helpers.ts","../src/sapling-forger/sapling-forger.ts","../src/constants.ts","../src/sapling-tx-viewer/sapling-transaction-viewer.ts","../src/sapling-state/utils.ts","../src/sapling-state/sapling-state.ts","../src/sapling-module-wrapper.ts","../src/sapling-tx-builder/sapling-transactions-builder.ts","../src/sapling-keys/helpers.ts","../src/sapling-keys/in-memory-spending-key.ts","../src/sapling-keys/in-memory-viewing-key.ts","../src/sapling-keys/in-memory-proving-key.ts","../src/taquito-sapling.ts"],"sourcesContent":["/**\n * @category Error\n * @description Error indicating that the spending key is invalid\n */\nexport class InvalidSpendingKey extends Error {\n public name = 'InvalidSpendingKey';\n constructor(sk: string, reason = 'The spending key is invalid') {\n super(`${reason}: ${sk}`);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates an invalid Merkle root being passed\n */\nexport class InvalidMerkleRootError extends Error {\n public name = 'InvalidMerkleRootError';\n constructor(public root: string) {\n super(`The following Merkle tree is invalid: ${JSON.stringify(root)}`);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates a failure when trying to construct the Merkle tree\n */\nexport class TreeConstructionFailure extends Error {\n public name = 'TreeConstructionFailure';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error indicating that the memo is invalid\n */\nexport class InvalidMemo extends Error {\n public name = 'InvalidMemo';\n constructor(memo: string, errorDetail: string) {\n super(`The memo '${memo}' is invalid. ${errorDetail}`);\n }\n}\n\n/**\n * @category Error\n * @description Error indicating that there is not enough balance to prepare the sapling transaction\n */\nexport class InsufficientBalance extends Error {\n public name = 'InsufficientBalance';\n constructor(realBalance: string, amountToSpend: string) {\n super(`Unable to spend ${amountToSpend} mutez while the balance is only ${realBalance} mutez.`);\n }\n}\n\n/**\n * @category Error\n * @description Error indicating that a parameter is invalid\n */\nexport class InvalidParameter extends Error {\n public name = 'InvalidParameter';\n constructor(message: string) {\n super(message);\n }\n}\n","import { b58cencode, bytes2Char, Prefix, prefix } from '@taquito/utils';\nimport BigNumber from 'bignumber.js';\nimport { Input } from '../types';\n\nexport function memoHexToUtf8(memo: string) {\n const memoNoPadding = removeZeroPaddedBytesRight(memo);\n return memoNoPadding === '' ? memoNoPadding : bytes2Char(memoNoPadding);\n}\n\nfunction removeZeroPaddedBytesRight(memo: string) {\n const matchZeroRight = memo.match(/^(.*?)(00)+$/);\n return matchZeroRight ? matchZeroRight[1] : memo;\n}\n\nexport function readableFormat(saplingTransactionProperties: Omit<Input, 'position'>) {\n return {\n value: convertValueToBigNumber(saplingTransactionProperties.value),\n memo: memoHexToUtf8(Buffer.from(saplingTransactionProperties.memo).toString('hex')),\n paymentAddress: b58cencode(saplingTransactionProperties.paymentAddress, prefix[Prefix.ZET1]),\n };\n}\n\nexport function convertValueToBigNumber(value: Uint8Array) {\n return new BigNumber(Buffer.from(value).toString('hex'), 16);\n}\n\nexport function bufToUint8Array(buffer: Buffer) {\n return new Uint8Array(\n buffer.buffer,\n buffer.byteOffset,\n buffer.byteLength / Uint8Array.BYTES_PER_ELEMENT\n );\n}\n","import {\n SaplingTransactionInput,\n SaplingTransaction,\n SaplingTransactionOutput,\n SaplingTransactionPlaintext,\n} from '../types';\nimport { char2Bytes, toHexBuf } from '@taquito/utils';\nimport BigNumber from 'bignumber.js';\n\nexport class SaplingForger {\n /**\n * @description Forge sapling transactions\n * @param spendDescriptions the list of spend descriptions\n * @param outputDescriptions the list of output descriptions\n * @param signature signature hash\n * @param balance balance of the Sapling contract (input/output difference)\n * @param root root of the merkle tree\n * @returns Forged sapling transaction of type Buffer\n */\n forgeSaplingTransaction(tx: SaplingTransaction): Buffer {\n const spendBuf = this.forgeSpendDescriptions(tx.inputs);\n const spend = Buffer.concat([toHexBuf(spendBuf.length, 32), spendBuf]);\n\n const outputBuf = this.forgeOutputDescriptions(tx.outputs);\n const output = Buffer.concat([toHexBuf(outputBuf.length, 32), outputBuf]);\n\n const root = Buffer.from(tx.root, 'hex');\n\n return Buffer.concat([\n spend,\n output,\n tx.signature,\n toHexBuf(tx.balance, 64),\n root,\n toHexBuf(tx.boundData.length, 32),\n tx.boundData,\n ]);\n }\n\n /**\n * @description Forge list of spend descriptions\n * @param spendDescriptions list of spend descriptions\n * @returns concatenated forged bytes of type Buffer\n */\n forgeSpendDescriptions(spendDescriptions: SaplingTransactionInput[]): Buffer {\n const descriptions = [];\n\n for (const i of spendDescriptions) {\n const buff = this.forgeSpendDescription(i);\n descriptions.push(buff);\n }\n\n return Buffer.concat(descriptions);\n }\n\n forgeSpendDescription(desc: SaplingTransactionInput): Buffer {\n return Buffer.concat([\n desc.commitmentValue,\n desc.nullifier,\n desc.publicKeyReRandomization,\n desc.proof,\n desc.signature,\n ]);\n }\n\n /**\n * @description Forge list of output descriptions\n * @param outputDescriptions list of output descriptions\n * @returns concatenated forged bytes of type Buffer\n */\n forgeOutputDescriptions(outputDescriptions: SaplingTransactionOutput[]): Buffer {\n const descriptions = [];\n\n for (const i of outputDescriptions) {\n const buff = this.forgeOutputDescription(i);\n descriptions.push(buff);\n }\n\n return Buffer.concat(descriptions);\n }\n\n forgeOutputDescription(desc: SaplingTransactionOutput): Buffer {\n const ct = desc.ciphertext;\n\n return Buffer.concat([\n desc.commitment,\n desc.proof,\n ct.commitmentValue,\n ct.ephemeralPublicKey,\n toHexBuf(ct.payloadEnc.length, 32),\n ct.payloadEnc,\n ct.nonceEnc,\n ct.payloadOut,\n ct.nonceOut,\n ]);\n }\n\n forgeUnsignedTxInput(unsignedSpendDescription: Omit<SaplingTransactionInput, 'signature'>) {\n return Buffer.concat([\n unsignedSpendDescription.commitmentValue,\n unsignedSpendDescription.nullifier,\n unsignedSpendDescription.publicKeyReRandomization,\n unsignedSpendDescription.proof,\n ]);\n }\n\n forgeTransactionPlaintext(txPlainText: SaplingTransactionPlaintext) {\n const encodedMemo = Buffer.from(\n char2Bytes(txPlainText.memo).padEnd(txPlainText.memoSize, '0'),\n 'hex'\n );\n return Buffer.concat([\n txPlainText.diversifier,\n toHexBuf(new BigNumber(txPlainText.amount), 64),\n txPlainText.randomCommitmentTrapdoor,\n toHexBuf(txPlainText.memoSize, 32),\n encodedMemo,\n ]);\n }\n}\n","export const KDF_KEY = 'KDFSaplingForTezosV1';\nexport const OCK_KEY = 'OCK_keystringderivation_TEZOS';\nexport const DEFAULT_MEMO = '';\nexport const DEFAULT_BOUND_DATA = Buffer.from('', 'hex');\n","import * as sapling from '@airgap/sapling-wasm';\nimport BigNumber from 'bignumber.js';\nimport { hex2buf, mergebuf } from '@taquito/utils';\nimport { CommitmentsAndCiphertexts, SaplingDiffResponse } from '@taquito/rpc';\nimport blake from 'blakejs';\nimport { openSecretBox } from '@stablelib/nacl';\nimport { InMemoryViewingKey } from '../sapling-keys/in-memory-viewing-key';\nimport { bufToUint8Array, convertValueToBigNumber, readableFormat } from './helpers';\nimport { KDF_KEY, OCK_KEY } from '../constants';\nimport { Input, SaplingContractId, SaplingIncomingAndOutgoingTransaction } from '../types';\nimport { InvalidParameter } from '../error';\nimport { TzReadProvider } from '@taquito/taquito';\n\n/**\n * @description Allows to retrieve and decrypt sapling transactions using on a viewing key\n *\n * @param inMemoryViewingKey Holds the sapling viewing key\n * @param saplingContractId Address of the sapling contract or sapling id if the smart contract contains multiple sapling states\n * @param readProvider Allows to read data from the blockchain\n */\nexport class SaplingTransactionViewer {\n #viewingKeyProvider: InMemoryViewingKey;\n #readProvider: TzReadProvider;\n #saplingContractId: SaplingContractId;\n\n constructor(\n inMemoryViewingKey: InMemoryViewingKey,\n saplingContractId: SaplingContractId,\n readProvider: TzReadProvider\n ) {\n this.#viewingKeyProvider = inMemoryViewingKey;\n this.#saplingContractId = saplingContractId;\n this.#readProvider = readProvider;\n }\n\n /**\n * @description Retrieve the unspent balance associated with the configured viewing key and sapling state\n *\n * @returns the balance in mutez represented as a BigNumber\n *\n */\n async getBalance(): Promise<BigNumber> {\n let balance = new BigNumber(0);\n const { commitments_and_ciphertexts, nullifiers } = await this.getSaplingDiff();\n for (let i = 0; i < commitments_and_ciphertexts.length; i++) {\n const decrypted = await this.decryptCiphertextAsReceiver(commitments_and_ciphertexts[i]);\n if (decrypted) {\n const valueBigNumber = convertValueToBigNumber(decrypted.value);\n const isSpent = await this.isSpent(\n decrypted.paymentAddress,\n valueBigNumber.toString(),\n decrypted.randomCommitmentTrapdoor,\n i,\n nullifiers\n );\n if (!isSpent) {\n balance = balance.plus(valueBigNumber);\n }\n }\n }\n return balance;\n }\n\n /**\n * @description Retrieve all the incoming and outgoing transactions associated with the configured viewing key.\n * The response properties are in Uint8Array format; use the getIncomingAndOutgoingTransactions method for readable properties\n *\n */\n async getIncomingAndOutgoingTransactionsRaw() {\n const incoming = [];\n const outgoing = [];\n\n const { commitments_and_ciphertexts, nullifiers } = await this.getSaplingDiff();\n\n for (let i = 0; i < commitments_and_ciphertexts.length; i++) {\n const decryptedAsReceiver = await this.decryptCiphertextAsReceiver(\n commitments_and_ciphertexts[i]\n );\n const decryptedAsSender = await this.decryptCiphertextAsSender(\n commitments_and_ciphertexts[i]\n );\n if (decryptedAsReceiver) {\n const balance = convertValueToBigNumber(decryptedAsReceiver.value);\n const isSpent = await this.isSpent(\n decryptedAsReceiver.paymentAddress,\n balance.toString(),\n decryptedAsReceiver.randomCommitmentTrapdoor,\n i,\n nullifiers\n );\n incoming.push({ ...decryptedAsReceiver, isSpent, position: i });\n }\n if (decryptedAsSender) {\n outgoing.push(decryptedAsSender);\n }\n }\n return {\n incoming,\n outgoing,\n };\n }\n\n /**\n * @description Retrieve all the incoming and outgoing decoded transactions associated with the configured viewing key\n *\n */\n async getIncomingAndOutgoingTransactions(): Promise<SaplingIncomingAndOutgoingTransaction> {\n const tx = await this.getIncomingAndOutgoingTransactionsRaw();\n const incoming = tx.incoming.map(({ isSpent, ...rest }) => {\n return { ...readableFormat(rest), isSpent };\n });\n const outgoing = tx.outgoing.map((outgoingTx) => {\n return readableFormat(outgoingTx);\n });\n return { incoming, outgoing };\n }\n\n private async getSaplingDiff() {\n let saplingDiffResponse: SaplingDiffResponse;\n if (this.#saplingContractId.saplingId) {\n saplingDiffResponse = await this.#readProvider.getSaplingDiffById(\n { id: this.#saplingContractId.saplingId },\n 'head'\n );\n } else if (this.#saplingContractId.contractAddress) {\n saplingDiffResponse = await this.#readProvider.getSaplingDiffByContract(\n this.#saplingContractId.contractAddress,\n 'head'\n );\n } else {\n throw new InvalidParameter(\n 'A contract address or a sapling id was expected in the SaplingTransactionViewer constructor.'\n );\n }\n return saplingDiffResponse;\n }\n\n private async decryptCiphertextAsReceiver(\n commitmentsAndCiphertexts: CommitmentsAndCiphertexts\n ): Promise<Omit<Input, 'position'> | undefined> {\n const commitment = commitmentsAndCiphertexts[0];\n const { epk, payload_enc, nonce_enc } = commitmentsAndCiphertexts[1];\n\n const incomingViewingKey = await this.#viewingKeyProvider.getIncomingViewingKey();\n const keyAgreement = await sapling.keyAgreement(epk, incomingViewingKey);\n const keyAgreementHash = blake.blake2b(keyAgreement, Buffer.from(KDF_KEY), 32);\n\n const decrypted = await this.decryptCiphertext(\n keyAgreementHash,\n hex2buf(nonce_enc),\n hex2buf(payload_enc)\n );\n\n if (decrypted) {\n const {\n diversifier,\n value,\n randomCommitmentTrapdoor: rcm,\n memo,\n } = this.extractTransactionProperties(decrypted);\n const paymentAddress = bufToUint8Array(\n await sapling.getRawPaymentAddressFromIncomingViewingKey(incomingViewingKey, diversifier)\n );\n\n try {\n const valid = await sapling.verifyCommitment(\n commitment,\n paymentAddress,\n convertValueToBigNumber(value).toString(),\n rcm\n );\n if (valid) {\n return { value, memo, paymentAddress, randomCommitmentTrapdoor: rcm };\n }\n } catch (ex: any) {\n if (!/invalid value/.test(ex)) {\n throw ex;\n }\n }\n }\n }\n\n private async decryptCiphertextAsSender(\n commitmentsAndCiphertexts: CommitmentsAndCiphertexts\n ): Promise<Omit<Input, 'position'> | undefined> {\n const commitment = commitmentsAndCiphertexts[0];\n const { epk, payload_enc, nonce_enc, payload_out, nonce_out, cv } =\n commitmentsAndCiphertexts[1];\n\n const outgoingViewingKey = await this.#viewingKeyProvider.getOutgoingViewingKey();\n const concat = cv.concat(commitment, epk, outgoingViewingKey.toString('hex'));\n const outgoingCipherKey = blake.blake2b(Buffer.from(concat, 'hex'), Buffer.from(OCK_KEY), 32);\n\n const decryptedOut = await this.decryptCiphertext(\n outgoingCipherKey,\n hex2buf(nonce_out),\n hex2buf(payload_out)\n );\n\n if (decryptedOut) {\n const { recipientDiversifiedTransmissionKey: pkd, ephemeralPrivateKey: esk } =\n this.extractPkdAndEsk(decryptedOut);\n const keyAgreement = await sapling.keyAgreement(pkd, esk);\n const keyAgreementHash = blake.blake2b(keyAgreement, Buffer.from(KDF_KEY), 32);\n\n const decryptedEnc = await this.decryptCiphertext(\n keyAgreementHash,\n hex2buf(nonce_enc),\n hex2buf(payload_enc)\n );\n\n if (decryptedEnc) {\n const {\n diversifier,\n value,\n randomCommitmentTrapdoor: rcm,\n memo,\n } = this.extractTransactionProperties(decryptedEnc);\n const paymentAddress = mergebuf(diversifier, pkd);\n\n try {\n const isValid = await sapling.verifyCommitment(\n commitment,\n paymentAddress,\n convertValueToBigNumber(value).toString(),\n rcm\n );\n if (isValid) {\n return { value, memo, paymentAddress, randomCommitmentTrapdoor: rcm };\n }\n } catch (ex: any) {\n if (!/invalid value/.test(ex)) {\n throw ex;\n }\n }\n }\n }\n }\n\n private async decryptCiphertext(\n keyAgreementHash: Uint8Array,\n nonce: Uint8Array,\n payload: Uint8Array\n ) {\n return openSecretBox(keyAgreementHash, nonce, payload);\n }\n\n private extractTransactionProperties(decrypted: Uint8Array) {\n return {\n diversifier: decrypted.slice(0, 11),\n value: decrypted.slice(11, 19),\n randomCommitmentTrapdoor: decrypted.slice(19, 51),\n memoSize: decrypted.slice(51, 55),\n memo: decrypted.slice(55),\n };\n }\n\n private extractPkdAndEsk(decrypted: Uint8Array) {\n return {\n recipientDiversifiedTransmissionKey: decrypted.slice(0, 32),\n ephemeralPrivateKey: decrypted.slice(32),\n };\n }\n\n private async isSpent(\n address: Uint8Array,\n value: string,\n randomCommitmentTrapdoor: Uint8Array,\n position: number,\n nullifiers: string[]\n ) {\n const computedNullifier = await sapling.computeNullifier(\n this.#viewingKeyProvider.getFullViewingKey(),\n address,\n value,\n randomCommitmentTrapdoor,\n position\n );\n return nullifiers.includes(computedNullifier.toString('hex'));\n }\n}\n","/**\n *\n * @param leaves nodes in the tree that we would like to make pairs from\n * @returns a paired/chunked array: [a, b, c, d] => [[a, b], [c, d]]\n */\nexport function pairNodes<T>(leaves: T[]): (T | undefined)[][] {\n const pairs: (T | undefined)[][] = new Array(Math.ceil(leaves.length / 2));\n\n for (let i = 0; i < leaves.length / 2; i++) {\n pairs[i] = leaves.slice(i * 2, i * 2 + 2);\n }\n\n return pairs;\n}\n\n/**\n * @description helper function to assist in Lazy initializing an object\n */\nexport class Lazy<T> {\n private isInitialized = false;\n\n private value?: T = undefined;\n\n constructor(private readonly init: () => Promise<T>) {}\n\n // initializes the lazily initiated object\n public async get(): Promise<T> {\n if (!this.isInitialized) {\n this.value = await this.init();\n this.isInitialized = true;\n }\n\n return this.value as T;\n }\n}\n\n/**\n *\n * @param hex hexadecimal string we would like to swap\n * @returns a hexadecimal string with swapped endians\n */\nexport const changeEndianness = (hex: string): string => {\n if (hex.length % 2 != 0) {\n hex = '0' + hex;\n }\n const bytes = hex.match(/.{2}/g) || [];\n\n return bytes.reverse().join('');\n};\n","/**\n * Some code in this file was originally written or inspired by Airgap-it\n * https://github.com/airgap-it/airgap-coin-lib/blob/master/LICENSE.md\n *\n */\n\nimport { SaplingDiffResponse, SaplingTransactionCiphertext } from '@taquito/rpc';\nimport { InvalidMerkleRootError, TreeConstructionFailure } from '../error';\nimport { merkleHash } from '@airgap/sapling-wasm';\nimport { Lazy, pairNodes, changeEndianness } from './utils';\nimport { hex2Bytes, num2PaddedHex } from '@taquito/utils';\nimport BigNumber from 'bignumber.js';\nimport { MerkleTree, SaplingStateTree } from '../types';\n\n/**\n * @description The SaplingState class's main purpose is to provide a Merkle path for the forger and the transaction builder, so that it may verify that the Sapling transaction is valid\n *\n */\nexport class SaplingState {\n private stateTree: SaplingStateTree | undefined;\n\n private readonly uncommittedMerkleHash: string =\n '0100000000000000000000000000000000000000000000000000000000000000';\n private readonly uncommittedMerkleHashes: Lazy<Buffer[]> = new Lazy(() =>\n this.createUncommittedMerkleHashes()\n );\n\n constructor(public readonly height: number) {}\n\n public async getStateTree(\n stateDiff: SaplingDiffResponse,\n constructTree = true\n ): Promise<SaplingStateTree> {\n if (this.stateTree !== undefined && this.stateTree.root === stateDiff.root) {\n return this.stateTree;\n }\n\n const commitments: string[] = stateDiff.commitments_and_ciphertexts.map(\n ([commitment, _]: [string, SaplingTransactionCiphertext]) => commitment\n );\n\n let merkleTree: MerkleTree;\n if (constructTree) {\n merkleTree = await this.constructMerkleTree(commitments, 0);\n await this.validateMerkleTree(merkleTree, stateDiff.root);\n }\n\n this.stateTree = {\n height: this.height,\n size: commitments.length,\n root: stateDiff.root,\n tree: merkleTree,\n };\n\n return this.stateTree;\n }\n\n /**\n *\n * @param stateTree stateTree parameter that holds information details on our Merkle tree\n * @param position position of the hash in the Merkle tree\n * @returns a promise of a string that serves as the Merkle path that can be passed on to the Sapling forger or the transaction builder\n */\n public async getWitness(stateTree: SaplingStateTree, position: BigNumber): Promise<string> {\n const heightBuffer: Buffer = hex2Bytes(changeEndianness(num2PaddedHex(stateTree.height)));\n const posBuffer: Buffer = hex2Bytes(changeEndianness(num2PaddedHex(position, 64)));\n\n const neighbouringHashes: Buffer[] = await this.getNeighbouringHashes(\n [],\n stateTree.height,\n position,\n stateTree.tree\n );\n\n const witness: Buffer = neighbouringHashes\n .map((hash: Buffer) =>\n Buffer.concat([hex2Bytes(changeEndianness(num2PaddedHex(hash.length))), hash])\n )\n .reverse()\n .reduce((acc: Buffer, next: Buffer) => Buffer.concat([acc, next]));\n\n return Buffer.concat([heightBuffer, witness, posBuffer]).toString('hex');\n }\n\n /**\n *\n * @param leaves array of leaves or nodes that we want to construct the Merkle tree from\n * @param height height of the desired Merkle tree\n * @returns a promise of MerkleTree type object\n */\n private async constructMerkleTree(leaves: MerkleTree[], height: number): Promise<MerkleTree> {\n if (height === this.height && leaves.length === 1) {\n return leaves[0];\n }\n\n if (height === this.height || leaves.length > Math.pow(2, this.height - 1 - height)) {\n throw new TreeConstructionFailure(\n 'Children length exceeds maximum number of nodes in a merkle tree'\n );\n }\n\n const pairedLeaves: MerkleTree[][] = pairNodes(leaves);\n\n const updatedLeaves: MerkleTree[] = await Promise.all(\n pairedLeaves.map(async (chunk: MerkleTree[]) => {\n const left: Buffer = await this.getMerkleHash(chunk[0], height);\n const right: Buffer = await this.getMerkleHash(chunk[1], height);\n\n const parentHash = await merkleHash(height, left, right);\n\n return [parentHash.toString('hex'), chunk[0], chunk[1]] as [string, MerkleTree, MerkleTree];\n })\n );\n\n return this.constructMerkleTree(updatedLeaves, height + 1);\n }\n\n private async getMerkleHash(tree: MerkleTree, height: number): Promise<Buffer> {\n if (tree === undefined) {\n return (await this.uncommittedMerkleHashes.get())[height];\n } else if (typeof tree === 'string') {\n return Buffer.from(tree, 'hex');\n } else {\n return Buffer.from(tree[0], 'hex');\n }\n }\n\n /**\n *\n * @returns hashes of empty or null values to fill in the Merkle tree\n */\n private async createUncommittedMerkleHashes(): Promise<Buffer[]> {\n const res: Buffer[] = new Array(this.height);\n\n res[0] = Buffer.from(this.uncommittedMerkleHash, 'hex');\n for (let i = 0; i < this.height; i++) {\n const hash: Buffer = res[i];\n res[i + 1] = await merkleHash(i, hash, hash);\n }\n\n return res;\n }\n\n /**\n *\n * @param tree Merkle tree to validate\n * @param expectedRoot the expected merkle root to validate against\n */\n private async validateMerkleTree(tree: MerkleTree, expectedRoot: string) {\n const root: Buffer = await this.getMerkleHash(tree, this.height - 1);\n\n if (root.toString('hex') !== expectedRoot) {\n throw new InvalidMerkleRootError(root.toString('hex'));\n }\n }\n\n /**\n *\n * @param acc accumulator variable for the recursive function\n * @param height height of the tree\n * @param position position of the hash we would like find the neighbours of\n * @param tree the Merkle tree that we want to traverse\n * @returns the accumulated Buffer array of neighbouring hashes\n */\n private async getNeighbouringHashes(\n acc: Buffer[],\n height: number,\n position: BigNumber,\n tree: MerkleTree\n ): Promise<Buffer[]> {\n if (typeof tree === 'undefined') {\n throw new Error();\n } else if (typeof tree === 'string') {\n return acc;\n } else {\n let nextPos, nextTree, otherTree;\n\n const fullTree: BigNumber = new BigNumber(2).pow(height - 1);\n if (position.lt(fullTree)) {\n nextPos = position;\n nextTree = tree[1];\n otherTree = tree[2];\n } else {\n nextPos = position.minus(fullTree);\n nextTree = tree[2];\n otherTree = tree[1];\n }\n return this.getNeighbouringHashes(\n [await this.getMerkleHash(otherTree, height - 1), ...acc],\n height - 1,\n nextPos,\n nextTree\n );\n }\n }\n}\n","import * as sapling from '@airgap/sapling-wasm';\nimport { randomBytes } from '@stablelib/random';\nimport { ParametersOutputProof } from './types';\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst saplingOutputParams = require('../saplingOutputParams');\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst saplingSpendParams = require('../saplingSpendParams');\n\nexport class SaplingWrapper {\n async withProvingContext<T>(action: (context: number) => Promise<T>) {\n await this.initSaplingParameters();\n return sapling.withProvingContext(action);\n }\n\n getRandomBytes(length: number) {\n return randomBytes(length);\n }\n\n async randR() {\n return sapling.randR();\n }\n\n async getOutgoingViewingKey(vk: Buffer) {\n return sapling.getOutgoingViewingKey(vk);\n }\n\n async preparePartialOutputDescription(parametersOutputProof: ParametersOutputProof) {\n const partialOutputDesc = await sapling.preparePartialOutputDescription(\n parametersOutputProof.saplingContext,\n parametersOutputProof.address,\n parametersOutputProof.randomCommitmentTrapdoor,\n parametersOutputProof.ephemeralPrivateKey,\n parametersOutputProof.amount\n );\n return {\n commitmentValue: partialOutputDesc.cv,\n commitment: partialOutputDesc.cm,\n proof: partialOutputDesc.proof,\n };\n }\n\n async getDiversifiedFromRawPaymentAddress(decodedDestination: Uint8Array) {\n return sapling.getDiversifiedFromRawPaymentAddress(decodedDestination);\n }\n\n async deriveEphemeralPublicKey(diversifier: Buffer, esk: Buffer) {\n return sapling.deriveEphemeralPublicKey(diversifier, esk);\n }\n\n async getPkdFromRawPaymentAddress(destination: Uint8Array) {\n return sapling.getPkdFromRawPaymentAddress(destination);\n }\n\n async keyAgreement(p: Buffer, sk: Buffer) {\n return sapling.keyAgreement(p, sk);\n }\n\n async createBindingSignature(\n saplingContext: number,\n balance: string,\n transactionSigHash: Uint8Array\n ) {\n return sapling.createBindingSignature(saplingContext, balance, transactionSigHash);\n }\n\n async initSaplingParameters() {\n const spendParams = Buffer.from(saplingSpendParams.saplingSpendParams, 'base64');\n const outputParams = Buffer.from(saplingOutputParams.saplingOutputParams, 'base64');\n\n return sapling.initParameters(spendParams, outputParams);\n }\n}\n","import blake from 'blakejs';\nimport { secretBox } from '@stablelib/nacl';\nimport { DEFAULT_MEMO, KDF_KEY, OCK_KEY } from '../constants';\nimport { SaplingForger } from '../sapling-forger/sapling-forger';\nimport BigNumber from 'bignumber.js';\nimport {\n Input,\n SaplingTransactionOutput,\n SaplingTransactionInput,\n ParametersBindingSig,\n ChosenSpendableInputs,\n ParametersOutputDescription,\n ParametersCiphertext,\n Ciphertext,\n SaplingContractDetails,\n SaplingTransaction,\n SaplingTransactionParams,\n} from '../types';\nimport { SaplingDiffResponse } from '@taquito/rpc';\nimport { b58cdecode, Prefix, prefix } from '@taquito/utils';\nimport { TzReadProvider } from '@taquito/taquito';\nimport { convertValueToBigNumber } from '../sapling-tx-viewer/helpers';\nimport { SaplingState } from '../sapling-state/sapling-state';\nimport { SaplingWrapper } from '../sapling-module-wrapper';\nimport { InMemorySpendingKey } from '../sapling-keys/in-memory-spending-key';\nimport { InMemoryProvingKey } from '../sapling-keys/in-memory-proving-key';\n\nexport class SaplingTransactionBuilder {\n #inMemorySpendingKey: InMemorySpendingKey;\n #inMemoryProvingKey: InMemoryProvingKey | undefined;\n #saplingForger: SaplingForger;\n #contractAddress: string;\n #saplingId: string | undefined;\n #memoSize: number;\n #readProvider: TzReadProvider;\n #saplingWrapper: SaplingWrapper;\n #chainId: string | undefined;\n #saplingState: SaplingState;\n\n constructor(\n keys: {\n saplingSigner: InMemorySpendingKey;\n saplingProver?: InMemoryProvingKey;\n },\n saplingForger: SaplingForger,\n saplingContractDetails: SaplingContractDetails,\n readProvider: TzReadProvider,\n saplingWrapper = new SaplingWrapper()\n ) {\n this.#saplingForger = saplingForger;\n this.#contractAddress = saplingContractDetails.contractAddress;\n this.#memoSize = saplingContractDetails.memoSize;\n this.#inMemorySpendingKey = keys.saplingSigner;\n this.#inMemoryProvingKey = keys.saplingProver;\n this.#saplingState = new SaplingState(32);\n this.#saplingId = saplingContractDetails.saplingId;\n this.#saplingWrapper = saplingWrapper;\n this.#readProvider = readProvider;\n }\n\n async createShieldedTx(\n saplingTransactionParams: SaplingTransactionParams[],\n txTotalAmount: BigNumber,\n boundData: Buffer\n ): Promise<Pick<SaplingTransaction, 'inputs' | 'outputs' | 'signature' | 'balance'>> {\n const rcm = await this.#saplingWrapper.randR();\n\n const balance = this.calculateTransactionBalance('0', txTotalAmount.toString());\n\n const { signature, inputs, outputs } = await this.#saplingWrapper.withProvingContext(\n async (saplingContext: number) => {\n const outputs: SaplingTransactionOutput[] = [];\n const inputs: SaplingTransactionInput[] = [];\n\n for (const i in saplingTransactionParams) {\n outputs.push(\n await this.prepareSaplingOutputDescription({\n saplingContext,\n address: b58cdecode(saplingTransactionParams[i].to, prefix[Prefix.ZET1]),\n amount: saplingTransactionParams[i].amount,\n memo: saplingTransactionParams[i].memo,\n randomCommitmentTrapdoor: rcm,\n })\n );\n }\n\n const signature = await this.createBindingSignature({\n saplingContext,\n inputs,\n outputs,\n balance,\n boundData,\n });\n return { signature, inputs, outputs };\n }\n );\n\n return {\n inputs,\n outputs,\n signature,\n balance,\n };\n }\n\n async createSaplingTx(\n saplingTransactionParams: SaplingTransactionParams[],\n txTotalAmount: BigNumber,\n boundData: Buffer,\n chosenInputs: ChosenSpendableInputs\n ) {\n const randomCommitmentTrapdoor = await this.#saplingWrapper.randR();\n const saplingViewer = await this.#inMemorySpendingKey.getSaplingViewingKeyProvider();\n const outgoingViewingKey = await saplingViewer.getOutgoingViewingKey();\n\n const { signature, balance, inputs, outputs } = await this.#saplingWrapper.withProvingContext(\n async (saplingContext: number) => {\n const outputs: SaplingTransactionOutput[] = [];\n const inputs: SaplingTransactionInput[] = [];\n\n inputs.push(\n ...(await this.prepareSaplingSpendDescription(saplingContext, chosenInputs.inputsToSpend))\n );\n\n let sumAmountOutput = new BigNumber(0);\n\n for (const i in saplingTransactionParams) {\n sumAmountOutput = sumAmountOutput.plus(new BigNumber(saplingTransactionParams[i].amount));\n\n outputs.push(\n await this.prepareSaplingOutputDescription({\n saplingContext,\n address: b58cdecode(saplingTransactionParams[i].to, prefix[Prefix.ZET1]),\n amount: saplingTransactionParams[i].amount,\n memo: saplingTransactionParams[i].memo,\n randomCommitmentTrapdoor,\n outgoingViewingKey,\n })\n );\n }\n\n if (chosenInputs.sumSelectedInputs.isGreaterThan(sumAmountOutput)) {\n const payBackAddress = (await saplingViewer.getAddress()).address;\n\n const { payBackOutput, payBackAmount } = await this.createPaybackOutput(\n {\n saplingContext,\n address: b58cdecode(payBackAddress, prefix[Prefix.ZET1]),\n amount: txTotalAmount.toString(),\n memo: DEFAULT_MEMO,\n randomCommitmentTrapdoor: randomCommitmentTrapdoor,\n outgoingViewingKey: outgoingViewingKey,\n },\n chosenInputs.sumSelectedInputs\n );\n\n sumAmountOutput = sumAmountOutput.plus(new BigNumber(payBackAmount));\n outputs.push(payBackOutput);\n }\n\n const balance = this.calculateTransactionBalance(\n chosenInputs.sumSelectedInputs.toString(),\n sumAmountOutput.toString()\n );\n\n const signature = await this.createBindingSignature({\n saplingContext,\n inputs,\n outputs,\n balance,\n boundData,\n });\n\n return { signature, balance, inputs, outputs };\n }\n );\n\n return {\n inputs,\n outputs,\n signature,\n balance,\n };\n }\n\n // sum of values of inputs minus sums of values of output equals balance\n calculateTransactionBalance(inputTotal: string, outputTotal: string) {\n return new BigNumber(inputTotal).minus(new BigNumber(outputTotal));\n }\n\n async prepareSaplingOutputDescription(\n parametersOutputDescription: ParametersOutputDescription\n ): Promise<SaplingTransactionOutput> {\n const ephemeralPrivateKey = await this.#saplingWrapper.randR();\n const { commitmentValue, commitment, proof } =\n await this.#saplingWrapper.preparePartialOutputDescription({\n saplingContext: parametersOutputDescription.saplingContext,\n address: parametersOutputDescription.address,\n randomCommitmentTrapdoor: parametersOutputDescription.randomCommitmentTrapdoor,\n ephemeralPrivateKey,\n amount: parametersOutputDescription.amount,\n });\n\n const diversifier = await this.#saplingWrapper.getDiversifiedFromRawPaymentAddress(\n parametersOutputDescription.address\n );\n const ephemeralPublicKey = await this.#saplingWrapper.deriveEphemeralPublicKey(\n diversifier,\n ephemeralPrivateKey\n );\n const outgoingCipherKey = parametersOutputDescription.outgoingViewingKey\n ? blake.blake2b(\n Buffer.concat([\n commitmentValue,\n commitment,\n ephemeralPublicKey,\n parametersOutputDescription.outgoingViewingKey,\n ]),\n Buffer.from(OCK_KEY),\n 32\n )\n : this.#saplingWrapper.getRandomBytes(32);\n const ciphertext = await this.encryptCiphertext({\n address: parametersOutputDescription.address,\n ephemeralPrivateKey,\n diversifier,\n outgoingCipherKey,\n amount: parametersOutputDescription.amount,\n randomCommitmentTrapdoor: parametersOutputDescription.randomCommitmentTrapdoor,\n memo: parametersOutputDescription.memo,\n });\n\n return {\n commitment,\n proof,\n ciphertext: {\n ...ciphertext,\n commitmentValue,\n ephemeralPublicKey,\n },\n };\n }\n\n async prepareSaplingSpendDescription(saplingContext: number, inputsToSpend: Input[]) {\n const publicKeyReRandomization = await this.#saplingWrapper.randR();\n\n let stateDiff: SaplingDiffResponse;\n if (this.#saplingId) {\n stateDiff = await this.#readProvider.getSaplingDiffById({ id: this.#saplingId }, 'head');\n } else {\n stateDiff = await this.#readProvider.getSaplingDiffByContract(this.#contractAddress, 'head');\n }\n\n const stateTree = await this.#saplingState.getStateTree(stateDiff, true);\n\n const saplingSpendDescriptions: SaplingTransactionInput[] = [];\n\n for (let i = 0; i < inputsToSpend.length; i++) {\n const amount = convertValueToBigNumber(inputsToSpend[i].value).toString();\n const witness = await this.#saplingState.getWitness(\n stateTree,\n new BigNumber(inputsToSpend[i].position)\n );\n\n const unsignedSpendDescription = this.#inMemoryProvingKey\n ? await this.#inMemoryProvingKey.prepareSpendDescription({\n saplingContext,\n address: inputsToSpend[i].paymentAddress,\n randomCommitmentTrapdoor: inputsToSpend[i].randomCommitmentTrapdoor,\n publicKeyReRandomization,\n amount,\n root: stateDiff.root,\n witness,\n })\n : await this.#inMemorySpendingKey.prepareSpendDescription({\n saplingContext,\n address: inputsToSpend[i].paymentAddress,\n randomCommitmentTrapdoor: inputsToSpend[i].randomCommitmentTrapdoor,\n publicKeyReRandomization,\n amount,\n root: stateDiff.root,\n witness,\n });\n\n const unsignedSpendDescriptionBytes =\n this.#saplingForger.forgeUnsignedTxInput(unsignedSpendDescription);\n const hash = blake.blake2b(unsignedSpendDescriptionBytes, await this.getAntiReplay(), 32);\n const spendDescription = await this.#inMemorySpendingKey.signSpendDescription({\n publicKeyReRandomization,\n unsignedSpendDescription,\n hash,\n });\n\n if (spendDescription.signature === undefined) {\n throw new Error('Spend signing failed');\n }\n saplingSpendDescriptions.push(spendDescription);\n }\n\n return saplingSpendDescriptions;\n }\n\n async encryptCiphertext(\n parametersCiphertext: ParametersCiphertext\n ): Promise<Pick<Ciphertext, 'payloadEnc' | 'nonceEnc' | 'payloadOut' | 'nonceOut'>> {\n const recipientDiversifiedTransmissionKey =\n await this.#saplingWrapper.getPkdFromRawPaymentAddress(parametersCiphertext.address);\n const keyAgreement = await this.#saplingWrapper.keyAgreement(\n recipientDiversifiedTransmissionKey,\n parametersCiphertext.ephemeralPrivateKey\n );\n const keyAgreementHash = blake.blake2b(keyAgreement, Buffer.from(KDF_KEY), 32);\n const nonceEnc = Buffer.from(this.#saplingWrapper.getRandomBytes(24));\n\n const transactionPlaintext = this.#saplingForger.forgeTransactionPlaintext({\n diversifier: parametersCiphertext.diversifier,\n amount: parametersCiphertext.amount,\n randomCommitmentTrapdoor: parametersCiphertext.randomCommitmentTrapdoor,\n memoSize: this.#memoSize * 2,\n memo: parametersCiphertext.memo,\n });\n\n const nonceOut = Buffer.from(this.#saplingWrapper.getRandomBytes(24));\n const payloadEnc = Buffer.from(secretBox(keyAgreementHash, nonceEnc, transactionPlaintext));\n const payloadOut = Buffer.from(\n secretBox(\n parametersCiphertext.outgoingCipherKey,\n nonceOut,\n Buffer.concat([\n recipientDiversifiedTransmissionKey,\n parametersCiphertext.ephemeralPrivateKey,\n ])\n )\n );\n\n return { payloadEnc, nonceEnc, payloadOut, nonceOut };\n }\n\n async createPaybackOutput(params: ParametersOutputDescription, sumSelectedInputs: BigNumber) {\n const payBackAmount = sumSelectedInputs.minus(params.amount).toString();\n const payBackOutput = await this.prepareSaplingOutputDescription({\n saplingContext: params.saplingContext,\n address: params.address,\n amount: payBackAmount,\n memo: params.memo,\n randomCommitmentTrapdoor: params.randomCommitmentTrapdoor,\n outgoingViewingKey: params.outgoingViewingKey,\n });\n\n return { payBackOutput, payBackAmount };\n }\n\n async createBindingSignature(parametersBindingSig: ParametersBindingSig) {\n const outputs = this.#saplingForger.forgeOutputDescriptions(parametersBindingSig.outputs);\n const inputs = this.#saplingForger.forgeSpendDescriptions(parametersBindingSig.inputs);\n const transactionSigHash = blake.blake2b(\n Buffer.concat([inputs, outputs, parametersBindingSig.boundData]),\n await this.getAntiReplay(),\n 32\n );\n\n return this.#saplingWrapper.createBindingSignature(\n parametersBindingSig.saplingContext,\n parametersBindingSig.balance.toFixed(),\n transactionSigHash\n );\n }\n\n async getAntiReplay() {\n let chainId = this.#chainId;\n if (!chainId) {\n chainId = await this.#readProvider.getChainId();\n this.#chainId = chainId;\n }\n return Buffer.from(`${this.#contractAddress}${chainId}`);\n }\n}\n","import { InvalidSpendingKey } from '../error';\nimport toBuffer from 'typedarray-to-buffer';\nimport { openSecretBox } from '@stablelib/nacl';\nimport pbkdf2 from 'pbkdf2';\nimport { Prefix, prefix, b58cdecode } from '@taquito/utils';\n\nexport function decryptKey(spendingKey: string, password?: string) {\n const keyArr = b58cdecode(spendingKey, prefix[Prefix.SASK]);\n // exit first if no password and key is encrypted\n if (!password && spendingKey.slice(0, 4) !== 'sask') {\n throw new InvalidSpendingKey(spendingKey, 'no password Provided to decrypt');\n }\n\n if (password && spendingKey.slice(0, 4) !== 'sask') {\n const salt = toBuffer(keyArr.slice(0, 8));\n const encryptedSk = toBuffer(keyArr.slice(8));\n\n const encryptionKey = pbkdf2.pbkdf2Sync(password, salt, 32768, 32, 'sha512');\n const decrypted = openSecretBox(\n new Uint8Array(encryptionKey),\n new Uint8Array(24),\n new Uint8Array(encryptedSk)\n );\n if (!decrypted) {\n throw new InvalidSpendingKey(spendingKey, 'Encrypted Spending Key or Password Incorrect');\n }\n\n return toBuffer(decrypted);\n } else {\n return toBuffer(keyArr);\n }\n}\n","import { InvalidSpendingKey } from '../error';\nimport { InMemoryViewingKey } from './in-memory-viewing-key';\nimport * as sapling from '@airgap/sapling-wasm';\nimport { Prefix, prefix, b58cencode, ValidationResult } from '@taquito/utils';\nimport * as bip39 from 'bip39';\nimport {\n ParametersSpendProof,\n ParametersSpendSig,\n SaplingSpendDescription,\n SaplingTransactionInput,\n} from '../types';\nimport { decryptKey } from './helpers';\n\n/**\n * @description holds the spending key, create proof and signature for spend descriptions\n * can instantiate from mnemonic word list or decrypt a encrypted spending key\n * with access to instantiate a InMemoryViewingKey\n */\nexport class InMemorySpendingKey {\n #spendingKeyBuf: Buffer;\n #saplingViewingKey: InMemoryViewingKey | undefined;\n /**\n *\n * @param spendingKey unencrypted sask... or encrypted MMXj...\n * @param password required for MMXj encrypted keys\n */\n constructor(spendingKey: string, password?: string) {\n this.#spendingKeyBuf = decryptKey(spendingKey, password);\n }\n\n /**\n *\n * @param mnemonic string of words\n * @param derivationPath tezos current standard 'm/'\n * @returns InMemorySpendingKey class instantiated\n */\n static async fromMnemonic(mnemonic: string, derivationPath = 'm/') {\n // no password passed here. password provided only changes from sask -> MMXj\n const fullSeed = await bip39.mnemonicToSeed(mnemonic);\n\n const first32: Buffer = fullSeed.slice(0, 32);\n const second32: Buffer = fullSeed.slice(32);\n // reduce seed bytes must be 32 bytes reflecting both halves\n const seed = Buffer.from(first32.map((byte, index) => byte ^ second32[index]));\n\n const spendingKeyArr = new Uint8Array(\n await sapling.getExtendedSpendingKey(seed, derivationPath)\n );\n\n const spendingKey = b58cencode(spendingKeyArr, prefix[Prefix.SASK]);\n\n if (ValidationResult.VALID !== 3) {\n throw new InvalidSpendingKey(spendingKey);\n }\n\n return new InMemorySpendingKey(spendingKey);\n }\n\n /**\n *\n * @returns InMemoryViewingKey instantiated class\n */\n async getSaplingViewingKeyProvider() {\n let viewingKey: Buffer;\n if (!this.#saplingViewingKey) {\n viewingKey = await sapling.getExtendedFullViewingKeyFromSpendingKey(this.#spendingKeyBuf);\n this.#saplingViewingKey = new InMemoryViewingKey(viewingKey.toString('hex'));\n }\n\n return this.#saplingViewingKey;\n }\n\n /**\n * @description Prepare an unsigned sapling spend description using the spending key\n * @param parametersSpendProof.saplingContext The sapling proving context\n * @param parametersSpendProof.address The address of the input\n * @param parametersSpendProof.randomCommitmentTrapdoor The randomness of the commitment\n * @param parametersSpendProof.publicKeyReRandomization The re-randomization of the public key\n * @param parametersSpendProof.amount The value of the input\n * @param parametersSpendProof.root The root of the merkle tree\n * @param parametersSpendProof.witness The path of the commitment in the tree\n * @param derivationPath tezos current standard 'm/'\n * @returns The unsigned spend description\n */\n async prepareSpendDescription(\n parametersSpendProof: ParametersSpendProof\n ): Promise<Omit<SaplingSpendDescription, 'signature'>> {\n const spendDescription = await sapling.prepareSpendDescriptionWithSpendingKey(\n parametersSpendProof.saplingContext,\n this.#spendingKeyBuf,\n parametersSpendProof.address,\n parametersSpendProof.randomCommitmentTrapdoor,\n parametersSpendProof.publicKeyReRandomization,\n parametersSpendProof.amount,\n parametersSpendProof.root,\n parametersSpendProof.witness\n );\n return {\n commitmentValue: spendDescription.cv,\n nullifier: spendDescription.nf,\n publicKeyReRandomization: spendDescription.rk,\n rtAnchor: spendDescription.rt,\n proof: spendDescription.proof,\n };\n }\n\n /**\n * @description Sign a sapling spend description\n * @param parametersSpendSig.publicKeyReRandomization The re-randomization of the public key\n * @param parametersSpendSig.unsignedSpendDescription The unsigned Spend description\n * @param parametersSpendSig.hash The data to be signed\n * @returns The signed spend description\n */\n async signSpendDescription(\n parametersSpendSig: ParametersSpendSig\n ): Promise<SaplingTransactionInput> {\n const signedSpendDescription = await sapling.signSpendDescription(\n {\n cv: parametersSpendSig.unsignedSpendDescription.commitmentValue,\n rt: parametersSpendSig.unsignedSpendDescription.rtAnchor,\n nf: parametersSpendSig.unsignedSpendDescription.nullifier,\n rk: parametersSpendSig.unsignedSpendDescription.publicKeyReRandomization,\n proof: parametersSpendSig.unsignedSpendDescription.proof,\n },\n this.#spendingKeyBuf,\n parametersSpendSig.publicKeyReRandomization,\n parametersSpendSig.hash\n );\n return {\n commitmentValue: signedSpendDescription.cv,\n nullifier: signedSpendDescription.nf,\n publicKeyReRandomization: signedSpendDescription.rk,\n proof: signedSpendDescription.proof,\n signature: signedSpendDescription.spendAuthSig,\n };\n }\n\n /**\n * @description Return a proof authorizing key from the configured spending key\n */\n async getProvingKey() {\n const provingKey = await sapling.getProofAuthorizingKey(this.#spendingKeyBuf);\n return provingKey.toString('hex');\n }\n}\n","import { b58cencode, Prefix, prefix } from '@taquito/utils';\nimport * as sapling from '@airgap/sapling-wasm';\nimport { InMemorySpendingKey } from './in-memory-spending-key';\n\n/**\n * @description Holds the viewing key\n */\nexport class InMemoryViewingKey {\n #fullViewingKey: Buffer;\n constructor(fullViewingKey: string) {\n this.#fullViewingKey = Buffer.from(fullViewingKey, 'hex');\n }\n\n /**\n * @description Allows to instantiate the InMemoryViewingKey from an encrypted/unencrypted spending key\n *\n * @param spendingKey Base58Check-encoded spending key\n * @param password Optional password to decrypt the spending key\n * @example\n * ```\n * await InMemoryViewingKey.fromSpendingKey('sask27SLmU9herddHz4qFJBLMjWYMbJF8RtS579w9ej9mfCYK7VUdyCJPHK8AzW9zMsopGZEkYeNjAY7Zz1bkM7CGu8eKLzrjBLTMC5wWJDhxiK91ahA29rhDRsHdJDV2u2jFwb2MNUix8JW7sAkAqYVaJpCehTBPgRQ1KqKwqqUaNmuD8kazd4Q8MCWmgbWs21Yuomdqyi9FLigjRp7oY4m5adaVU19Nj1AHvsMY2tePeU2L')\n * ```\n *\n */\n static async fromSpendingKey(spendingKey: string, password?: string) {\n const inMemorySpendingkey = new InMemorySpendingKey(spendingKey, password);\n return inMemorySpendingkey.getSaplingViewingKeyProvider();\n }\n\n /**\n * @description Retrieve the full viewing key\n * @returns Buffer representing the full viewing key\n *\n */\n getFullViewingKey() {\n return this.#fullViewingKey;\n }\n\n /**\n * @description Retrieve the outgoing viewing key\n * @returns Buffer representing the outgoing viewing key\n *\n */\n async getOutgoingViewingKey() {\n return sapling.getOutgoingViewingKey(this.#fullViewingKey);\n }\n\n /**\n * @description Retrieve the incoming viewing key\n * @returns Buffer representing the incoming viewing key\n *\n */\n async getIncomingViewingKey() {\n return sapling.getIncomingViewingKey(this.#fullViewingKey);\n }\n\n /**\n * @description Retrieve a payment address\n * @param addressIndex used to determine which diversifier should be used to derive the address, default is 0\n * @returns Base58Check-encoded address and its index\n *\n */\n async getAddress(addressIndex?: number) {\n const { index, raw } = await sapling.getPaymentAddressFromViewingKey(\n this.#fullViewingKey,\n addressIndex\n );\n return {\n address: b58cencode(raw, prefix[Prefix.ZET1]),\n addressIndex: index.readInt32LE(),\n };\n }\n}\n","import * as sapling from '@airgap/sapling-wasm';\nimport { ParametersSpendProof, SaplingSpendDescription } from '../types';\nimport { decryptKey } from './helpers';\n\n/**\n * @description holds the proving key, create proof for spend descriptions\n * The class can be instantiated from a proving key or a spending key\n */\nexport class InMemoryProvingKey {\n #provingKey: Buffer;\n\n constructor(provingKey: string) {\n this.#provingKey = Buffer.from(provingKey, 'hex');\n }\n\n /**\n * @description Allows to instantiate the InMemoryProvingKey from an encrypted/unencrypted spending key\n *\n * @param spendingKey Base58Check-encoded spending key\n * @param password Optional password to decrypt the spending key\n * @example\n * ```\n * await InMemoryProvingKey.fromSpendingKey('sask27SLmU9herddHz4qFJBLMjWYMbJF8RtS579w9ej9mfCYK7VUdyCJPHK8AzW9zMsopGZEkYeNjAY7Zz1bkM7CGu8eKLzrjBLTMC5wWJDhxiK91ahA29rhDRsHdJDV2u2jFwb2MNUix8JW7sAkAqYVaJpCehTBPgRQ1KqKwqqUaNmuD8kazd4Q8MCWmgbWs21Yuomdqyi9FLigjRp7oY4m5adaVU19Nj1AHvsMY2tePeU2L')\n * ```\n *\n */\n static async fromSpendingKey(spendingKey: string, password?: string) {\n const decodedSpendingKey = decryptKey(spendingKey, password);\n const provingKey = await sapling.getProofAuthorizingKey(decodedSpendingKey);\n return new InMemoryProvingKey(provingKey.toString('hex'));\n }\n\n /**\n * @description Prepare an unsigned sapling spend description using the proving key\n *\n * @param parametersSpendProof.saplingContext The sapling proving context\n * @param parametersSpendProof.address The address of the input\n * @param parametersSpendProof.randomCommitmentTrapdoor The randomness of the commitment\n * @param parametersSpendProof.publicKeyReRandomization The re-randomization of the public key\n * @param parametersSpendProof.amount The value of the input\n * @param parametersSpendProof.root The root of the merkle tree\n * @param parametersSpendProof.witness The path of the commitment in the tree\n * @param derivationPath tezos current standard 'm/'\n * @returns The unsinged spend description\n */\n async prepareSpendDescription(\n parametersSpendProof: Omit<ParametersSpendProof, 'spendingKey'>\n ): Promise<Omit<SaplingSpendDescription, 'signature'>> {\n const spendDescription = await sapling.prepareSpendDescriptionWithAuthorizingKey(\n parametersSpendProof.saplingContext,\n this.#provingKey,\n parametersSpendProof.address,\n parametersSpendProof.randomCommitmentTrapdoor,\n parametersSpendProof.publicKeyReRandomization,\n parametersSpendProof.amount,\n parametersSpendProof.root,\n parametersSpendProof.witness\n );\n return {\n commitmentValue: spendDescription.cv,\n nullifier: spendDescription.nf,\n publicKeyReRandomization: spendDescription.rk,\n rtAnchor: spendDescription.rt,\n proof: spendDescription.proof,\n };\n }\n}\n","/**\n * @packageDocumentation\n * @module @taquito/sapling\n */\n\nimport BigNumber from 'bignumber.js';\nimport { MichelCodecPacker, Packer, TzReadProvider } from '@taquito/taquito';\nimport {\n b58cdecode,\n format,\n InvalidAddressError,\n InvalidKeyError,\n prefix,\n Prefix,\n validateKeyHash,\n ValidationResult,\n} from '@taquito/utils';\nimport { InsufficientBalance, InvalidMemo } from './error';\nimport { convertValueToBigNumber } from './sapling-tx-viewer/helpers';\nimport { InMemorySpendingKey } from './sapling-keys/in-memory-spending-key';\nimport { SaplingForger } from './sapling-forger/sapling-forger';\nimport { SaplingTransactionViewer } from './sapling-tx-viewer/sapling-transaction-viewer';\nimport {\n ChosenSpendableInputs,\n Input,\n ParametersSaplingTransaction,\n ParametersUnshieldedTransaction,\n SaplingContractDetails,\n SaplingContractId,\n} from './types';\nimport { SaplingTransactionBuilder } from './sapling-tx-builder/sapling-transactions-builder';\nimport { DEFAULT_BOUND_DATA, DEFAULT_MEMO } from './constants';\nimport { InMemoryProvingKey } from './sapling-keys/in-memory-proving-key';\n\nexport { SaplingTransactionViewer } from './sapling-tx-viewer/sapling-transaction-viewer';\nexport { InMemoryViewingKey } from './sapling-keys/in-memory-viewing-key';\nexport { InMemorySpendingKey } from './sapling-keys/in-memory-spending-key';\nexport { InMemoryProvingKey } from './sapling-keys/in-memory-proving-key';\n\n/**\n * @description Class that surfaces all of the sapling capability allowing to read from a sapling state and prepare transactions\n *\n * @param keys.saplingSigner Holds the sapling spending key\n * @param keys.saplingProver (Optional) Allows to generate the proofs with the proving key rather than the spending key\n * @param saplingContractDetails Contains the address of the sapling contract, the memo size, and an optional sapling id that must be defined if the sapling contract contains more than one sapling state\n * @param readProvider Allows to read data from the blockchain\n * @param packer (Optional) Allows packing data. Use the `MichelCodecPacker` by default.\n * @param saplingForger (Optional) Allows serializing the sapling transactions. Use the `SaplingForger` by default.\n * @param saplingTxBuilder (Optional) Allows to prepare the sapling transactions. Use the `SaplingTransactionBuilder` by default.\n * @example\n * ```\n * const inMemorySpendingKey = await InMemorySpendingKey.fromMnemonic('YOUR_MNEMONIC');\n * const readProvider = new RpcReadAdapter(new RpcClient('https://YOUR_PREFERRED_RPC_URL'))\n *\n * const saplingToolkit = new SaplingToolkit(\n * { saplingSigner: inMemorySpendingKey },\n * { contractAddress: SAPLING_CONTRACT_ADDRESS, memoSize: 8 },\n * readProvider\n * )\n * ```\n */\nexport class SaplingToolkit {\n #inMemorySpendingKey: InMemorySpendingKey;\n #saplingId: string | undefined;\n #contractAddress: string;\n #memoSize: number;\n #readProvider: TzReadProvider;\n #packer: Packer;\n #saplingForger: SaplingForger;\n #saplingTxBuilder: SaplingTransactionBuilder;\n #saplingTransactionViewer: SaplingTransactionViewer | undefined;\n constructor(\n keys: {\n saplingSigner: InMemorySpendingKey;\n saplingProver?: InMemoryProvingKey;\n },\n saplingContractDetails: SaplingContractDetails,\n readProvider: TzReadProvider,\n packer = new MichelCodecPacker(),\n saplingForger = new SaplingForger(),\n saplingTxBuilder = new SaplingTransactionBuilder(\n keys,\n saplingForger,\n saplingContractDetails,\n readProvider\n )\n ) {\n this.#inMemorySpendingKey = keys.saplingSigner;\n this.#saplingId = saplingContractDetails.saplingId;\n this.#contractAddress = saplingContractDetails.contractAddress;\n this.#memoSize = saplingContractDetails.memoSize;\n this.#readProvider = readProvider;\n this.#packer = packer;\n this.#saplingForger = saplingForger;\n this.#saplingTxBuilder = saplingTxBuilder;\n }\n\n /**\n * @description Get an instance of `SaplingTransactionViewer` which allows to retrieve and decrypt sapling transactions and calculate the unspent balance.\n */\n async getSaplingTransactionViewer() {\n let saplingTransactionViewer: SaplingTransactionViewer;\n\n if (!this.#saplingTransactionViewer) {\n const saplingViewingKey = await this.#inMemorySpendingKey.getSaplingViewingKeyProvider();\n saplingTransactionViewer = new SaplingTransactionViewer(\n saplingViewingKey,\n this.getSaplingContractId(),\n this.#readProvider\n );\n this.#saplingTransactionViewer = saplingTransactionViewer;\n }\n return this.#saplingTransactionViewer;\n }\n\n /**\n * @description Prepare a shielded transaction\n * @param shieldedTxParams `to` is the payment address that will receive the shielded tokens (zet).\n * `amount` is the amount of shielded tokens in tez by default.\n * `mutez` needs to be set to true if the amount of shielded tokens is in mutez.\n * `memo` is an empty string by default.\n * @returns a string representing the sapling transaction\n */\n async prepareShieldedTransaction(shieldedTxParams: ParametersSaplingTransaction[]) {\n const { formatedParams, totalAmount } = this.formatTransactionParams(\n shieldedTxParams,\n this.validateDestinationSaplingAddress\n );\n const root = await this.getRoot();\n\n const { inputs, outputs, signature, balance } = await this.#saplingTxBuilder.createShieldedTx(\n formatedParams,\n totalAmount,\n DEFAULT_BOUND_DATA\n );\n\n const forgedSaplingTx = this.#saplingForger.forgeSaplingTransaction({\n inputs,\n outputs,\n balance,\n root,\n boundData: DEFAULT_BOUND_DATA,\n signature,\n });\n\n return forgedSaplingTx.toString('hex');\n }\n\n /**\n * @description Prepare an unshielded transaction\n * @param unshieldedTxParams `to` is the Tezos address that will receive the unshielded tokens (tz1, tz2 or tz3).\n * `amount` is the amount of unshielded tokens in tez by default.\n * `mutez` needs to be set to true if the amount of unshielded tokens is in mutez.\n * @returns a string representing the sapling transaction.\n */\n async prepareUnshieldedTransaction(unshieldedTxParams: ParametersUnshieldedTransaction) {\n const { formatedParams, totalAmount } = this.formatTransactionParams(\n [unshieldedTxParams],\n this.validateDestinationImplicitAddress\n );\n\n const boundData = await this.createBoundData(formatedParams[0].to);\n\n const root = await this.getRoot();\n const chosenInputs = await this.selectInputsToSpend(new BigNumber(formatedParams[0].amount));\n\n const { inputs, outputs, signature, balance } = await this.#saplingTxBuilder.createSaplingTx(\n [],\n totalAmount,\n boundData,\n chosenInputs\n );\n\n const forgedSaplingTx = this.#saplingForger.forgeSaplingTransaction({\n inputs,\n outputs,\n balance,\n root,\n boundData,\n signature,\n });\n\n return forgedSaplingTx.toString('hex');\n }\n\n /**\n * @description Prepare a sapling transaction (zet to zet)\n * @param saplingTxParams `to` is the payment address that will receive the shielded tokens (zet).\n * `amount` is the amount of unshielded tokens in tez by default.\n * `mutez` needs to be set to true if the amount of unshielded tokens is in mutez.\n * `memo` is an empty string by default.\n * @returns a string representing the sapling transaction.\n */\n async prepareSaplingTransaction(saplingTxParams: ParametersSaplingTransaction[]) {\n const { formatedParams, totalAmount } = this.formatTransactionParams(\n saplingTxParams,\n this.validateDestinationSaplingAddress\n );\n\n const root = await this.getRoot();\n const chosenInputs = await this.selectInputsToSpend(totalAmount);\n const { inputs, outputs, signature, balance } = await this.#saplingTxBuilder.createSaplingTx(\n formatedParams,\n totalAmount,\n DEFAULT_BOUND_DATA,\n chosenInputs\n );\n\n const forgedSaplingTx = this.#saplingForger.forgeSaplingTransaction({\n inputs,\n outputs,\n balance,\n root,\n boundData: DEFAULT_BOUND_DATA,\n signature,\n });\n\n return forgedSaplingTx.toString('hex');\n }\n\n private formatTransactionParams(\n txParams: ParametersSaplingTransaction[],\n validateDestination: (to: string) => void\n ) {\n const formatedParams: {\n to: string;\n amount: string;\n memo: string;\n }[] = [];\n\n let totalAmount = new BigNumber(0);\n\n txParams.forEach((param) => {\n validateDestination(param.to);\n const amountMutez = param.mutez\n ? param.amount.toString()\n : format('tz', 'mutez', param.amount).toString();\n totalAmount = totalAmount.plus(new BigNumber(amountMutez));\n const memo = param.memo ?? DEFAULT_MEMO;\n if (memo.length > this.#memoSize) {\n throw new InvalidMemo(memo, 'The memo is too long.');\n }\n\n formatedParams.push({ to: param.to, amount: amountMutez, memo });\n });\n\n return { formatedParams, totalAmount };\n }\n\n private async getRoot() {\n if (this.#saplingId) {\n const { root } = await this.#readProvider.getSaplingDiffById({ id: this.#saplingId }, 'head');\n return root;\n } else {\n const { root } = await this.#readProvider.getSaplingDiffByContract(\n this.#contractAddress,\n 'head'\n );\n return root;\n }\n }\n private async createBoundData(destination: string) {\n const pref = destination.substr(0, 3);\n\n let pad: Buffer;\n switch (pref) {\n case 'tz1': {\n pad = Buffer.from('00', 'hex');\n break;\n }\n case 'tz2': {\n pad = Buffer.from('01', 'hex');\n break;\n }\n case 'tz3': {\n pad = Buffer.from('02', 'hex');\n break;\n }\n default: {\n throw new InvalidKeyError(destination, \"The 'to' parameter contains an invalid prefix.\");\n }\n }\n\n const decodedDestination = b58cdecode(destination, prefix[pref]);\n const padDestination = Buffer.concat([pad, Buffer.from(decodedDestination)]);\n const packedDestination = await this.#packer.packData({\n data: { bytes: padDestination.toString('hex') },\n type: { prim: 'bytes' },\n });\n\n return Buffer.from(packedDestination.packed, 'hex');\n }\n\n private validateDestinationImplicitAddress(to: string) {\n if (validateKeyHash(to) !== ValidationResult.VALID) {\n throw new InvalidAddressError(\n to,\n \"The 'to' parameter must be a Tezos public key hash (tz1, tz2, tz3).\"\n );\n }\n }\n\n private validateDestinationSaplingAddress(to: string) {\n if (!to.startsWith(Prefix.ZET1)) {\n throw new InvalidAddressError(to, \"The 'to' parameter must be a sapling address (zet1).\");\n }\n }\n\n private getSaplingContractId() {\n let saplingContractId: SaplingContractId;\n if (this.#saplingId) {\n saplingContractId = { saplingId: this.#saplingId };\n } else {\n saplingContractId = { contractAddress: this.#contractAddress };\n }\n return saplingContractId;\n }\n\n private async selectInputsToSpend(amountMutez: BigNumber): Promise<ChosenSpendableInputs> {\n const saplingTxViewer = await this.getSaplingTransactionViewer();\n\n const { incoming } = await saplingTxViewer.getIncomingAndOutgoingTransactionsRaw();\n\n const inputsToSpend: Input[] = [];\n let sumSelectedInputs = new BigNumber(0);\n\n incoming.forEach((input) => {\n if (!input.isSpent && sumSelectedInputs.isLessThan(amountMutez)) {\n const txAmount = convertValueToBigNumber(input.value);\n sumSelectedInputs = sumSelectedInputs.plus(txAmount);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { isSpent, ...rest } = input;\n inputsToSpend.push(rest);\n }\n });\n\n if (sumSelectedInputs.isLessThan(new BigNumber(amountMutez))) {\n throw new InsufficientBalance(sumSelectedInputs.toString(), amountMutez.toString());\n }\n return { inputsToSpend, sumSelectedInputs };\n }\n}\n"],"names":["bytes2Char","b58cencode","prefix","Prefix","BigNumber","toHexBuf","char2Bytes","_readProvider","sapling","blake","hex2buf","mergebuf","openSecretBox","hex2Bytes","num2PaddedHex","merkleHash","randomBytes","_inMemorySpendingKey","_saplingForger","_contractAddress","_saplingId","_memoSize","b58cdecode","secretBox","toBuffer","pbkdf2","bip39","ValidationResult","MichelCodecPacker","format","InvalidKeyError","validateKeyHash","InvalidAddressError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"taquito-sapling.umd.js","sources":["../src/error.ts","../src/sapling-tx-viewer/helpers.ts","../src/sapling-forger/sapling-forger.ts","../src/constants.ts","../src/sapling-tx-viewer/sapling-transaction-viewer.ts","../src/sapling-state/utils.ts","../src/sapling-state/sapling-state.ts","../src/sapling-module-wrapper.ts","../src/sapling-tx-builder/sapling-transactions-builder.ts","../src/sapling-keys/helpers.ts","../src/sapling-keys/in-memory-spending-key.ts","../src/sapling-keys/in-memory-viewing-key.ts","../src/sapling-keys/in-memory-proving-key.ts","../src/taquito-sapling.ts"],"sourcesContent":["/**\n * @category Error\n * @description Error indicating that the spending key is invalid\n */\nexport class InvalidSpendingKey extends Error {\n public name = 'InvalidSpendingKey';\n constructor(sk: string, reason = 'The spending key is invalid') {\n super(`${reason}: ${sk}`);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates an invalid Merkle root being passed\n */\nexport class InvalidMerkleRootError extends Error {\n public name = 'InvalidMerkleRootError';\n constructor(public root: string) {\n super(`The following Merkle tree is invalid: ${JSON.stringify(root)}`);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates a failure when trying to construct the Merkle tree\n */\nexport class TreeConstructionFailure extends Error {\n public name = 'TreeConstructionFailure';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error indicating that the memo is invalid\n */\nexport class InvalidMemo extends Error {\n public name = 'InvalidMemo';\n constructor(memo: string, errorDetail: string) {\n super(`The memo '${memo}' is invalid. ${errorDetail}`);\n }\n}\n\n/**\n * @category Error\n * @description Error indicating that there is not enough balance to prepare the sapling transaction\n */\nexport class InsufficientBalance extends Error {\n public name = 'InsufficientBalance';\n constructor(realBalance: string, amountToSpend: string) {\n super(`Unable to spend ${amountToSpend} mutez while the balance is only ${realBalance} mutez.`);\n }\n}\n\n/**\n * @category Error\n * @description Error indicating that a parameter is invalid\n */\nexport class InvalidParameter extends Error {\n public name = 'InvalidParameter';\n constructor(message: string) {\n super(message);\n }\n}\n","import { b58cencode, bytes2Char, Prefix, prefix } from '@taquito/utils';\nimport BigNumber from 'bignumber.js';\nimport { Input } from '../types';\n\nexport function memoHexToUtf8(memo: string) {\n const memoNoPadding = removeZeroPaddedBytesRight(memo);\n return memoNoPadding === '' ? memoNoPadding : bytes2Char(memoNoPadding);\n}\n\nfunction removeZeroPaddedBytesRight(memo: string) {\n const matchZeroRight = memo.match(/^(.*?)(00)+$/);\n return matchZeroRight ? matchZeroRight[1] : memo;\n}\n\nexport function readableFormat(saplingTransactionProperties: Omit<Input, 'position'>) {\n return {\n value: convertValueToBigNumber(saplingTransactionProperties.value),\n memo: memoHexToUtf8(Buffer.from(saplingTransactionProperties.memo).toString('hex')),\n paymentAddress: b58cencode(saplingTransactionProperties.paymentAddress, prefix[Prefix.ZET1]),\n };\n}\n\nexport function convertValueToBigNumber(value: Uint8Array) {\n return new BigNumber(Buffer.from(value).toString('hex'), 16);\n}\n\nexport function bufToUint8Array(buffer: Buffer) {\n return new Uint8Array(\n buffer.buffer,\n buffer.byteOffset,\n buffer.byteLength / Uint8Array.BYTES_PER_ELEMENT\n );\n}\n","import {\n SaplingTransactionInput,\n SaplingTransaction,\n SaplingTransactionOutput,\n SaplingTransactionPlaintext,\n} from '../types';\nimport { char2Bytes, toHexBuf } from '@taquito/utils';\nimport BigNumber from 'bignumber.js';\n\nexport class SaplingForger {\n /**\n * @description Forge sapling transactions\n * @param spendDescriptions the list of spend descriptions\n * @param outputDescriptions the list of output descriptions\n * @param signature signature hash\n * @param balance balance of the Sapling contract (input/output difference)\n * @param root root of the merkle tree\n * @returns Forged sapling transaction of type Buffer\n */\n forgeSaplingTransaction(tx: SaplingTransaction): Buffer {\n const spendBuf = this.forgeSpendDescriptions(tx.inputs);\n const spend = Buffer.concat([toHexBuf(spendBuf.length, 32), spendBuf]);\n\n const outputBuf = this.forgeOutputDescriptions(tx.outputs);\n const output = Buffer.concat([toHexBuf(outputBuf.length, 32), outputBuf]);\n\n const root = Buffer.from(tx.root, 'hex');\n\n return Buffer.concat([\n spend,\n output,\n tx.signature,\n toHexBuf(tx.balance, 64),\n root,\n toHexBuf(tx.boundData.length, 32),\n tx.boundData,\n ]);\n }\n\n /**\n * @description Forge list of spend descriptions\n * @param spendDescriptions list of spend descriptions\n * @returns concatenated forged bytes of type Buffer\n */\n forgeSpendDescriptions(spendDescriptions: SaplingTransactionInput[]): Buffer {\n const descriptions = [];\n\n for (const i of spendDescriptions) {\n const buff = this.forgeSpendDescription(i);\n descriptions.push(buff);\n }\n\n return Buffer.concat(descriptions);\n }\n\n forgeSpendDescription(desc: SaplingTransactionInput): Buffer {\n return Buffer.concat([\n desc.commitmentValue,\n desc.nullifier,\n desc.publicKeyReRandomization,\n desc.proof,\n desc.signature,\n ]);\n }\n\n /**\n * @description Forge list of output descriptions\n * @param outputDescriptions list of output descriptions\n * @returns concatenated forged bytes of type Buffer\n */\n forgeOutputDescriptions(outputDescriptions: SaplingTransactionOutput[]): Buffer {\n const descriptions = [];\n\n for (const i of outputDescriptions) {\n const buff = this.forgeOutputDescription(i);\n descriptions.push(buff);\n }\n\n return Buffer.concat(descriptions);\n }\n\n forgeOutputDescription(desc: SaplingTransactionOutput): Buffer {\n const ct = desc.ciphertext;\n\n return Buffer.concat([\n desc.commitment,\n desc.proof,\n ct.commitmentValue,\n ct.ephemeralPublicKey,\n toHexBuf(ct.payloadEnc.length, 32),\n ct.payloadEnc,\n ct.nonceEnc,\n ct.payloadOut,\n ct.nonceOut,\n ]);\n }\n\n forgeUnsignedTxInput(unsignedSpendDescription: Omit<SaplingTransactionInput, 'signature'>) {\n return Buffer.concat([\n unsignedSpendDescription.commitmentValue,\n unsignedSpendDescription.nullifier,\n unsignedSpendDescription.publicKeyReRandomization,\n unsignedSpendDescription.proof,\n ]);\n }\n\n forgeTransactionPlaintext(txPlainText: SaplingTransactionPlaintext) {\n const encodedMemo = Buffer.from(\n char2Bytes(txPlainText.memo).padEnd(txPlainText.memoSize, '0'),\n 'hex'\n );\n return Buffer.concat([\n txPlainText.diversifier,\n toHexBuf(new BigNumber(txPlainText.amount), 64),\n txPlainText.randomCommitmentTrapdoor,\n toHexBuf(txPlainText.memoSize, 32),\n encodedMemo,\n ]);\n }\n}\n","export const KDF_KEY = 'KDFSaplingForTezosV1';\nexport const OCK_KEY = 'OCK_keystringderivation_TEZOS';\nexport const DEFAULT_MEMO = '';\nexport const DEFAULT_BOUND_DATA = Buffer.from('', 'hex');\n","import * as sapling from '@airgap/sapling-wasm';\nimport BigNumber from 'bignumber.js';\nimport { hex2buf, mergebuf } from '@taquito/utils';\nimport { CommitmentsAndCiphertexts, SaplingDiffResponse } from '@taquito/rpc';\nimport blake from 'blakejs';\nimport { openSecretBox } from '@stablelib/nacl';\nimport { InMemoryViewingKey } from '../sapling-keys/in-memory-viewing-key';\nimport { bufToUint8Array, convertValueToBigNumber, readableFormat } from './helpers';\nimport { KDF_KEY, OCK_KEY } from '../constants';\nimport { Input, SaplingContractId, SaplingIncomingAndOutgoingTransaction } from '../types';\nimport { InvalidParameter } from '../error';\nimport { TzReadProvider } from '@taquito/taquito';\n\n/**\n * @description Allows to retrieve and decrypt sapling transactions using on a viewing key\n *\n * @param inMemoryViewingKey Holds the sapling viewing key\n * @param saplingContractId Address of the sapling contract or sapling id if the smart contract contains multiple sapling states\n * @param readProvider Allows to read data from the blockchain\n */\nexport class SaplingTransactionViewer {\n #viewingKeyProvider: InMemoryViewingKey;\n #readProvider: TzReadProvider;\n #saplingContractId: SaplingContractId;\n\n constructor(\n inMemoryViewingKey: InMemoryViewingKey,\n saplingContractId: SaplingContractId,\n readProvider: TzReadProvider\n ) {\n this.#viewingKeyProvider = inMemoryViewingKey;\n this.#saplingContractId = saplingContractId;\n this.#readProvider = readProvider;\n }\n\n /**\n * @description Retrieve the unspent balance associated with the configured viewing key and sapling state\n *\n * @returns the balance in mutez represented as a BigNumber\n *\n */\n async getBalance(): Promise<BigNumber> {\n let balance = new BigNumber(0);\n const { commitments_and_ciphertexts, nullifiers } = await this.getSaplingDiff();\n for (let i = 0; i < commitments_and_ciphertexts.length; i++) {\n const decrypted = await this.decryptCiphertextAsReceiver(commitments_and_ciphertexts[i]);\n if (decrypted) {\n const valueBigNumber = convertValueToBigNumber(decrypted.value);\n const isSpent = await this.isSpent(\n decrypted.paymentAddress,\n valueBigNumber.toString(),\n decrypted.randomCommitmentTrapdoor,\n i,\n nullifiers\n );\n if (!isSpent) {\n balance = balance.plus(valueBigNumber);\n }\n }\n }\n return balance;\n }\n\n /**\n * @description Retrieve all the incoming and outgoing transactions associated with the configured viewing key.\n * The response properties are in Uint8Array format; use the getIncomingAndOutgoingTransactions method for readable properties\n *\n */\n async getIncomingAndOutgoingTransactionsRaw() {\n const incoming = [];\n const outgoing = [];\n\n const { commitments_and_ciphertexts, nullifiers } = await this.getSaplingDiff();\n\n for (let i = 0; i < commitments_and_ciphertexts.length; i++) {\n const decryptedAsReceiver = await this.decryptCiphertextAsReceiver(\n commitments_and_ciphertexts[i]\n );\n const decryptedAsSender = await this.decryptCiphertextAsSender(\n commitments_and_ciphertexts[i]\n );\n if (decryptedAsReceiver) {\n const balance = convertValueToBigNumber(decryptedAsReceiver.value);\n const isSpent = await this.isSpent(\n decryptedAsReceiver.paymentAddress,\n balance.toString(),\n decryptedAsReceiver.randomCommitmentTrapdoor,\n i,\n nullifiers\n );\n incoming.push({ ...decryptedAsReceiver, isSpent, position: i });\n }\n if (decryptedAsSender) {\n outgoing.push(decryptedAsSender);\n }\n }\n return {\n incoming,\n outgoing,\n };\n }\n\n /**\n * @description Retrieve all the incoming and outgoing decoded transactions associated with the configured viewing key\n *\n */\n async getIncomingAndOutgoingTransactions(): Promise<SaplingIncomingAndOutgoingTransaction> {\n const tx = await this.getIncomingAndOutgoingTransactionsRaw();\n const incoming = tx.incoming.map(({ isSpent, ...rest }) => {\n return { ...readableFormat(rest), isSpent };\n });\n const outgoing = tx.outgoing.map((outgoingTx) => {\n return readableFormat(outgoingTx);\n });\n return { incoming, outgoing };\n }\n\n private async getSaplingDiff() {\n let saplingDiffResponse: SaplingDiffResponse;\n if (this.#saplingContractId.saplingId) {\n saplingDiffResponse = await this.#readProvider.getSaplingDiffById(\n { id: this.#saplingContractId.saplingId },\n 'head'\n );\n } else if (this.#saplingContractId.contractAddress) {\n saplingDiffResponse = await this.#readProvider.getSaplingDiffByContract(\n this.#saplingContractId.contractAddress,\n 'head'\n );\n } else {\n throw new InvalidParameter(\n 'A contract address or a sapling id was expected in the SaplingTransactionViewer constructor.'\n );\n }\n return saplingDiffResponse;\n }\n\n private async decryptCiphertextAsReceiver(\n commitmentsAndCiphertexts: CommitmentsAndCiphertexts\n ): Promise<Omit<Input, 'position'> | undefined> {\n const commitment = commitmentsAndCiphertexts[0];\n const { epk, payload_enc, nonce_enc } = commitmentsAndCiphertexts[1];\n\n const incomingViewingKey = await this.#viewingKeyProvider.getIncomingViewingKey();\n const keyAgreement = await sapling.keyAgreement(epk, incomingViewingKey);\n const keyAgreementHash = blake.blake2b(keyAgreement, Buffer.from(KDF_KEY), 32);\n\n const decrypted = await this.decryptCiphertext(\n keyAgreementHash,\n hex2buf(nonce_enc),\n hex2buf(payload_enc)\n );\n\n if (decrypted) {\n const {\n diversifier,\n value,\n randomCommitmentTrapdoor: rcm,\n memo,\n } = this.extractTransactionProperties(decrypted);\n const paymentAddress = bufToUint8Array(\n await sapling.getRawPaymentAddressFromIncomingViewingKey(incomingViewingKey, diversifier)\n );\n\n try {\n const valid = await sapling.verifyCommitment(\n commitment,\n paymentAddress,\n convertValueToBigNumber(value).toString(),\n rcm\n );\n if (valid) {\n return { value, memo, paymentAddress, randomCommitmentTrapdoor: rcm };\n }\n } catch (ex: any) {\n if (!/invalid value/.test(ex)) {\n throw ex;\n }\n }\n }\n }\n\n private async decryptCiphertextAsSender(\n commitmentsAndCiphertexts: CommitmentsAndCiphertexts\n ): Promise<Omit<Input, 'position'> | undefined> {\n const commitment = commitmentsAndCiphertexts[0];\n const { epk, payload_enc, nonce_enc, payload_out, nonce_out, cv } =\n commitmentsAndCiphertexts[1];\n\n const outgoingViewingKey = await this.#viewingKeyProvider.getOutgoingViewingKey();\n const concat = cv.concat(commitment, epk, outgoingViewingKey.toString('hex'));\n const outgoingCipherKey = blake.blake2b(Buffer.from(concat, 'hex'), Buffer.from(OCK_KEY), 32);\n\n const decryptedOut = await this.decryptCiphertext(\n outgoingCipherKey,\n hex2buf(nonce_out),\n hex2buf(payload_out)\n );\n\n if (decryptedOut) {\n const { recipientDiversifiedTransmissionKey: pkd, ephemeralPrivateKey: esk } =\n this.extractPkdAndEsk(decryptedOut);\n const keyAgreement = await sapling.keyAgreement(pkd, esk);\n const keyAgreementHash = blake.blake2b(keyAgreement, Buffer.from(KDF_KEY), 32);\n\n const decryptedEnc = await this.decryptCiphertext(\n keyAgreementHash,\n hex2buf(nonce_enc),\n hex2buf(payload_enc)\n );\n\n if (decryptedEnc) {\n const {\n diversifier,\n value,\n randomCommitmentTrapdoor: rcm,\n memo,\n } = this.extractTransactionProperties(decryptedEnc);\n const paymentAddress = mergebuf(diversifier, pkd);\n\n try {\n const isValid = await sapling.verifyCommitment(\n commitment,\n paymentAddress,\n convertValueToBigNumber(value).toString(),\n rcm\n );\n if (isValid) {\n return { value, memo, paymentAddress, randomCommitmentTrapdoor: rcm };\n }\n } catch (ex: any) {\n if (!/invalid value/.test(ex)) {\n throw ex;\n }\n }\n }\n }\n }\n\n private async decryptCiphertext(\n keyAgreementHash: Uint8Array,\n nonce: Uint8Array,\n payload: Uint8Array\n ) {\n return openSecretBox(keyAgreementHash, nonce, payload);\n }\n\n private extractTransactionProperties(decrypted: Uint8Array) {\n return {\n diversifier: decrypted.slice(0, 11),\n value: decrypted.slice(11, 19),\n randomCommitmentTrapdoor: decrypted.slice(19, 51),\n memoSize: decrypted.slice(51, 55),\n memo: decrypted.slice(55),\n };\n }\n\n private extractPkdAndEsk(decrypted: Uint8Array) {\n return {\n recipientDiversifiedTransmissionKey: decrypted.slice(0, 32),\n ephemeralPrivateKey: decrypted.slice(32),\n };\n }\n\n private async isSpent(\n address: Uint8Array,\n value: string,\n randomCommitmentTrapdoor: Uint8Array,\n position: number,\n nullifiers: string[]\n ) {\n const computedNullifier = await sapling.computeNullifier(\n this.#viewingKeyProvider.getFullViewingKey(),\n address,\n value,\n randomCommitmentTrapdoor,\n position\n );\n return nullifiers.includes(computedNullifier.toString('hex'));\n }\n}\n","/**\n *\n * @param leaves nodes in the tree that we would like to make pairs from\n * @returns a paired/chunked array: [a, b, c, d] => [[a, b], [c, d]]\n */\nexport function pairNodes<T>(leaves: T[]): (T | undefined)[][] {\n const pairs: (T | undefined)[][] = new Array(Math.ceil(leaves.length / 2));\n\n for (let i = 0; i < leaves.length / 2; i++) {\n pairs[i] = leaves.slice(i * 2, i * 2 + 2);\n }\n\n return pairs;\n}\n\n/**\n * @description helper function to assist in Lazy initializing an object\n */\nexport class Lazy<T> {\n private isInitialized = false;\n\n private value?: T = undefined;\n\n constructor(private readonly init: () => Promise<T>) {}\n\n // initializes the lazily initiated object\n public async get(): Promise<T> {\n if (!this.isInitialized) {\n this.value = await this.init();\n this.isInitialized = true;\n }\n\n return this.value as T;\n }\n}\n\n/**\n *\n * @param hex hexadecimal string we would like to swap\n * @returns a hexadecimal string with swapped endians\n */\nexport const changeEndianness = (hex: string): string => {\n if (hex.length % 2 != 0) {\n hex = '0' + hex;\n }\n const bytes = hex.match(/.{2}/g) || [];\n\n return bytes.reverse().join('');\n};\n","/**\n * Some code in this file was originally written or inspired by Airgap-it\n * https://github.com/airgap-it/airgap-coin-lib/blob/master/LICENSE.md\n *\n */\n\nimport { SaplingDiffResponse, SaplingTransactionCiphertext } from '@taquito/rpc';\nimport { InvalidMerkleRootError, TreeConstructionFailure } from '../error';\nimport { merkleHash } from '@airgap/sapling-wasm';\nimport { Lazy, pairNodes, changeEndianness } from './utils';\nimport { hex2Bytes, num2PaddedHex } from '@taquito/utils';\nimport BigNumber from 'bignumber.js';\nimport { MerkleTree, SaplingStateTree } from '../types';\n\n/**\n * @description The SaplingState class's main purpose is to provide a Merkle path for the forger and the transaction builder, so that it may verify that the Sapling transaction is valid\n *\n */\nexport class SaplingState {\n private stateTree: SaplingStateTree | undefined;\n\n private readonly uncommittedMerkleHash: string =\n '0100000000000000000000000000000000000000000000000000000000000000';\n private readonly uncommittedMerkleHashes: Lazy<Buffer[]> = new Lazy(() =>\n this.createUncommittedMerkleHashes()\n );\n\n constructor(public readonly height: number) {}\n\n public async getStateTree(\n stateDiff: SaplingDiffResponse,\n constructTree = true\n ): Promise<SaplingStateTree> {\n if (this.stateTree !== undefined && this.stateTree.root === stateDiff.root) {\n return this.stateTree;\n }\n\n const commitments: string[] = stateDiff.commitments_and_ciphertexts.map(\n ([commitment, _]: [string, SaplingTransactionCiphertext]) => commitment\n );\n\n let merkleTree: MerkleTree;\n if (constructTree) {\n merkleTree = await this.constructMerkleTree(commitments, 0);\n await this.validateMerkleTree(merkleTree, stateDiff.root);\n }\n\n this.stateTree = {\n height: this.height,\n size: commitments.length,\n root: stateDiff.root,\n tree: merkleTree,\n };\n\n return this.stateTree;\n }\n\n /**\n *\n * @param stateTree stateTree parameter that holds information details on our Merkle tree\n * @param position position of the hash in the Merkle tree\n * @returns a promise of a string that serves as the Merkle path that can be passed on to the Sapling forger or the transaction builder\n */\n public async getWitness(stateTree: SaplingStateTree, position: BigNumber): Promise<string> {\n const heightBuffer: Buffer = hex2Bytes(changeEndianness(num2PaddedHex(stateTree.height)));\n const posBuffer: Buffer = hex2Bytes(changeEndianness(num2PaddedHex(position, 64)));\n\n const neighbouringHashes: Buffer[] = await this.getNeighbouringHashes(\n [],\n stateTree.height,\n position,\n stateTree.tree\n );\n\n const witness: Buffer = neighbouringHashes\n .map((hash: Buffer) =>\n Buffer.concat([hex2Bytes(changeEndianness(num2PaddedHex(hash.length))), hash])\n )\n .reverse()\n .reduce((acc: Buffer, next: Buffer) => Buffer.concat([acc, next]));\n\n return Buffer.concat([heightBuffer, witness, posBuffer]).toString('hex');\n }\n\n /**\n *\n * @param leaves array of leaves or nodes that we want to construct the Merkle tree from\n * @param height height of the desired Merkle tree\n * @returns a promise of MerkleTree type object\n */\n private async constructMerkleTree(leaves: MerkleTree[], height: number): Promise<MerkleTree> {\n if (height === this.height && leaves.length === 1) {\n return leaves[0];\n }\n\n if (height === this.height || leaves.length > Math.pow(2, this.height - 1 - height)) {\n throw new TreeConstructionFailure(\n 'Children length exceeds maximum number of nodes in a merkle tree'\n );\n }\n\n const pairedLeaves: MerkleTree[][] = pairNodes(leaves);\n\n const updatedLeaves: MerkleTree[] = await Promise.all(\n pairedLeaves.map(async (chunk: MerkleTree[]) => {\n const left: Buffer = await this.getMerkleHash(chunk[0], height);\n const right: Buffer = await this.getMerkleHash(chunk[1], height);\n\n const parentHash = await merkleHash(height, left, right);\n\n return [parentHash.toString('hex'), chunk[0], chunk[1]] as [string, MerkleTree, MerkleTree];\n })\n );\n\n return this.constructMerkleTree(updatedLeaves, height + 1);\n }\n\n private async getMerkleHash(tree: MerkleTree, height: number): Promise<Buffer> {\n if (tree === undefined) {\n return (await this.uncommittedMerkleHashes.get())[height];\n } else if (typeof tree === 'string') {\n return Buffer.from(tree, 'hex');\n } else {\n return Buffer.from(tree[0], 'hex');\n }\n }\n\n /**\n *\n * @returns hashes of empty or null values to fill in the Merkle tree\n */\n private async createUncommittedMerkleHashes(): Promise<Buffer[]> {\n const res: Buffer[] = new Array(this.height);\n\n res[0] = Buffer.from(this.uncommittedMerkleHash, 'hex');\n for (let i = 0; i < this.height; i++) {\n const hash: Buffer = res[i];\n res[i + 1] = await merkleHash(i, hash, hash);\n }\n\n return res;\n }\n\n /**\n *\n * @param tree Merkle tree to validate\n * @param expectedRoot the expected merkle root to validate against\n */\n private async validateMerkleTree(tree: MerkleTree, expectedRoot: string) {\n const root: Buffer = await this.getMerkleHash(tree, this.height - 1);\n\n if (root.toString('hex') !== expectedRoot) {\n throw new InvalidMerkleRootError(root.toString('hex'));\n }\n }\n\n /**\n *\n * @param acc accumulator variable for the recursive function\n * @param height height of the tree\n * @param position position of the hash we would like find the neighbours of\n * @param tree the Merkle tree that we want to traverse\n * @returns the accumulated Buffer array of neighbouring hashes\n */\n private async getNeighbouringHashes(\n acc: Buffer[],\n height: number,\n position: BigNumber,\n tree: MerkleTree\n ): Promise<Buffer[]> {\n if (typeof tree === 'undefined') {\n throw new Error();\n } else if (typeof tree === 'string') {\n return acc;\n } else {\n let nextPos, nextTree, otherTree;\n\n const fullTree: BigNumber = new BigNumber(2).pow(height - 1);\n if (position.lt(fullTree)) {\n nextPos = position;\n nextTree = tree[1];\n otherTree = tree[2];\n } else {\n nextPos = position.minus(fullTree);\n nextTree = tree[2];\n otherTree = tree[1];\n }\n return this.getNeighbouringHashes(\n [await this.getMerkleHash(otherTree, height - 1), ...acc],\n height - 1,\n nextPos,\n nextTree\n );\n }\n }\n}\n","import * as sapling from '@airgap/sapling-wasm';\nimport { randomBytes } from '@stablelib/random';\nimport { ParametersOutputProof } from './types';\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst saplingOutputParams = require('../saplingOutputParams');\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst saplingSpendParams = require('../saplingSpendParams');\n\nexport class SaplingWrapper {\n async withProvingContext<T>(action: (context: number) => Promise<T>) {\n await this.initSaplingParameters();\n return sapling.withProvingContext(action);\n }\n\n getRandomBytes(length: number) {\n return randomBytes(length);\n }\n\n async randR() {\n return sapling.randR();\n }\n\n async getOutgoingViewingKey(vk: Buffer) {\n return sapling.getOutgoingViewingKey(vk);\n }\n\n async preparePartialOutputDescription(parametersOutputProof: ParametersOutputProof) {\n const partialOutputDesc = await sapling.preparePartialOutputDescription(\n parametersOutputProof.saplingContext,\n parametersOutputProof.address,\n parametersOutputProof.randomCommitmentTrapdoor,\n parametersOutputProof.ephemeralPrivateKey,\n parametersOutputProof.amount\n );\n return {\n commitmentValue: partialOutputDesc.cv,\n commitment: partialOutputDesc.cm,\n proof: partialOutputDesc.proof,\n };\n }\n\n async getDiversifiedFromRawPaymentAddress(decodedDestination: Uint8Array) {\n return sapling.getDiversifiedFromRawPaymentAddress(decodedDestination);\n }\n\n async deriveEphemeralPublicKey(diversifier: Buffer, esk: Buffer) {\n return sapling.deriveEphemeralPublicKey(diversifier, esk);\n }\n\n async getPkdFromRawPaymentAddress(destination: Uint8Array) {\n return sapling.getPkdFromRawPaymentAddress(destination);\n }\n\n async keyAgreement(p: Buffer, sk: Buffer) {\n return sapling.keyAgreement(p, sk);\n }\n\n async createBindingSignature(\n saplingContext: number,\n balance: string,\n transactionSigHash: Uint8Array\n ) {\n return sapling.createBindingSignature(saplingContext, balance, transactionSigHash);\n }\n\n async initSaplingParameters() {\n const spendParams = Buffer.from(saplingSpendParams.saplingSpendParams, 'base64');\n const outputParams = Buffer.from(saplingOutputParams.saplingOutputParams, 'base64');\n\n return sapling.initParameters(spendParams, outputParams);\n }\n}\n","import blake from 'blakejs';\nimport { secretBox } from '@stablelib/nacl';\nimport { DEFAULT_MEMO, KDF_KEY, OCK_KEY } from '../constants';\nimport { SaplingForger } from '../sapling-forger/sapling-forger';\nimport BigNumber from 'bignumber.js';\nimport {\n Input,\n SaplingTransactionOutput,\n SaplingTransactionInput,\n ParametersBindingSig,\n ChosenSpendableInputs,\n ParametersOutputDescription,\n ParametersCiphertext,\n Ciphertext,\n SaplingContractDetails,\n SaplingTransaction,\n SaplingTransactionParams,\n} from '../types';\nimport { SaplingDiffResponse } from '@taquito/rpc';\nimport { b58cdecode, Prefix, prefix } from '@taquito/utils';\nimport { TzReadProvider } from '@taquito/taquito';\nimport { convertValueToBigNumber } from '../sapling-tx-viewer/helpers';\nimport { SaplingState } from '../sapling-state/sapling-state';\nimport { SaplingWrapper } from '../sapling-module-wrapper';\nimport { InMemorySpendingKey } from '../sapling-keys/in-memory-spending-key';\nimport { InMemoryProvingKey } from '../sapling-keys/in-memory-proving-key';\n\nexport class SaplingTransactionBuilder {\n #inMemorySpendingKey: InMemorySpendingKey;\n #inMemoryProvingKey: InMemoryProvingKey | undefined;\n #saplingForger: SaplingForger;\n #contractAddress: string;\n #saplingId: string | undefined;\n #memoSize: number;\n #readProvider: TzReadProvider;\n #saplingWrapper: SaplingWrapper;\n #chainId: string | undefined;\n #saplingState: SaplingState;\n\n constructor(\n keys: {\n saplingSigner: InMemorySpendingKey;\n saplingProver?: InMemoryProvingKey;\n },\n saplingForger: SaplingForger,\n saplingContractDetails: SaplingContractDetails,\n readProvider: TzReadProvider,\n saplingWrapper = new SaplingWrapper()\n ) {\n this.#saplingForger = saplingForger;\n this.#contractAddress = saplingContractDetails.contractAddress;\n this.#memoSize = saplingContractDetails.memoSize;\n this.#inMemorySpendingKey = keys.saplingSigner;\n this.#inMemoryProvingKey = keys.saplingProver;\n this.#saplingState = new SaplingState(32);\n this.#saplingId = saplingContractDetails.saplingId;\n this.#saplingWrapper = saplingWrapper;\n this.#readProvider = readProvider;\n }\n\n async createShieldedTx(\n saplingTransactionParams: SaplingTransactionParams[],\n txTotalAmount: BigNumber,\n boundData: Buffer\n ): Promise<Pick<SaplingTransaction, 'inputs' | 'outputs' | 'signature' | 'balance'>> {\n const rcm = await this.#saplingWrapper.randR();\n\n const balance = this.calculateTransactionBalance('0', txTotalAmount.toString());\n\n const { signature, inputs, outputs } = await this.#saplingWrapper.withProvingContext(\n async (saplingContext: number) => {\n const outputs: SaplingTransactionOutput[] = [];\n const inputs: SaplingTransactionInput[] = [];\n\n for (const i in saplingTransactionParams) {\n outputs.push(\n await this.prepareSaplingOutputDescription({\n saplingContext,\n address: b58cdecode(saplingTransactionParams[i].to, prefix[Prefix.ZET1]),\n amount: saplingTransactionParams[i].amount,\n memo: saplingTransactionParams[i].memo,\n randomCommitmentTrapdoor: rcm,\n })\n );\n }\n\n const signature = await this.createBindingSignature({\n saplingContext,\n inputs,\n outputs,\n balance,\n boundData,\n });\n return { signature, inputs, outputs };\n }\n );\n\n return {\n inputs,\n outputs,\n signature,\n balance,\n };\n }\n\n async createSaplingTx(\n saplingTransactionParams: SaplingTransactionParams[],\n txTotalAmount: BigNumber,\n boundData: Buffer,\n chosenInputs: ChosenSpendableInputs\n ) {\n const randomCommitmentTrapdoor = await this.#saplingWrapper.randR();\n const saplingViewer = await this.#inMemorySpendingKey.getSaplingViewingKeyProvider();\n const outgoingViewingKey = await saplingViewer.getOutgoingViewingKey();\n\n const { signature, balance, inputs, outputs } = await this.#saplingWrapper.withProvingContext(\n async (saplingContext: number) => {\n const outputs: SaplingTransactionOutput[] = [];\n const inputs: SaplingTransactionInput[] = [];\n\n inputs.push(\n ...(await this.prepareSaplingSpendDescription(saplingContext, chosenInputs.inputsToSpend))\n );\n\n let sumAmountOutput = new BigNumber(0);\n\n for (const i in saplingTransactionParams) {\n sumAmountOutput = sumAmountOutput.plus(new BigNumber(saplingTransactionParams[i].amount));\n\n outputs.push(\n await this.prepareSaplingOutputDescription({\n saplingContext,\n address: b58cdecode(saplingTransactionParams[i].to, prefix[Prefix.ZET1]),\n amount: saplingTransactionParams[i].amount,\n memo: saplingTransactionParams[i].memo,\n randomCommitmentTrapdoor,\n outgoingViewingKey,\n })\n );\n }\n\n if (chosenInputs.sumSelectedInputs.isGreaterThan(sumAmountOutput)) {\n const payBackAddress = (await saplingViewer.getAddress()).address;\n\n const { payBackOutput, payBackAmount } = await this.createPaybackOutput(\n {\n saplingContext,\n address: b58cdecode(payBackAddress, prefix[Prefix.ZET1]),\n amount: txTotalAmount.toString(),\n memo: DEFAULT_MEMO,\n randomCommitmentTrapdoor: randomCommitmentTrapdoor,\n outgoingViewingKey: outgoingViewingKey,\n },\n chosenInputs.sumSelectedInputs\n );\n\n sumAmountOutput = sumAmountOutput.plus(new BigNumber(payBackAmount));\n outputs.push(payBackOutput);\n }\n\n const balance = this.calculateTransactionBalance(\n chosenInputs.sumSelectedInputs.toString(),\n sumAmountOutput.toString()\n );\n\n const signature = await this.createBindingSignature({\n saplingContext,\n inputs,\n outputs,\n balance,\n boundData,\n });\n\n return { signature, balance, inputs, outputs };\n }\n );\n\n return {\n inputs,\n outputs,\n signature,\n balance,\n };\n }\n\n // sum of values of inputs minus sums of values of output equals balance\n calculateTransactionBalance(inputTotal: string, outputTotal: string) {\n return new BigNumber(inputTotal).minus(new BigNumber(outputTotal));\n }\n\n async prepareSaplingOutputDescription(\n parametersOutputDescription: ParametersOutputDescription\n ): Promise<SaplingTransactionOutput> {\n const ephemeralPrivateKey = await this.#saplingWrapper.randR();\n const { commitmentValue, commitment, proof } =\n await this.#saplingWrapper.preparePartialOutputDescription({\n saplingContext: parametersOutputDescription.saplingContext,\n address: parametersOutputDescription.address,\n randomCommitmentTrapdoor: parametersOutputDescription.randomCommitmentTrapdoor,\n ephemeralPrivateKey,\n amount: parametersOutputDescription.amount,\n });\n\n const diversifier = await this.#saplingWrapper.getDiversifiedFromRawPaymentAddress(\n parametersOutputDescription.address\n );\n const ephemeralPublicKey = await this.#saplingWrapper.deriveEphemeralPublicKey(\n diversifier,\n ephemeralPrivateKey\n );\n const outgoingCipherKey = parametersOutputDescription.outgoingViewingKey\n ? blake.blake2b(\n Buffer.concat([\n commitmentValue,\n commitment,\n ephemeralPublicKey,\n parametersOutputDescription.outgoingViewingKey,\n ]),\n Buffer.from(OCK_KEY),\n 32\n )\n : this.#saplingWrapper.getRandomBytes(32);\n const ciphertext = await this.encryptCiphertext({\n address: parametersOutputDescription.address,\n ephemeralPrivateKey,\n diversifier,\n outgoingCipherKey,\n amount: parametersOutputDescription.amount,\n randomCommitmentTrapdoor: parametersOutputDescription.randomCommitmentTrapdoor,\n memo: parametersOutputDescription.memo,\n });\n\n return {\n commitment,\n proof,\n ciphertext: {\n ...ciphertext,\n commitmentValue,\n ephemeralPublicKey,\n },\n };\n }\n\n async prepareSaplingSpendDescription(saplingContext: number, inputsToSpend: Input[]) {\n const publicKeyReRandomization = await this.#saplingWrapper.randR();\n\n let stateDiff: SaplingDiffResponse;\n if (this.#saplingId) {\n stateDiff = await this.#readProvider.getSaplingDiffById({ id: this.#saplingId }, 'head');\n } else {\n stateDiff = await this.#readProvider.getSaplingDiffByContract(this.#contractAddress, 'head');\n }\n\n const stateTree = await this.#saplingState.getStateTree(stateDiff, true);\n\n const saplingSpendDescriptions: SaplingTransactionInput[] = [];\n\n for (let i = 0; i < inputsToSpend.length; i++) {\n const amount = convertValueToBigNumber(inputsToSpend[i].value).toString();\n const witness = await this.#saplingState.getWitness(\n stateTree,\n new BigNumber(inputsToSpend[i].position)\n );\n\n const unsignedSpendDescription = this.#inMemoryProvingKey\n ? await this.#inMemoryProvingKey.prepareSpendDescription({\n saplingContext,\n address: inputsToSpend[i].paymentAddress,\n randomCommitmentTrapdoor: inputsToSpend[i].randomCommitmentTrapdoor,\n publicKeyReRandomization,\n amount,\n root: stateDiff.root,\n witness,\n })\n : await this.#inMemorySpendingKey.prepareSpendDescription({\n saplingContext,\n address: inputsToSpend[i].paymentAddress,\n randomCommitmentTrapdoor: inputsToSpend[i].randomCommitmentTrapdoor,\n publicKeyReRandomization,\n amount,\n root: stateDiff.root,\n witness,\n });\n\n const unsignedSpendDescriptionBytes =\n this.#saplingForger.forgeUnsignedTxInput(unsignedSpendDescription);\n const hash = blake.blake2b(unsignedSpendDescriptionBytes, await this.getAntiReplay(), 32);\n const spendDescription = await this.#inMemorySpendingKey.signSpendDescription({\n publicKeyReRandomization,\n unsignedSpendDescription,\n hash,\n });\n\n if (spendDescription.signature === undefined) {\n throw new Error('Spend signing failed');\n }\n saplingSpendDescriptions.push(spendDescription);\n }\n\n return saplingSpendDescriptions;\n }\n\n async encryptCiphertext(\n parametersCiphertext: ParametersCiphertext\n ): Promise<Pick<Ciphertext, 'payloadEnc' | 'nonceEnc' | 'payloadOut' | 'nonceOut'>> {\n const recipientDiversifiedTransmissionKey =\n await this.#saplingWrapper.getPkdFromRawPaymentAddress(parametersCiphertext.address);\n const keyAgreement = await this.#saplingWrapper.keyAgreement(\n recipientDiversifiedTransmissionKey,\n parametersCiphertext.ephemeralPrivateKey\n );\n const keyAgreementHash = blake.blake2b(keyAgreement, Buffer.from(KDF_KEY), 32);\n const nonceEnc = Buffer.from(this.#saplingWrapper.getRandomBytes(24));\n\n const transactionPlaintext = this.#saplingForger.forgeTransactionPlaintext({\n diversifier: parametersCiphertext.diversifier,\n amount: parametersCiphertext.amount,\n randomCommitmentTrapdoor: parametersCiphertext.randomCommitmentTrapdoor,\n memoSize: this.#memoSize * 2,\n memo: parametersCiphertext.memo,\n });\n\n const nonceOut = Buffer.from(this.#saplingWrapper.getRandomBytes(24));\n const payloadEnc = Buffer.from(secretBox(keyAgreementHash, nonceEnc, transactionPlaintext));\n const payloadOut = Buffer.from(\n secretBox(\n parametersCiphertext.outgoingCipherKey,\n nonceOut,\n Buffer.concat([\n recipientDiversifiedTransmissionKey,\n parametersCiphertext.ephemeralPrivateKey,\n ])\n )\n );\n\n return { payloadEnc, nonceEnc, payloadOut, nonceOut };\n }\n\n async createPaybackOutput(params: ParametersOutputDescription, sumSelectedInputs: BigNumber) {\n const payBackAmount = sumSelectedInputs.minus(params.amount).toString();\n const payBackOutput = await this.prepareSaplingOutputDescription({\n saplingContext: params.saplingContext,\n address: params.address,\n amount: payBackAmount,\n memo: params.memo,\n randomCommitmentTrapdoor: params.randomCommitmentTrapdoor,\n outgoingViewingKey: params.outgoingViewingKey,\n });\n\n return { payBackOutput, payBackAmount };\n }\n\n async createBindingSignature(parametersBindingSig: ParametersBindingSig) {\n const outputs = this.#saplingForger.forgeOutputDescriptions(parametersBindingSig.outputs);\n const inputs = this.#saplingForger.forgeSpendDescriptions(parametersBindingSig.inputs);\n const transactionSigHash = blake.blake2b(\n Buffer.concat([inputs, outputs, parametersBindingSig.boundData]),\n await this.getAntiReplay(),\n 32\n );\n\n return this.#saplingWrapper.createBindingSignature(\n parametersBindingSig.saplingContext,\n parametersBindingSig.balance.toFixed(),\n transactionSigHash\n );\n }\n\n async getAntiReplay() {\n let chainId = this.#chainId;\n if (!chainId) {\n chainId = await this.#readProvider.getChainId();\n this.#chainId = chainId;\n }\n return Buffer.from(`${this.#contractAddress}${chainId}`);\n }\n}\n","import { InvalidSpendingKey } from '../error';\nimport toBuffer from 'typedarray-to-buffer';\nimport { openSecretBox } from '@stablelib/nacl';\nimport pbkdf2 from 'pbkdf2';\nimport { Prefix, prefix, b58cdecode } from '@taquito/utils';\n\nexport function decryptKey(spendingKey: string, password?: string) {\n const keyArr = b58cdecode(spendingKey, prefix[Prefix.SASK]);\n // exit first if no password and key is encrypted\n if (!password && spendingKey.slice(0, 4) !== 'sask') {\n throw new InvalidSpendingKey(spendingKey, 'no password Provided to decrypt');\n }\n\n if (password && spendingKey.slice(0, 4) !== 'sask') {\n const salt = toBuffer(keyArr.slice(0, 8));\n const encryptedSk = toBuffer(keyArr.slice(8));\n\n const encryptionKey = pbkdf2.pbkdf2Sync(password, salt, 32768, 32, 'sha512');\n const decrypted = openSecretBox(\n new Uint8Array(encryptionKey),\n new Uint8Array(24),\n new Uint8Array(encryptedSk)\n );\n if (!decrypted) {\n throw new InvalidSpendingKey(spendingKey, 'Encrypted Spending Key or Password Incorrect');\n }\n\n return toBuffer(decrypted);\n } else {\n return toBuffer(keyArr);\n }\n}\n","import { InvalidSpendingKey } from '../error';\nimport { InMemoryViewingKey } from './in-memory-viewing-key';\nimport * as sapling from '@airgap/sapling-wasm';\nimport { Prefix, prefix, b58cencode, ValidationResult } from '@taquito/utils';\nimport * as bip39 from 'bip39';\nimport {\n ParametersSpendProof,\n ParametersSpendSig,\n SaplingSpendDescription,\n SaplingTransactionInput,\n} from '../types';\nimport { decryptKey } from './helpers';\n\n/**\n * @description holds the spending key, create proof and signature for spend descriptions\n * can instantiate from mnemonic word list or decrypt a encrypted spending key\n * with access to instantiate a InMemoryViewingKey\n */\nexport class InMemorySpendingKey {\n #spendingKeyBuf: Buffer;\n #saplingViewingKey: InMemoryViewingKey | undefined;\n /**\n *\n * @param spendingKey unencrypted sask... or encrypted MMXj...\n * @param password required for MMXj encrypted keys\n */\n constructor(spendingKey: string, password?: string) {\n this.#spendingKeyBuf = decryptKey(spendingKey, password);\n }\n\n /**\n *\n * @param mnemonic string of words\n * @param derivationPath tezos current standard 'm/'\n * @returns InMemorySpendingKey class instantiated\n */\n static async fromMnemonic(mnemonic: string, derivationPath = 'm/') {\n // no password passed here. password provided only changes from sask -> MMXj\n const fullSeed = await bip39.mnemonicToSeed(mnemonic);\n\n const first32: Buffer = fullSeed.slice(0, 32);\n const second32: Buffer = fullSeed.slice(32);\n // reduce seed bytes must be 32 bytes reflecting both halves\n const seed = Buffer.from(first32.map((byte, index) => byte ^ second32[index]));\n\n const spendingKeyArr = new Uint8Array(\n await sapling.getExtendedSpendingKey(seed, derivationPath)\n );\n\n const spendingKey = b58cencode(spendingKeyArr, prefix[Prefix.SASK]);\n\n if (ValidationResult.VALID !== 3) {\n throw new InvalidSpendingKey(spendingKey);\n }\n\n return new InMemorySpendingKey(spendingKey);\n }\n\n /**\n *\n * @returns InMemoryViewingKey instantiated class\n */\n async getSaplingViewingKeyProvider() {\n let viewingKey: Buffer;\n if (!this.#saplingViewingKey) {\n viewingKey = await sapling.getExtendedFullViewingKeyFromSpendingKey(this.#spendingKeyBuf);\n this.#saplingViewingKey = new InMemoryViewingKey(viewingKey.toString('hex'));\n }\n\n return this.#saplingViewingKey;\n }\n\n /**\n * @description Prepare an unsigned sapling spend description using the spending key\n * @param parametersSpendProof.saplingContext The sapling proving context\n * @param parametersSpendProof.address The address of the input\n * @param parametersSpendProof.randomCommitmentTrapdoor The randomness of the commitment\n * @param parametersSpendProof.publicKeyReRandomization The re-randomization of the public key\n * @param parametersSpendProof.amount The value of the input\n * @param parametersSpendProof.root The root of the merkle tree\n * @param parametersSpendProof.witness The path of the commitment in the tree\n * @param derivationPath tezos current standard 'm/'\n * @returns The unsigned spend description\n */\n async prepareSpendDescription(\n parametersSpendProof: ParametersSpendProof\n ): Promise<Omit<SaplingSpendDescription, 'signature'>> {\n const spendDescription = await sapling.prepareSpendDescriptionWithSpendingKey(\n parametersSpendProof.saplingContext,\n this.#spendingKeyBuf,\n parametersSpendProof.address,\n parametersSpendProof.randomCommitmentTrapdoor,\n parametersSpendProof.publicKeyReRandomization,\n parametersSpendProof.amount,\n parametersSpendProof.root,\n parametersSpendProof.witness\n );\n return {\n commitmentValue: spendDescription.cv,\n nullifier: spendDescription.nf,\n publicKeyReRandomization: spendDescription.rk,\n rtAnchor: spendDescription.rt,\n proof: spendDescription.proof,\n };\n }\n\n /**\n * @description Sign a sapling spend description\n * @param parametersSpendSig.publicKeyReRandomization The re-randomization of the public key\n * @param parametersSpendSig.unsignedSpendDescription The unsigned Spend description\n * @param parametersSpendSig.hash The data to be signed\n * @returns The signed spend description\n */\n async signSpendDescription(\n parametersSpendSig: ParametersSpendSig\n ): Promise<SaplingTransactionInput> {\n const signedSpendDescription = await sapling.signSpendDescription(\n {\n cv: parametersSpendSig.unsignedSpendDescription.commitmentValue,\n rt: parametersSpendSig.unsignedSpendDescription.rtAnchor,\n nf: parametersSpendSig.unsignedSpendDescription.nullifier,\n rk: parametersSpendSig.unsignedSpendDescription.publicKeyReRandomization,\n proof: parametersSpendSig.unsignedSpendDescription.proof,\n },\n this.#spendingKeyBuf,\n parametersSpendSig.publicKeyReRandomization,\n parametersSpendSig.hash\n );\n return {\n commitmentValue: signedSpendDescription.cv,\n nullifier: signedSpendDescription.nf,\n publicKeyReRandomization: signedSpendDescription.rk,\n proof: signedSpendDescription.proof,\n signature: signedSpendDescription.spendAuthSig,\n };\n }\n\n /**\n * @description Return a proof authorizing key from the configured spending key\n */\n async getProvingKey() {\n const provingKey = await sapling.getProofAuthorizingKey(this.#spendingKeyBuf);\n return provingKey.toString('hex');\n }\n}\n","import { b58cencode, Prefix, prefix } from '@taquito/utils';\nimport * as sapling from '@airgap/sapling-wasm';\nimport { InMemorySpendingKey } from './in-memory-spending-key';\n\n/**\n * @description Holds the viewing key\n */\nexport class InMemoryViewingKey {\n #fullViewingKey: Buffer;\n constructor(fullViewingKey: string) {\n this.#fullViewingKey = Buffer.from(fullViewingKey, 'hex');\n }\n\n /**\n * @description Allows to instantiate the InMemoryViewingKey from an encrypted/unencrypted spending key\n *\n * @param spendingKey Base58Check-encoded spending key\n * @param password Optional password to decrypt the spending key\n * @example\n * ```\n * await InMemoryViewingKey.fromSpendingKey('sask27SLmU9herddHz4qFJBLMjWYMbJF8RtS579w9ej9mfCYK7VUdyCJPHK8AzW9zMsopGZEkYeNjAY7Zz1bkM7CGu8eKLzrjBLTMC5wWJDhxiK91ahA29rhDRsHdJDV2u2jFwb2MNUix8JW7sAkAqYVaJpCehTBPgRQ1KqKwqqUaNmuD8kazd4Q8MCWmgbWs21Yuomdqyi9FLigjRp7oY4m5adaVU19Nj1AHvsMY2tePeU2L')\n * ```\n *\n */\n static async fromSpendingKey(spendingKey: string, password?: string) {\n const inMemorySpendingkey = new InMemorySpendingKey(spendingKey, password);\n return inMemorySpendingkey.getSaplingViewingKeyProvider();\n }\n\n /**\n * @description Retrieve the full viewing key\n * @returns Buffer representing the full viewing key\n *\n */\n getFullViewingKey() {\n return this.#fullViewingKey;\n }\n\n /**\n * @description Retrieve the outgoing viewing key\n * @returns Buffer representing the outgoing viewing key\n *\n */\n async getOutgoingViewingKey() {\n return sapling.getOutgoingViewingKey(this.#fullViewingKey);\n }\n\n /**\n * @description Retrieve the incoming viewing key\n * @returns Buffer representing the incoming viewing key\n *\n */\n async getIncomingViewingKey() {\n return sapling.getIncomingViewingKey(this.#fullViewingKey);\n }\n\n /**\n * @description Retrieve a payment address\n * @param addressIndex used to determine which diversifier should be used to derive the address, default is 0\n * @returns Base58Check-encoded address and its index\n *\n */\n async getAddress(addressIndex?: number) {\n const { index, raw } = await sapling.getPaymentAddressFromViewingKey(\n this.#fullViewingKey,\n addressIndex\n );\n return {\n address: b58cencode(raw, prefix[Prefix.ZET1]),\n addressIndex: index.readInt32LE(),\n };\n }\n}\n","import * as sapling from '@airgap/sapling-wasm';\nimport { ParametersSpendProof, SaplingSpendDescription } from '../types';\nimport { decryptKey } from './helpers';\n\n/**\n * @description holds the proving key, create proof for spend descriptions\n * The class can be instantiated from a proving key or a spending key\n */\nexport class InMemoryProvingKey {\n #provingKey: Buffer;\n\n constructor(provingKey: string) {\n this.#provingKey = Buffer.from(provingKey, 'hex');\n }\n\n /**\n * @description Allows to instantiate the InMemoryProvingKey from an encrypted/unencrypted spending key\n *\n * @param spendingKey Base58Check-encoded spending key\n * @param password Optional password to decrypt the spending key\n * @example\n * ```\n * await InMemoryProvingKey.fromSpendingKey('sask27SLmU9herddHz4qFJBLMjWYMbJF8RtS579w9ej9mfCYK7VUdyCJPHK8AzW9zMsopGZEkYeNjAY7Zz1bkM7CGu8eKLzrjBLTMC5wWJDhxiK91ahA29rhDRsHdJDV2u2jFwb2MNUix8JW7sAkAqYVaJpCehTBPgRQ1KqKwqqUaNmuD8kazd4Q8MCWmgbWs21Yuomdqyi9FLigjRp7oY4m5adaVU19Nj1AHvsMY2tePeU2L')\n * ```\n *\n */\n static async fromSpendingKey(spendingKey: string, password?: string) {\n const decodedSpendingKey = decryptKey(spendingKey, password);\n const provingKey = await sapling.getProofAuthorizingKey(decodedSpendingKey);\n return new InMemoryProvingKey(provingKey.toString('hex'));\n }\n\n /**\n * @description Prepare an unsigned sapling spend description using the proving key\n *\n * @param parametersSpendProof.saplingContext The sapling proving context\n * @param parametersSpendProof.address The address of the input\n * @param parametersSpendProof.randomCommitmentTrapdoor The randomness of the commitment\n * @param parametersSpendProof.publicKeyReRandomization The re-randomization of the public key\n * @param parametersSpendProof.amount The value of the input\n * @param parametersSpendProof.root The root of the merkle tree\n * @param parametersSpendProof.witness The path of the commitment in the tree\n * @param derivationPath tezos current standard 'm/'\n * @returns The unsinged spend description\n */\n async prepareSpendDescription(\n parametersSpendProof: Omit<ParametersSpendProof, 'spendingKey'>\n ): Promise<Omit<SaplingSpendDescription, 'signature'>> {\n const spendDescription = await sapling.prepareSpendDescriptionWithAuthorizingKey(\n parametersSpendProof.saplingContext,\n this.#provingKey,\n parametersSpendProof.address,\n parametersSpendProof.randomCommitmentTrapdoor,\n parametersSpendProof.publicKeyReRandomization,\n parametersSpendProof.amount,\n parametersSpendProof.root,\n parametersSpendProof.witness\n );\n return {\n commitmentValue: spendDescription.cv,\n nullifier: spendDescription.nf,\n publicKeyReRandomization: spendDescription.rk,\n rtAnchor: spendDescription.rt,\n proof: spendDescription.proof,\n };\n }\n}\n","/**\n * @packageDocumentation\n * @module @taquito/sapling\n */\n\nimport BigNumber from 'bignumber.js';\nimport { MichelCodecPacker, Packer, TzReadProvider } from '@taquito/taquito';\nimport {\n b58cdecode,\n format,\n InvalidAddressError,\n InvalidKeyError,\n prefix,\n Prefix,\n validateKeyHash,\n ValidationResult,\n} from '@taquito/utils';\nimport { InsufficientBalance, InvalidMemo } from './error';\nimport { convertValueToBigNumber } from './sapling-tx-viewer/helpers';\nimport { InMemorySpendingKey } from './sapling-keys/in-memory-spending-key';\nimport { SaplingForger } from './sapling-forger/sapling-forger';\nimport { SaplingTransactionViewer } from './sapling-tx-viewer/sapling-transaction-viewer';\nimport {\n ChosenSpendableInputs,\n Input,\n ParametersSaplingTransaction,\n ParametersUnshieldedTransaction,\n SaplingContractDetails,\n SaplingContractId,\n} from './types';\nimport { SaplingTransactionBuilder } from './sapling-tx-builder/sapling-transactions-builder';\nimport { DEFAULT_BOUND_DATA, DEFAULT_MEMO } from './constants';\nimport { InMemoryProvingKey } from './sapling-keys/in-memory-proving-key';\n\nexport { SaplingTransactionViewer } from './sapling-tx-viewer/sapling-transaction-viewer';\nexport { InMemoryViewingKey } from './sapling-keys/in-memory-viewing-key';\nexport { InMemorySpendingKey } from './sapling-keys/in-memory-spending-key';\nexport { InMemoryProvingKey } from './sapling-keys/in-memory-proving-key';\n\n/**\n * @description Class that surfaces all of the sapling capability allowing to read from a sapling state and prepare transactions\n *\n * @param keys.saplingSigner Holds the sapling spending key\n * @param keys.saplingProver (Optional) Allows to generate the proofs with the proving key rather than the spending key\n * @param saplingContractDetails Contains the address of the sapling contract, the memo size, and an optional sapling id that must be defined if the sapling contract contains more than one sapling state\n * @param readProvider Allows to read data from the blockchain\n * @param packer (Optional) Allows packing data. Use the `MichelCodecPacker` by default.\n * @param saplingForger (Optional) Allows serializing the sapling transactions. Use the `SaplingForger` by default.\n * @param saplingTxBuilder (Optional) Allows to prepare the sapling transactions. Use the `SaplingTransactionBuilder` by default.\n * @example\n * ```\n * const inMemorySpendingKey = await InMemorySpendingKey.fromMnemonic('YOUR_MNEMONIC');\n * const readProvider = new RpcReadAdapter(new RpcClient('https://YOUR_PREFERRED_RPC_URL'))\n *\n * const saplingToolkit = new SaplingToolkit(\n * { saplingSigner: inMemorySpendingKey },\n * { contractAddress: SAPLING_CONTRACT_ADDRESS, memoSize: 8 },\n * readProvider\n * )\n * ```\n */\nexport class SaplingToolkit {\n #inMemorySpendingKey: InMemorySpendingKey;\n #saplingId: string | undefined;\n #contractAddress: string;\n #memoSize: number;\n #readProvider: TzReadProvider;\n #packer: Packer;\n #saplingForger: SaplingForger;\n #saplingTxBuilder: SaplingTransactionBuilder;\n #saplingTransactionViewer: SaplingTransactionViewer | undefined;\n constructor(\n keys: {\n saplingSigner: InMemorySpendingKey;\n saplingProver?: InMemoryProvingKey;\n },\n saplingContractDetails: SaplingContractDetails,\n readProvider: TzReadProvider,\n packer = new MichelCodecPacker(),\n saplingForger = new SaplingForger(),\n saplingTxBuilder = new SaplingTransactionBuilder(\n keys,\n saplingForger,\n saplingContractDetails,\n readProvider\n )\n ) {\n this.#inMemorySpendingKey = keys.saplingSigner;\n this.#saplingId = saplingContractDetails.saplingId;\n this.#contractAddress = saplingContractDetails.contractAddress;\n this.#memoSize = saplingContractDetails.memoSize;\n this.#readProvider = readProvider;\n this.#packer = packer;\n this.#saplingForger = saplingForger;\n this.#saplingTxBuilder = saplingTxBuilder;\n }\n\n /**\n * @description Get an instance of `SaplingTransactionViewer` which allows to retrieve and decrypt sapling transactions and calculate the unspent balance.\n */\n async getSaplingTransactionViewer() {\n let saplingTransactionViewer: SaplingTransactionViewer;\n\n if (!this.#saplingTransactionViewer) {\n const saplingViewingKey = await this.#inMemorySpendingKey.getSaplingViewingKeyProvider();\n saplingTransactionViewer = new SaplingTransactionViewer(\n saplingViewingKey,\n this.getSaplingContractId(),\n this.#readProvider\n );\n this.#saplingTransactionViewer = saplingTransactionViewer;\n }\n return this.#saplingTransactionViewer;\n }\n\n /**\n * @description Prepare a shielded transaction\n * @param shieldedTxParams `to` is the payment address that will receive the shielded tokens (zet).\n * `amount` is the amount of shielded tokens in tez by default.\n * `mutez` needs to be set to true if the amount of shielded tokens is in mutez.\n * `memo` is an empty string by default.\n * @returns a string representing the sapling transaction\n */\n async prepareShieldedTransaction(shieldedTxParams: ParametersSaplingTransaction[]) {\n const { formatedParams, totalAmount } = this.formatTransactionParams(\n shieldedTxParams,\n this.validateDestinationSaplingAddress\n );\n const root = await this.getRoot();\n\n const { inputs, outputs, signature, balance } = await this.#saplingTxBuilder.createShieldedTx(\n formatedParams,\n totalAmount,\n DEFAULT_BOUND_DATA\n );\n\n const forgedSaplingTx = this.#saplingForger.forgeSaplingTransaction({\n inputs,\n outputs,\n balance,\n root,\n boundData: DEFAULT_BOUND_DATA,\n signature,\n });\n\n return forgedSaplingTx.toString('hex');\n }\n\n /**\n * @description Prepare an unshielded transaction\n * @param unshieldedTxParams `to` is the Tezos address that will receive the unshielded tokens (tz1, tz2 or tz3).\n * `amount` is the amount of unshielded tokens in tez by default.\n * `mutez` needs to be set to true if the amount of unshielded tokens is in mutez.\n * @returns a string representing the sapling transaction.\n */\n async prepareUnshieldedTransaction(unshieldedTxParams: ParametersUnshieldedTransaction) {\n const { formatedParams, totalAmount } = this.formatTransactionParams(\n [unshieldedTxParams],\n this.validateDestinationImplicitAddress\n );\n\n const boundData = await this.createBoundData(formatedParams[0].to);\n\n const root = await this.getRoot();\n const chosenInputs = await this.selectInputsToSpend(new BigNumber(formatedParams[0].amount));\n\n const { inputs, outputs, signature, balance } = await this.#saplingTxBuilder.createSaplingTx(\n [],\n totalAmount,\n boundData,\n chosenInputs\n );\n\n const forgedSaplingTx = this.#saplingForger.forgeSaplingTransaction({\n inputs,\n outputs,\n balance,\n root,\n boundData,\n signature,\n });\n\n return forgedSaplingTx.toString('hex');\n }\n\n /**\n * @description Prepare a sapling transaction (zet to zet)\n * @param saplingTxParams `to` is the payment address that will receive the shielded tokens (zet).\n * `amount` is the amount of unshielded tokens in tez by default.\n * `mutez` needs to be set to true if the amount of unshielded tokens is in mutez.\n * `memo` is an empty string by default.\n * @returns a string representing the sapling transaction.\n */\n async prepareSaplingTransaction(saplingTxParams: ParametersSaplingTransaction[]) {\n const { formatedParams, totalAmount } = this.formatTransactionParams(\n saplingTxParams,\n this.validateDestinationSaplingAddress\n );\n\n const root = await this.getRoot();\n const chosenInputs = await this.selectInputsToSpend(totalAmount);\n const { inputs, outputs, signature, balance } = await this.#saplingTxBuilder.createSaplingTx(\n formatedParams,\n totalAmount,\n DEFAULT_BOUND_DATA,\n chosenInputs\n );\n\n const forgedSaplingTx = this.#saplingForger.forgeSaplingTransaction({\n inputs,\n outputs,\n balance,\n root,\n boundData: DEFAULT_BOUND_DATA,\n signature,\n });\n\n return forgedSaplingTx.toString('hex');\n }\n\n private formatTransactionParams(\n txParams: ParametersSaplingTransaction[],\n validateDestination: (to: string) => void\n ) {\n const formatedParams: {\n to: string;\n amount: string;\n memo: string;\n }[] = [];\n\n let totalAmount = new BigNumber(0);\n\n txParams.forEach((param) => {\n validateDestination(param.to);\n const amountMutez = param.mutez\n ? param.amount.toString()\n : format('tz', 'mutez', param.amount).toString();\n totalAmount = totalAmount.plus(new BigNumber(amountMutez));\n const memo = param.memo ?? DEFAULT_MEMO;\n if (memo.length > this.#memoSize) {\n throw new InvalidMemo(memo, 'The memo is too long.');\n }\n\n formatedParams.push({ to: param.to, amount: amountMutez, memo });\n });\n\n return { formatedParams, totalAmount };\n }\n\n private async getRoot() {\n if (this.#saplingId) {\n const { root } = await this.#readProvider.getSaplingDiffById({ id: this.#saplingId }, 'head');\n return root;\n } else {\n const { root } = await this.#readProvider.getSaplingDiffByContract(\n this.#contractAddress,\n 'head'\n );\n return root;\n }\n }\n private async createBoundData(destination: string) {\n const pref = destination.substr(0, 3);\n\n let pad: Buffer;\n switch (pref) {\n case 'tz1': {\n pad = Buffer.from('00', 'hex');\n break;\n }\n case 'tz2': {\n pad = Buffer.from('01', 'hex');\n break;\n }\n case 'tz3': {\n pad = Buffer.from('02', 'hex');\n break;\n }\n default: {\n throw new InvalidKeyError(destination, \"The 'to' parameter contains an invalid prefix.\");\n }\n }\n\n const decodedDestination = b58cdecode(destination, prefix[pref]);\n const padDestination = Buffer.concat([pad, Buffer.from(decodedDestination)]);\n const packedDestination = await this.#packer.packData({\n data: { bytes: padDestination.toString('hex') },\n type: { prim: 'bytes' },\n });\n\n return Buffer.from(packedDestination.packed, 'hex');\n }\n\n private validateDestinationImplicitAddress(to: string) {\n if (validateKeyHash(to) !== ValidationResult.VALID) {\n throw new InvalidAddressError(\n to,\n \"The 'to' parameter must be a Tezos public key hash (tz1, tz2, tz3).\"\n );\n }\n }\n\n private validateDestinationSaplingAddress(to: string) {\n if (!to.startsWith(Prefix.ZET1)) {\n throw new InvalidAddressError(to, \"The 'to' parameter must be a sapling address (zet1).\");\n }\n }\n\n private getSaplingContractId() {\n let saplingContractId: SaplingContractId;\n if (this.#saplingId) {\n saplingContractId = { saplingId: this.#saplingId };\n } else {\n saplingContractId = { contractAddress: this.#contractAddress };\n }\n return saplingContractId;\n }\n\n private async selectInputsToSpend(amountMutez: BigNumber): Promise<ChosenSpendableInputs> {\n const saplingTxViewer = await this.getSaplingTransactionViewer();\n\n const { incoming } = await saplingTxViewer.getIncomingAndOutgoingTransactionsRaw();\n\n const inputsToSpend: Input[] = [];\n let sumSelectedInputs = new BigNumber(0);\n\n incoming.forEach((input) => {\n if (!input.isSpent && sumSelectedInputs.isLessThan(amountMutez)) {\n const txAmount = convertValueToBigNumber(input.value);\n sumSelectedInputs = sumSelectedInputs.plus(txAmount);\n const { isSpent: _isSpent, ...rest } = input;\n inputsToSpend.push(rest);\n }\n });\n\n if (sumSelectedInputs.isLessThan(new BigNumber(amountMutez))) {\n throw new InsufficientBalance(sumSelectedInputs.toString(), amountMutez.toString());\n }\n return { inputsToSpend, sumSelectedInputs };\n }\n}\n"],"names":["bytes2Char","b58cencode","prefix","Prefix","BigNumber","toHexBuf","char2Bytes","_readProvider","sapling","blake","hex2buf","mergebuf","openSecretBox","hex2Bytes","num2PaddedHex","merkleHash","randomBytes","_inMemorySpendingKey","_saplingForger","_contractAddress","_saplingId","_memoSize","b58cdecode","secretBox","toBuffer","pbkdf2","bip39","ValidationResult","MichelCodecPacker","format","InvalidKeyError","validateKeyHash","InvalidAddressError"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taquito/sapling",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "16.0.0",
|
|
4
4
|
"description": "Allows reading and preparing sapling transactions",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"tezos",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
},
|
|
25
25
|
"license": "MIT",
|
|
26
26
|
"engines": {
|
|
27
|
-
"node": ">=
|
|
27
|
+
"node": ">=16"
|
|
28
28
|
},
|
|
29
29
|
"scripts": {
|
|
30
30
|
"test": "jest --coverage",
|
|
@@ -69,9 +69,9 @@
|
|
|
69
69
|
"@airgap/sapling-wasm": "0.0.9",
|
|
70
70
|
"@stablelib/nacl": "^1.0.3",
|
|
71
71
|
"@stablelib/random": "^1.0.1",
|
|
72
|
-
"@taquito/rpc": "^
|
|
73
|
-
"@taquito/taquito": "^
|
|
74
|
-
"@taquito/utils": "^
|
|
72
|
+
"@taquito/rpc": "^16.0.0",
|
|
73
|
+
"@taquito/taquito": "^16.0.0",
|
|
74
|
+
"@taquito/utils": "^16.0.0",
|
|
75
75
|
"bignumber.js": "^9.1.0",
|
|
76
76
|
"bip39": "^3.0.4",
|
|
77
77
|
"blakejs": "^1.2.1",
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
"devDependencies": {
|
|
82
82
|
"@rollup/plugin-json": "^4.1.0",
|
|
83
83
|
"@types/jest": "^26.0.23",
|
|
84
|
-
"@types/node": "^
|
|
84
|
+
"@types/node": "^16",
|
|
85
85
|
"@types/pbkdf2": "^3.1.0",
|
|
86
86
|
"@types/typedarray-to-buffer": "^4.0.0",
|
|
87
87
|
"@typescript-eslint/eslint-plugin": "^5.7.0",
|
|
@@ -107,5 +107,5 @@
|
|
|
107
107
|
"ts-node": "^10.4.0",
|
|
108
108
|
"typescript": "~4.1.5"
|
|
109
109
|
},
|
|
110
|
-
"gitHead": "
|
|
110
|
+
"gitHead": "2febd6cb324c08f1aecbde6500814a867c48d112"
|
|
111
111
|
}
|