@bitgo-beta/sdk-coin-sol 7.6.4-beta.78 → 7.6.4-beta.781
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/cjs/src/bigint-buffer-guard.d.ts.map +1 -0
- package/dist/cjs/src/bigint-buffer-guard.js +29 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/index.js +1 -1
- package/dist/{src → cjs/src}/lib/ataInitializationBuilder.d.ts +12 -1
- package/dist/cjs/src/lib/ataInitializationBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/ataInitializationBuilder.js +231 -0
- package/dist/cjs/src/lib/closeAtaBuilder.d.ts +55 -0
- package/dist/cjs/src/lib/closeAtaBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/closeAtaBuilder.js +162 -0
- package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts +136 -0
- package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/confidentialTransferBuilder.js +375 -0
- package/dist/{src → cjs/src}/lib/constants.d.ts +97 -2
- package/dist/cjs/src/lib/constants.d.ts.map +1 -0
- package/dist/cjs/src/lib/constants.js +277 -0
- package/dist/{src → cjs/src}/lib/customInstructionBuilder.d.ts +13 -2
- package/dist/cjs/src/lib/customInstructionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/customInstructionBuilder.js +392 -0
- package/dist/cjs/src/lib/explainTransactionWasm.d.ts +21 -0
- package/dist/cjs/src/lib/explainTransactionWasm.d.ts.map +1 -0
- package/dist/cjs/src/lib/explainTransactionWasm.js +304 -0
- package/dist/cjs/src/lib/iface.d.ts +538 -0
- package/dist/cjs/src/lib/iface.d.ts.map +1 -0
- package/dist/cjs/src/lib/iface.js +7 -0
- package/dist/{src → cjs/src}/lib/index.d.ts +9 -0
- package/dist/cjs/src/lib/index.d.ts.map +1 -0
- package/dist/cjs/src/lib/index.js +106 -0
- package/dist/{src → cjs/src}/lib/instructionParamsFactory.d.ts +3 -1
- package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/instructionParamsFactory.js +1284 -0
- package/dist/cjs/src/lib/jitoStakePoolOperations.d.ts.map +1 -0
- package/dist/cjs/src/lib/jitoStakePoolOperations.js +200 -0
- package/dist/{src → cjs/src}/lib/keyPair.d.ts +6 -0
- package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
- package/dist/cjs/src/lib/keyPair.js +112 -0
- package/dist/cjs/src/lib/messages/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/lib/messages/index.js +1 -1
- package/dist/cjs/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/messages/messageBuilderFactory.js +19 -0
- package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts +25 -0
- package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/recoverNestedAtaBuilder.js +90 -0
- package/dist/cjs/src/lib/scaledUiAmount.d.ts +30 -0
- package/dist/cjs/src/lib/scaledUiAmount.d.ts.map +1 -0
- package/dist/cjs/src/lib/scaledUiAmount.js +112 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/config.d.ts +21 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/config.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/config.js +34 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/instruction.d.ts +14 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/instruction.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/instruction.js +32 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/message.d.ts +27 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/message.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/message.js +196 -0
- package/dist/cjs/src/lib/serialization/compileTransactionMessage.d.ts +36 -0
- package/dist/cjs/src/lib/serialization/compileTransactionMessage.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/compileTransactionMessage.js +211 -0
- package/dist/cjs/src/lib/serialization/index.d.ts +5 -0
- package/dist/cjs/src/lib/serialization/index.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/index.js +27 -0
- package/dist/cjs/src/lib/serialization/parseWireTransaction.d.ts +9 -0
- package/dist/cjs/src/lib/serialization/parseWireTransaction.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/parseWireTransaction.js +58 -0
- package/dist/cjs/src/lib/serialization/wire-transaction.d.ts +14 -0
- package/dist/cjs/src/lib/serialization/wire-transaction.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/wire-transaction.js +51 -0
- package/dist/{src → cjs/src}/lib/solInstructionFactory.d.ts +1 -1
- package/dist/cjs/src/lib/solInstructionFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/solInstructionFactory.js +1119 -0
- package/dist/cjs/src/lib/stakingActivateBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingActivateBuilder.js +129 -0
- package/dist/cjs/src/lib/stakingAuthorizeBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingAuthorizeBuilder.js +89 -0
- package/dist/cjs/src/lib/stakingDeactivateBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingDeactivateBuilder.js +214 -0
- package/dist/cjs/src/lib/stakingDelegateBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingDelegateBuilder.js +126 -0
- package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.js +110 -0
- package/dist/cjs/src/lib/stakingWithdrawBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingWithdrawBuilder.js +87 -0
- package/dist/cjs/src/lib/token2022Resolve.d.ts +106 -0
- package/dist/cjs/src/lib/token2022Resolve.d.ts.map +1 -0
- package/dist/cjs/src/lib/token2022Resolve.js +199 -0
- package/dist/cjs/src/lib/tokenExtensions.d.ts +26 -0
- package/dist/cjs/src/lib/tokenExtensions.d.ts.map +1 -0
- package/dist/cjs/src/lib/tokenExtensions.js +109 -0
- package/dist/{src → cjs/src}/lib/tokenTransferBuilder.d.ts +27 -1
- package/dist/cjs/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/tokenTransferBuilder.js +237 -0
- package/dist/{src → cjs/src}/lib/transaction.d.ts +46 -1
- package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
- package/dist/cjs/src/lib/transaction.js +761 -0
- package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +42 -1
- package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionBuilder.js +462 -0
- package/dist/{src → cjs/src}/lib/transactionBuilderFactory.d.ts +37 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.js +249 -0
- package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/transferBuilder.js +81 -0
- package/dist/cjs/src/lib/transferBuilderV2.d.ts +69 -0
- package/dist/cjs/src/lib/transferBuilderV2.d.ts.map +1 -0
- package/dist/cjs/src/lib/transferBuilderV2.js +252 -0
- package/dist/{src → cjs/src}/lib/utils.d.ts +16 -0
- package/dist/cjs/src/lib/utils.d.ts.map +1 -0
- package/dist/cjs/src/lib/utils.js +681 -0
- package/dist/cjs/src/lib/v1CustomInstructionBuilder.d.ts +29 -0
- package/dist/cjs/src/lib/v1CustomInstructionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/v1CustomInstructionBuilder.js +36 -0
- package/dist/cjs/src/lib/v1PaymentBuilder.d.ts +36 -0
- package/dist/cjs/src/lib/v1PaymentBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/v1PaymentBuilder.js +70 -0
- package/dist/cjs/src/lib/v1TransactionBuilder.d.ts +253 -0
- package/dist/cjs/src/lib/v1TransactionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/v1TransactionBuilder.js +601 -0
- package/dist/cjs/src/lib/walletInitializationBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/walletInitializationBuilder.js +71 -0
- package/dist/cjs/src/register.d.ts +5 -0
- package/dist/cjs/src/register.d.ts.map +1 -0
- package/dist/cjs/src/register.js +29 -0
- package/dist/{src → cjs/src}/sol.d.ts +114 -3
- package/dist/cjs/src/sol.d.ts.map +1 -0
- package/dist/cjs/src/sol.js +1707 -0
- package/dist/{src → cjs/src}/solToken.d.ts +7 -0
- package/dist/cjs/src/solToken.d.ts.map +1 -0
- package/dist/cjs/src/solToken.js +79 -0
- package/dist/cjs/src/tsol.d.ts.map +1 -0
- package/dist/cjs/src/tsol.js +24 -0
- package/dist/{test → cjs/test}/fixtures/sol.d.ts.map +1 -1
- package/dist/cjs/test/fixtures/sol.js +1433 -0
- package/dist/{test → cjs/test}/resources/sol.d.ts +29 -29
- package/dist/cjs/test/resources/sol.d.ts.map +1 -0
- package/dist/cjs/test/resources/sol.js +320 -0
- package/dist/cjs/test/unit/ctEnablementVerify.d.ts +2 -0
- package/dist/cjs/test/unit/ctEnablementVerify.d.ts.map +1 -0
- package/dist/cjs/test/unit/ctEnablementVerify.js +143 -0
- package/dist/cjs/test/unit/explainTransactionWasm.d.ts +5 -0
- package/dist/cjs/test/unit/explainTransactionWasm.d.ts.map +1 -0
- package/dist/cjs/test/unit/explainTransactionWasm.js +66 -0
- package/dist/cjs/test/unit/fixtures/solBackupKey.d.ts.map +1 -0
- package/dist/cjs/test/unit/fixtures/solBackupKey.js +8 -0
- package/dist/cjs/test/unit/getBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/test/unit/getBuilderFactory.js +10 -0
- package/dist/cjs/test/unit/instructionParamsFactory.d.ts.map +1 -0
- package/dist/cjs/test/unit/instructionParamsFactory.js +425 -0
- package/dist/cjs/test/unit/instructionParamsFactory.staking.d.ts.map +1 -0
- package/dist/cjs/test/unit/instructionParamsFactory.staking.js +1059 -0
- package/dist/cjs/test/unit/jitoWasmVerification.d.ts +2 -0
- package/dist/cjs/test/unit/jitoWasmVerification.d.ts.map +1 -0
- package/dist/cjs/test/unit/jitoWasmVerification.js +78 -0
- package/dist/{test → cjs/test}/unit/keyPair.d.ts.map +1 -1
- package/dist/cjs/test/unit/keyPair.js +177 -0
- package/dist/cjs/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/test/unit/messages/messageBuilderFactory.js +118 -0
- package/dist/cjs/test/unit/messages/simpleMessageBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/messages/simpleMessageBuilder.js +194 -0
- package/dist/cjs/test/unit/register.d.ts +2 -0
- package/dist/cjs/test/unit/register.d.ts.map +1 -0
- package/dist/cjs/test/unit/register.js +65 -0
- package/dist/cjs/test/unit/scaledUiAmount.d.ts +2 -0
- package/dist/cjs/test/unit/scaledUiAmount.d.ts.map +1 -0
- package/dist/cjs/test/unit/scaledUiAmount.js +101 -0
- package/dist/cjs/test/unit/serialization/decodeV1Message.d.ts +2 -0
- package/dist/cjs/test/unit/serialization/decodeV1Message.d.ts.map +1 -0
- package/dist/cjs/test/unit/serialization/decodeV1Message.js +63 -0
- package/dist/cjs/test/unit/serialization/exportV1.d.ts +2 -0
- package/dist/cjs/test/unit/serialization/exportV1.d.ts.map +1 -0
- package/dist/cjs/test/unit/serialization/exportV1.js +21 -0
- package/dist/cjs/test/unit/serialization/parseWireTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/serialization/parseWireTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/serialization/parseWireTransaction.js +90 -0
- package/dist/cjs/test/unit/serialization/transactionV1.d.ts +2 -0
- package/dist/cjs/test/unit/serialization/transactionV1.d.ts.map +1 -0
- package/dist/cjs/test/unit/serialization/transactionV1.js +136 -0
- package/dist/{test → cjs/test}/unit/sol.d.ts.map +1 -1
- package/dist/cjs/test/unit/sol.js +5364 -0
- package/dist/cjs/test/unit/solInstructionFactory.d.ts.map +1 -0
- package/dist/cjs/test/unit/solInstructionFactory.js +623 -0
- package/dist/cjs/test/unit/solIntentVersion.d.ts +2 -0
- package/dist/cjs/test/unit/solIntentVersion.d.ts.map +1 -0
- package/dist/cjs/test/unit/solIntentVersion.js +59 -0
- package/dist/cjs/test/unit/solToken.d.ts.map +1 -0
- package/dist/cjs/test/unit/solToken.js +37 -0
- package/dist/cjs/test/unit/token2022Resolve.d.ts +2 -0
- package/dist/cjs/test/unit/token2022Resolve.d.ts.map +1 -0
- package/dist/cjs/test/unit/token2022Resolve.js +252 -0
- package/dist/cjs/test/unit/tokenExtensions.d.ts +2 -0
- package/dist/cjs/test/unit/tokenExtensions.d.ts.map +1 -0
- package/dist/cjs/test/unit/tokenExtensions.js +73 -0
- package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction.js +1129 -0
- package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.js +202 -0
- package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.js +508 -0
- package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.js +343 -0
- package/dist/cjs/test/unit/transactionBuilder/computeUnitLimit.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/computeUnitLimit.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/computeUnitLimit.js +346 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialEnablementV1.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialEnablementV1.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialEnablementV1.js +124 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.js +922 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.js +194 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.js +168 -0
- package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.js +724 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.js +430 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +157 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.js +384 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.js +224 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +259 -0
- package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.js +926 -0
- package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.js +495 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilder.js +302 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.js +910 -0
- package/dist/cjs/test/unit/transactionBuilder/v1PaymentBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/v1PaymentBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/v1PaymentBuilder.js +138 -0
- package/dist/cjs/test/unit/transactionBuilder/v1TransactionBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/v1TransactionBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/v1TransactionBuilder.js +331 -0
- package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.js +259 -0
- package/dist/{test → cjs/test}/unit/utils.d.ts.map +1 -1
- package/dist/cjs/test/unit/utils.js +663 -0
- package/dist/cjs/test/unit/versionedTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/versionedTransaction.js +207 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/bigint-buffer-guard.d.ts +1 -0
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/lib/ataInitializationBuilder.d.ts +58 -0
- package/dist/esm/lib/ataInitializationBuilder.d.ts.map +1 -0
- package/dist/esm/lib/ataInitializationBuilder.js +191 -0
- package/dist/esm/lib/closeAtaBuilder.d.ts +55 -0
- package/dist/esm/lib/closeAtaBuilder.d.ts.map +1 -0
- package/dist/esm/lib/closeAtaBuilder.js +155 -0
- package/dist/esm/lib/confidentialTransferBuilder.d.ts +136 -0
- package/dist/esm/lib/confidentialTransferBuilder.d.ts.map +1 -0
- package/dist/esm/lib/confidentialTransferBuilder.js +368 -0
- package/dist/esm/lib/constants.d.ts +235 -0
- package/dist/esm/lib/constants.d.ts.map +1 -0
- package/dist/esm/lib/constants.js +274 -0
- package/dist/esm/lib/customInstructionBuilder.d.ts +83 -0
- package/dist/{src → esm}/lib/customInstructionBuilder.d.ts.map +1 -1
- package/dist/esm/lib/customInstructionBuilder.js +385 -0
- package/dist/esm/lib/explainTransactionWasm.d.ts +21 -0
- package/dist/esm/lib/explainTransactionWasm.d.ts.map +1 -0
- package/dist/esm/lib/explainTransactionWasm.js +301 -0
- package/dist/esm/lib/iface.d.ts +538 -0
- package/dist/esm/lib/iface.d.ts.map +1 -0
- package/dist/esm/lib/iface.js +3 -0
- package/dist/esm/lib/index.d.ts +31 -0
- package/dist/esm/lib/index.d.ts.map +1 -0
- package/dist/esm/lib/index.js +31 -0
- package/dist/esm/lib/instructionParamsFactory.d.ts +14 -0
- package/dist/esm/lib/instructionParamsFactory.d.ts.map +1 -0
- package/dist/esm/lib/instructionParamsFactory.js +1276 -0
- package/dist/esm/lib/jitoStakePoolOperations.d.ts +113 -0
- package/dist/esm/lib/jitoStakePoolOperations.js +189 -0
- package/dist/esm/lib/keyPair.d.ts +32 -0
- package/dist/esm/lib/keyPair.d.ts.map +1 -0
- package/dist/esm/lib/keyPair.js +75 -0
- package/dist/esm/lib/messages/index.d.ts +2 -0
- package/dist/esm/lib/messages/index.js +2 -0
- package/dist/esm/lib/messages/messageBuilderFactory.d.ts +7 -0
- package/dist/{src → esm}/lib/messages/messageBuilderFactory.js +5 -9
- package/dist/esm/lib/recoverNestedAtaBuilder.d.ts +25 -0
- package/dist/esm/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
- package/dist/esm/lib/recoverNestedAtaBuilder.js +83 -0
- package/dist/esm/lib/scaledUiAmount.d.ts +30 -0
- package/dist/esm/lib/scaledUiAmount.d.ts.map +1 -0
- package/dist/esm/lib/scaledUiAmount.js +108 -0
- package/dist/esm/lib/serialization/codecs/v1/config.d.ts +21 -0
- package/dist/esm/lib/serialization/codecs/v1/config.d.ts.map +1 -0
- package/dist/esm/lib/serialization/codecs/v1/config.js +30 -0
- package/dist/esm/lib/serialization/codecs/v1/instruction.d.ts +14 -0
- package/dist/esm/lib/serialization/codecs/v1/instruction.d.ts.map +1 -0
- package/dist/esm/lib/serialization/codecs/v1/instruction.js +29 -0
- package/dist/esm/lib/serialization/codecs/v1/message.d.ts +27 -0
- package/dist/esm/lib/serialization/codecs/v1/message.d.ts.map +1 -0
- package/dist/esm/lib/serialization/codecs/v1/message.js +188 -0
- package/dist/esm/lib/serialization/compileTransactionMessage.d.ts +36 -0
- package/dist/esm/lib/serialization/compileTransactionMessage.d.ts.map +1 -0
- package/dist/esm/lib/serialization/compileTransactionMessage.js +208 -0
- package/dist/esm/lib/serialization/index.d.ts +5 -0
- package/dist/esm/lib/serialization/index.d.ts.map +1 -0
- package/dist/esm/lib/serialization/index.js +5 -0
- package/dist/esm/lib/serialization/parseWireTransaction.d.ts +9 -0
- package/dist/esm/lib/serialization/parseWireTransaction.d.ts.map +1 -0
- package/dist/esm/lib/serialization/parseWireTransaction.js +50 -0
- package/dist/esm/lib/serialization/wire-transaction.d.ts +14 -0
- package/dist/esm/lib/serialization/wire-transaction.d.ts.map +1 -0
- package/dist/esm/lib/serialization/wire-transaction.js +48 -0
- package/dist/esm/lib/solInstructionFactory.d.ts +10 -0
- package/dist/esm/lib/solInstructionFactory.d.ts.map +1 -0
- package/dist/esm/lib/solInstructionFactory.js +1113 -0
- package/dist/esm/lib/stakingActivateBuilder.d.ts +59 -0
- package/dist/{src → esm}/lib/stakingActivateBuilder.d.ts.map +1 -1
- package/dist/esm/lib/stakingActivateBuilder.js +122 -0
- package/dist/esm/lib/stakingAuthorizeBuilder.d.ts +43 -0
- package/dist/esm/lib/stakingAuthorizeBuilder.js +82 -0
- package/dist/esm/lib/stakingDeactivateBuilder.d.ts +81 -0
- package/dist/{src → esm}/lib/stakingDeactivateBuilder.d.ts.map +1 -1
- package/dist/esm/lib/stakingDeactivateBuilder.js +207 -0
- package/dist/esm/lib/stakingDelegateBuilder.d.ts +42 -0
- package/dist/{src → esm}/lib/stakingDelegateBuilder.d.ts.map +1 -1
- package/dist/esm/lib/stakingDelegateBuilder.js +119 -0
- package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.d.ts +33 -0
- package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.js +103 -0
- package/dist/esm/lib/stakingWithdrawBuilder.d.ts +31 -0
- package/dist/{src → esm}/lib/stakingWithdrawBuilder.d.ts.map +1 -1
- package/dist/esm/lib/stakingWithdrawBuilder.js +80 -0
- package/dist/esm/lib/token2022Resolve.d.ts +106 -0
- package/dist/esm/lib/token2022Resolve.d.ts.map +1 -0
- package/dist/esm/lib/token2022Resolve.js +194 -0
- package/dist/esm/lib/tokenExtensions.d.ts +26 -0
- package/dist/esm/lib/tokenExtensions.d.ts.map +1 -0
- package/dist/esm/lib/tokenExtensions.js +103 -0
- package/dist/esm/lib/tokenTransferBuilder.d.ts +67 -0
- package/dist/esm/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/esm/lib/tokenTransferBuilder.js +230 -0
- package/dist/esm/lib/transaction.d.ts +148 -0
- package/dist/esm/lib/transaction.d.ts.map +1 -0
- package/dist/esm/lib/transaction.js +754 -0
- package/dist/esm/lib/transactionBuilder.d.ts +169 -0
- package/dist/esm/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/esm/lib/transactionBuilder.js +455 -0
- package/dist/esm/lib/transactionBuilderFactory.d.ts +152 -0
- package/dist/esm/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/esm/lib/transactionBuilderFactory.js +245 -0
- package/dist/esm/lib/transferBuilder.d.ts +26 -0
- package/dist/{src → esm}/lib/transferBuilder.d.ts.map +1 -1
- package/dist/esm/lib/transferBuilder.js +74 -0
- package/dist/esm/lib/transferBuilderV2.d.ts +69 -0
- package/dist/esm/lib/transferBuilderV2.d.ts.map +1 -0
- package/dist/esm/lib/transferBuilderV2.js +245 -0
- package/dist/esm/lib/utils.d.ts +216 -0
- package/dist/{src → esm}/lib/utils.d.ts.map +1 -1
- package/dist/esm/lib/utils.js +642 -0
- package/dist/esm/lib/v1CustomInstructionBuilder.d.ts +29 -0
- package/dist/esm/lib/v1CustomInstructionBuilder.d.ts.map +1 -0
- package/dist/esm/lib/v1CustomInstructionBuilder.js +32 -0
- package/dist/esm/lib/v1PaymentBuilder.d.ts +36 -0
- package/dist/esm/lib/v1PaymentBuilder.d.ts.map +1 -0
- package/dist/esm/lib/v1PaymentBuilder.js +63 -0
- package/dist/esm/lib/v1TransactionBuilder.d.ts +253 -0
- package/dist/esm/lib/v1TransactionBuilder.d.ts.map +1 -0
- package/dist/esm/lib/v1TransactionBuilder.js +591 -0
- package/dist/esm/lib/walletInitializationBuilder.d.ts +26 -0
- package/dist/esm/lib/walletInitializationBuilder.js +64 -0
- package/dist/esm/register.d.ts +5 -0
- package/dist/esm/register.d.ts.map +1 -0
- package/dist/esm/register.js +24 -0
- package/dist/esm/sol.d.ts +351 -0
- package/dist/esm/sol.d.ts.map +1 -0
- package/dist/esm/sol.js +1666 -0
- package/dist/esm/solToken.d.ts +44 -0
- package/dist/esm/solToken.d.ts.map +1 -0
- package/dist/esm/solToken.js +75 -0
- package/dist/esm/tsol.d.ts +11 -0
- package/dist/esm/tsol.js +20 -0
- package/package.json +37 -17
- package/LICENSE +0 -191
- package/dist/src/config/token2022StaticConfig.d.ts +0 -3
- package/dist/src/config/token2022StaticConfig.d.ts.map +0 -1
- package/dist/src/config/token2022StaticConfig.js +0 -50
- package/dist/src/lib/ataInitializationBuilder.d.ts.map +0 -1
- package/dist/src/lib/ataInitializationBuilder.js +0 -196
- package/dist/src/lib/closeAtaBuilder.d.ts +0 -19
- package/dist/src/lib/closeAtaBuilder.d.ts.map +0 -1
- package/dist/src/lib/closeAtaBuilder.js +0 -69
- package/dist/src/lib/constants.d.ts.map +0 -1
- package/dist/src/lib/constants.js +0 -171
- package/dist/src/lib/customInstructionBuilder.js +0 -289
- package/dist/src/lib/iface.d.ts +0 -244
- package/dist/src/lib/iface.d.ts.map +0 -1
- package/dist/src/lib/iface.js +0 -7
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/index.js +0 -77
- package/dist/src/lib/instructionParamsFactory.d.ts.map +0 -1
- package/dist/src/lib/instructionParamsFactory.js +0 -1036
- package/dist/src/lib/jitoStakePoolOperations.js +0 -200
- package/dist/src/lib/keyPair.d.ts.map +0 -1
- package/dist/src/lib/keyPair.js +0 -63
- package/dist/src/lib/solInstructionFactory.d.ts.map +0 -1
- package/dist/src/lib/solInstructionFactory.js +0 -572
- package/dist/src/lib/stakingActivateBuilder.js +0 -120
- package/dist/src/lib/stakingAuthorizeBuilder.js +0 -89
- package/dist/src/lib/stakingDeactivateBuilder.js +0 -208
- package/dist/src/lib/stakingDelegateBuilder.js +0 -120
- package/dist/src/lib/stakingRawMsgAuthorizeBuilder.js +0 -110
- package/dist/src/lib/stakingWithdrawBuilder.js +0 -78
- package/dist/src/lib/token2022Config.d.ts +0 -44
- package/dist/src/lib/token2022Config.d.ts.map +0 -1
- package/dist/src/lib/token2022Config.js +0 -27
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +0 -1
- package/dist/src/lib/tokenTransferBuilder.js +0 -188
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -595
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -380
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilderFactory.js +0 -202
- package/dist/src/lib/transferBuilder.js +0 -70
- package/dist/src/lib/transferBuilderV2.d.ts +0 -43
- package/dist/src/lib/transferBuilderV2.d.ts.map +0 -1
- package/dist/src/lib/transferBuilderV2.js +0 -210
- package/dist/src/lib/utils.js +0 -589
- package/dist/src/lib/walletInitializationBuilder.js +0 -71
- package/dist/src/register.d.ts +0 -3
- package/dist/src/register.d.ts.map +0 -1
- package/dist/src/register.js +0 -15
- package/dist/src/sol.d.ts.map +0 -1
- package/dist/src/sol.js +0 -1324
- package/dist/src/solToken.d.ts.map +0 -1
- package/dist/src/solToken.js +0 -69
- package/dist/src/tsol.js +0 -24
- package/dist/test/fixtures/sol.js +0 -1433
- package/dist/test/resources/sol.d.ts.map +0 -1
- package/dist/test/resources/sol.js +0 -320
- package/dist/test/unit/fixtures/solBackupKey.d.ts.map +0 -1
- package/dist/test/unit/fixtures/solBackupKey.js +0 -8
- package/dist/test/unit/getBuilderFactory.d.ts.map +0 -1
- package/dist/test/unit/getBuilderFactory.js +0 -10
- package/dist/test/unit/instructionParamsFactory.d.ts.map +0 -1
- package/dist/test/unit/instructionParamsFactory.js +0 -412
- package/dist/test/unit/instructionParamsFactory.staking.d.ts.map +0 -1
- package/dist/test/unit/instructionParamsFactory.staking.js +0 -1059
- package/dist/test/unit/keyPair.js +0 -177
- package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +0 -1
- package/dist/test/unit/messages/messageBuilderFactory.js +0 -118
- package/dist/test/unit/messages/simpleMessageBuilder.d.ts.map +0 -1
- package/dist/test/unit/messages/simpleMessageBuilder.js +0 -194
- package/dist/test/unit/sol.js +0 -3180
- package/dist/test/unit/solInstructionFactory.d.ts.map +0 -1
- package/dist/test/unit/solInstructionFactory.js +0 -454
- package/dist/test/unit/solToken.d.ts.map +0 -1
- package/dist/test/unit/solToken.js +0 -31
- package/dist/test/unit/transaction.d.ts.map +0 -1
- package/dist/test/unit/transaction.js +0 -983
- package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.js +0 -202
- package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/ataInitBuilder.js +0 -471
- package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/customInstructionBuilder.js +0 -413
- package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/stakingActivateBuilder.js +0 -430
- package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +0 -157
- package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.js +0 -384
- package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.js +0 -224
- package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +0 -259
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +0 -787
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/transactionBuilder.js +0 -495
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/transferBuilder.js +0 -286
- package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/transferBuilderV2.js +0 -862
- package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/walletInitBuilder.js +0 -259
- package/dist/test/unit/utils.js +0 -517
- package/dist/test/unit/versionedTransaction.d.ts.map +0 -1
- package/dist/test/unit/versionedTransaction.js +0 -207
- package/dist/tsconfig.tsbuildinfo +0 -1
- /package/dist/{src → cjs/src}/bigint-buffer-guard.d.ts +0 -0
- /package/dist/{src → cjs/src}/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/jitoStakePoolOperations.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/messages/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/messages/messageBuilderFactory.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingActivateBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingAuthorizeBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingDeactivateBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingDelegateBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingWithdrawBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/transferBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/walletInitializationBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/tsol.d.ts +0 -0
- /package/dist/{test → cjs/test}/fixtures/sol.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/fixtures/solBackupKey.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/getBuilderFactory.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/instructionParamsFactory.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/instructionParamsFactory.staking.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/keyPair.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/messages/messageBuilderFactory.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/messages/simpleMessageBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/sol.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/solInstructionFactory.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/solToken.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transaction.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/StakingWithdrawBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/ataInitBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/customInstructionBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingActivateBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDeactivateBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDelegateBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/tokenTransferBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/transactionBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilderV2.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/walletInitBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/utils.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/versionedTransaction.d.ts +0 -0
- /package/dist/{src → esm}/bigint-buffer-guard.d.ts.map +0 -0
- /package/dist/{src → esm}/bigint-buffer-guard.js +0 -0
- /package/dist/{src → esm}/index.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/jitoStakePoolOperations.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/messages/index.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/messages/messageBuilderFactory.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/stakingAuthorizeBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/walletInitializationBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/tsol.d.ts.map +0 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
2
|
+
import { SolTransactionVersion, SolV1TransactionConfig, TransactionType } from '@bitgo-beta/sdk-core';
|
|
3
|
+
import { Transaction } from './transaction';
|
|
4
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
5
|
+
import { ApplyPendingBalance, AtaInit, ConfidentialDeposit, ConfidentialTransfer, ConfidentialWithdraw, ConfigureConfidentialTransferAccount, VerifyEqualityProof, VerifyPubkeyValidity, VerifyRangeProof, VerifyValidityProof } from './iface';
|
|
6
|
+
/**
|
|
7
|
+
* Builder for Token-2022 confidential transfer transactions.
|
|
8
|
+
*
|
|
9
|
+
* Provides type-safe fluent setters for the following CT instructions:
|
|
10
|
+
* - CreateAssociatedTokenAccount (CT enablement: ATA under Token-2022 before ConfigureAccount)
|
|
11
|
+
* - ConfigureAccount (standalone, with VerifyPubkeyValidity proof)
|
|
12
|
+
* - ApplyPendingBalance (always instruction #1 in v1 spend txs, idempotent)
|
|
13
|
+
* - Deposit (public → confidential conversion)
|
|
14
|
+
* - Withdraw (confidential → public conversion, with equality + range proofs)
|
|
15
|
+
* - Transfer (confidential → confidential, with equality + validity + range proofs)
|
|
16
|
+
* - VerifyPubkeyValidity / VerifyEquality / VerifyValidity / VerifyRange proof instructions
|
|
17
|
+
*
|
|
18
|
+
* Instruction builders are v0/v1-agnostic: they produce instruction data and
|
|
19
|
+
* account metas only. The caller (Wallet Platform) assembles them into v1
|
|
20
|
+
* transactions in the correct order.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* const builder = factory.getConfidentialTransferBuilder();
|
|
25
|
+
* builder.nonce(recentBlockhash).sender(payer);
|
|
26
|
+
* builder.configureAccount({ tokenAddress, mintAddress, authorityAddress, ... });
|
|
27
|
+
* builder.verifyPubkeyValidity({ proofData });
|
|
28
|
+
* const tx = await builder.build();
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare class ConfidentialTransferBuilder extends TransactionBuilder {
|
|
32
|
+
private _ctInstructions;
|
|
33
|
+
private _version?;
|
|
34
|
+
private _v1TransactionConfig?;
|
|
35
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
36
|
+
protected get transactionType(): TransactionType;
|
|
37
|
+
/**
|
|
38
|
+
* Set the Solana transaction version.
|
|
39
|
+
*
|
|
40
|
+
* Defaults to legacy until set. When set to `1`, the builder assembles a v1
|
|
41
|
+
* (SIMD-0296/0385) transaction: version byte `0x81`, an inline `transactionConfig`
|
|
42
|
+
* instead of ComputeBudget instructions, no address lookup tables, and a
|
|
43
|
+
* message-first wire format with signatures appended.
|
|
44
|
+
*
|
|
45
|
+
* @param version - the transaction version (0 = v0, 1 = v1)
|
|
46
|
+
* @returns {this} This builder
|
|
47
|
+
*/
|
|
48
|
+
version(version: SolTransactionVersion): this;
|
|
49
|
+
/**
|
|
50
|
+
* Set the v1 transaction config (compute unit limit, heap size, loaded accounts
|
|
51
|
+
* data size limit, and priority fee as total lamports). Required when
|
|
52
|
+
* `version(1)` is set.
|
|
53
|
+
*
|
|
54
|
+
* @param config - the v1 transaction config
|
|
55
|
+
* @returns {this} This builder
|
|
56
|
+
*/
|
|
57
|
+
transactionConfig(config: SolV1TransactionConfig): this;
|
|
58
|
+
/**
|
|
59
|
+
* Override the zk-elgamal-proof program id.
|
|
60
|
+
*
|
|
61
|
+
* Defaults to the canonical on-chain program id (`ZkE1Gama1Proof111...`)
|
|
62
|
+
* which is the same across mainnet, devnet, and testnet. Override only
|
|
63
|
+
* when targeting a custom deployment.
|
|
64
|
+
*
|
|
65
|
+
* @param programId - base58 encoded program id
|
|
66
|
+
*/
|
|
67
|
+
zkProofProgramId(programId: string): this;
|
|
68
|
+
/** @inheritDoc */
|
|
69
|
+
initBuilder(tx: Transaction): void;
|
|
70
|
+
/**
|
|
71
|
+
* Add a CreateAssociatedTokenAccount (idempotent) instruction to the transaction.
|
|
72
|
+
* CT enablement only — the ATA must exist before ConfigureAccount; add this
|
|
73
|
+
* first when the ATA is not yet on-chain. For Token-2022 mints pass
|
|
74
|
+
* `programId` so the ATA is created under the Token-2022 program.
|
|
75
|
+
*/
|
|
76
|
+
createAta(params: AtaInit['params']): this;
|
|
77
|
+
/**
|
|
78
|
+
* Add a ConfigureAccount instruction to the transaction.
|
|
79
|
+
* One-time ATA setup — registers ElGamal pubkey + AES zero ciphertext.
|
|
80
|
+
* Must be accompanied by a VerifyPubkeyValidity proof instruction.
|
|
81
|
+
*/
|
|
82
|
+
configureAccount(params: ConfigureConfidentialTransferAccount['params']): this;
|
|
83
|
+
/**
|
|
84
|
+
* Add an ApplyPendingBalance instruction to the transaction.
|
|
85
|
+
* Credits pending balance into available balance. Idempotent (no-op if 0 pending).
|
|
86
|
+
* In v1 transactions, this should always be instruction #1.
|
|
87
|
+
*/
|
|
88
|
+
applyPendingBalance(params: ApplyPendingBalance['params']): this;
|
|
89
|
+
/**
|
|
90
|
+
* Add a Deposit instruction to the transaction.
|
|
91
|
+
* Moves public SPL tokens into confidential pending balance. No proof required.
|
|
92
|
+
*/
|
|
93
|
+
confidentialDeposit(params: ConfidentialDeposit['params']): this;
|
|
94
|
+
/**
|
|
95
|
+
* Add a Withdraw instruction to the transaction.
|
|
96
|
+
* Moves confidential available balance to public balance.
|
|
97
|
+
* Requires equality + range proof verification instructions.
|
|
98
|
+
*/
|
|
99
|
+
confidentialWithdraw(params: ConfidentialWithdraw['params']): this;
|
|
100
|
+
/**
|
|
101
|
+
* Add a confidential Transfer instruction to the transaction.
|
|
102
|
+
* Requires equality + ciphertext validity + range proof verification instructions.
|
|
103
|
+
*/
|
|
104
|
+
confidentialTransfer(params: ConfidentialTransfer['params']): this;
|
|
105
|
+
/**
|
|
106
|
+
* Add a VerifyPubkeyValidity proof instruction (used with ConfigureAccount).
|
|
107
|
+
*/
|
|
108
|
+
verifyPubkeyValidity(params: VerifyPubkeyValidity['params']): this;
|
|
109
|
+
/**
|
|
110
|
+
* Add a VerifyCiphertextCommitmentEquality proof instruction (used with Transfer and Withdraw).
|
|
111
|
+
*/
|
|
112
|
+
verifyEqualityProof(params: VerifyEqualityProof['params']): this;
|
|
113
|
+
/**
|
|
114
|
+
* Add a VerifyBatchedGroupedCiphertext3HandlesValidity proof instruction (used with Transfer).
|
|
115
|
+
*/
|
|
116
|
+
verifyValidityProof(params: VerifyValidityProof['params']): this;
|
|
117
|
+
/**
|
|
118
|
+
* Add a VerifyBatchedRangeProofU128 proof instruction (used with Transfer).
|
|
119
|
+
*/
|
|
120
|
+
verifyRangeProof(params: VerifyRangeProof['params']): this;
|
|
121
|
+
/** @inheritdoc */
|
|
122
|
+
protected buildImplementation(): Promise<Transaction>;
|
|
123
|
+
/**
|
|
124
|
+
* Build a v1 (SIMD-0296/0385) confidential transfer transaction.
|
|
125
|
+
*
|
|
126
|
+
* Assembles the CT instructions via the shared instruction factory, compiles
|
|
127
|
+
* and serializes a v1 message with the inline transaction config, signs the
|
|
128
|
+
* message bytes with the builder's signers, and stores the resulting wire
|
|
129
|
+
* bytes for broadcast. Also populates a metadata-only SolTransaction so the
|
|
130
|
+
* transaction JSON and input/output extraction remain usable.
|
|
131
|
+
*
|
|
132
|
+
* @returns {Transaction} The built transaction holding the v1 wire bytes
|
|
133
|
+
*/
|
|
134
|
+
private buildV1;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=confidentialTransferBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confidentialTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../src/lib/confidentialTransferBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAyB,qBAAqB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG7H,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EACL,mBAAmB,EACnB,OAAO,EACP,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,oCAAoC,EAGpC,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAQjB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,2BAA4B,SAAQ,kBAAkB;IACjE,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,CAAwB;IACzC,OAAO,CAAC,oBAAoB,CAAC,CAAyB;gBAE1C,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;;;;;;;OAUG;IACH,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAK7C;;;;;;;OAOG;IACH,iBAAiB,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI;IAKvD;;;;;;;;OAQG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAMzC,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAwBlC;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;IAwB1C;;;;OAIG;IACH,gBAAgB,CAAC,MAAM,EAAE,oCAAoC,CAAC,QAAQ,CAAC,GAAG,IAAI;IAe9E;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAahE;;;OAGG;IACH,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAahE;;;;OAIG;IACH,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAclE;;;OAGG;IACH,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAgBlE;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAQlE;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAQhE;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAQhE;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GAAG,IAAI;IAQ1D,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAY3D;;;;;;;;;;OAUG;IACH,OAAO,CAAC,OAAO;CAwGhB"}
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ConfidentialTransferBuilder = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
9
|
+
const tweetnacl_1 = __importDefault(require("tweetnacl"));
|
|
10
|
+
const transaction_1 = require("./transaction");
|
|
11
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
12
|
+
const constants_1 = require("./constants");
|
|
13
|
+
const compileTransactionMessage_1 = require("./serialization/compileTransactionMessage");
|
|
14
|
+
const message_1 = require("./serialization/codecs/v1/message");
|
|
15
|
+
const wire_transaction_1 = require("./serialization/wire-transaction");
|
|
16
|
+
const solInstructionFactory_1 = require("./solInstructionFactory");
|
|
17
|
+
const v1TransactionBuilder_1 = require("./v1TransactionBuilder");
|
|
18
|
+
const assert_1 = __importDefault(require("assert"));
|
|
19
|
+
/**
|
|
20
|
+
* Builder for Token-2022 confidential transfer transactions.
|
|
21
|
+
*
|
|
22
|
+
* Provides type-safe fluent setters for the following CT instructions:
|
|
23
|
+
* - CreateAssociatedTokenAccount (CT enablement: ATA under Token-2022 before ConfigureAccount)
|
|
24
|
+
* - ConfigureAccount (standalone, with VerifyPubkeyValidity proof)
|
|
25
|
+
* - ApplyPendingBalance (always instruction #1 in v1 spend txs, idempotent)
|
|
26
|
+
* - Deposit (public → confidential conversion)
|
|
27
|
+
* - Withdraw (confidential → public conversion, with equality + range proofs)
|
|
28
|
+
* - Transfer (confidential → confidential, with equality + validity + range proofs)
|
|
29
|
+
* - VerifyPubkeyValidity / VerifyEquality / VerifyValidity / VerifyRange proof instructions
|
|
30
|
+
*
|
|
31
|
+
* Instruction builders are v0/v1-agnostic: they produce instruction data and
|
|
32
|
+
* account metas only. The caller (Wallet Platform) assembles them into v1
|
|
33
|
+
* transactions in the correct order.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* const builder = factory.getConfidentialTransferBuilder();
|
|
38
|
+
* builder.nonce(recentBlockhash).sender(payer);
|
|
39
|
+
* builder.configureAccount({ tokenAddress, mintAddress, authorityAddress, ... });
|
|
40
|
+
* builder.verifyPubkeyValidity({ proofData });
|
|
41
|
+
* const tx = await builder.build();
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
class ConfidentialTransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
45
|
+
constructor(_coinConfig) {
|
|
46
|
+
super(_coinConfig);
|
|
47
|
+
this._ctInstructions = [];
|
|
48
|
+
this._transaction = new transaction_1.Transaction(_coinConfig);
|
|
49
|
+
}
|
|
50
|
+
get transactionType() {
|
|
51
|
+
return sdk_core_1.TransactionType.ConfidentialTransfer;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Set the Solana transaction version.
|
|
55
|
+
*
|
|
56
|
+
* Defaults to legacy until set. When set to `1`, the builder assembles a v1
|
|
57
|
+
* (SIMD-0296/0385) transaction: version byte `0x81`, an inline `transactionConfig`
|
|
58
|
+
* instead of ComputeBudget instructions, no address lookup tables, and a
|
|
59
|
+
* message-first wire format with signatures appended.
|
|
60
|
+
*
|
|
61
|
+
* @param version - the transaction version (0 = v0, 1 = v1)
|
|
62
|
+
* @returns {this} This builder
|
|
63
|
+
*/
|
|
64
|
+
version(version) {
|
|
65
|
+
this._version = version;
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Set the v1 transaction config (compute unit limit, heap size, loaded accounts
|
|
70
|
+
* data size limit, and priority fee as total lamports). Required when
|
|
71
|
+
* `version(1)` is set.
|
|
72
|
+
*
|
|
73
|
+
* @param config - the v1 transaction config
|
|
74
|
+
* @returns {this} This builder
|
|
75
|
+
*/
|
|
76
|
+
transactionConfig(config) {
|
|
77
|
+
this._v1TransactionConfig = config;
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Override the zk-elgamal-proof program id.
|
|
82
|
+
*
|
|
83
|
+
* Defaults to the canonical on-chain program id (`ZkE1Gama1Proof111...`)
|
|
84
|
+
* which is the same across mainnet, devnet, and testnet. Override only
|
|
85
|
+
* when targeting a custom deployment.
|
|
86
|
+
*
|
|
87
|
+
* @param programId - base58 encoded program id
|
|
88
|
+
*/
|
|
89
|
+
zkProofProgramId(programId) {
|
|
90
|
+
(0, assert_1.default)(programId, 'Missing programId param');
|
|
91
|
+
this._zkProofProgramId = programId;
|
|
92
|
+
return this;
|
|
93
|
+
}
|
|
94
|
+
/** @inheritDoc */
|
|
95
|
+
initBuilder(tx) {
|
|
96
|
+
super.initBuilder(tx);
|
|
97
|
+
this._ctInstructions = [];
|
|
98
|
+
for (const instruction of this._instructionsData) {
|
|
99
|
+
switch (instruction.type) {
|
|
100
|
+
case constants_1.InstructionBuilderTypes.CreateAssociatedTokenAccount:
|
|
101
|
+
case constants_1.InstructionBuilderTypes.ReallocateConfidentialTransferAccount:
|
|
102
|
+
case constants_1.InstructionBuilderTypes.ConfigureConfidentialTransferAccount:
|
|
103
|
+
case constants_1.InstructionBuilderTypes.ApplyPendingBalance:
|
|
104
|
+
case constants_1.InstructionBuilderTypes.ConfidentialDeposit:
|
|
105
|
+
case constants_1.InstructionBuilderTypes.ConfidentialWithdraw:
|
|
106
|
+
case constants_1.InstructionBuilderTypes.ConfidentialTransfer:
|
|
107
|
+
case constants_1.InstructionBuilderTypes.VerifyPubkeyValidity:
|
|
108
|
+
case constants_1.InstructionBuilderTypes.VerifyEqualityProof:
|
|
109
|
+
case constants_1.InstructionBuilderTypes.VerifyValidityProof:
|
|
110
|
+
case constants_1.InstructionBuilderTypes.VerifyRangeProof:
|
|
111
|
+
this._ctInstructions.push(instruction);
|
|
112
|
+
break;
|
|
113
|
+
default:
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Add a CreateAssociatedTokenAccount (idempotent) instruction to the transaction.
|
|
120
|
+
* CT enablement only — the ATA must exist before ConfigureAccount; add this
|
|
121
|
+
* first when the ATA is not yet on-chain. For Token-2022 mints pass
|
|
122
|
+
* `programId` so the ATA is created under the Token-2022 program.
|
|
123
|
+
*/
|
|
124
|
+
createAta(params) {
|
|
125
|
+
(0, assert_1.default)(params.mintAddress, 'Missing mintAddress param');
|
|
126
|
+
(0, assert_1.default)(params.ataAddress, 'Missing ataAddress param');
|
|
127
|
+
(0, assert_1.default)(params.ownerAddress, 'Missing ownerAddress param');
|
|
128
|
+
(0, assert_1.default)(params.payerAddress, 'Missing payerAddress param');
|
|
129
|
+
this._ctInstructions.push({
|
|
130
|
+
type: constants_1.InstructionBuilderTypes.CreateAssociatedTokenAccount,
|
|
131
|
+
params,
|
|
132
|
+
});
|
|
133
|
+
// ConfigureAccount requires the ConfidentialTransferAccount extension, which an ATA does
|
|
134
|
+
// not carry — Reallocate adds it and must run before ConfigureAccount.
|
|
135
|
+
this._ctInstructions.push({
|
|
136
|
+
type: constants_1.InstructionBuilderTypes.ReallocateConfidentialTransferAccount,
|
|
137
|
+
params: {
|
|
138
|
+
tokenAddress: params.ataAddress,
|
|
139
|
+
payerAddress: params.payerAddress,
|
|
140
|
+
ownerAddress: params.ownerAddress,
|
|
141
|
+
programId: params.programId,
|
|
142
|
+
},
|
|
143
|
+
});
|
|
144
|
+
return this;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Add a ConfigureAccount instruction to the transaction.
|
|
148
|
+
* One-time ATA setup — registers ElGamal pubkey + AES zero ciphertext.
|
|
149
|
+
* Must be accompanied by a VerifyPubkeyValidity proof instruction.
|
|
150
|
+
*/
|
|
151
|
+
configureAccount(params) {
|
|
152
|
+
(0, assert_1.default)(params.tokenAddress, 'Missing tokenAddress param');
|
|
153
|
+
(0, assert_1.default)(params.mintAddress, 'Missing mintAddress param');
|
|
154
|
+
(0, assert_1.default)(params.authorityAddress, 'Missing authorityAddress param');
|
|
155
|
+
(0, assert_1.default)(params.elgamalPubkey, 'Missing elgamalPubkey param');
|
|
156
|
+
(0, assert_1.default)(params.decryptableZeroBalance, 'Missing decryptableZeroBalance param');
|
|
157
|
+
(0, assert_1.default)(params.maximumPendingBalanceCreditCounter, 'Missing maximumPendingBalanceCreditCounter param');
|
|
158
|
+
this._ctInstructions.push({
|
|
159
|
+
type: constants_1.InstructionBuilderTypes.ConfigureConfidentialTransferAccount,
|
|
160
|
+
params,
|
|
161
|
+
});
|
|
162
|
+
return this;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Add an ApplyPendingBalance instruction to the transaction.
|
|
166
|
+
* Credits pending balance into available balance. Idempotent (no-op if 0 pending).
|
|
167
|
+
* In v1 transactions, this should always be instruction #1.
|
|
168
|
+
*/
|
|
169
|
+
applyPendingBalance(params) {
|
|
170
|
+
(0, assert_1.default)(params.tokenAddress, 'Missing tokenAddress param');
|
|
171
|
+
(0, assert_1.default)(params.authorityAddress, 'Missing authorityAddress param');
|
|
172
|
+
(0, assert_1.default)(params.expectedPendingBalanceCreditCounter, 'Missing expectedPendingBalanceCreditCounter param');
|
|
173
|
+
(0, assert_1.default)(params.newDecryptableAvailableBalance, 'Missing newDecryptableAvailableBalance param');
|
|
174
|
+
this._ctInstructions.push({
|
|
175
|
+
type: constants_1.InstructionBuilderTypes.ApplyPendingBalance,
|
|
176
|
+
params,
|
|
177
|
+
});
|
|
178
|
+
return this;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Add a Deposit instruction to the transaction.
|
|
182
|
+
* Moves public SPL tokens into confidential pending balance. No proof required.
|
|
183
|
+
*/
|
|
184
|
+
confidentialDeposit(params) {
|
|
185
|
+
(0, assert_1.default)(params.tokenAddress, 'Missing tokenAddress param');
|
|
186
|
+
(0, assert_1.default)(params.mintAddress, 'Missing mintAddress param');
|
|
187
|
+
(0, assert_1.default)(params.authorityAddress, 'Missing authorityAddress param');
|
|
188
|
+
(0, assert_1.default)(params.amount, 'Missing amount param');
|
|
189
|
+
this._ctInstructions.push({
|
|
190
|
+
type: constants_1.InstructionBuilderTypes.ConfidentialDeposit,
|
|
191
|
+
params,
|
|
192
|
+
});
|
|
193
|
+
return this;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Add a Withdraw instruction to the transaction.
|
|
197
|
+
* Moves confidential available balance to public balance.
|
|
198
|
+
* Requires equality + range proof verification instructions.
|
|
199
|
+
*/
|
|
200
|
+
confidentialWithdraw(params) {
|
|
201
|
+
(0, assert_1.default)(params.tokenAddress, 'Missing tokenAddress param');
|
|
202
|
+
(0, assert_1.default)(params.mintAddress, 'Missing mintAddress param');
|
|
203
|
+
(0, assert_1.default)(params.authorityAddress, 'Missing authorityAddress param');
|
|
204
|
+
(0, assert_1.default)(params.amount, 'Missing amount param');
|
|
205
|
+
(0, assert_1.default)(params.newDecryptableAvailableBalance, 'Missing newDecryptableAvailableBalance param');
|
|
206
|
+
this._ctInstructions.push({
|
|
207
|
+
type: constants_1.InstructionBuilderTypes.ConfidentialWithdraw,
|
|
208
|
+
params,
|
|
209
|
+
});
|
|
210
|
+
return this;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Add a confidential Transfer instruction to the transaction.
|
|
214
|
+
* Requires equality + ciphertext validity + range proof verification instructions.
|
|
215
|
+
*/
|
|
216
|
+
confidentialTransfer(params) {
|
|
217
|
+
(0, assert_1.default)(params.sourceTokenAddress, 'Missing sourceTokenAddress param');
|
|
218
|
+
(0, assert_1.default)(params.mintAddress, 'Missing mintAddress param');
|
|
219
|
+
(0, assert_1.default)(params.destinationTokenAddress, 'Missing destinationTokenAddress param');
|
|
220
|
+
(0, assert_1.default)(params.authorityAddress, 'Missing authorityAddress param');
|
|
221
|
+
(0, assert_1.default)(params.newSourceDecryptableAvailableBalance, 'Missing newSourceDecryptableAvailableBalance param');
|
|
222
|
+
(0, assert_1.default)(params.transferAmountAuditorCiphertextLo, 'Missing transferAmountAuditorCiphertextLo param');
|
|
223
|
+
(0, assert_1.default)(params.transferAmountAuditorCiphertextHi, 'Missing transferAmountAuditorCiphertextHi param');
|
|
224
|
+
this._ctInstructions.push({
|
|
225
|
+
type: constants_1.InstructionBuilderTypes.ConfidentialTransfer,
|
|
226
|
+
params,
|
|
227
|
+
});
|
|
228
|
+
return this;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Add a VerifyPubkeyValidity proof instruction (used with ConfigureAccount).
|
|
232
|
+
*/
|
|
233
|
+
verifyPubkeyValidity(params) {
|
|
234
|
+
this._ctInstructions.push({
|
|
235
|
+
type: constants_1.InstructionBuilderTypes.VerifyPubkeyValidity,
|
|
236
|
+
params,
|
|
237
|
+
});
|
|
238
|
+
return this;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Add a VerifyCiphertextCommitmentEquality proof instruction (used with Transfer and Withdraw).
|
|
242
|
+
*/
|
|
243
|
+
verifyEqualityProof(params) {
|
|
244
|
+
this._ctInstructions.push({
|
|
245
|
+
type: constants_1.InstructionBuilderTypes.VerifyEqualityProof,
|
|
246
|
+
params,
|
|
247
|
+
});
|
|
248
|
+
return this;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Add a VerifyBatchedGroupedCiphertext3HandlesValidity proof instruction (used with Transfer).
|
|
252
|
+
*/
|
|
253
|
+
verifyValidityProof(params) {
|
|
254
|
+
this._ctInstructions.push({
|
|
255
|
+
type: constants_1.InstructionBuilderTypes.VerifyValidityProof,
|
|
256
|
+
params,
|
|
257
|
+
});
|
|
258
|
+
return this;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Add a VerifyBatchedRangeProofU128 proof instruction (used with Transfer).
|
|
262
|
+
*/
|
|
263
|
+
verifyRangeProof(params) {
|
|
264
|
+
this._ctInstructions.push({
|
|
265
|
+
type: constants_1.InstructionBuilderTypes.VerifyRangeProof,
|
|
266
|
+
params,
|
|
267
|
+
});
|
|
268
|
+
return this;
|
|
269
|
+
}
|
|
270
|
+
/** @inheritdoc */
|
|
271
|
+
async buildImplementation() {
|
|
272
|
+
(0, assert_1.default)(this._ctInstructions.length > 0, 'At least one confidential transfer instruction must be specified');
|
|
273
|
+
if (this._version === 1) {
|
|
274
|
+
return this.buildV1();
|
|
275
|
+
}
|
|
276
|
+
this._instructionsData = [...this._ctInstructions];
|
|
277
|
+
return await super.buildImplementation();
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Build a v1 (SIMD-0296/0385) confidential transfer transaction.
|
|
281
|
+
*
|
|
282
|
+
* Assembles the CT instructions via the shared instruction factory, compiles
|
|
283
|
+
* and serializes a v1 message with the inline transaction config, signs the
|
|
284
|
+
* message bytes with the builder's signers, and stores the resulting wire
|
|
285
|
+
* bytes for broadcast. Also populates a metadata-only SolTransaction so the
|
|
286
|
+
* transaction JSON and input/output extraction remain usable.
|
|
287
|
+
*
|
|
288
|
+
* @returns {Transaction} The built transaction holding the v1 wire bytes
|
|
289
|
+
*/
|
|
290
|
+
buildV1() {
|
|
291
|
+
(0, assert_1.default)(this._sender, new sdk_core_1.BuildTransactionError('sender is required before building'));
|
|
292
|
+
(0, assert_1.default)(this._recentBlockhash, new sdk_core_1.BuildTransactionError('recent blockhash is required before building'));
|
|
293
|
+
(0, assert_1.default)(this._v1TransactionConfig, 'transactionConfig is required to build a v1 confidential transfer transaction');
|
|
294
|
+
// ApplyPendingBalance must remain instruction #1 in v1 spend txs (it is idempotent),
|
|
295
|
+
// regardless of the order the caller added instructions.
|
|
296
|
+
this._ctInstructions = [
|
|
297
|
+
...this._ctInstructions.filter((i) => i.type === constants_1.InstructionBuilderTypes.ApplyPendingBalance),
|
|
298
|
+
...this._ctInstructions.filter((i) => i.type !== constants_1.InstructionBuilderTypes.ApplyPendingBalance),
|
|
299
|
+
];
|
|
300
|
+
const instructions = [];
|
|
301
|
+
// Durable nonce: the AdvanceNonceAccount instruction MUST be part of the
|
|
302
|
+
// message (a bare nonce hash without the instruction is invalid). It is
|
|
303
|
+
// placed first, matching the v0 web3.js and v1 payment-builder convention.
|
|
304
|
+
if (this._nonceInfo) {
|
|
305
|
+
instructions.push((0, v1TransactionBuilder_1.buildAdvanceNonceAccountInstruction)(this._nonceInfo.params.walletNonceAddress, this._nonceInfo.params.authWalletAddress));
|
|
306
|
+
}
|
|
307
|
+
for (const instruction of this._ctInstructions) {
|
|
308
|
+
instructions.push(...(0, solInstructionFactory_1.solInstructionFactory)(instruction, this._zkProofProgramId));
|
|
309
|
+
}
|
|
310
|
+
if (this._memo) {
|
|
311
|
+
const memoData = {
|
|
312
|
+
type: constants_1.InstructionBuilderTypes.Memo,
|
|
313
|
+
params: { memo: this._memo },
|
|
314
|
+
};
|
|
315
|
+
this._ctInstructions.push(memoData);
|
|
316
|
+
instructions.push(...(0, solInstructionFactory_1.solInstructionFactory)(memoData));
|
|
317
|
+
}
|
|
318
|
+
const feePayer = this._feePayer ? new web3_js_1.PublicKey(this._feePayer) : new web3_js_1.PublicKey(this._sender);
|
|
319
|
+
const messageBytes = (0, compileTransactionMessage_1.compileTransactionMessage)({
|
|
320
|
+
version: 1,
|
|
321
|
+
instructions,
|
|
322
|
+
feePayer,
|
|
323
|
+
recentBlockhash: this._recentBlockhash,
|
|
324
|
+
transactionConfig: this._v1TransactionConfig,
|
|
325
|
+
});
|
|
326
|
+
// Signer order comes from the compiled message: the first
|
|
327
|
+
// numSignerAccounts static accounts are the required signers (fee payer
|
|
328
|
+
// first, then the remaining signers in the compiled account order). Missing
|
|
329
|
+
// signatures are zero-filled so unsigned/partial builds keep a valid wire
|
|
330
|
+
// shape for the server-side sign path (not broadcastable until filled).
|
|
331
|
+
const decoded = (0, message_1.decodeV1Message)(messageBytes);
|
|
332
|
+
const signerAddresses = decoded.staticAccounts.slice(0, decoded.header.numSignerAccounts);
|
|
333
|
+
const signatures = [];
|
|
334
|
+
for (const address of signerAddresses) {
|
|
335
|
+
const keyPair = this._signers.find((signer) => signer.getKeys().pub === address);
|
|
336
|
+
if (keyPair) {
|
|
337
|
+
const secretKey = keyPair.getKeys(true).prv;
|
|
338
|
+
(0, assert_1.default)(secretKey instanceof Uint8Array, 'Missing private key');
|
|
339
|
+
signatures.push(tweetnacl_1.default.sign.detached(messageBytes, secretKey));
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
342
|
+
const additional = this.getAdditionalSignatures().find((sig) => sig.publicKey.pub === address);
|
|
343
|
+
if (additional) {
|
|
344
|
+
signatures.push(new Uint8Array(additional.signature));
|
|
345
|
+
continue;
|
|
346
|
+
}
|
|
347
|
+
// Missing signature: zero-fill the slot so the wire shape stays valid
|
|
348
|
+
// for partial-sign flows; the transaction is not broadcastable until
|
|
349
|
+
// every required signer has a signature.
|
|
350
|
+
signatures.push(new Uint8Array(64));
|
|
351
|
+
}
|
|
352
|
+
const v1Wire = (0, wire_transaction_1.serializeWireTransaction)(messageBytes, signatures);
|
|
353
|
+
this._transaction.v1TransactionBytes = v1Wire;
|
|
354
|
+
this._transaction.v1MessageBytes = messageBytes;
|
|
355
|
+
// Populate a metadata-only SolTransaction so toJson / loadInputsAndOutputs work.
|
|
356
|
+
// The durable nonce is carried via nonceInfo, matching the v0 model.
|
|
357
|
+
const metaTx = new web3_js_1.Transaction();
|
|
358
|
+
metaTx.feePayer = feePayer;
|
|
359
|
+
metaTx.recentBlockhash = this._recentBlockhash;
|
|
360
|
+
if (this._nonceInfo) {
|
|
361
|
+
metaTx.nonceInfo = {
|
|
362
|
+
nonce: this._recentBlockhash,
|
|
363
|
+
nonceInstruction: (0, v1TransactionBuilder_1.buildAdvanceNonceAccountInstruction)(this._nonceInfo.params.walletNonceAddress, this._nonceInfo.params.authWalletAddress),
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
metaTx.add(...instructions);
|
|
367
|
+
this._transaction.solTransaction = metaTx;
|
|
368
|
+
this._transaction.setTransactionType(this.transactionType);
|
|
369
|
+
this._transaction.setInstructionsData(this._ctInstructions);
|
|
370
|
+
this._transaction.loadInputsAndOutputs();
|
|
371
|
+
return this._transaction;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
exports.ConfidentialTransferBuilder = ConfidentialTransferBuilder;
|
|
375
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlkZW50aWFsVHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsbURBQTZIO0FBQzdILDZDQUFtRztBQUNuRywwREFBNkI7QUFDN0IsK0NBQTRDO0FBQzVDLDZEQUEwRDtBQUMxRCwyQ0FBc0Q7QUFldEQseUZBQXNGO0FBQ3RGLCtEQUFvRTtBQUNwRSx1RUFBNEU7QUFDNUUsbUVBQWdFO0FBQ2hFLGlFQUE2RTtBQUM3RSxvREFBNEI7QUFFNUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILE1BQWEsMkJBQTRCLFNBQVEsdUNBQWtCO0lBS2pFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBTGIsb0JBQWUsR0FBd0IsRUFBRSxDQUFDO1FBTWhELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLG9CQUFvQixDQUFDO0lBQzlDLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsT0FBTyxDQUFDLE9BQThCO1FBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxpQkFBaUIsQ0FBQyxNQUE4QjtRQUM5QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsTUFBTSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsZ0JBQWdCLENBQUMsU0FBaUI7UUFDaEMsSUFBQSxnQkFBTSxFQUFDLFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLElBQUks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QUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUV6QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBM1hELGtFQTJYQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgU29sVHJhbnNhY3Rpb25WZXJzaW9uLCBTb2xWMVRyYW5zYWN0aW9uQ29uZmlnLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBQdWJsaWNLZXksIFRyYW5zYWN0aW9uIGFzIFNvbFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvbkluc3RydWN0aW9uIH0gZnJvbSAnQHNvbGFuYS93ZWIzLmpzJztcbmltcG9ydCBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBBcHBseVBlbmRpbmdCYWxhbmNlLFxuICBBdGFJbml0LFxuICBDb25maWRlbnRpYWxEZXBvc2l0LFxuICBDb25maWRlbnRpYWxUcmFuc2ZlcixcbiAgQ29uZmlkZW50aWFsV2l0aGRyYXcsXG4gIENvbmZpZ3VyZUNvbmZpZGVudGlhbFRyYW5zZmVyQWNjb3VudCxcbiAgSW5zdHJ1Y3Rpb25QYXJhbXMsXG4gIE1lbW8sXG4gIFZlcmlmeUVxdWFsaXR5UHJvb2YsXG4gIFZlcmlmeVB1YmtleVZhbGlkaXR5LFxuICBWZXJpZnlSYW5nZVByb29mLFxuICBWZXJpZnlWYWxpZGl0eVByb29mLFxufSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGNvbXBpbGVUcmFuc2FjdGlvbk1lc3NhZ2UgfSBmcm9tICcuL3NlcmlhbGl6YXRpb24vY29tcGlsZVRyYW5zYWN0aW9uTWVzc2FnZSc7XG5pbXBvcnQgeyBkZWNvZGVWMU1lc3NhZ2UgfSBmcm9tICcuL3NlcmlhbGl6YXRpb24vY29kZWNzL3YxL21lc3NhZ2UnO1xuaW1wb3J0IHsgc2VyaWFsaXplV2lyZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi9zZXJpYWxpemF0aW9uL3dpcmUtdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgc29sSW5zdHJ1Y3Rpb25GYWN0b3J5IH0gZnJvbSAnLi9zb2xJbnN0cnVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IHsgYnVpbGRBZHZhbmNlTm9uY2VBY2NvdW50SW5zdHJ1Y3Rpb24gfSBmcm9tICcuL3YxVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuLyoqXG4gKiBCdWlsZGVyIGZvciBUb2tlbi0yMDIyIGNvbmZpZGVudGlhbCB0cmFuc2ZlciB0cmFuc2FjdGlvbnMuXG4gKlxuICogUHJvdmlkZXMgdHlwZS1zYWZlIGZsdWVudCBzZXR0ZXJzIGZvciB0aGUgZm9sbG93aW5nIENUIGluc3RydWN0aW9uczpcbiAqIC0gQ3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudCAoQ1QgZW5hYmxlbWVudDogQVRBIHVuZGVyIFRva2VuLTIwMjIgYmVmb3JlIENvbmZpZ3VyZUFjY291bnQpXG4gKiAtIENvbmZpZ3VyZUFjY291bnQgKHN0YW5kYWxvbmUsIHdpdGggVmVyaWZ5UHVia2V5VmFsaWRpdHkgcHJvb2YpXG4gKiAtIEFwcGx5UGVuZGluZ0JhbGFuY2UgKGFsd2F5cyBpbnN0cnVjdGlvbiAjMSBpbiB2MSBzcGVuZCB0eHMsIGlkZW1wb3RlbnQpXG4gKiAtIERlcG9zaXQgKHB1YmxpYyDihpIgY29uZmlkZW50aWFsIGNvbnZlcnNpb24pXG4gKiAtIFdpdGhkcmF3IChjb25maWRlbnRpYWwg4oaSIHB1YmxpYyBjb252ZXJzaW9uLCB3aXRoIGVxdWFsaXR5ICsgcmFuZ2UgcHJvb2ZzKVxuICogLSBUcmFuc2ZlciAoY29uZmlkZW50aWFsIOKGkiBjb25maWRlbnRpYWwsIHdpdGggZXF1YWxpdHkgKyB2YWxpZGl0eSArIHJhbmdlIHByb29mcylcbiAqIC0gVmVyaWZ5UHVia2V5VmFsaWRpdHkgLyBWZXJpZnlFcXVhbGl0eSAvIFZlcmlmeVZhbGlkaXR5IC8gVmVyaWZ5UmFuZ2UgcHJvb2YgaW5zdHJ1Y3Rpb25zXG4gKlxuICogSW5zdHJ1Y3Rpb24gYnVpbGRlcnMgYXJlIHYwL3YxLWFnbm9zdGljOiB0aGV5IHByb2R1Y2UgaW5zdHJ1Y3Rpb24gZGF0YSBhbmRcbiAqIGFjY291bnQgbWV0YXMgb25seS4gVGhlIGNhbGxlciAoV2FsbGV0IFBsYXRmb3JtKSBhc3NlbWJsZXMgdGhlbSBpbnRvIHYxXG4gKiB0cmFuc2FjdGlvbnMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRDb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXIoKTtcbiAqIGJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2toYXNoKS5zZW5kZXIocGF5ZXIpO1xuICogYnVpbGRlci5jb25maWd1cmVBY2NvdW50KHsgdG9rZW5BZGRyZXNzLCBtaW50QWRkcmVzcywgYXV0aG9yaXR5QWRkcmVzcywgLi4uIH0pO1xuICogYnVpbGRlci52ZXJpZnlQdWJrZXlWYWxpZGl0eSh7IHByb29mRGF0YSB9KTtcbiAqIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcml2YXRlIF9jdEluc3RydWN0aW9uczogSW5zdHJ1Y3Rpb25QYXJhbXNbXSA9IFtdO1xuICBwcml2YXRlIF92ZXJzaW9uPzogU29sVHJhbnNhY3Rpb25WZXJzaW9uO1xuICBwcml2YXRlIF92MVRyYW5zYWN0aW9uQ29uZmlnPzogU29sVjFUcmFuc2FjdGlvbkNvbmZpZztcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkNvbmZpZGVudGlhbFRyYW5zZmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgU29sYW5hIHRyYW5zYWN0aW9uIHZlcnNpb24uXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGxlZ2FjeSB1bnRpbCBzZXQuIFdoZW4gc2V0IHRvIGAxYCwgdGhlIGJ1aWxkZXIgYXNzZW1ibGVzIGEgdjFcbiAgICogKFNJTUQtMDI5Ni8wMzg1KSB0cmFuc2FjdGlvbjogdmVyc2lvbiBieXRlIGAweDgxYCwgYW4gaW5saW5lIGB0cmFuc2FjdGlvbkNvbmZpZ2BcbiAgICogaW5zdGVhZCBvZiBDb21wdXRlQnVkZ2V0IGluc3RydWN0aW9ucywgbm8gYWRkcmVzcyBsb29rdXAgdGFibGVzLCBhbmQgYVxuICAgKiBtZXNzYWdlLWZpcnN0IHdpcmUgZm9ybWF0IHdpdGggc2lnbmF0dXJlcyBhcHBlbmRlZC5cbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gLSB0aGUgdHJhbnNhY3Rpb24gdmVyc2lvbiAoMCA9IHYwLCAxID0gdjEpXG4gICAqIEByZXR1cm5zIHt0aGlzfSBUaGlzIGJ1aWxkZXJcbiAgICovXG4gIHZlcnNpb24odmVyc2lvbjogU29sVHJhbnNhY3Rpb25WZXJzaW9uKTogdGhpcyB7XG4gICAgdGhpcy5fdmVyc2lvbiA9IHZlcnNpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB2MSB0cmFuc2FjdGlvbiBjb25maWcgKGNvbXB1dGUgdW5pdCBsaW1pdCwgaGVhcCBzaXplLCBsb2FkZWQgYWNjb3VudHNcbiAgICogZGF0YSBzaXplIGxpbWl0LCBhbmQgcHJpb3JpdHkgZmVlIGFzIHRvdGFsIGxhbXBvcnRzKS4gUmVxdWlyZWQgd2hlblxuICAgKiBgdmVyc2lvbigxKWAgaXMgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gdGhlIHYxIHRyYW5zYWN0aW9uIGNvbmZpZ1xuICAgKiBAcmV0dXJucyB7dGhpc30gVGhpcyBidWlsZGVyXG4gICAqL1xuICB0cmFuc2FjdGlvbkNvbmZpZyhjb25maWc6IFNvbFYxVHJhbnNhY3Rpb25Db25maWcpOiB0aGlzIHtcbiAgICB0aGlzLl92MVRyYW5zYWN0aW9uQ29uZmlnID0gY29uZmlnO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSB6ay1lbGdhbWFsLXByb29mIHByb2dyYW0gaWQuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRoZSBjYW5vbmljYWwgb24tY2hhaW4gcHJvZ3JhbSBpZCAoYFprRTFHYW1hMVByb29mMTExLi4uYClcbiAgICogd2hpY2ggaXMgdGhlIHNhbWUgYWNyb3NzIG1haW5uZXQsIGRldm5ldCwgYW5kIHRlc3RuZXQuIE92ZXJyaWRlIG9ubHlcbiAgICogd2hlbiB0YXJnZXRpbmcgYSBjdXN0b20gZGVwbG95bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHByb2dyYW1JZCAtIGJhc2U1OCBlbmNvZGVkIHByb2dyYW0gaWRcbiAgICovXG4gIHprUHJvb2ZQcm9ncmFtSWQocHJvZ3JhbUlkOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBhc3NlcnQocHJvZ3JhbUlkLCAnTWlzc2luZyBwcm9ncmFtSWQgcGFyYW0nKTtcbiAgICB0aGlzLl96a1Byb29mUHJvZ3JhbUlkID0gcHJvZ3JhbUlkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHN1cGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICB0aGlzLl9jdEluc3RydWN0aW9ucyA9IFtdO1xuICAgIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSkge1xuICAgICAgc3dpdGNoIChpbnN0cnVjdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ3JlYXRlQXNzb2NpYXRlZFRva2VuQWNjb3VudDpcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5SZWFsbG9jYXRlQ29uZmlkZW50aWFsVHJhbnNmZXJBY2NvdW50OlxuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNvbmZpZ3VyZUNvbmZpZGVudGlhbFRyYW5zZmVyQWNjb3VudDpcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5BcHBseVBlbmRpbmdCYWxhbmNlOlxuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNvbmZpZGVudGlhbERlcG9zaXQ6XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ29uZmlkZW50aWFsV2l0aGRyYXc6XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ29uZmlkZW50aWFsVHJhbnNmZXI6XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVmVyaWZ5UHVia2V5VmFsaWRpdHk6XG4gICAgICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVmVyaWZ5RXF1YWxpdHlQcm9vZjpcbiAgICAgICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5WZXJpZnlWYWxpZGl0eVByb29mOlxuICAgICAgICBjYXNlIEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlZlcmlmeVJhbmdlUHJvb2Y6XG4gICAgICAgICAgdGhpcy5fY3RJbnN0cnVjdGlvbnMucHVzaChpbnN0cnVjdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIENyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQgKGlkZW1wb3RlbnQpIGluc3RydWN0aW9uIHRvIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogQ1QgZW5hYmxlbWVudCBvbmx5IOKAlCB0aGUgQVRBIG11c3QgZXhpc3QgYmVmb3JlIENvbmZpZ3VyZUFjY291bnQ7IGFkZCB0aGlzXG4gICAqIGZpcnN0IHdoZW4gdGhlIEFUQSBpcyBub3QgeWV0IG9uLWNoYWluLiBGb3IgVG9rZW4tMjAyMiBtaW50cyBwYXNzXG4gICAqIGBwcm9ncmFtSWRgIHNvIHRoZSBBVEEgaXMgY3JlYXRlZCB1bmRlciB0aGUgVG9rZW4tMjAyMiBwcm9ncmFtLlxuICAgKi9cbiAgY3JlYXRlQXRhKHBhcmFtczogQXRhSW5pdFsncGFyYW1zJ10pOiB0aGlzIHtcbiAgICBhc3NlcnQocGFyYW1zLm1pbnRBZGRyZXNzLCAnTWlzc2luZyBtaW50QWRkcmVzcyBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMuYXRhQWRkcmVzcywgJ01pc3NpbmcgYXRhQWRkcmVzcyBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMub3duZXJBZGRyZXNzLCAnTWlzc2luZyBvd25lckFkZHJlc3MgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLnBheWVyQWRkcmVzcywgJ01pc3NpbmcgcGF5ZXJBZGRyZXNzIHBhcmFtJyk7XG5cbiAgICB0aGlzLl9jdEluc3RydWN0aW9ucy5wdXNoKHtcbiAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQsXG4gICAgICBwYXJhbXMsXG4gICAgfSk7XG4gICAgLy8gQ29uZmlndXJlQWNjb3VudCByZXF1aXJlcyB0aGUgQ29uZmlkZW50aWFsVHJhbnNmZXJBY2NvdW50IGV4dGVuc2lvbiwgd2hpY2ggYW4gQVRBIGRvZXNcbiAgICAvLyBub3QgY2Fycnkg4oCUIFJlYWxsb2NhdGUgYWRkcyBpdCBhbmQgbXVzdCBydW4gYmVmb3JlIENvbmZpZ3VyZUFjY291bnQuXG4gICAgdGhpcy5fY3RJbnN0cnVjdGlvbnMucHVzaCh7XG4gICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5SZWFsbG9jYXRlQ29uZmlkZW50aWFsVHJhbnNmZXJBY2NvdW50LFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIHRva2VuQWRkcmVzczogcGFyYW1zLmF0YUFkZHJlc3MsXG4gICAgICAgIHBheWVyQWRkcmVzczogcGFyYW1zLnBheWVyQWRkcmVzcyxcbiAgICAgICAgb3duZXJBZGRyZXNzOiBwYXJhbXMub3duZXJBZGRyZXNzLFxuICAgICAgICBwcm9ncmFtSWQ6IHBhcmFtcy5wcm9ncmFtSWQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIENvbmZpZ3VyZUFjY291bnQgaW5zdHJ1Y3Rpb24gdG8gdGhlIHRyYW5zYWN0aW9uLlxuICAgKiBPbmUtdGltZSBBVEEgc2V0dXAg4oCUIHJlZ2lzdGVycyBFbEdhbWFsIHB1YmtleSArIEFFUyB6ZXJvIGNpcGhlcnRleHQuXG4gICAqIE11c3QgYmUgYWNjb21wYW5pZWQgYnkgYSBWZXJpZnlQdWJrZXlWYWxpZGl0eSBwcm9vZiBpbnN0cnVjdGlvbi5cbiAgICovXG4gIGNvbmZpZ3VyZUFjY291bnQocGFyYW1zOiBDb25maWd1cmVDb25maWRlbnRpYWxUcmFuc2ZlckFjY291bnRbJ3BhcmFtcyddKTogdGhpcyB7XG4gICAgYXNzZXJ0KHBhcmFtcy50b2tlbkFkZHJlc3MsICdNaXNzaW5nIHRva2VuQWRkcmVzcyBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMubWludEFkZHJlc3MsICdNaXNzaW5nIG1pbnRBZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5hdXRob3JpdHlBZGRyZXNzLCAnTWlzc2luZyBhdXRob3JpdHlBZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5lbGdhbWFsUHVia2V5LCAnTWlzc2luZyBlbGdhbWFsUHVia2V5IHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5kZWNyeXB0YWJsZVplcm9CYWxhbmNlLCAnTWlzc2luZyBkZWNyeXB0YWJsZVplcm9CYWxhbmNlIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5tYXhpbXVtUGVuZGluZ0JhbGFuY2VDcmVkaXRDb3VudGVyLCAnTWlzc2luZyBtYXhpbXVtUGVuZGluZ0JhbGFuY2VDcmVkaXRDb3VudGVyIHBhcmFtJyk7XG5cbiAgICB0aGlzLl9jdEluc3RydWN0aW9ucy5wdXNoKHtcbiAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNvbmZpZ3VyZUNvbmZpZGVudGlhbFRyYW5zZmVyQWNjb3VudCxcbiAgICAgIHBhcmFtcyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gQXBwbHlQZW5kaW5nQmFsYW5jZSBpbnN0cnVjdGlvbiB0byB0aGUgdHJhbnNhY3Rpb24uXG4gICAqIENyZWRpdHMgcGVuZGluZyBiYWxhbmNlIGludG8gYXZhaWxhYmxlIGJhbGFuY2UuIElkZW1wb3RlbnQgKG5vLW9wIGlmIDAgcGVuZGluZykuXG4gICAqIEluIHYxIHRyYW5zYWN0aW9ucywgdGhpcyBzaG91bGQgYWx3YXlzIGJlIGluc3RydWN0aW9uICMxLlxuICAgKi9cbiAgYXBwbHlQZW5kaW5nQmFsYW5jZShwYXJhbXM6IEFwcGx5UGVuZGluZ0JhbGFuY2VbJ3BhcmFtcyddKTogdGhpcyB7XG4gICAgYXNzZXJ0KHBhcmFtcy50b2tlbkFkZHJlc3MsICdNaXNzaW5nIHRva2VuQWRkcmVzcyBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMuYXV0aG9yaXR5QWRkcmVzcywgJ01pc3NpbmcgYXV0aG9yaXR5QWRkcmVzcyBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMuZXhwZWN0ZWRQZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXIsICdNaXNzaW5nIGV4cGVjdGVkUGVuZGluZ0JhbGFuY2VDcmVkaXRDb3VudGVyIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5uZXdEZWNyeXB0YWJsZUF2YWlsYWJsZUJhbGFuY2UsICdNaXNzaW5nIG5ld0RlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZSBwYXJhbScpO1xuXG4gICAgdGhpcy5fY3RJbnN0cnVjdGlvbnMucHVzaCh7XG4gICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5BcHBseVBlbmRpbmdCYWxhbmNlLFxuICAgICAgcGFyYW1zLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIERlcG9zaXQgaW5zdHJ1Y3Rpb24gdG8gdGhlIHRyYW5zYWN0aW9uLlxuICAgKiBNb3ZlcyBwdWJsaWMgU1BMIHRva2VucyBpbnRvIGNvbmZpZGVudGlhbCBwZW5kaW5nIGJhbGFuY2UuIE5vIHByb29mIHJlcXVpcmVkLlxuICAgKi9cbiAgY29uZmlkZW50aWFsRGVwb3NpdChwYXJhbXM6IENvbmZpZGVudGlhbERlcG9zaXRbJ3BhcmFtcyddKTogdGhpcyB7XG4gICAgYXNzZXJ0KHBhcmFtcy50b2tlbkFkZHJlc3MsICdNaXNzaW5nIHRva2VuQWRkcmVzcyBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMubWludEFkZHJlc3MsICdNaXNzaW5nIG1pbnRBZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5hdXRob3JpdHlBZGRyZXNzLCAnTWlzc2luZyBhdXRob3JpdHlBZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5hbW91bnQsICdNaXNzaW5nIGFtb3VudCBwYXJhbScpO1xuXG4gICAgdGhpcy5fY3RJbnN0cnVjdGlvbnMucHVzaCh7XG4gICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Db25maWRlbnRpYWxEZXBvc2l0LFxuICAgICAgcGFyYW1zLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIFdpdGhkcmF3IGluc3RydWN0aW9uIHRvIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogTW92ZXMgY29uZmlkZW50aWFsIGF2YWlsYWJsZSBiYWxhbmNlIHRvIHB1YmxpYyBiYWxhbmNlLlxuICAgKiBSZXF1aXJlcyBlcXVhbGl0eSArIHJhbmdlIHByb29mIHZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbnMuXG4gICAqL1xuICBjb25maWRlbnRpYWxXaXRoZHJhdyhwYXJhbXM6IENvbmZpZGVudGlhbFdpdGhkcmF3WydwYXJhbXMnXSk6IHRoaXMge1xuICAgIGFzc2VydChwYXJhbXMudG9rZW5BZGRyZXNzLCAnTWlzc2luZyB0b2tlbkFkZHJlc3MgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLm1pbnRBZGRyZXNzLCAnTWlzc2luZyBtaW50QWRkcmVzcyBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMuYXV0aG9yaXR5QWRkcmVzcywgJ01pc3NpbmcgYXV0aG9yaXR5QWRkcmVzcyBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMuYW1vdW50LCAnTWlzc2luZyBhbW91bnQgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLm5ld0RlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZSwgJ01pc3NpbmcgbmV3RGVjcnlwdGFibGVBdmFpbGFibGVCYWxhbmNlIHBhcmFtJyk7XG5cbiAgICB0aGlzLl9jdEluc3RydWN0aW9ucy5wdXNoKHtcbiAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNvbmZpZGVudGlhbFdpdGhkcmF3LFxuICAgICAgcGFyYW1zLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNvbmZpZGVudGlhbCBUcmFuc2ZlciBpbnN0cnVjdGlvbiB0byB0aGUgdHJhbnNhY3Rpb24uXG4gICAqIFJlcXVpcmVzIGVxdWFsaXR5ICsgY2lwaGVydGV4dCB2YWxpZGl0eSArIHJhbmdlIHByb29mIHZlcmlmaWNhdGlvbiBpbnN0cnVjdGlvbnMuXG4gICAqL1xuICBjb25maWRlbnRpYWxUcmFuc2ZlcihwYXJhbXM6IENvbmZpZGVudGlhbFRyYW5zZmVyWydwYXJhbXMnXSk6IHRoaXMge1xuICAgIGFzc2VydChwYXJhbXMuc291cmNlVG9rZW5BZGRyZXNzLCAnTWlzc2luZyBzb3VyY2VUb2tlbkFkZHJlc3MgcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLm1pbnRBZGRyZXNzLCAnTWlzc2luZyBtaW50QWRkcmVzcyBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMuZGVzdGluYXRpb25Ub2tlbkFkZHJlc3MsICdNaXNzaW5nIGRlc3RpbmF0aW9uVG9rZW5BZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5hdXRob3JpdHlBZGRyZXNzLCAnTWlzc2luZyBhdXRob3JpdHlBZGRyZXNzIHBhcmFtJyk7XG4gICAgYXNzZXJ0KHBhcmFtcy5uZXdTb3VyY2VEZWNyeXB0YWJsZUF2YWlsYWJsZUJhbGFuY2UsICdNaXNzaW5nIG5ld1NvdXJjZURlY3J5cHRhYmxlQXZhaWxhYmxlQmFsYW5jZSBwYXJhbScpO1xuICAgIGFzc2VydChwYXJhbXMudHJhbnNmZXJBbW91bnRBdWRpdG9yQ2lwaGVydGV4dExvLCAnTWlzc2luZyB0cmFuc2ZlckFtb3VudEF1ZGl0b3JDaXBoZXJ0ZXh0TG8gcGFyYW0nKTtcbiAgICBhc3NlcnQocGFyYW1zLnRyYW5zZmVyQW1vdW50QXVkaXRvckNpcGhlcnRleHRIaSwgJ01pc3NpbmcgdHJhbnNmZXJBbW91bnRBdWRpdG9yQ2lwaGVydGV4dEhpIHBhcmFtJyk7XG5cbiAgICB0aGlzLl9jdEluc3RydWN0aW9ucy5wdXNoKHtcbiAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNvbmZpZGVudGlhbFRyYW5zZmVyLFxuICAgICAgcGFyYW1zLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIFZlcmlmeVB1YmtleVZhbGlkaXR5IHByb29mIGluc3RydWN0aW9uICh1c2VkIHdpdGggQ29uZmlndXJlQWNjb3VudCkuXG4gICAqL1xuICB2ZXJpZnlQdWJrZXlWYWxpZGl0eShwYXJhbXM6IFZlcmlmeVB1YmtleVZhbGlkaXR5WydwYXJhbXMnXSk6IHRoaXMge1xuICAgIHRoaXMuX2N0SW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVmVyaWZ5UHVia2V5VmFsaWRpdHksXG4gICAgICBwYXJhbXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgVmVyaWZ5Q2lwaGVydGV4dENvbW1pdG1lbnRFcXVhbGl0eSBwcm9vZiBpbnN0cnVjdGlvbiAodXNlZCB3aXRoIFRyYW5zZmVyIGFuZCBXaXRoZHJhdykuXG4gICAqL1xuICB2ZXJpZnlFcXVhbGl0eVByb29mKHBhcmFtczogVmVyaWZ5RXF1YWxpdHlQcm9vZlsncGFyYW1zJ10pOiB0aGlzIHtcbiAgICB0aGlzLl9jdEluc3RydWN0aW9ucy5wdXNoKHtcbiAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlZlcmlmeUVxdWFsaXR5UHJvb2YsXG4gICAgICBwYXJhbXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgVmVyaWZ5QmF0Y2hlZEdyb3VwZWRDaXBoZXJ0ZXh0M0hhbmRsZXNWYWxpZGl0eSBwcm9vZiBpbnN0cnVjdGlvbiAodXNlZCB3aXRoIFRyYW5zZmVyKS5cbiAgICovXG4gIHZlcmlmeVZhbGlkaXR5UHJvb2YocGFyYW1zOiBWZXJpZnlWYWxpZGl0eVByb29mWydwYXJhbXMnXSk6IHRoaXMge1xuICAgIHRoaXMuX2N0SW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVmVyaWZ5VmFsaWRpdHlQcm9vZixcbiAgICAgIHBhcmFtcyxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBWZXJpZnlCYXRjaGVkUmFuZ2VQcm9vZlUxMjggcHJvb2YgaW5zdHJ1Y3Rpb24gKHVzZWQgd2l0aCBUcmFuc2ZlcikuXG4gICAqL1xuICB2ZXJpZnlSYW5nZVByb29mKHBhcmFtczogVmVyaWZ5UmFuZ2VQcm9vZlsncGFyYW1zJ10pOiB0aGlzIHtcbiAgICB0aGlzLl9jdEluc3RydWN0aW9ucy5wdXNoKHtcbiAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlZlcmlmeVJhbmdlUHJvb2YsXG4gICAgICBwYXJhbXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGFzc2VydCh0aGlzLl9jdEluc3RydWN0aW9ucy5sZW5ndGggPiAwLCAnQXQgbGVhc3Qgb25lIGNvbmZpZGVudGlhbCB0cmFuc2ZlciBpbnN0cnVjdGlvbiBtdXN0IGJlIHNwZWNpZmllZCcpO1xuXG4gICAgaWYgKHRoaXMuX3ZlcnNpb24gPT09IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkVjEoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnN0cnVjdGlvbnNEYXRhID0gWy4uLnRoaXMuX2N0SW5zdHJ1Y3Rpb25zXTtcblxuICAgIHJldHVybiBhd2FpdCBzdXBlci5idWlsZEltcGxlbWVudGF0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSB2MSAoU0lNRC0wMjk2LzAzODUpIGNvbmZpZGVudGlhbCB0cmFuc2ZlciB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogQXNzZW1ibGVzIHRoZSBDVCBpbnN0cnVjdGlvbnMgdmlhIHRoZSBzaGFyZWQgaW5zdHJ1Y3Rpb24gZmFjdG9yeSwgY29tcGlsZXNcbiAgICogYW5kIHNlcmlhbGl6ZXMgYSB2MSBtZXNzYWdlIHdpdGggdGhlIGlubGluZSB0cmFuc2FjdGlvbiBjb25maWcsIHNpZ25zIHRoZVxuICAgKiBtZXNzYWdlIGJ5dGVzIHdpdGggdGhlIGJ1aWxkZXIncyBzaWduZXJzLCBhbmQgc3RvcmVzIHRoZSByZXN1bHRpbmcgd2lyZVxuICAgKiBieXRlcyBmb3IgYnJvYWRjYXN0LiBBbHNvIHBvcHVsYXRlcyBhIG1ldGFkYXRhLW9ubHkgU29sVHJhbnNhY3Rpb24gc28gdGhlXG4gICAqIHRyYW5zYWN0aW9uIEpTT04gYW5kIGlucHV0L291dHB1dCBleHRyYWN0aW9uIHJlbWFpbiB1c2FibGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbn0gVGhlIGJ1aWx0IHRyYW5zYWN0aW9uIGhvbGRpbmcgdGhlIHYxIHdpcmUgYnl0ZXNcbiAgICovXG4gIHByaXZhdGUgYnVpbGRWMSgpOiBUcmFuc2FjdGlvbiB7XG4gICAgYXNzZXJ0KHRoaXMuX3NlbmRlciwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignc2VuZGVyIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpKTtcbiAgICBhc3NlcnQodGhpcy5fcmVjZW50QmxvY2toYXNoLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdyZWNlbnQgYmxvY2toYXNoIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpKTtcbiAgICBhc3NlcnQodGhpcy5fdjFUcmFuc2FjdGlvbkNvbmZpZywgJ3RyYW5zYWN0aW9uQ29uZmlnIGlzIHJlcXVpcmVkIHRvIGJ1aWxkIGEgdjEgY29uZmlkZW50aWFsIHRyYW5zZmVyIHRyYW5zYWN0aW9uJyk7XG5cbiAgICAvLyBBcHBseVBlbmRpbmdCYWxhbmNlIG11c3QgcmVtYWluIGluc3RydWN0aW9uICMxIGluIHYxIHNwZW5kIHR4cyAoaXQgaXMgaWRlbXBvdGVudCksXG4gICAgLy8gcmVnYXJkbGVzcyBvZiB0aGUgb3JkZXIgdGhlIGNhbGxlciBhZGRlZCBpbnN0cnVjdGlvbnMuXG4gICAgdGhpcy5fY3RJbnN0cnVjdGlvbnMgPSBbXG4gICAgICAuLi50aGlzLl9jdEluc3RydWN0aW9ucy5maWx0ZXIoKGkpID0+IGkudHlwZSA9PT0gSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQXBwbHlQZW5kaW5nQmFsYW5jZSksXG4gICAgICAuLi50aGlzLl9jdEluc3RydWN0aW9ucy5maWx0ZXIoKGkpID0+IGkudHlwZSAhPT0gSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQXBwbHlQZW5kaW5nQmFsYW5jZSksXG4gICAgXTtcblxuICAgIGNvbnN0IGluc3RydWN0aW9uczogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdID0gW107XG5cbiAgICAvLyBEdXJhYmxlIG5vbmNlOiB0aGUgQWR2YW5jZU5vbmNlQWNjb3VudCBpbnN0cnVjdGlvbiBNVVNUIGJlIHBhcnQgb2YgdGhlXG4gICAgLy8gbWVzc2FnZSAoYSBiYXJlIG5vbmNlIGhhc2ggd2l0aG91dCB0aGUgaW5zdHJ1Y3Rpb24gaXMgaW52YWxpZCkuIEl0IGlzXG4gICAgLy8gcGxhY2VkIGZpcnN0LCBtYXRjaGluZyB0aGUgdjAgd2ViMy5qcyBhbmQgdjEgcGF5bWVudC1idWlsZGVyIGNvbnZlbnRpb24uXG4gICAgaWYgKHRoaXMuX25vbmNlSW5mbykge1xuICAgICAgaW5zdHJ1Y3Rpb25zLnB1c2goXG4gICAgICAgIGJ1aWxkQWR2YW5jZU5vbmNlQWNjb3VudEluc3RydWN0aW9uKFxuICAgICAgICAgIHRoaXMuX25vbmNlSW5mby5wYXJhbXMud2FsbGV0Tm9uY2VBZGRyZXNzLFxuICAgICAgICAgIHRoaXMuX25vbmNlSW5mby5wYXJhbXMuYXV0aFdhbGxldEFkZHJlc3NcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGluc3RydWN0aW9uIG9mIHRoaXMuX2N0SW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpbnN0cnVjdGlvbnMucHVzaCguLi5zb2xJbnN0cnVjdGlvbkZhY3RvcnkoaW5zdHJ1Y3Rpb24sIHRoaXMuX3prUHJvb2ZQcm9ncmFtSWQpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWVtbykge1xuICAgICAgY29uc3QgbWVtb0RhdGE6IE1lbW8gPSB7XG4gICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLk1lbW8sXG4gICAgICAgIHBhcmFtczogeyBtZW1vOiB0aGlzLl9tZW1vIH0sXG4gICAgICB9O1xuICAgICAgdGhpcy5fY3RJbnN0cnVjdGlvbnMucHVzaChtZW1vRGF0YSk7XG4gICAgICBpbnN0cnVjdGlvbnMucHVzaCguLi5zb2xJbnN0cnVjdGlvbkZhY3RvcnkobWVtb0RhdGEpKTtcbiAgICB9XG5cbiAgICBjb25zdCBmZWVQYXllciA9IHRoaXMuX2ZlZVBheWVyID8gbmV3IFB1YmxpY0tleSh0aGlzLl9mZWVQYXllcikgOiBuZXcgUHVibGljS2V5KHRoaXMuX3NlbmRlcik7XG4gICAgY29uc3QgbWVzc2FnZUJ5dGVzID0gY29tcGlsZVRyYW5zYWN0aW9uTWVzc2FnZSh7XG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgaW5zdHJ1Y3Rpb25zLFxuICAgICAgZmVlUGF5ZXIsXG4gICAgICByZWNlbnRCbG9ja2hhc2g6IHRoaXMuX3JlY2VudEJsb2NraGFzaCxcbiAgICAgIHRyYW5zYWN0aW9uQ29uZmlnOiB0aGlzLl92MVRyYW5zYWN0aW9uQ29uZmlnLFxuICAgIH0pO1xuXG4gICAgLy8gU2lnbmVyIG9yZGVyIGNvbWVzIGZyb20gdGhlIGNvbXBpbGVkIG1lc3NhZ2U6IHRoZSBmaXJzdFxuICAgIC8vIG51bVNpZ25lckFjY291bnRzIHN0YXRpYyBhY2NvdW50cyBhcmUgdGhlIHJlcXVpcmVkIHNpZ25lcnMgKGZlZSBwYXllclxuICAgIC8vIGZpcnN0LCB0aGVuIHRoZSByZW1haW5pbmcgc2lnbmVycyBpbiB0aGUgY29tcGlsZWQgYWNjb3VudCBvcmRlcikuIE1pc3NpbmdcbiAgICAvLyBzaWduYXR1cmVzIGFyZSB6ZXJvLWZpbGxlZCBzbyB1bnNpZ25lZC9wYXJ0aWFsIGJ1aWxkcyBrZWVwIGEgdmFsaWQgd2lyZVxuICAgIC8vIHNoYXBlIGZvciB0aGUgc2VydmVyLXNpZGUgc2lnbiBwYXRoIChub3QgYnJvYWRjYXN0YWJsZSB1bnRpbCBmaWxsZWQpLlxuICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVWMU1lc3NhZ2UobWVzc2FnZUJ5dGVzKTtcbiAgICBjb25zdCBzaWduZXJBZGRyZXNzZXMgPSBkZWNvZGVkLnN0YXRpY0FjY291bnRzLnNsaWNlKDAsIGRlY29kZWQuaGVhZGVyLm51bVNpZ25lckFjY291bnRzKTtcblxuICAgIGNvbnN0IHNpZ25hdHVyZXM6IFVpbnQ4QXJyYXlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiBzaWduZXJBZGRyZXNzZXMpIHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSB0aGlzLl9zaWduZXJzLmZpbmQoKHNpZ25lcikgPT4gc2lnbmVyLmdldEtleXMoKS5wdWIgPT09IGFkZHJlc3MpO1xuICAgICAgaWYgKGtleVBhaXIpIHtcbiAgICAgICAgY29uc3Qgc2VjcmV0S2V5ID0ga2V5UGFpci5nZXRLZXlzKHRydWUpLnBydjtcbiAgICAgICAgYXNzZXJ0KHNlY3JldEtleSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksICdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gICAgICAgIHNpZ25hdHVyZXMucHVzaChuYWNsLnNpZ24uZGV0YWNoZWQobWVzc2FnZUJ5dGVzLCBzZWNyZXRLZXkpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBhZGRpdGlvbmFsID0gdGhpcy5nZXRBZGRpdGlvbmFsU2lnbmF0dXJlcygpLmZpbmQoKHNpZykgPT4gc2lnLnB1YmxpY0tleS5wdWIgPT09IGFkZHJlc3MpO1xuICAgICAgaWYgKGFkZGl0aW9uYWwpIHtcbiAgICAgICAgc2lnbmF0dXJlcy5wdXNoKG5ldyBVaW50OEFycmF5KGFkZGl0aW9uYWwuc2lnbmF0dXJlKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gTWlzc2luZyBzaWduYXR1cmU6IHplcm8tZmlsbCB0aGUgc2xvdCBzbyB0aGUgd2lyZSBzaGFwZSBzdGF5cyB2YWxpZFxuICAgICAgLy8gZm9yIHBhcnRpYWwtc2lnbiBmbG93czsgdGhlIHRyYW5zYWN0aW9uIGlzIG5vdCBicm9hZGNhc3RhYmxlIHVudGlsXG4gICAgICAvLyBldmVyeSByZXF1aXJlZCBzaWduZXIgaGFzIGEgc2lnbmF0dXJlLlxuICAgICAgc2lnbmF0dXJlcy5wdXNoKG5ldyBVaW50OEFycmF5KDY0KSk7XG4gICAgfVxuXG4gICAgY29uc3QgdjFXaXJlID0gc2VyaWFsaXplV2lyZVRyYW5zYWN0aW9uKG1lc3NhZ2VCeXRlcywgc2lnbmF0dXJlcyk7XG5cbiAgICB0aGlzLl90cmFuc2FjdGlvbi52MVRyYW5zYWN0aW9uQnl0ZXMgPSB2MVdpcmU7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24udjFNZXNzYWdlQnl0ZXMgPSBtZXNzYWdlQnl0ZXM7XG5cbiAgICAvLyBQb3B1bGF0ZSBhIG1ldGFkYXRhLW9ubHkgU29sVHJhbnNhY3Rpb24gc28gdG9Kc29uIC8gbG9hZElucHV0c0FuZE91dHB1dHMgd29yay5cbiAgICAvLyBUaGUgZHVyYWJsZSBub25jZSBpcyBjYXJyaWVkIHZpYSBub25jZUluZm8sIG1hdGNoaW5nIHRoZSB2MCBtb2RlbC5cbiAgICBjb25zdCBtZXRhVHggPSBuZXcgU29sVHJhbnNhY3Rpb24oKTtcbiAgICBtZXRhVHguZmVlUGF5ZXIgPSBmZWVQYXllcjtcbiAgICBtZXRhVHgucmVjZW50QmxvY2toYXNoID0gdGhpcy5fcmVjZW50QmxvY2toYXNoO1xuICAgIGlmICh0aGlzLl9ub25jZUluZm8pIHtcbiAgICAgIG1ldGFUeC5ub25jZUluZm8gPSB7XG4gICAgICAgIG5vbmNlOiB0aGlzLl9yZWNlbnRCbG9ja2hhc2gsXG4gICAgICAgIG5vbmNlSW5zdHJ1Y3Rpb246IGJ1aWxkQWR2YW5jZU5vbmNlQWNjb3VudEluc3RydWN0aW9uKFxuICAgICAgICAgIHRoaXMuX25vbmNlSW5mby5wYXJhbXMud2FsbGV0Tm9uY2VBZGRyZXNzLFxuICAgICAgICAgIHRoaXMuX25vbmNlSW5mby5wYXJhbXMuYXV0aFdhbGxldEFkZHJlc3NcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfVxuICAgIG1ldGFUeC5hZGQoLi4uaW5zdHJ1Y3Rpb25zKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zb2xUcmFuc2FjdGlvbiA9IG1ldGFUeDtcblxuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uVHlwZSh0aGlzLnRyYW5zYWN0aW9uVHlwZSk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uc2V0SW5zdHJ1Y3Rpb25zRGF0YSh0aGlzLl9jdEluc3RydWN0aW9ucyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24ubG9hZElucHV0c0FuZE91dHB1dHMoKTtcblxuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxufVxuIl19
|