@bitgo-beta/sdk-coin-sol 7.6.4-beta.76 → 7.6.4-beta.760
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/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,346 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const should_1 = __importDefault(require("should"));
|
|
40
|
+
const bs58 = __importStar(require("bs58"));
|
|
41
|
+
const getBuilderFactory_1 = require("../getBuilderFactory");
|
|
42
|
+
const src_1 = require("../../../src");
|
|
43
|
+
const testData = __importStar(require("../../resources/sol"));
|
|
44
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
45
|
+
const COMPUTE_BUDGET_PROGRAM_ID = 'ComputeBudget111111111111111111111111111111';
|
|
46
|
+
/**
|
|
47
|
+
* Returns the on-chain instruction types of a built transaction in the order they appear
|
|
48
|
+
* in the compiled message, which is what the network executes. The compiled message
|
|
49
|
+
* includes the durable-nonce AdvanceNonceAccount instruction that web3.js serializes
|
|
50
|
+
* first, so a sponsored transaction with a compute unit limit, priority fee and durable
|
|
51
|
+
* nonce starts with [AdvanceNonceAccount, SetComputeUnitLimit, SetPriorityFee, ...].
|
|
52
|
+
*/
|
|
53
|
+
function compiledInstructionTypes(tx) {
|
|
54
|
+
const message = tx.solTransaction.compileMessage();
|
|
55
|
+
return message.instructions.map((compiledInstruction) => {
|
|
56
|
+
const instruction = new web3_js_1.TransactionInstruction({
|
|
57
|
+
programId: message.accountKeys[compiledInstruction.programIdIndex],
|
|
58
|
+
keys: compiledInstruction.accounts.map((accountKeyIndex) => ({
|
|
59
|
+
pubkey: message.accountKeys[accountKeyIndex],
|
|
60
|
+
isSigner: message.isAccountSigner(accountKeyIndex),
|
|
61
|
+
isWritable: message.isAccountWritable(accountKeyIndex),
|
|
62
|
+
})),
|
|
63
|
+
data: Buffer.from(bs58.decode(compiledInstruction.data)),
|
|
64
|
+
});
|
|
65
|
+
return src_1.Utils.getInstructionType(instruction);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Returns the compute-unit limits requested by the SetComputeUnitLimit instructions of
|
|
70
|
+
* the built transaction.
|
|
71
|
+
*/
|
|
72
|
+
function computeUnitLimits(tx) {
|
|
73
|
+
return tx.solTransaction.instructions
|
|
74
|
+
.filter((instruction) => instruction.programId.toString() === COMPUTE_BUDGET_PROGRAM_ID &&
|
|
75
|
+
src_1.Utils.getInstructionType(instruction) === 'SetComputeUnitLimit')
|
|
76
|
+
.map((instruction) => web3_js_1.ComputeBudgetInstruction.decodeSetComputeUnitLimit(instruction).units);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Raw transaction bytes of each builder intent below when no compute unit limit is set.
|
|
80
|
+
* Captured from the builders before the compute-unit-limit work, so any change to the
|
|
81
|
+
* no-limit build path (which must stay byte-identical) fails these comparisons.
|
|
82
|
+
*/
|
|
83
|
+
const RAW_TX_WITHOUT_COMPUTE_UNIT_LIMIT = {
|
|
84
|
+
'transfer builder': 'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQHReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0Fv+hKJ+pxZaLwHGEyk2Svp5PfAC5ZEi/wYI1tPTHHhbqkYG1L37ZDq6w2tS3G+tFODYWdhMXF+kwlYEF+3o4nVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAVKU1qZKSEGTSTocWDaOHx8NbXdvJK7geQfqEBBBUSNBqfVFxksVo7gioRfc9KXiM8DXDFFshqzRNgGLqlAAADjMtr5L6vs6LY/96RABeX9/Zr6FYdWthxalfkEs7jQgQQDAwEGAAQEAAAABAAJAxAnAAAAAAAAAwIAAgwCAAAA4JMEAAAAAAAFAAl0ZXN0IG1lbW8=',
|
|
85
|
+
'transfer builder v2': 'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAMGReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0Fv+hKJ+pxZaLwHGEyk2Svp5PfAC5ZEi/wYI1tPTHHhbqkYG1L37ZDq6w2tS3G+tFODYWdhMXF+kwlYEF+3o4nVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAan1RcZLFaO4IqEX3PSl4jPA1wxRbIas0TYBi6pQAAA4zLa+S+r7Oi2P/ekQAXl/f2a+hWHVrYcWpX5BLO40IEDAwMBBQAEBAAAAAQACQMQJwAAAAAAAAMCAAIMAgAAAOCTBAAAAAAA',
|
|
86
|
+
'token transfer builder': 'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUJAGymKVqOJEQemBHH67uu8ISJV4rtwTejLrjw7VSeW6dv+hKJ+pxZaLwHGEyk2Svp5PfAC5ZEi/wYI1tPTHHhbpXS8VwMObd6fTnfCKrnxvwQ5LFhipVbiG+aiTNM1eFsqRgbUvftkOrrDa1Lcb60U4NhZ2ExcX6TCVgQX7ejidUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAA0QOJ+87lKPIIYR3MxzSzEJJUDLK41Y0QDy6qLO202l4Gp9UXGSxWjuCKhF9z0peIzwNcMUWyGrNE2AYuqUAAAAbd9uHXZaGT2cvhRs7reawctIXtX1s3kTqM9YV+/wCp4zLa+S+r7Oi2P/ekQAXl/f2a+hWHVrYcWpX5BLO40IEDBAMBBwAEBAAAAAUACQMQJwAAAAAAAAgEAgYDAAoM4JMEAAAAAAAJ',
|
|
87
|
+
'ata initialization builder': 'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAYJReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0EAxPE0fqi8zYGKbihafYdJgknwg8wIfK86jxD3ILOvGW/6Eon6nFlovAcYTKTZK+nk98ALlkSL/BgjW09MceFuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMlyWPTiSJ8bs9ECkUjg2DC1oTmdr/EIQEjnvY2+n4WQMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAA0QOJ+87lKPIIYR3MxzSzEJJUDLK41Y0QDy6qLO202l4Gp9UXGSxWjuCKhF9z0peIzwNcMUWyGrNE2AYuqUAAAAbd9uHXZaGT2cvhRs7reawctIXtX1s3kTqM9YV+/wCp4zLa+S+r7Oi2P/ekQAXl/f2a+hWHVrYcWpX5BLO40IEDAwMCBwAEBAAAAAUACQMQJwAAAAAAAAQGAAEABgMIAQE=',
|
|
88
|
+
'close ata builder': 'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAMFReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0Fv+hKJ+pxZaLwHGEyk2Svp5PfAC5ZEi/wYI1tPTHHhbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqfVFxksVo7gioRfc9KXiM8DXDFFshqzRNgGLqlAAAAG3fbh12Whk9nL4UbO63msHLSF7V9bN5E6jPWFfv8AqeMy2vkvq+zotj/3pEAF5f39mvoVh1a2HFqV+QSzuNCBAgIDAQMABAQAAAAEAwEAAAEJ',
|
|
89
|
+
'staking activate builder': 'AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAJDEXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBYnsvugEnYfm5Gbz5TLtMncgFHZ8JMpkxTTlJIzJovelv+hKJ+pxZaLwHGEyk2Svp5PfAC5ZEi/wYI1tPTHHhbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAACx+Xl4mhxH0TxI2HovJxcQ63+TJglRFzFikL1sKdr12Qah2BeRN1QqmDQ3vf4qerJVf1NcinhyK2ikncAAAAAABqHYF6UCBQtoB5Hmzm24jh5bcVD2H8Z5Ck600QAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAAan1RcZLFaO4IqEX3PSl4jPA1wxRbIas0TYBi6pQAAABqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGTWE0P7tm7NDHRMga+VEKBtXuFZsxTdf9AAAAOMy2vkvq+zotj/3pEAF5f39mvoVh1a2HFqV+QSzuNCBBQMDAgkABAQAAAAEAAkDECcAAAAAAAADAgABNAAAAADgkwQAAAAAAMgAAAAAAAAABqHYF5E3VCqYNDe9/ip6slV/U1yKeHIraKSdwAAAAAAGAgEKdAAAAABF5Xm8+SU89otH3/H7OjpcLCG6xbI8Ca4SpuBVa/CLQUXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBAAAAAAAAAAAAAAAAAAAAAEXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBBgYBBQgLBwAEAgAAAA==',
|
|
90
|
+
'staking deactivate builder': 'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAUIReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0Fiey+6ASdh+bkZvPlMu0ydyAUdnwkymTFNOUkjMmi96W/6Eon6nFlovAcYTKTZK+nk98ALlkSL/BgjW09MceFuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAah2BeRN1QqmDQ3vf4qerJVf1NcinhyK2ikncAAAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAGp9UXGSxWjuCKhF9z0peIzwNcMUWyGrNE2AYuqUAAAOMy2vkvq+zotj/3pEAF5f39mvoVh1a2HFqV+QSzuNCBAwMDAgcABAQAAAAEAAkDECcAAAAAAAAFAwEGAAQFAAAA',
|
|
91
|
+
'staking delegate builder': 'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAgLReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0Fiey+6ASdh+bkZvPlMu0ydyAUdnwkymTFNOUkjMmi96W/6Eon6nFlovAcYTKTZK+nk98ALlkSL/BgjW09MceFuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAALH5eXiaHEfRPEjYei8nFxDrf5MmCVEXMWKQvWwp2vXZBqHYF5E3VCqYNDe9/ip6slV/U1yKeHIraKSdwAAAAAAGodgXpQIFC2gHkebObbiOHltxUPYfxnkKTrTRAAAAAAan1RcYx3TJKFZjmGkdXraLXrijm0ttXHNVWyEAAAAABqfVFxksVo7gioRfc9KXiM8DXDFFshqzRNgGLqlAAAAGp9UXGTWE0P7tm7NDHRMga+VEKBtXuFZsxTdf9AAAAOMy2vkvq+zotj/3pEAF5f39mvoVh1a2HFqV+QSzuNCBAwMDAgkABAQAAAAEAAkDECcAAAAAAAAGBgEFCAoHAAQCAAAA',
|
|
92
|
+
'staking withdraw builder': 'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAYJReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0Fiey+6ASdh+bkZvPlMu0ydyAUdnwkymTFNOUkjMmi96W/6Eon6nFlovAcYTKTZK+nk98ALlkSL/BgjW09MceFuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAah2BeRN1QqmDQ3vf4qerJVf1NcinhyK2ikncAAAAAABqfVFxjHdMkoVmOYaR1etoteuKObS21cc1VbIQAAAAAGp9UXGSxWjuCKhF9z0peIzwNcMUWyGrNE2AYuqUAAAAan1RcZNYTQ/u2bs0MdEyBr5UQoG1e4VmzFN1/0AAAA4zLa+S+r7Oi2P/ekQAXl/f2a+hWHVrYcWpX5BLO40IEDAwMCBwAEBAAAAAQACQMQJwAAAAAAAAUFAQAGCAAMBAAAAOCTBAAAAAAA',
|
|
93
|
+
'wallet initialization builder': 'AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgADBUXlebz5JTz2i0ff8fs6OlwsIbrFsjwJrhKm4FVr8ItBb/oSifqcWWi8BxhMpNkr6eT3wAuWRIv8GCNbT0xx4W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAan1RcZLFaO4IqEX3PSl4jPA1wxRbIas0TYBi6pQAAABqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAADjMtr5L6vs6LY/96RABeX9/Zr6FYdWthxalfkEs7jQgQICAgABNAAAAADgkwQAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwEDBCQGAAAAReV5vPklPPaLR9/x+zo6XCwhusWyPAmuEqbgVWvwi0E=',
|
|
94
|
+
};
|
|
95
|
+
describe('Sol Transaction Builder compute unit limit', () => {
|
|
96
|
+
const factory = (0, getBuilderFactory_1.getBuilderFactory)('tsol');
|
|
97
|
+
const authAccount = new src_1.KeyPair(testData.authAccount).getKeys();
|
|
98
|
+
const nonceAccount = new src_1.KeyPair(testData.nonceAccount).getKeys();
|
|
99
|
+
const stakeAccount = new src_1.KeyPair(testData.stakeAccount).getKeys();
|
|
100
|
+
const otherAccount = new src_1.KeyPair({ prv: testData.prvKeys.prvKey1.base58 }).getKeys();
|
|
101
|
+
const validator = testData.validator;
|
|
102
|
+
const walletPK = testData.associatedTokenAccounts.accounts[0].pub;
|
|
103
|
+
const recentBlockHash = 'GHtXQBsoZHVnNFa9YevAzFr17DJjgHXk3ycTKD5xD3Zi';
|
|
104
|
+
const amount = '300000';
|
|
105
|
+
const tokenAmount = testData.tokenTransfers.amount.toString();
|
|
106
|
+
const nameUSDC = testData.tokenTransfers.nameUSDC;
|
|
107
|
+
const durableNonce = { walletNonceAddress: nonceAccount.pub, authWalletAddress: authAccount.pub };
|
|
108
|
+
const priorityFee = { amount: 10000 };
|
|
109
|
+
const computeUnitLimit = 200000;
|
|
110
|
+
const builderCases = [
|
|
111
|
+
{
|
|
112
|
+
name: 'transfer builder',
|
|
113
|
+
expectedTypes: ['AdvanceNonceAccount', 'SetComputeUnitLimit', 'SetPriorityFee', 'Transfer', 'Memo'],
|
|
114
|
+
makeBuilder: () => {
|
|
115
|
+
const txBuilder = factory.getTransferBuilder();
|
|
116
|
+
txBuilder.nonce(recentBlockHash, durableNonce);
|
|
117
|
+
txBuilder.sender(authAccount.pub);
|
|
118
|
+
txBuilder.send({ address: otherAccount.pub, amount });
|
|
119
|
+
txBuilder.setPriorityFee(priorityFee);
|
|
120
|
+
txBuilder.memo('test memo');
|
|
121
|
+
return txBuilder;
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: 'transfer builder v2',
|
|
126
|
+
expectedTypes: ['AdvanceNonceAccount', 'SetComputeUnitLimit', 'SetPriorityFee', 'Transfer'],
|
|
127
|
+
makeBuilder: () => {
|
|
128
|
+
const txBuilder = factory.getTransferBuilderV2();
|
|
129
|
+
txBuilder.nonce(recentBlockHash, durableNonce);
|
|
130
|
+
txBuilder.sender(authAccount.pub);
|
|
131
|
+
txBuilder.send({ address: otherAccount.pub, amount });
|
|
132
|
+
txBuilder.setPriorityFee(priorityFee);
|
|
133
|
+
return txBuilder;
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: 'token transfer builder',
|
|
138
|
+
expectedTypes: ['AdvanceNonceAccount', 'SetComputeUnitLimit', 'SetPriorityFee', 'TokenTransfer'],
|
|
139
|
+
makeBuilder: () => {
|
|
140
|
+
const txBuilder = factory.getTokenTransferBuilder();
|
|
141
|
+
txBuilder.nonce(recentBlockHash, { walletNonceAddress: nonceAccount.pub, authWalletAddress: walletPK });
|
|
142
|
+
txBuilder.sender(walletPK);
|
|
143
|
+
txBuilder.send({ address: otherAccount.pub, amount: tokenAmount, tokenName: nameUSDC });
|
|
144
|
+
txBuilder.setPriorityFee(priorityFee);
|
|
145
|
+
return txBuilder;
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
name: 'ata initialization builder',
|
|
150
|
+
expectedTypes: [
|
|
151
|
+
'AdvanceNonceAccount',
|
|
152
|
+
'SetComputeUnitLimit',
|
|
153
|
+
'SetPriorityFee',
|
|
154
|
+
'InitializeAssociatedTokenAccount',
|
|
155
|
+
],
|
|
156
|
+
makeBuilder: () => {
|
|
157
|
+
const txBuilder = factory.getAtaInitializationBuilder();
|
|
158
|
+
txBuilder.nonce(recentBlockHash, durableNonce);
|
|
159
|
+
txBuilder.sender(authAccount.pub);
|
|
160
|
+
txBuilder.mint('tsol:usdc');
|
|
161
|
+
txBuilder.owner(authAccount.pub);
|
|
162
|
+
txBuilder.setPriorityFee(priorityFee);
|
|
163
|
+
return txBuilder;
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
// the close ATA builder does not emit a priority fee instruction
|
|
168
|
+
name: 'close ata builder',
|
|
169
|
+
expectedTypes: ['AdvanceNonceAccount', 'SetComputeUnitLimit', 'CloseAssociatedTokenAccount'],
|
|
170
|
+
makeBuilder: () => {
|
|
171
|
+
const txBuilder = factory.getCloseAtaInitializationBuilder();
|
|
172
|
+
txBuilder.nonce(recentBlockHash, durableNonce);
|
|
173
|
+
txBuilder.sender(authAccount.pub);
|
|
174
|
+
txBuilder.accountAddress(nonceAccount.pub);
|
|
175
|
+
txBuilder.destinationAddress(authAccount.pub);
|
|
176
|
+
txBuilder.authorityAddress(authAccount.pub);
|
|
177
|
+
return txBuilder;
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
name: 'staking activate builder',
|
|
182
|
+
expectedTypes: [
|
|
183
|
+
'AdvanceNonceAccount',
|
|
184
|
+
'SetComputeUnitLimit',
|
|
185
|
+
'SetPriorityFee',
|
|
186
|
+
'Create',
|
|
187
|
+
'Initialize',
|
|
188
|
+
'Delegate',
|
|
189
|
+
],
|
|
190
|
+
makeBuilder: () => {
|
|
191
|
+
const txBuilder = factory.getStakingActivateBuilder();
|
|
192
|
+
txBuilder.nonce(recentBlockHash, durableNonce);
|
|
193
|
+
txBuilder.sender(authAccount.pub);
|
|
194
|
+
txBuilder.stakingAddress(stakeAccount.pub);
|
|
195
|
+
txBuilder.amount(amount);
|
|
196
|
+
txBuilder.validator(validator.pub);
|
|
197
|
+
txBuilder.setPriorityFee(priorityFee);
|
|
198
|
+
return txBuilder;
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
name: 'staking deactivate builder',
|
|
203
|
+
expectedTypes: ['AdvanceNonceAccount', 'SetComputeUnitLimit', 'SetPriorityFee', 'Deactivate'],
|
|
204
|
+
makeBuilder: () => {
|
|
205
|
+
const txBuilder = factory.getStakingDeactivateBuilder();
|
|
206
|
+
txBuilder.nonce(recentBlockHash, durableNonce);
|
|
207
|
+
txBuilder.sender(authAccount.pub);
|
|
208
|
+
txBuilder.stakingAddress(stakeAccount.pub);
|
|
209
|
+
txBuilder.setPriorityFee(priorityFee);
|
|
210
|
+
return txBuilder;
|
|
211
|
+
},
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: 'staking delegate builder',
|
|
215
|
+
expectedTypes: ['AdvanceNonceAccount', 'SetComputeUnitLimit', 'SetPriorityFee', 'Delegate'],
|
|
216
|
+
makeBuilder: () => {
|
|
217
|
+
const txBuilder = factory.getStakingDelegateBuilder();
|
|
218
|
+
txBuilder.nonce(recentBlockHash, durableNonce);
|
|
219
|
+
txBuilder.sender(authAccount.pub);
|
|
220
|
+
txBuilder.stakingAddress(stakeAccount.pub);
|
|
221
|
+
txBuilder.validator(validator.pub);
|
|
222
|
+
txBuilder.setPriorityFee(priorityFee);
|
|
223
|
+
return txBuilder;
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
name: 'staking withdraw builder',
|
|
228
|
+
expectedTypes: ['AdvanceNonceAccount', 'SetComputeUnitLimit', 'SetPriorityFee', 'Withdraw'],
|
|
229
|
+
makeBuilder: () => {
|
|
230
|
+
const txBuilder = factory.getStakingWithdrawBuilder();
|
|
231
|
+
txBuilder.nonce(recentBlockHash, durableNonce);
|
|
232
|
+
txBuilder.sender(authAccount.pub);
|
|
233
|
+
txBuilder.stakingAddress(stakeAccount.pub);
|
|
234
|
+
txBuilder.amount(amount);
|
|
235
|
+
txBuilder.setPriorityFee(priorityFee);
|
|
236
|
+
return txBuilder;
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
// the wallet initialization builder is not a sponsored intent, but its parser
|
|
241
|
+
// accepts leading compute-budget instructions so the tx still classifies and
|
|
242
|
+
// round trips when a caller sets a limit
|
|
243
|
+
name: 'wallet initialization builder',
|
|
244
|
+
expectedTypes: ['SetComputeUnitLimit', 'Create', 'InitializeNonceAccount'],
|
|
245
|
+
makeBuilder: () => {
|
|
246
|
+
const txBuilder = factory.getWalletInitializationBuilder();
|
|
247
|
+
txBuilder.nonce(recentBlockHash);
|
|
248
|
+
txBuilder.sender(authAccount.pub);
|
|
249
|
+
txBuilder.address(nonceAccount.pub);
|
|
250
|
+
txBuilder.amount('300000');
|
|
251
|
+
return txBuilder;
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
];
|
|
255
|
+
describe('setComputeUnitLimit validation', () => {
|
|
256
|
+
it('rejects limits that are not integers between 1 and 1,400,000', () => {
|
|
257
|
+
const txBuilder = factory.getTransferBuilder();
|
|
258
|
+
for (const invalid of [0, -1, 1.5, 1400001, NaN]) {
|
|
259
|
+
(0, should_1.default)(() => txBuilder.setComputeUnitLimit(invalid)).throwError(`Invalid compute unit limit, expected an integer between 1 and 1400000, got: ${invalid}`);
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
it('accepts the boundary limits 1 and 1,400,000', () => {
|
|
263
|
+
const txBuilder = factory.getTransferBuilder();
|
|
264
|
+
should_1.default.doesNotThrow(() => txBuilder.setComputeUnitLimit(1));
|
|
265
|
+
should_1.default.doesNotThrow(() => txBuilder.setComputeUnitLimit(1400000));
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
for (const { name, expectedTypes, makeBuilder } of builderCases) {
|
|
269
|
+
describe(name, () => {
|
|
270
|
+
it('builds [AdvanceNonce, SetComputeUnitLimit, SetComputeUnitPrice, ...] with a limit', async () => {
|
|
271
|
+
const tx = (await makeBuilder().setComputeUnitLimit(computeUnitLimit).build());
|
|
272
|
+
compiledInstructionTypes(tx).should.deepEqual(expectedTypes);
|
|
273
|
+
computeUnitLimits(tx).should.deepEqual([computeUnitLimit]);
|
|
274
|
+
// the instruction is recorded for explain and parsing, exactly once
|
|
275
|
+
tx.toJson()
|
|
276
|
+
.instructionsData.filter((instruction) => instruction.type === 'SetComputeUnitLimit')
|
|
277
|
+
.should.deepEqual([{ type: 'SetComputeUnitLimit', params: { units: computeUnitLimit } }]);
|
|
278
|
+
});
|
|
279
|
+
it('rebuilds byte-identically from raw and preserves the limit', async () => {
|
|
280
|
+
const tx = (await makeBuilder().setComputeUnitLimit(computeUnitLimit).build());
|
|
281
|
+
const rawTx = tx.toBroadcastFormat();
|
|
282
|
+
const rebuiltBuilder = factory.from(rawTx);
|
|
283
|
+
const restoredLimit = rebuiltBuilder._computeUnitLimit;
|
|
284
|
+
should_1.default.equal(restoredLimit, computeUnitLimit);
|
|
285
|
+
const rebuiltTx = (await rebuiltBuilder.build());
|
|
286
|
+
// the signing-phase rebuild must be byte-identical and keep exactly one
|
|
287
|
+
// SetComputeUnitLimit instruction with the original limit
|
|
288
|
+
rebuiltTx.toBroadcastFormat().should.equal(rawTx);
|
|
289
|
+
computeUnitLimits(rebuiltTx).should.deepEqual([computeUnitLimit]);
|
|
290
|
+
});
|
|
291
|
+
it('does not duplicate the instruction when the same builder builds twice', async () => {
|
|
292
|
+
const txBuilder = makeBuilder().setComputeUnitLimit(computeUnitLimit);
|
|
293
|
+
await txBuilder.build();
|
|
294
|
+
const rebuiltTx = (await txBuilder.build());
|
|
295
|
+
computeUnitLimits(rebuiltTx).should.deepEqual([computeUnitLimit]);
|
|
296
|
+
rebuiltTx
|
|
297
|
+
.toJson()
|
|
298
|
+
.instructionsData.filter((instruction) => instruction.type === 'SetComputeUnitLimit')
|
|
299
|
+
.should.deepEqual([{ type: 'SetComputeUnitLimit', params: { units: computeUnitLimit } }]);
|
|
300
|
+
});
|
|
301
|
+
it('leaves the transaction bytes unchanged without a limit', async () => {
|
|
302
|
+
const tx = (await makeBuilder().build());
|
|
303
|
+
tx.toBroadcastFormat().should.equal(RAW_TX_WITHOUT_COMPUTE_UNIT_LIMIT[name]);
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
describe('instruction order variants', () => {
|
|
308
|
+
it('places the limit first when no durable nonce is used', async () => {
|
|
309
|
+
const txBuilder = factory.getTransferBuilder();
|
|
310
|
+
txBuilder.nonce(recentBlockHash);
|
|
311
|
+
txBuilder.sender(authAccount.pub);
|
|
312
|
+
txBuilder.send({ address: otherAccount.pub, amount });
|
|
313
|
+
txBuilder.setPriorityFee(priorityFee);
|
|
314
|
+
txBuilder.setComputeUnitLimit(computeUnitLimit);
|
|
315
|
+
const tx = (await txBuilder.build());
|
|
316
|
+
compiledInstructionTypes(tx).should.deepEqual(['SetComputeUnitLimit', 'SetPriorityFee', 'Transfer']);
|
|
317
|
+
});
|
|
318
|
+
it('places the limit before the transfer when no priority fee is used', async () => {
|
|
319
|
+
const txBuilder = factory.getTransferBuilder();
|
|
320
|
+
txBuilder.nonce(recentBlockHash, durableNonce);
|
|
321
|
+
txBuilder.sender(authAccount.pub);
|
|
322
|
+
txBuilder.send({ address: otherAccount.pub, amount });
|
|
323
|
+
txBuilder.setComputeUnitLimit(computeUnitLimit);
|
|
324
|
+
const tx = (await txBuilder.build());
|
|
325
|
+
compiledInstructionTypes(tx).should.deepEqual(['AdvanceNonceAccount', 'SetComputeUnitLimit', 'Transfer']);
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
describe('signed rebuild', () => {
|
|
329
|
+
it('rebuilds a signed transaction byte-identically from raw with the limit', async () => {
|
|
330
|
+
const txBuilder = factory.getTransferBuilder();
|
|
331
|
+
txBuilder.nonce(recentBlockHash, durableNonce);
|
|
332
|
+
txBuilder.sender(authAccount.pub);
|
|
333
|
+
txBuilder.send({ address: otherAccount.pub, amount });
|
|
334
|
+
txBuilder.setPriorityFee(priorityFee);
|
|
335
|
+
txBuilder.setComputeUnitLimit(computeUnitLimit);
|
|
336
|
+
txBuilder.sign({ key: authAccount.prv });
|
|
337
|
+
const tx = (await txBuilder.build());
|
|
338
|
+
const rawTx = tx.toBroadcastFormat();
|
|
339
|
+
const rebuiltTx = (await factory.from(rawTx).build());
|
|
340
|
+
rebuiltTx.toBroadcastFormat().should.equal(rawTx);
|
|
341
|
+
computeUnitLimits(rebuiltTx).should.deepEqual([computeUnitLimit]);
|
|
342
|
+
rebuiltTx.signature.should.deepEqual(tx.signature);
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZVVuaXRMaW1pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvY29tcHV0ZVVuaXRMaW1pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QiwyQ0FBNkI7QUFDN0IsNERBQXlEO0FBQ3pELHNDQUEyRDtBQUMzRCw4REFBZ0Q7QUFDaEQsNkNBQW1GO0FBR25GLE1BQU0seUJBQXlCLEdBQUcsNkNBQTZDLENBQUM7QUFFaEY7Ozs7OztHQU1HO0FBQ0gsU0FBUyx3QkFBd0IsQ0FBQyxFQUFlO0lBQy9DLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDbkQsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLEVBQUU7UUFDdEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxnQ0FBc0IsQ0FBQztZQUM3QyxTQUFTLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUM7WUFDbEUsSUFBSSxFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzNELE1BQU0sRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztnQkFDNUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDO2dCQUNsRCxVQUFVLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQzthQUN2RCxDQUFDLENBQUM7WUFDSCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pELENBQUMsQ0FB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QUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDbEUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgKiBhcyBiczU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi9nZXRCdWlsZGVyRmFjdG9yeSc7XG5pbXBvcnQgeyBLZXlQYWlyLCBVdGlscywgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3NvbCc7XG5pbXBvcnQgeyBDb21wdXRlQnVkZ2V0SW5zdHJ1Y3Rpb24sIFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24gfSBmcm9tICdAc29sYW5hL3dlYjMuanMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuXG5jb25zdCBDT01QVVRFX0JVREdFVF9QUk9HUkFNX0lEID0gJ0NvbXB1dGVCdWRnZXQxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9uLWNoYWluIGluc3RydWN0aW9uIHR5cGVzIG9mIGEgYnVpbHQgdHJhbnNhY3Rpb24gaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyXG4gKiBpbiB0aGUgY29tcGlsZWQgbWVzc2FnZSwgd2hpY2ggaXMgd2hhdCB0aGUgbmV0d29yayBleGVjdXRlcy4gVGhlIGNvbXBpbGVkIG1lc3NhZ2VcbiAqIGluY2x1ZGVzIHRoZSBkdXJhYmxlLW5vbmNlIEFkdmFuY2VOb25jZUFjY291bnQgaW5zdHJ1Y3Rpb24gdGhhdCB3ZWIzLmpzIHNlcmlhbGl6ZXNcbiAqIGZpcnN0LCBzbyBhIHNwb25zb3JlZCB0cmFuc2FjdGlvbiB3aXRoIGEgY29tcHV0ZSB1bml0IGxpbWl0LCBwcmlvcml0eSBmZWUgYW5kIGR1cmFibGVcbiAqIG5vbmNlIHN0YXJ0cyB3aXRoIFtBZHZhbmNlTm9uY2VBY2NvdW50LCBTZXRDb21wdXRlVW5pdExpbWl0LCBTZXRQcmlvcml0eUZlZSwgLi4uXS5cbiAqL1xuZnVuY3Rpb24gY29tcGlsZWRJbnN0cnVjdGlvblR5cGVzKHR4OiBUcmFuc2FjdGlvbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgbWVzc2FnZSA9IHR4LnNvbFRyYW5zYWN0aW9uLmNvbXBpbGVNZXNzYWdlKCk7XG4gIHJldHVybiBtZXNzYWdlLmluc3RydWN0aW9ucy5tYXAoKGNvbXBpbGVkSW5zdHJ1Y3Rpb24pID0+IHtcbiAgICBjb25zdCBpbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbkluc3RydWN0aW9uKHtcbiAgICAgIHByb2dyYW1JZDogbWVzc2FnZS5hY2NvdW50S2V5c1tjb21waWxlZEluc3RydWN0aW9uLnByb2dyYW1JZEluZGV4XSxcbiAgICAgIGtleXM6IGNvbXBpbGVkSW5zdHJ1Y3Rpb24uYWNjb3VudHMubWFwKChhY2NvdW50S2V5SW5kZXgpID0+ICh7XG4gICAgICAgIHB1YmtleTogbWVzc2FnZS5hY2NvdW50S2V5c1thY2NvdW50S2V5SW5kZXhdLFxuICAgICAgICBpc1NpZ25lcjogbWVzc2FnZS5pc0FjY291bnRTaWduZXIoYWNjb3VudEtleUluZGV4KSxcbiAgICAgICAgaXNXcml0YWJsZTogbWVzc2FnZS5pc0FjY291bnRXcml0YWJsZShhY2NvdW50S2V5SW5kZXgpLFxuICAgICAgfSkpLFxuICAgICAgZGF0YTogQnVmZmVyLmZyb20oYnM1OC5kZWNvZGUoY29tcGlsZWRJbnN0cnVjdGlvbi5kYXRhKSksXG4gICAgfSk7XG4gICAgcmV0dXJuIFV0aWxzLmdldEluc3RydWN0aW9uVHlwZShpbnN0cnVjdGlvbikgYXMgc3RyaW5nO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb21wdXRlLXVuaXQgbGltaXRzIHJlcXVlc3RlZCBieSB0aGUgU2V0Q29tcHV0ZVVuaXRMaW1pdCBpbnN0cnVjdGlvbnMgb2ZcbiAqIHRoZSBidWlsdCB0cmFuc2FjdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29tcHV0ZVVuaXRMaW1pdHModHg6IFRyYW5zYWN0aW9uKTogbnVtYmVyW10ge1xuICByZXR1cm4gdHguc29sVHJhbnNhY3Rpb24uaW5zdHJ1Y3Rpb25zXG4gICAgLmZpbHRlcihcbiAgICAgIChpbnN0cnVjdGlvbikgPT5cbiAgICAgICAgaW5zdHJ1Y3Rpb24ucHJvZ3JhbUlkLnRvU3RyaW5nKCkgPT09IENPTVBVVEVfQlVER0VUX1BST0dSQU1fSUQgJiZcbiAgICAgICAgVXRpbHMuZ2V0SW5zdHJ1Y3Rpb25UeXBlKGluc3RydWN0aW9uKSA9PT0gJ1NldENvbXB1dGVVbml0TGltaXQnXG4gICAgKVxuICAgIC5tYXAoKGluc3RydWN0aW9uKSA9PiBDb21wdXRlQnVkZ2V0SW5zdHJ1Y3Rpb24uZGVjb2RlU2V0Q29tcHV0ZVVuaXRMaW1pdChpbnN0cnVjdGlvbikudW5pdHMpO1xufVxuXG4vKipcbiAqIFJhdyB0cmFuc2FjdGlvbiBieXRlcyBvZiBlYWNoIGJ1aWxkZXIgaW50ZW50IGJlbG93IHdoZW4gbm8gY29tcHV0ZSB1bml0IGxpbWl0IGlzIHNldC5cbiAqIENhcHR1cmVkIGZyb20gdGhlIGJ1aWxkZXJzIGJlZm9yZSB0aGUgY29tcHV0ZS11bml0LWxpbWl0IHdvcmssIHNvIGFueSBjaGFuZ2UgdG8gdGhlXG4gKiBuby1saW1pdCBidWlsZCBwYXRoICh3aGljaCBtdXN0IHN0YXkgYnl0ZS1pZGVudGljYWwpIGZhaWxzIHRoZXNlIGNvbXBhcmlzb25zLlxuICovXG5jb25zdCBSQVdfVFhfV0lUSE9VVF9DT01QVVRFX1VOSVRfTElNSVQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICd0cmFuc2ZlciBidWlsZGVyJzpcbiAgICAnQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBUUhSZVY1dlBrbFBQYUxSOS94K3pvNlhDd2h1c1d5UEFtdUVxYmdWV3Z3aTBGditoS0orcHhaYUx3SEdFeWsyU3ZwNVBmQUM1WkVpL3dZSTF0UFRISGhicWtZRzFMMzdaRHE2dzJ0UzNHK3RGT0RZV2RoTVhGK2t3bFlFRiszbzRuVkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQmtadjVTRVhNdi9zcmJweXc1dm52SXpsdThYM0Vtc3NRNXM2UUFBQUFBVktVMXFaS1NFR1RTVG9jV0RhT0h4OE5iWGR2Sks3Z2VRZnFFQkJCVVNOQnFmVkZ4a3NWbzdnaW9SZmM5S1hpTThEWERGRnNocXpSTmdHTHFsQUFBRGpNdHI1TDZ2czZMWS85NlJBQmVYOS9acjZGWWRXdGh4YWxma0VzN2pRZ1FRREF3RUdBQVFFQUFBQUJBQUpBeEFuQUFBQUFBQUFBd0lBQWd3Q0FBQUE0Sk1FQUFBQUFBQUZBQWwwWlhOMElHMWxiVzg9JyxcbiAgJ3RyYW5zZmVyIGJ1aWxkZXIgdjInOlxuICAgICdBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFNR1JlVjV2UGtsUFBhTFI5L3grem82WEN3aHVzV3lQQW11RXFiZ1ZXdndpMEZ2K2hLSitweFphTHdIR0V5azJTdnA1UGZBQzVaRWkvd1lJMXRQVEhIaGJxa1lHMUwzN1pEcTZ3MnRTM0crdEZPRFlXZGhNWEYra3dsWUVGKzNvNG5WQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURCa1p2NVNFWE12L3NyYnB5dzV2bnZJemx1OFgzRW1zc1E1czZRQUFBQUFhbjFSY1pMRmFPNElxRVgzUFNsNGpQQTF3eFJiSWFzMFRZQmk2cFFBQUE0ekxhK1MrcjdPaTJQL2VrUUFYbC9mMmEraFdIVnJZY1dwWDVCTE80MElFREF3TUJCUUFFQkFBQUFBUUFDUU1RSndBQUFBQUFBQU1DQUFJTUFnQUFBT0NUQkFBQUFBQUEnLFxuICAndG9rZW4gdHJhbnNmZXIgYnVpbGRlcic6XG4gICAgJ0FRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQVVKQUd5bUtWcU9KRVFlbUJISDY3dXU4SVNKVjRydHdUZWpMcmp3N1ZTZVc2ZHYraEtKK3B4WmFMd0hHRXlrMlN2cDVQZkFDNVpFaS93WUkxdFBUSEhoYnBYUzhWd01PYmQ2ZlRuZkNLcm54dndRNUxGaGlwVmJpRythaVROTTFlRnNxUmdiVXZmdGtPcnJEYTFMY2I2MFU0TmhaMkV4Y1g2VENWZ1FYN2VqaWRVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1HUm0vbElSY3kvK3l0dW5MRG0rZThqT1c3eGZjU2F5eERtenBBQUFBQTBRT0orODdsS1BJSVlSM014elN6RUpKVURMSzQxWTBRRHk2cUxPMjAybDRHcDlVWEdTeFdqdUNLaEY5ejBwZUl6d05jTVVXeUdyTkUyQVl1cVVBQUFBYmQ5dUhYWmFHVDJjdmhSczdyZWF3Y3RJWHRYMXMza1RxTTlZVisvd0NwNHpMYStTK3I3T2kyUC9la1FBWGwvZjJhK2hXSFZyWWNXcFg1QkxPNDBJRURCQU1CQndBRUJBQUFBQVVBQ1FNUUp3QUFBQUFBQUFnRUFnWURBQW9NNEpNRUFBQUFBQUFKJyxcbiAgJ2F0YSBpbml0aWFsaXphdGlvbiBidWlsZGVyJzpcbiAgICAnQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBWUpSZVY1dlBrbFBQYUxSOS94K3pvNlhDd2h1c1d5UEFtdUVxYmdWV3Z3aTBFQXhQRTBmcWk4ellHS2JpaGFmWWRKZ2tud2c4d0lmSzg2anhEM0lMT3ZHVy82RW9uNm5GbG92QWNZVEtUWksrbms5OEFMbGtTTC9CZ2pXMDlNY2VGdUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNNbHlXUFRpU0o4YnM5RUNrVWpnMkRDMW9UbWRyL0VJUUVqbnZZMituNFdRTUdSbS9sSVJjeS8reXR1bkxEbStlOGpPVzd4ZmNTYXl4RG16cEFBQUFBMFFPSis4N2xLUElJWVIzTXh6U3pFSkpVRExLNDFZMFFEeTZxTE8yMDJsNEdwOVVYR1N4V2p1Q0toRjl6MHBlSXp3TmNNVVd5R3JORTJBWXVxVUFBQUFiZDl1SFhaYUdUMmN2aFJzN3JlYXdjdElYdFgxczNrVHFNOVlWKy93Q3A0ekxhK1MrcjdPaTJQL2VrUUFYbC9mMmEraFdIVnJZY1dwWDVCTE80MElFREF3TUNCd0FFQkFBQUFBVUFDUU1RSndBQUFBQUFBQVFHQUFFQUJnTUlBUUU9JyxcbiAgJ2Nsb3NlIGF0YSBidWlsZGVyJzpcbiAgICAnQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBTUZSZVY1dlBrbFBQYUxSOS94K3pvNlhDd2h1c1d5UEFtdUVxYmdWV3Z3aTBGditoS0orcHhaYUx3SEdFeWsyU3ZwNVBmQUM1WkVpL3dZSTF0UFRISGhiZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJxZlZGeGtzVm83Z2lvUmZjOUtYaU04RFhERkZzaHF6Uk5nR0xxbEFBQUFHM2ZiaDEyV2hrOW5MNFViTzYzbXNITFNGN1Y5Yk41RTZqUFdGZnY4QXFlTXkydmt2cSt6b3RqLzNwRUFGNWYzOW12b1ZoMWEySEZxVitRU3p1TkNCQWdJREFRTUFCQVFBQUFBRUF3RUFBQUVKJyxcbiAgJ3N0YWtpbmcgYWN0aXZhdGUgYnVpbGRlcic6XG4gICAgJ0FnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FKREVYbGViejVKVHoyaTBmZjhmczZPbHdzSWJyRnNqd0pyaEttNEZWcjhJdEJZbnN2dWdFbllmbTVHYno1VEx0TW5jZ0ZIWjhKTXBreFRUbEpJekpvdmVsditoS0orcHhaYUx3SEdFeWsyU3ZwNVBmQUM1WkVpL3dZSTF0UFRISGhiZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3WkdiK1VoRnpMLzdLMjZjc09iNTd5TTVidkY5eEpyTEVPYk9rQUFBQUN4K1hsNG1oeEgwVHhJMkhvdkp4Y1E2MytUSmdsUkZ6RmlrTDFzS2RyMTJRYWgyQmVSTjFRcW1EUTN2ZjRxZXJKVmYxTmNpbmh5SzJpa25jQUFBQUFBQnFIWUY2VUNCUXRvQjVIbXptMjRqaDViY1ZEMkg4WjVDazYwMFFBQUFBQUdwOVVYR01kMHlTaFdZNWhwSFY2MmkxNjRvNXRMYlZ4elZWc2hBQUFBQUFhbjFSY1pMRmFPNElxRVgzUFNsNGpQQTF3eFJiSWFzMFRZQmk2cFFBQUFCcWZWRnhrc1hGRWhqTWxNUFVyeGYxamE3Z2lib2YxRTQ5dlppZ0FBQUFBR3A5VVhHVFdFMFA3dG03TkRIUk1nYStWRUtCdFh1RlpzeFRkZjlBQUFBT015MnZrdnErem90ai8zcEVBRjVmMzltdm9WaDFhMkhGcVYrUVN6dU5DQkJRTURBZ2tBQkFRQUFBQUVBQWtERUNjQUFBQUFBQUFEQWdBQk5BQUFBQURna3dRQUFBQUFBTWdBQUFBQUFBQUFCcUhZRjVFM1ZDcVlORGU5L2lwNnNsVi9VMXlLZUhJcmFLU2R3QUFBQUFBR0FnRUtkQUFBQUFCRjVYbTgrU1U4OW90SDMvSDdPanBjTENHNnhiSThDYTRTcHVCVmEvQ0xRVVhsZWJ6NUpUejJpMGZmOGZzNk9sd3NJYnJGc2p3SnJoS200RlZyOEl0QkFBQUFBQUFBQUFBQUFBQUFBQUFBQUVYbGViejVKVHoyaTBmZjhmczZPbHdzSWJyRnNqd0pyaEttNEZWcjhJdEJCZ1lCQlFnTEJ3QUVBZ0FBQUE9PScsXG4gICdzdGFraW5nIGRlYWN0aXZhdGUgYnVpbGRlcic6XG4gICAgJ0FRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQVVJUmVWNXZQa2xQUGFMUjkveCt6bzZYQ3dodXNXeVBBbXVFcWJnVld2d2kwRmlleSs2QVNkaCtia1p2UGxNdTB5ZHlBVWRud2t5bVRGTk9Va2pNbWk5NlcvNkVvbjZuRmxvdkFjWVRLVFpLK25rOThBTGxrU0wvQmdqVzA5TWNlRnVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBREJrWnY1U0VYTXYvc3JicHl3NXZudkl6bHU4WDNFbXNzUTVzNlFBQUFBQWFoMkJlUk4xUXFtRFEzdmY0cWVySlZmMU5jaW5oeUsyaWtuY0FBQUFBQUJxZlZGeGpIZE1rb1ZtT1lhUjFldG90ZXVLT2JTMjFjYzFWYklRQUFBQUFHcDlVWEdTeFdqdUNLaEY5ejBwZUl6d05jTVVXeUdyTkUyQVl1cVVBQUFPTXkydmt2cSt6b3RqLzNwRUFGNWYzOW12b1ZoMWEySEZxVitRU3p1TkNCQXdNREFnY0FCQVFBQUFBRUFBa0RFQ2NBQUFBQUFBQUZBd0VHQUFRRkFBQUEnLFxuICAnc3Rha2luZyBkZWxlZ2F0ZSBidWlsZGVyJzpcbiAgICAnQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBZ0xSZVY1dlBrbFBQYUxSOS94K3pvNlhDd2h1c1d5UEFtdUVxYmdWV3Z3aTBGaWV5KzZBU2RoK2JrWnZQbE11MHlkeUFVZG53a3ltVEZOT1Vrak1taTk2Vy82RW9uNm5GbG92QWNZVEtUWksrbms5OEFMbGtTTC9CZ2pXMDlNY2VGdUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQmtadjVTRVhNdi9zcmJweXc1dm52SXpsdThYM0Vtc3NRNXM2UUFBQUFMSDVlWGlhSEVmUlBFalllaThuRnhEcmY1TW1DVkVYTVdLUXZXd3AydlhaQnFIWUY1RTNWQ3FZTkRlOS9pcDZzbFYvVTF5S2VISXJhS1Nkd0FBQUFBQUdvZGdYcFFJRkMyZ0hrZWJPYmJpT0hsdHhVUFlmeG5rS1RyVFJBQUFBQUFhbjFSY1l4M1RKS0Zaam1Ha2RYcmFMWHJpam0wdHRYSE5WV3lFQUFBQUFCcWZWRnhrc1ZvN2dpb1JmYzlLWGlNOERYREZGc2hxelJOZ0dMcWxBQUFBR3A5VVhHVFdFMFA3dG03TkRIUk1nYStWRUtCdFh1RlpzeFRkZjlBQUFBT015MnZrdnErem90ai8zcEVBRjVmMzltdm9WaDFhMkhGcVYrUVN6dU5DQkF3TURBZ2tBQkFRQUFBQUVBQWtERUNjQUFBQUFBQUFHQmdFRkNBb0hBQVFDQUFBQScsXG4gICdzdGFraW5nIHdpdGhkcmF3IGJ1aWxkZXInOlxuICAgICdBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFZSlJlVjV2UGtsUFBhTFI5L3grem82WEN3aHVzV3lQQW11RXFiZ1ZXdndpMEZpZXkrNkFTZGgrYmtadlBsTXUweWR5QVVkbndreW1URk5PVWtqTW1pOTZXLzZFb242bkZsb3ZBY1lUS1RaSytuazk4QUxsa1NML0JnalcwOU1jZUZ1QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURCa1p2NVNFWE12L3NyYnB5dzV2bnZJemx1OFgzRW1zc1E1czZRQUFBQUFhaDJCZVJOMVFxbURRM3ZmNHFlckpWZjFOY2luaHlLMmlrbmNBQUFBQUFCcWZWRnhqSGRNa29WbU9ZYVIxZXRvdGV1S09iUzIxY2MxVmJJUUFBQUFBR3A5VVhHU3hXanVDS2hGOXowcGVJendOY01VV3lHck5FMkFZdXFVQUFBQWFuMVJjWk5ZVFEvdTJiczBNZEV5QnI1VVFvRzFlNFZtekZOMS8wQUFBQTR6TGErUytyN09pMlAvZWtRQVhsL2YyYStoV0hWclljV3BYNUJMTzQwSUVEQXdNQ0J3QUVCQUFBQUFRQUNRTVFKd0FBQUFBQUFBVUZBUUFHQ0FBTUJBQUFBT0NUQkFBQUFBQUEnLFxuICAnd2FsbGV0IGluaXRpYWxpemF0aW9uIGJ1aWxkZXInOlxuICAgICdBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdBREJVWGxlYno1SlR6MmkwZmY4ZnM2T2x3c0lickZzandKcmhLbTRGVnI4SXRCYi9vU2lmcWNXV2k4QnhoTXBOa3I2ZVQzd0F1V1JJdjhHQ05iVDB4eDRXNEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFhbjFSY1pMRmFPNElxRVgzUFNsNGpQQTF3eFJiSWFzMFRZQmk2cFFBQUFCcWZWRnhrc1hGRWhqTWxNUFVyeGYxamE3Z2lib2YxRTQ5dlppZ0FBQUFEak10cjVMNnZzNkxZLzk2UkFCZVg5L1pyNkZZZFd0aHhhbGZrRXM3alFnUUlDQWdBQk5BQUFBQURna3dRQUFBQUFBRkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0F3RURCQ1FHQUFBQVJlVjV2UGtsUFBhTFI5L3grem82WEN3aHVzV3lQQW11RXFiZ1ZXdndpMEU9Jyxcbn07XG5cbmRlc2NyaWJlKCdTb2wgVHJhbnNhY3Rpb24gQnVpbGRlciBjb21wdXRlIHVuaXQgbGltaXQnLCAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBnZXRCdWlsZGVyRmFjdG9yeSgndHNvbCcpO1xuICBjb25zdCBhdXRoQWNjb3VudCA9IG5ldyBLZXlQYWlyKHRlc3REYXRhLmF1dGhBY2NvdW50KS5nZXRLZXlzKCk7XG4gIGNvbnN0IG5vbmNlQWNjb3VudCA9IG5ldyBLZXlQYWlyKHRlc3REYXRhLm5vbmNlQWNjb3VudCkuZ2V0S2V5cygpO1xuICBjb25zdCBzdGFrZUFjY291bnQgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5zdGFrZUFjY291bnQpLmdldEtleXMoKTtcbiAgY29uc3Qgb3RoZXJBY2NvdW50ID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLnBydktleXMucHJ2S2V5MS5iYXNlNTggfSkuZ2V0S2V5cygpO1xuICBjb25zdCB2YWxpZGF0b3IgPSB0ZXN0RGF0YS52YWxpZGF0b3I7XG4gIGNvbnN0IHdhbGxldFBLID0gdGVzdERhdGEuYXNzb2NpYXRlZFRva2VuQWNjb3VudHMuYWNjb3VudHNbMF0ucHViO1xuICBjb25zdCByZWNlbnRCbG9ja0hhc2ggPSAnR0h0WFFCc29aSFZuTkZhOVlldkF6RnIxN0RKamdIWGszeWNUS0Q1eEQzWmknO1xuICBjb25zdCBhbW91bnQgPSAnMzAwMDAwJztcbiAgY29uc3QgdG9rZW5BbW91bnQgPSB0ZXN0RGF0YS50b2tlblRyYW5zZmVycy5hbW91bnQudG9TdHJpbmcoKTtcbiAgY29uc3QgbmFtZVVTREMgPSB0ZXN0RGF0YS50b2tlblRyYW5zZmVycy5uYW1lVVNEQztcbiAgY29uc3QgZHVyYWJsZU5vbmNlID0geyB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlQWNjb3VudC5wdWIsIGF1dGhXYWxsZXRBZGRyZXNzOiBhdXRoQWNjb3VudC5wdWIgfTtcbiAgY29uc3QgcHJpb3JpdHlGZWUgPSB7IGFtb3VudDogMTAwMDAgfTtcbiAgY29uc3QgY29tcHV0ZVVuaXRMaW1pdCA9IDIwMDAwMDtcblxuICBpbnRlcmZhY2UgQnVpbGRlckNhc2Uge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvKiogZXhwZWN0ZWQgY29tcGlsZWQgaW5zdHJ1Y3Rpb24gdHlwZXMgb2YgdGhlIGJ1aWx0IHRyYW5zYWN0aW9uLCBpbiBvcmRlciAqL1xuICAgIGV4cGVjdGVkVHlwZXM6IHN0cmluZ1tdO1xuICAgIG1ha2VCdWlsZGVyOiAoKSA9PiBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gIH1cblxuICBjb25zdCBidWlsZGVyQ2FzZXM6IEJ1aWxkZXJDYXNlW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ3RyYW5zZmVyIGJ1aWxkZXInLFxuICAgICAgZXhwZWN0ZWRUeXBlczogWydBZHZhbmNlTm9uY2VBY2NvdW50JywgJ1NldENvbXB1dGVVbml0TGltaXQnLCAnU2V0UHJpb3JpdHlGZWUnLCAnVHJhbnNmZXInLCAnTWVtbyddLFxuICAgICAgbWFrZUJ1aWxkZXI6ICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCwgZHVyYWJsZU5vbmNlKTtcbiAgICAgICAgdHhCdWlsZGVyLnNlbmRlcihhdXRoQWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsIGFtb3VudCB9KTtcbiAgICAgICAgdHhCdWlsZGVyLnNldFByaW9yaXR5RmVlKHByaW9yaXR5RmVlKTtcbiAgICAgICAgdHhCdWlsZGVyLm1lbW8oJ3Rlc3QgbWVtbycpO1xuICAgICAgICByZXR1cm4gdHhCdWlsZGVyO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd0cmFuc2ZlciBidWlsZGVyIHYyJyxcbiAgICAgIGV4cGVjdGVkVHlwZXM6IFsnQWR2YW5jZU5vbmNlQWNjb3VudCcsICdTZXRDb21wdXRlVW5pdExpbWl0JywgJ1NldFByaW9yaXR5RmVlJywgJ1RyYW5zZmVyJ10sXG4gICAgICBtYWtlQnVpbGRlcjogKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlclYyKCk7XG4gICAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gsIGR1cmFibGVOb25jZSk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYXV0aEFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLCBhbW91bnQgfSk7XG4gICAgICAgIHR4QnVpbGRlci5zZXRQcmlvcml0eUZlZShwcmlvcml0eUZlZSk7XG4gICAgICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Rva2VuIHRyYW5zZmVyIGJ1aWxkZXInLFxuICAgICAgZXhwZWN0ZWRUeXBlczogWydBZHZhbmNlTm9uY2VBY2NvdW50JywgJ1NldENvbXB1dGVVbml0TGltaXQnLCAnU2V0UHJpb3JpdHlGZWUnLCAnVG9rZW5UcmFuc2ZlciddLFxuICAgICAgbWFrZUJ1aWxkZXI6ICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7IHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YiwgYXV0aFdhbGxldEFkZHJlc3M6IHdhbGxldFBLIH0pO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZGVyKHdhbGxldFBLKTtcbiAgICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLCBhbW91bnQ6IHRva2VuQW1vdW50LCB0b2tlbk5hbWU6IG5hbWVVU0RDIH0pO1xuICAgICAgICB0eEJ1aWxkZXIuc2V0UHJpb3JpdHlGZWUocHJpb3JpdHlGZWUpO1xuICAgICAgICByZXR1cm4gdHhCdWlsZGVyO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhdGEgaW5pdGlhbGl6YXRpb24gYnVpbGRlcicsXG4gICAgICBleHBlY3RlZFR5cGVzOiBbXG4gICAgICAgICdBZHZhbmNlTm9uY2VBY2NvdW50JyxcbiAgICAgICAgJ1NldENvbXB1dGVVbml0TGltaXQnLFxuICAgICAgICAnU2V0UHJpb3JpdHlGZWUnLFxuICAgICAgICAnSW5pdGlhbGl6ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQnLFxuICAgICAgXSxcbiAgICAgIG1ha2VCdWlsZGVyOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0QXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gsIGR1cmFibGVOb25jZSk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYXV0aEFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLm1pbnQoJ3Rzb2w6dXNkYycpO1xuICAgICAgICB0eEJ1aWxkZXIub3duZXIoYXV0aEFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLnNldFByaW9yaXR5RmVlKHByaW9yaXR5RmVlKTtcbiAgICAgICAgcmV0dXJuIHR4QnVpbGRlcjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyB0aGUgY2xvc2UgQVRBIGJ1aWxkZXIgZG9lcyBub3QgZW1pdCBhIHByaW9yaXR5IGZlZSBpbnN0cnVjdGlvblxuICAgICAgbmFtZTogJ2Nsb3NlIGF0YSBidWlsZGVyJyxcbiAgICAgIGV4cGVjdGVkVHlwZXM6IFsnQWR2YW5jZU5vbmNlQWNjb3VudCcsICdTZXRDb21wdXRlVW5pdExpbWl0JywgJ0Nsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCddLFxuICAgICAgbWFrZUJ1aWxkZXI6ICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRDbG9zZUF0YUluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCBkdXJhYmxlTm9uY2UpO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZGVyKGF1dGhBY2NvdW50LnB1Yik7XG4gICAgICAgIHR4QnVpbGRlci5hY2NvdW50QWRkcmVzcyhub25jZUFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLmRlc3RpbmF0aW9uQWRkcmVzcyhhdXRoQWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIuYXV0aG9yaXR5QWRkcmVzcyhhdXRoQWNjb3VudC5wdWIpO1xuICAgICAgICByZXR1cm4gdHhCdWlsZGVyO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzdGFraW5nIGFjdGl2YXRlIGJ1aWxkZXInLFxuICAgICAgZXhwZWN0ZWRUeXBlczogW1xuICAgICAgICAnQWR2YW5jZU5vbmNlQWNjb3VudCcsXG4gICAgICAgICdTZXRDb21wdXRlVW5pdExpbWl0JyxcbiAgICAgICAgJ1NldFByaW9yaXR5RmVlJyxcbiAgICAgICAgJ0NyZWF0ZScsXG4gICAgICAgICdJbml0aWFsaXplJyxcbiAgICAgICAgJ0RlbGVnYXRlJyxcbiAgICAgIF0sXG4gICAgICBtYWtlQnVpbGRlcjogKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCwgZHVyYWJsZU5vbmNlKTtcbiAgICAgICAgdHhCdWlsZGVyLnNlbmRlcihhdXRoQWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIuc3Rha2luZ0FkZHJlc3Moc3Rha2VBY2NvdW50LnB1Yik7XG4gICAgICAgIHR4QnVpbGRlci5hbW91bnQoYW1vdW50KTtcbiAgICAgICAgdHhCdWlsZGVyLnZhbGlkYXRvcih2YWxpZGF0b3IucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLnNldFByaW9yaXR5RmVlKHByaW9yaXR5RmVlKTtcbiAgICAgICAgcmV0dXJuIHR4QnVpbGRlcjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc3Rha2luZyBkZWFjdGl2YXRlIGJ1aWxkZXInLFxuICAgICAgZXhwZWN0ZWRUeXBlczogWydBZHZhbmNlTm9uY2VBY2NvdW50JywgJ1NldENvbXB1dGVVbml0TGltaXQnLCAnU2V0UHJpb3JpdHlGZWUnLCAnRGVhY3RpdmF0ZSddLFxuICAgICAgbWFrZUJ1aWxkZXI6ICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCwgZHVyYWJsZU5vbmNlKTtcbiAgICAgICAgdHhCdWlsZGVyLnNlbmRlcihhdXRoQWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIuc3Rha2luZ0FkZHJlc3Moc3Rha2VBY2NvdW50LnB1Yik7XG4gICAgICAgIHR4QnVpbGRlci5zZXRQcmlvcml0eUZlZShwcmlvcml0eUZlZSk7XG4gICAgICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3N0YWtpbmcgZGVsZWdhdGUgYnVpbGRlcicsXG4gICAgICBleHBlY3RlZFR5cGVzOiBbJ0FkdmFuY2VOb25jZUFjY291bnQnLCAnU2V0Q29tcHV0ZVVuaXRMaW1pdCcsICdTZXRQcmlvcml0eUZlZScsICdEZWxlZ2F0ZSddLFxuICAgICAgbWFrZUJ1aWxkZXI6ICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nRGVsZWdhdGVCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gsIGR1cmFibGVOb25jZSk7XG4gICAgICAgIHR4QnVpbGRlci5zZW5kZXIoYXV0aEFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLnN0YWtpbmdBZGRyZXNzKHN0YWtlQWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIudmFsaWRhdG9yKHZhbGlkYXRvci5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIuc2V0UHJpb3JpdHlGZWUocHJpb3JpdHlGZWUpO1xuICAgICAgICByZXR1cm4gdHhCdWlsZGVyO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzdGFraW5nIHdpdGhkcmF3IGJ1aWxkZXInLFxuICAgICAgZXhwZWN0ZWRUeXBlczogWydBZHZhbmNlTm9uY2VBY2NvdW50JywgJ1NldENvbXB1dGVVbml0TGltaXQnLCAnU2V0UHJpb3JpdHlGZWUnLCAnV2l0aGRyYXcnXSxcbiAgICAgIG1ha2VCdWlsZGVyOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ1dpdGhkcmF3QnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCBkdXJhYmxlTm9uY2UpO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZGVyKGF1dGhBY2NvdW50LnB1Yik7XG4gICAgICAgIHR4QnVpbGRlci5zdGFraW5nQWRkcmVzcyhzdGFrZUFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLmFtb3VudChhbW91bnQpO1xuICAgICAgICB0eEJ1aWxkZXIuc2V0UHJpb3JpdHlGZWUocHJpb3JpdHlGZWUpO1xuICAgICAgICByZXR1cm4gdHhCdWlsZGVyO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIHRoZSB3YWxsZXQgaW5pdGlhbGl6YXRpb24gYnVpbGRlciBpcyBub3QgYSBzcG9uc29yZWQgaW50ZW50LCBidXQgaXRzIHBhcnNlclxuICAgICAgLy8gYWNjZXB0cyBsZWFkaW5nIGNvbXB1dGUtYnVkZ2V0IGluc3RydWN0aW9ucyBzbyB0aGUgdHggc3RpbGwgY2xhc3NpZmllcyBhbmRcbiAgICAgIC8vIHJvdW5kIHRyaXBzIHdoZW4gYSBjYWxsZXIgc2V0cyBhIGxpbWl0XG4gICAgICBuYW1lOiAnd2FsbGV0IGluaXRpYWxpemF0aW9uIGJ1aWxkZXInLFxuICAgICAgZXhwZWN0ZWRUeXBlczogWydTZXRDb21wdXRlVW5pdExpbWl0JywgJ0NyZWF0ZScsICdJbml0aWFsaXplTm9uY2VBY2NvdW50J10sXG4gICAgICBtYWtlQnVpbGRlcjogKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICAgICAgdHhCdWlsZGVyLnNlbmRlcihhdXRoQWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIuYWRkcmVzcyhub25jZUFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLmFtb3VudCgnMzAwMDAwJyk7XG4gICAgICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gICAgICB9LFxuICAgIH0sXG4gIF07XG5cbiAgZGVzY3JpYmUoJ3NldENvbXB1dGVVbml0TGltaXQgdmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBpdCgncmVqZWN0cyBsaW1pdHMgdGhhdCBhcmUgbm90IGludGVnZXJzIGJldHdlZW4gMSBhbmQgMSw0MDAsMDAwJywgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIGZvciAoY29uc3QgaW52YWxpZCBvZiBbMCwgLTEsIDEuNSwgMTQwMDAwMSwgTmFOXSkge1xuICAgICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLnNldENvbXB1dGVVbml0TGltaXQoaW52YWxpZCkpLnRocm93RXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgY29tcHV0ZSB1bml0IGxpbWl0LCBleHBlY3RlZCBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTQwMDAwMCwgZ290OiAke2ludmFsaWR9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ2FjY2VwdHMgdGhlIGJvdW5kYXJ5IGxpbWl0cyAxIGFuZCAxLDQwMCwwMDAnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB0eEJ1aWxkZXIuc2V0Q29tcHV0ZVVuaXRMaW1pdCgxKSk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHR4QnVpbGRlci5zZXRDb21wdXRlVW5pdExpbWl0KDE0MDAwMDApKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZm9yIChjb25zdCB7IG5hbWUsIGV4cGVjdGVkVHlwZXMsIG1ha2VCdWlsZGVyIH0gb2YgYnVpbGRlckNhc2VzKSB7XG4gICAgZGVzY3JpYmUobmFtZSwgKCkgPT4ge1xuICAgICAgaXQoJ2J1aWxkcyBbQWR2YW5jZU5vbmNlLCBTZXRDb21wdXRlVW5pdExpbWl0LCBTZXRDb21wdXRlVW5pdFByaWNlLCAuLi5dIHdpdGggYSBsaW1pdCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHggPSAoYXdhaXQgbWFrZUJ1aWxkZXIoKS5zZXRDb21wdXRlVW5pdExpbWl0KGNvbXB1dGVVbml0TGltaXQpLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgICAgIGNvbXBpbGVkSW5zdHJ1Y3Rpb25UeXBlcyh0eCkuc2hvdWxkLmRlZXBFcXVhbChleHBlY3RlZFR5cGVzKTtcbiAgICAgICAgY29tcHV0ZVVuaXRMaW1pdHModHgpLnNob3VsZC5kZWVwRXF1YWwoW2NvbXB1dGVVbml0TGltaXRdKTtcbiAgICAgICAgLy8gdGhlIGluc3RydWN0aW9uIGlzIHJlY29yZGVkIGZvciBleHBsYWluIGFuZCBwYXJzaW5nLCBleGFjdGx5IG9uY2VcbiAgICAgICAgdHgudG9Kc29uKClcbiAgICAgICAgICAuaW5zdHJ1Y3Rpb25zRGF0YS5maWx0ZXIoKGluc3RydWN0aW9uKSA9PiBpbnN0cnVjdGlvbi50eXBlID09PSAnU2V0Q29tcHV0ZVVuaXRMaW1pdCcpXG4gICAgICAgICAgLnNob3VsZC5kZWVwRXF1YWwoW3sgdHlwZTogJ1NldENvbXB1dGVVbml0TGltaXQnLCBwYXJhbXM6IHsgdW5pdHM6IGNvbXB1dGVVbml0TGltaXQgfSB9XSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3JlYnVpbGRzIGJ5dGUtaWRlbnRpY2FsbHkgZnJvbSByYXcgYW5kIHByZXNlcnZlcyB0aGUgbGltaXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IG1ha2VCdWlsZGVyKCkuc2V0Q29tcHV0ZVVuaXRMaW1pdChjb21wdXRlVW5pdExpbWl0KS5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIGNvbnN0IHJlYnVpbHRCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHJhd1R4KTtcbiAgICAgICAgY29uc3QgcmVzdG9yZWRMaW1pdCA9IChyZWJ1aWx0QnVpbGRlciBhcyB1bmtub3duIGFzIHsgX2NvbXB1dGVVbml0TGltaXQ/OiBudW1iZXIgfSkuX2NvbXB1dGVVbml0TGltaXQ7XG4gICAgICAgIHNob3VsZC5lcXVhbChyZXN0b3JlZExpbWl0LCBjb21wdXRlVW5pdExpbWl0KTtcblxuICAgICAgICBjb25zdCByZWJ1aWx0VHggPSAoYXdhaXQgcmVidWlsdEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICAgIC8vIHRoZSBzaWduaW5nLXBoYXNlIHJlYnVpbGQgbXVzdCBiZSBieXRlLWlkZW50aWNhbCBhbmQga2VlcCBleGFjdGx5IG9uZVxuICAgICAgICAvLyBTZXRDb21wdXRlVW5pdExpbWl0IGluc3RydWN0aW9uIHdpdGggdGhlIG9yaWdpbmFsIGxpbWl0XG4gICAgICAgIHJlYnVpbHRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbChyYXdUeCk7XG4gICAgICAgIGNvbXB1dGVVbml0TGltaXRzKHJlYnVpbHRUeCkuc2hvdWxkLmRlZXBFcXVhbChbY29tcHV0ZVVuaXRMaW1pdF0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkb2VzIG5vdCBkdXBsaWNhdGUgdGhlIGluc3RydWN0aW9uIHdoZW4gdGhlIHNhbWUgYnVpbGRlciBidWlsZHMgdHdpY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG1ha2VCdWlsZGVyKCkuc2V0Q29tcHV0ZVVuaXRMaW1pdChjb21wdXRlVW5pdExpbWl0KTtcbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHJlYnVpbHRUeCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICAgICAgY29tcHV0ZVVuaXRMaW1pdHMocmVidWlsdFR4KS5zaG91bGQuZGVlcEVxdWFsKFtjb21wdXRlVW5pdExpbWl0XSk7XG4gICAgICAgIHJlYnVpbHRUeFxuICAgICAgICAgIC50b0pzb24oKVxuICAgICAgICAgIC5pbnN0cnVjdGlvbnNEYXRhLmZpbHRlcigoaW5zdHJ1Y3Rpb24pID0+IGluc3RydWN0aW9uLnR5cGUgPT09ICdTZXRDb21wdXRlVW5pdExpbWl0JylcbiAgICAgICAgICAuc2hvdWxkLmRlZXBFcXVhbChbeyB0eXBlOiAnU2V0Q29tcHV0ZVVuaXRMaW1pdCcsIHBhcmFtczogeyB1bml0czogY29tcHV0ZVVuaXRMaW1pdCB9IH1dKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnbGVhdmVzIHRoZSB0cmFuc2FjdGlvbiBieXRlcyB1bmNoYW5nZWQgd2l0aG91dCBhIGxpbWl0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eCA9IChhd2FpdCBtYWtlQnVpbGRlcigpLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgICB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbChSQVdfVFhfV0lUSE9VVF9DT01QVVRFX1VOSVRfTElNSVRbbmFtZV0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBkZXNjcmliZSgnaW5zdHJ1Y3Rpb24gb3JkZXIgdmFyaWFudHMnLCAoKSA9PiB7XG4gICAgaXQoJ3BsYWNlcyB0aGUgbGltaXQgZmlyc3Qgd2hlbiBubyBkdXJhYmxlIG5vbmNlIGlzIHVzZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICB0eEJ1aWxkZXIuc2VuZGVyKGF1dGhBY2NvdW50LnB1Yik7XG4gICAgICB0eEJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IG90aGVyQWNjb3VudC5wdWIsIGFtb3VudCB9KTtcbiAgICAgIHR4QnVpbGRlci5zZXRQcmlvcml0eUZlZShwcmlvcml0eUZlZSk7XG4gICAgICB0eEJ1aWxkZXIuc2V0Q29tcHV0ZVVuaXRMaW1pdChjb21wdXRlVW5pdExpbWl0KTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcblxuICAgICAgY29tcGlsZWRJbnN0cnVjdGlvblR5cGVzKHR4KS5zaG91bGQuZGVlcEVxdWFsKFsnU2V0Q29tcHV0ZVVuaXRMaW1pdCcsICdTZXRQcmlvcml0eUZlZScsICdUcmFuc2ZlciddKTtcbiAgICB9KTtcblxuICAgIGl0KCdwbGFjZXMgdGhlIGxpbWl0IGJlZm9yZSB0aGUgdHJhbnNmZXIgd2hlbiBubyBwcmlvcml0eSBmZWUgaXMgdXNlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCBkdXJhYmxlTm9uY2UpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcihhdXRoQWNjb3VudC5wdWIpO1xuICAgICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBvdGhlckFjY291bnQucHViLCBhbW91bnQgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2V0Q29tcHV0ZVVuaXRMaW1pdChjb21wdXRlVW5pdExpbWl0KTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcblxuICAgICAgY29tcGlsZWRJbnN0cnVjdGlvblR5cGVzKHR4KS5zaG91bGQuZGVlcEVxdWFsKFsnQWR2YW5jZU5vbmNlQWNjb3VudCcsICdTZXRDb21wdXRlVW5pdExpbWl0JywgJ1RyYW5zZmVyJ10pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2lnbmVkIHJlYnVpbGQnLCAoKSA9PiB7XG4gICAgaXQoJ3JlYnVpbGRzIGEgc2lnbmVkIHRyYW5zYWN0aW9uIGJ5dGUtaWRlbnRpY2FsbHkgZnJvbSByYXcgd2l0aCB0aGUgbGltaXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCwgZHVyYWJsZU5vbmNlKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIoYXV0aEFjY291bnQucHViKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogb3RoZXJBY2NvdW50LnB1YiwgYW1vdW50IH0pO1xuICAgICAgdHhCdWlsZGVyLnNldFByaW9yaXR5RmVlKHByaW9yaXR5RmVlKTtcbiAgICAgIHR4QnVpbGRlci5zZXRDb21wdXRlVW5pdExpbWl0KGNvbXB1dGVVbml0TGltaXQpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGF1dGhBY2NvdW50LnBydiB9KTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3QgcmVidWlsdFR4ID0gKGF3YWl0IGZhY3RvcnkuZnJvbShyYXdUeCkuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICByZWJ1aWx0VHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwocmF3VHgpO1xuICAgICAgY29tcHV0ZVVuaXRMaW1pdHMocmVidWlsdFR4KS5zaG91bGQuZGVlcEVxdWFsKFtjb21wdXRlVW5pdExpbWl0XSk7XG4gICAgICByZWJ1aWx0VHguc2lnbmF0dXJlLnNob3VsZC5kZWVwRXF1YWwodHguc2lnbmF0dXJlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confidentialEnablementV1.d.ts","sourceRoot":"","sources":["../../../../../test/unit/transactionBuilder/confidentialEnablementV1.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
require("should");
|
|
37
|
+
const src_1 = require("../../../src");
|
|
38
|
+
const testData = __importStar(require("../../resources/sol"));
|
|
39
|
+
const spl_token_1 = require("@solana/spl-token");
|
|
40
|
+
const getBuilderFactory_1 = require("../getBuilderFactory");
|
|
41
|
+
describe('Solana Confidential Transfer Builder - CT account enablement (v1)', () => {
|
|
42
|
+
const factory = (0, getBuilderFactory_1.getBuilderFactory)('sol');
|
|
43
|
+
const account = new src_1.KeyPair(testData.associatedTokenAccounts.accounts[0]).getKeys();
|
|
44
|
+
const recentBlockHash = 'GHtXQBsoZHVnNFa9YevAzFr17DJjgHXk3ycTKD5xD3Zi';
|
|
45
|
+
const mintAddress = testData.associatedTokenAccountsForSol2022.mintId;
|
|
46
|
+
const tokenAddress = testData.associatedTokenAccountsForSol2022.accounts[0].ata;
|
|
47
|
+
const authorityAddress = account.pub;
|
|
48
|
+
const zeroBytes36 = '00'.repeat(36);
|
|
49
|
+
const proofDataHex = '00'.repeat(320);
|
|
50
|
+
const v1Config = {
|
|
51
|
+
computeUnitLimit: 200000,
|
|
52
|
+
heapSize: 32768,
|
|
53
|
+
loadedAccountsDataSizeLimit: 65536,
|
|
54
|
+
priorityFee: 5000,
|
|
55
|
+
};
|
|
56
|
+
const ctEnablementBuilder = () => {
|
|
57
|
+
const txBuilder = factory.getConfidentialTransferBuilder();
|
|
58
|
+
txBuilder.nonce(recentBlockHash);
|
|
59
|
+
txBuilder.sender(account.pub);
|
|
60
|
+
txBuilder.sign({ key: account.prv });
|
|
61
|
+
return txBuilder;
|
|
62
|
+
};
|
|
63
|
+
const addEnablementInstructions = (builder) => {
|
|
64
|
+
builder
|
|
65
|
+
.createAta({
|
|
66
|
+
mintAddress,
|
|
67
|
+
ataAddress: tokenAddress,
|
|
68
|
+
ownerAddress: authorityAddress,
|
|
69
|
+
payerAddress: account.pub,
|
|
70
|
+
tokenName: 'tsol:ray',
|
|
71
|
+
// CT mints are Token-2022 — the ATA must be created under the Token-2022 program
|
|
72
|
+
programId: 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb',
|
|
73
|
+
})
|
|
74
|
+
.configureAccount({
|
|
75
|
+
tokenAddress,
|
|
76
|
+
mintAddress,
|
|
77
|
+
authorityAddress,
|
|
78
|
+
elgamalPubkey: '11'.repeat(32),
|
|
79
|
+
decryptableZeroBalance: zeroBytes36,
|
|
80
|
+
maximumPendingBalanceCreditCounter: '18446744073709551615',
|
|
81
|
+
proofInstructionOffset: 1,
|
|
82
|
+
})
|
|
83
|
+
.verifyPubkeyValidity({ proofData: proofDataHex });
|
|
84
|
+
};
|
|
85
|
+
it('should build a v1 CT enablement transaction (CreateATA + ConfigureAccount + VerifyPubkeyValidity)', async function () {
|
|
86
|
+
const builder = ctEnablementBuilder();
|
|
87
|
+
addEnablementInstructions(builder);
|
|
88
|
+
builder.version(1).transactionConfig(v1Config);
|
|
89
|
+
const tx = await builder.build();
|
|
90
|
+
tx.isVersionedTransaction().should.equal(true);
|
|
91
|
+
const rawTx = tx.toBroadcastFormat();
|
|
92
|
+
const wire = Buffer.from(rawTx, 'base64');
|
|
93
|
+
// v1 version byte prefix
|
|
94
|
+
wire[0].should.equal(0x81);
|
|
95
|
+
// within the v1 wire size limit
|
|
96
|
+
wire.length.should.be.lessThanOrEqual(4096);
|
|
97
|
+
// metadata transaction carries all four instructions in order:
|
|
98
|
+
// CreateATA -> Reallocate (ConfidentialTransferAccount) -> ConfigureAccount -> Verify
|
|
99
|
+
const solTx = tx.solTransaction;
|
|
100
|
+
solTx.instructions.length.should.equal(4);
|
|
101
|
+
solTx.instructions[0].data[0].should.equal(1 /* ATA program CreateIdempotent discriminator */);
|
|
102
|
+
solTx.instructions[1].programId.toString().should.equal(spl_token_1.TOKEN_2022_PROGRAM_ID.toString());
|
|
103
|
+
solTx.instructions[1].data[0].should.equal(spl_token_1.TokenInstruction.Reallocate);
|
|
104
|
+
solTx.instructions[2].programId.toString().should.equal(spl_token_1.TOKEN_2022_PROGRAM_ID.toString());
|
|
105
|
+
});
|
|
106
|
+
it('should keep instruction order stable (no ApplyPendingBalance reordering concern)', async function () {
|
|
107
|
+
const builder = ctEnablementBuilder();
|
|
108
|
+
addEnablementInstructions(builder);
|
|
109
|
+
builder.version(1).transactionConfig(v1Config);
|
|
110
|
+
const tx = await builder.build();
|
|
111
|
+
const json = tx.toJson();
|
|
112
|
+
json.instructionsData.length.should.equal(4);
|
|
113
|
+
json.instructionsData[0].type.should.equal('CreateAssociatedTokenAccount');
|
|
114
|
+
// Reallocate is a Token-2022 extension instruction, surfaced as a custom instruction
|
|
115
|
+
json.instructionsData[1].type.should.equal('ReallocateConfidentialTransferAccount');
|
|
116
|
+
json.instructionsData[2].type.should.equal('ConfigureConfidentialTransferAccount');
|
|
117
|
+
});
|
|
118
|
+
it('should require at least one CT/ATA instruction', async function () {
|
|
119
|
+
const builder = ctEnablementBuilder();
|
|
120
|
+
builder.version(1).transactionConfig(v1Config);
|
|
121
|
+
await builder.build().should.be.rejectedWith(/At least one confidential transfer instruction/);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlkZW50aWFsRW5hYmxlbWVudFYxLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9jb25maWRlbnRpYWxFbmFibGVtZW50VjEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFDaEIsc0NBQWlGO0FBQ2pGLDhEQUFnRDtBQUNoRCxpREFBNEU7QUFDNUUsNERBQXlEO0FBRXpELFFBQVEsQ0FBQyxtRUFBbUUsRUFBRSxHQUFHLEVBQUU7SUFDakYsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEYsTUFBTSxlQUFlLEdBQUcsOENBQThDLENBQUM7SUFFdkUsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGlDQUFpQyxDQUFDLE1BQU0sQ0FBQztJQUN0RSxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsaUNBQWlDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNoRixNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFFckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXRDLE1BQU0sUUFBUSxHQUFHO1FBQ2YsZ0JBQWdCLEVBQUUsTUFBTztRQUN6QixRQUFRLEVBQUUsS0FBTTtRQUNoQiwyQkFBMkIsRUFBRSxLQUFNO1FBQ25DLFdBQVcsRUFBRSxJQUFLO0tBQ25C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aUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsZ0RBQWdELENBQUMsQ0FBQztJQUNqRyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgQ29uZmlkZW50aWFsVHJhbnNmZXJCdWlsZGVyLCBLZXlQYWlyLCBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvc29sJztcbmltcG9ydCB7IFRPS0VOXzIwMjJfUFJPR1JBTV9JRCwgVG9rZW5JbnN0cnVjdGlvbiB9IGZyb20gJ0Bzb2xhbmEvc3BsLXRva2VuJztcbmltcG9ydCB7IGdldEJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vZ2V0QnVpbGRlckZhY3RvcnknO1xuXG5kZXNjcmliZSgnU29sYW5hIENvbmZpZGVudGlhbCBUcmFuc2ZlciBCdWlsZGVyIC0gQ1QgYWNjb3VudCBlbmFibGVtZW50ICh2MSknLCAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBnZXRCdWlsZGVyRmFjdG9yeSgnc29sJyk7XG4gIGNvbnN0IGFjY291bnQgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5hc3NvY2lhdGVkVG9rZW5BY2NvdW50cy5hY2NvdW50c1swXSkuZ2V0S2V5cygpO1xuICBjb25zdCByZWNlbnRCbG9ja0hhc2ggPSAnR0h0WFFCc29aSFZuTkZhOVlldkF6RnIxN0RKamdIWGszeWNUS0Q1eEQzWmknO1xuXG4gIGNvbnN0IG1pbnRBZGRyZXNzID0gdGVzdERhdGEuYXNzb2NpYXRlZFRva2VuQWNjb3VudHNGb3JTb2wyMDIyLm1pbnRJZDtcbiAgY29uc3QgdG9rZW5BZGRyZXNzID0gdGVzdERhdGEuYXNzb2NpYXRlZFRva2VuQWNjb3VudHNGb3JTb2wyMDIyLmFjY291bnRzWzBdLmF0YTtcbiAgY29uc3QgYXV0aG9yaXR5QWRkcmVzcyA9IGFjY291bnQucHViO1xuXG4gIGNvbnN0IHplcm9CeXRlczM2ID0gJzAwJy5yZXBlYXQoMzYpO1xuICBjb25zdCBwcm9vZkRhdGFIZXggPSAnMDAnLnJlcGVhdCgzMjApO1xuXG4gIGNvbnN0IHYxQ29uZmlnID0ge1xuICAgIGNvbXB1dGVVbml0TGltaXQ6IDIwMF8wMDAsXG4gICAgaGVhcFNpemU6IDMyXzc2OCxcbiAgICBsb2FkZWRBY2NvdW50c0RhdGFTaXplTGltaXQ6IDY1XzUzNixcbiAgICBwcmlvcml0eUZlZTogNV8wMDAsXG4gIH07XG5cbiAgY29uc3QgY3RFbmFibGVtZW50QnVpbGRlciA9ICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldENvbmZpZGVudGlhbFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIoYWNjb3VudC5wdWIpO1xuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcbiAgICByZXR1cm4gdHhCdWlsZGVyO1xuICB9O1xuXG4gIGNvbnN0IGFkZEVuYWJsZW1lbnRJbnN0cnVjdGlvbnMgPSAoYnVpbGRlcjogQ29uZmlkZW50aWFsVHJhbnNmZXJCdWlsZGVyKSA9PiB7XG4gICAgYnVpbGRlclxuICAgICAgLmNyZWF0ZUF0YSh7XG4gICAgICAgIG1pbnRBZGRyZXNzLFxuICAgICAgICBhdGFBZGRyZXNzOiB0b2tlbkFkZHJlc3MsXG4gICAgICAgIG93bmVyQWRkcmVzczogYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgcGF5ZXJBZGRyZXNzOiBhY2NvdW50LnB1YixcbiAgICAgICAgdG9rZW5OYW1lOiAndHNvbDpyYXknLFxuICAgICAgICAvLyBDVCBtaW50cyBhcmUgVG9rZW4tMjAyMiDigJQgdGhlIEFUQSBtdXN0IGJlIGNyZWF0ZWQgdW5kZXIgdGhlIFRva2VuLTIwMjIgcHJvZ3JhbVxuICAgICAgICBwcm9ncmFtSWQ6ICdUb2tlbnpRZEJOYkxxUDVWRWhka0FTNkVQRkxDMVBIbkJxQ1hFcFB4dUViJyxcbiAgICAgIH0pXG4gICAgICAuY29uZmlndXJlQWNjb3VudCh7XG4gICAgICAgIHRva2VuQWRkcmVzcyxcbiAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgIGF1dGhvcml0eUFkZHJlc3MsXG4gICAgICAgIGVsZ2FtYWxQdWJrZXk6ICcxMScucmVwZWF0KDMyKSxcbiAgICAgICAgZGVjcnlwdGFibGVaZXJvQmFsYW5jZTogemVyb0J5dGVzMzYsXG4gICAgICAgIG1heGltdW1QZW5kaW5nQmFsYW5jZUNyZWRpdENvdW50ZXI6ICcxODQ0Njc0NDA3MzcwOTU1MTYxNScsXG4gICAgICAgIHByb29mSW5zdHJ1Y3Rpb25PZmZzZXQ6IDEsXG4gICAgICB9KVxuICAgICAgLnZlcmlmeVB1YmtleVZhbGlkaXR5KHsgcHJvb2ZEYXRhOiBwcm9vZkRhdGFIZXggfSk7XG4gIH07XG5cbiAgaXQoJ3Nob3VsZCBidWlsZCBhIHYxIENUIGVuYWJsZW1lbnQgdHJhbnNhY3Rpb24gKENyZWF0ZUFUQSArIENvbmZpZ3VyZUFjY291bnQgKyBWZXJpZnlQdWJrZXlWYWxpZGl0eSknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYnVpbGRlciA9IGN0RW5hYmxlbWVudEJ1aWxkZXIoKTtcbiAgICBhZGRFbmFibGVtZW50SW5zdHJ1Y3Rpb25zKGJ1aWxkZXIpO1xuICAgIGJ1aWxkZXIudmVyc2lvbigxKS50cmFuc2FjdGlvbkNvbmZpZyh2MUNvbmZpZyk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICh0eCBhcyBUcmFuc2FjdGlvbikuaXNWZXJzaW9uZWRUcmFuc2FjdGlvbigpLnNob3VsZC5lcXVhbCh0cnVlKTtcblxuICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICBjb25zdCB3aXJlID0gQnVmZmVyLmZyb20ocmF3VHgsICdiYXNlNjQnKTtcblxuICAgIC8vIHYxIHZlcnNpb24gYnl0ZSBwcmVmaXhcbiAgICB3aXJlWzBdLnNob3VsZC5lcXVhbCgweDgxKTtcbiAgICAvLyB3aXRoaW4gdGhlIHYxIHdpcmUgc2l6ZSBsaW1pdFxuICAgIHdpcmUubGVuZ3RoLnNob3VsZC5iZS5sZXNzVGhhbk9yRXF1YWwoNDA5Nik7XG5cbiAgICAvLyBtZXRhZGF0YSB0cmFuc2FjdGlvbiBjYXJyaWVzIGFsbCBmb3VyIGluc3RydWN0aW9ucyBpbiBvcmRlcjpcbiAgICAvLyBDcmVhdGVBVEEgLT4gUmVhbGxvY2F0ZSAoQ29uZmlkZW50aWFsVHJhbnNmZXJBY2NvdW50KSAtPiBDb25maWd1cmVBY2NvdW50IC0+IFZlcmlmeVxuICAgIGNvbnN0IHNvbFR4ID0gKHR4IGFzIFRyYW5zYWN0aW9uKS5zb2xUcmFuc2FjdGlvbiE7XG4gICAgc29sVHguaW5zdHJ1Y3Rpb25zLmxlbmd0aC5zaG91bGQuZXF1YWwoNCk7XG4gICAgc29sVHguaW5zdHJ1Y3Rpb25zWzBdLmRhdGFbMF0uc2hvdWxkLmVxdWFsKDEgLyogQVRBIHByb2dyYW0gQ3JlYXRlSWRlbXBvdGVudCBkaXNjcmltaW5hdG9yICovKTtcbiAgICBzb2xUeC5pbnN0cnVjdGlvbnNbMV0ucHJvZ3JhbUlkLnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKFRPS0VOXzIwMjJfUFJPR1JBTV9JRC50b1N0cmluZygpKTtcbiAgICBzb2xUeC5pbnN0cnVjdGlvbnNbMV0uZGF0YVswXS5zaG91bGQuZXF1YWwoVG9rZW5JbnN0cnVjdGlvbi5SZWFsbG9jYXRlKTtcbiAgICBzb2xUeC5pbnN0cnVjdGlvbnNbMl0ucHJvZ3JhbUlkLnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKFRPS0VOXzIwMjJfUFJPR1JBTV9JRC50b1N0cmluZygpKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBrZWVwIGluc3RydWN0aW9uIG9yZGVyIHN0YWJsZSAobm8gQXBwbHlQZW5kaW5nQmFsYW5jZSByZW9yZGVyaW5nIGNvbmNlcm4pJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEVuYWJsZW1lbnRCdWlsZGVyKCk7XG4gICAgYWRkRW5hYmxlbWVudEluc3RydWN0aW9ucyhidWlsZGVyKTtcbiAgICBidWlsZGVyLnZlcnNpb24oMSkudHJhbnNhY3Rpb25Db25maWcodjFDb25maWcpO1xuXG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QganNvbiA9ICh0eCBhcyBUcmFuc2FjdGlvbikudG9Kc29uKCk7XG4gICAganNvbi5pbnN0cnVjdGlvbnNEYXRhLmxlbmd0aC5zaG91bGQuZXF1YWwoNCk7XG4gICAganNvbi5pbnN0cnVjdGlvbnNEYXRhWzBdLnR5cGUuc2hvdWxkLmVxdWFsKCdDcmVhdGVBc3NvY2lhdGVkVG9rZW5BY2NvdW50Jyk7XG4gICAgLy8gUmVhbGxvY2F0ZSBpcyBhIFRva2VuLTIwMjIgZXh0ZW5zaW9uIGluc3RydWN0aW9uLCBzdXJmYWNlZCBhcyBhIGN1c3RvbSBpbnN0cnVjdGlvblxuICAgIGpzb24uaW5zdHJ1Y3Rpb25zRGF0YVsxXS50eXBlLnNob3VsZC5lcXVhbCgnUmVhbGxvY2F0ZUNvbmZpZGVudGlhbFRyYW5zZmVyQWNjb3VudCcpO1xuICAgIGpzb24uaW5zdHJ1Y3Rpb25zRGF0YVsyXS50eXBlLnNob3VsZC5lcXVhbCgnQ29uZmlndXJlQ29uZmlkZW50aWFsVHJhbnNmZXJBY2NvdW50Jyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVxdWlyZSBhdCBsZWFzdCBvbmUgQ1QvQVRBIGluc3RydWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBjdEVuYWJsZW1lbnRCdWlsZGVyKCk7XG4gICAgYnVpbGRlci52ZXJzaW9uKDEpLnRyYW5zYWN0aW9uQ29uZmlnKHYxQ29uZmlnKTtcbiAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvQXQgbGVhc3Qgb25lIGNvbmZpZGVudGlhbCB0cmFuc2ZlciBpbnN0cnVjdGlvbi8pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confidentialTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../../test/unit/transactionBuilder/confidentialTransferBuilder.ts"],"names":[],"mappings":""}
|