@bitgo-beta/sdk-coin-sol 7.6.4-beta.78 → 7.6.4-beta.780
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 @@
|
|
|
1
|
+
{"version":3,"file":"v1PaymentBuilder.d.ts","sourceRoot":"","sources":["../../../../../test/unit/transactionBuilder/v1PaymentBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,138 @@
|
|
|
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 tweetnacl_1 = __importDefault(require("tweetnacl"));
|
|
41
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
42
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
43
|
+
const src_1 = require("../../../src");
|
|
44
|
+
const parseWireTransaction_1 = require("../../../src/lib/serialization/parseWireTransaction");
|
|
45
|
+
const testData = __importStar(require("../../resources/sol"));
|
|
46
|
+
describe('Solana V1 Payment Builder (SIMD-0296/0385) — server-side construction surface', () => {
|
|
47
|
+
const coinConfig = statics_1.coins.get('tsol');
|
|
48
|
+
const user = new src_1.KeyPair(testData.authAccount).getKeys();
|
|
49
|
+
const gasTank = new src_1.KeyPair({ prv: testData.prvKeys.prvKey1.base58 }).getKeys();
|
|
50
|
+
const nonceAccount = new src_1.KeyPair(testData.nonceAccount).getKeys();
|
|
51
|
+
const recipient = 'ENn8a2tGMS9bR5XV7smGHJvNgzkyxJmnD2eUvQxY5jSP';
|
|
52
|
+
const recentBlockHash = 'GHtXQBsoZHVnNFa9YevAzFr17DJjgHXk3ycTKD5xD3Zi';
|
|
53
|
+
const amount = '300000';
|
|
54
|
+
const v1Config = {
|
|
55
|
+
computeUnitLimit: 200000,
|
|
56
|
+
heapSize: 32768,
|
|
57
|
+
loadedAccountsDataSizeLimit: 65536,
|
|
58
|
+
priorityFee: 5000,
|
|
59
|
+
};
|
|
60
|
+
const newBuilder = () => {
|
|
61
|
+
const builder = new src_1.V1PaymentBuilder(coinConfig);
|
|
62
|
+
builder.sender(user.pub);
|
|
63
|
+
builder.send({ address: recipient, amount });
|
|
64
|
+
builder.nonce(recentBlockHash);
|
|
65
|
+
builder.transactionConfig(v1Config);
|
|
66
|
+
return builder;
|
|
67
|
+
};
|
|
68
|
+
const signWith = (keyPair, messageBytes) => {
|
|
69
|
+
const prv = keyPair.prv;
|
|
70
|
+
if (typeof prv !== 'string') {
|
|
71
|
+
throw new Error('Missing private key for test signer');
|
|
72
|
+
}
|
|
73
|
+
const kp = new src_1.KeyPair({ prv });
|
|
74
|
+
return tweetnacl_1.default.sign.detached(messageBytes, kp.getKeys(true).prv);
|
|
75
|
+
};
|
|
76
|
+
it('exposes the structured send() surface', () => {
|
|
77
|
+
const builder = newBuilder();
|
|
78
|
+
builder.send({ address: recipient, amount }).should.equal(builder);
|
|
79
|
+
});
|
|
80
|
+
it('builds a v1 transfer message + signed wire and round-trips through parse', async () => {
|
|
81
|
+
const builder = newBuilder();
|
|
82
|
+
builder.sign({ key: user.prv });
|
|
83
|
+
const tx = (await builder.build());
|
|
84
|
+
tx.v1MessageBytes[0].should.equal(0x81);
|
|
85
|
+
tx.v1TransactionBytes.length.should.equal(tx.v1MessageBytes.length + 64);
|
|
86
|
+
tx.signablePayload.equals(Buffer.from(tx.v1MessageBytes)).should.be.true();
|
|
87
|
+
// the transfer instruction is a SystemProgram transfer (discriminator 2)
|
|
88
|
+
const decoded = (0, src_1.decodeV1Message)(tx.v1MessageBytes);
|
|
89
|
+
decoded.compiledInstructions[0].data[0].should.equal(2);
|
|
90
|
+
decoded.staticAccounts[decoded.compiledInstructions[0].programAddressIndex].should.equal(web3_js_1.SystemProgram.programId.toBase58());
|
|
91
|
+
const parsed = (0, src_1.parseWireTransaction)(tx.v1TransactionBytes);
|
|
92
|
+
parsed.signerPublicKeys.should.deepEqual([user.pub]);
|
|
93
|
+
(0, parseWireTransaction_1.verifyV1Signatures)(parsed.messageBytes, parsed.signatures, parsed.signerPublicKeys);
|
|
94
|
+
});
|
|
95
|
+
it('injects the AdvanceNonceAccount instruction and assembles user + gas-tank signatures in signer order', async () => {
|
|
96
|
+
const builder = newBuilder();
|
|
97
|
+
builder.nonce(recentBlockHash, {
|
|
98
|
+
walletNonceAddress: nonceAccount.pub,
|
|
99
|
+
authWalletAddress: gasTank.pub,
|
|
100
|
+
});
|
|
101
|
+
builder.sign({ key: user.prv });
|
|
102
|
+
const unsigned = (await builder.build());
|
|
103
|
+
const messageBytes = unsigned.v1MessageBytes;
|
|
104
|
+
// 2 required signers: user (fee payer) + gas-tank nonce authority
|
|
105
|
+
messageBytes[1].should.equal(2);
|
|
106
|
+
const decoded = (0, src_1.decodeV1Message)(messageBytes);
|
|
107
|
+
// nonce hash occupies the blockhash field
|
|
108
|
+
decoded.blockhash.should.equal(recentBlockHash);
|
|
109
|
+
// first instruction is AdvanceNonceAccount (System Program, discriminator 4)
|
|
110
|
+
decoded.compiledInstructions[0].data[0].should.equal(4);
|
|
111
|
+
decoded.staticAccounts[decoded.compiledInstructions[0].programAddressIndex].should.equal(web3_js_1.SystemProgram.programId.toBase58());
|
|
112
|
+
// signer order: fee payer (user) first, then gas tank
|
|
113
|
+
decoded.staticAccounts.slice(0, 2).should.deepEqual([user.pub, gasTank.pub]);
|
|
114
|
+
// attach the gas-tank HSM signature over the same message bytes
|
|
115
|
+
const gasTankSig = signWith(gasTank, messageBytes);
|
|
116
|
+
builder.addSignature({ pub: gasTank.pub }, Buffer.from(gasTankSig));
|
|
117
|
+
const signed = (await builder.build());
|
|
118
|
+
// message byte-identity between build and sign
|
|
119
|
+
Buffer.from(signed.v1MessageBytes).equals(Buffer.from(messageBytes)).should.be.true();
|
|
120
|
+
signed.v1TransactionBytes.length.should.equal(messageBytes.length + 2 * 64);
|
|
121
|
+
const parsed = (0, src_1.parseWireTransaction)(signed.v1TransactionBytes);
|
|
122
|
+
parsed.signerPublicKeys.should.deepEqual([user.pub, gasTank.pub]);
|
|
123
|
+
(0, parseWireTransaction_1.verifyV1Signatures)(parsed.messageBytes, parsed.signatures, parsed.signerPublicKeys);
|
|
124
|
+
});
|
|
125
|
+
it('throws when transactionConfig is missing', async () => {
|
|
126
|
+
const builder = new src_1.V1PaymentBuilder(coinConfig);
|
|
127
|
+
builder.sender(user.pub);
|
|
128
|
+
builder.send({ address: recipient, amount });
|
|
129
|
+
builder.nonce(recentBlockHash);
|
|
130
|
+
await builder.build().should.be.rejectedWith(/transactionConfig is required/);
|
|
131
|
+
});
|
|
132
|
+
it('validates recipient address and amount', () => {
|
|
133
|
+
const builder = new src_1.V1PaymentBuilder(coinConfig);
|
|
134
|
+
should_1.default.throws(() => builder.send({ address: 'not-an-address', amount }), /address/);
|
|
135
|
+
should_1.default.throws(() => builder.send({ address: recipient, amount: 'abc' }), /amount/);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjFQYXltZW50QnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvdjFQYXltZW50QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QiwwREFBNkI7QUFDN0IsaURBQTRDO0FBQzVDLDZDQUFnRDtBQUNoRCxzQ0FBNkc7QUFDN0csOEZBQXlGO0FBRXpGLDhEQUFnRDtBQUVoRCxRQUFRLENBQUMsK0VBQStFLEVBQUUsR0FBRyxFQUFFO0lBQzdGLE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxhQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3pELE1BQU0sT0FBTyxHQUFHLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDaEYsTUFBTSxZQUFZLEdBQUcsSUFBSSxhQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xFLE1BQU0sU0FBUyxHQUFHLDhDQUE4QyxDQUFDO0lBQ2pFLE1BQU0sZUFBZSxHQUFHLDhDQUE4QyxDQUFDO0lBQ3ZFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztJQUV4QixNQUFNLFFBQVEsR0FBRztRQUNmLGdCQUFnQixFQUFFLE1BQU87UUFDekIsUUFBUSxFQUFFLEtBQU07UUFDaEIsMkJBQTJCLEVBQUUsS0FBTTtRQUNuQyxXQUFXLEVBQUUsSUFBSztLQUNuQixDQUFDO0lBRUYsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFO1FBQ3RC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cnQgbmFjbCBmcm9tICd0d2VldG5hY2wnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFN5c3RlbVByb2dyYW0gfSBmcm9tICdAc29sYW5hL3dlYjMuanMnO1xuaW1wb3J0IHsgZGVjb2RlVjFNZXNzYWdlLCBLZXlQYWlyLCBwYXJzZVdpcmVUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb24sIFYxUGF5bWVudEJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgdmVyaWZ5VjFTaWduYXR1cmVzIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9zZXJpYWxpemF0aW9uL3BhcnNlV2lyZVRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFNvbGFuYUtleXMgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2lmYWNlJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uLy4uL3Jlc291cmNlcy9zb2wnO1xuXG5kZXNjcmliZSgnU29sYW5hIFYxIFBheW1lbnQgQnVpbGRlciAoU0lNRC0wMjk2LzAzODUpIOKAlCBzZXJ2ZXItc2lkZSBjb25zdHJ1Y3Rpb24gc3VyZmFjZScsICgpID0+IHtcbiAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCgndHNvbCcpO1xuICBjb25zdCB1c2VyID0gbmV3IEtleVBhaXIodGVzdERhdGEuYXV0aEFjY291bnQpLmdldEtleXMoKTtcbiAgY29uc3QgZ2FzVGFuayA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5wcnZLZXlzLnBydktleTEuYmFzZTU4IH0pLmdldEtleXMoKTtcbiAgY29uc3Qgbm9uY2VBY2NvdW50ID0gbmV3IEtleVBhaXIodGVzdERhdGEubm9uY2VBY2NvdW50KS5nZXRLZXlzKCk7XG4gIGNvbnN0IHJlY2lwaWVudCA9ICdFTm44YTJ0R01TOWJSNVhWN3NtR0hKdk5nemt5eEptbkQyZVV2UXhZNWpTUCc7XG4gIGNvbnN0IHJlY2VudEJsb2NrSGFzaCA9ICdHSHRYUUJzb1pIVm5ORmE5WWV2QXpGcjE3REpqZ0hYazN5Y1RLRDV4RDNaaSc7XG4gIGNvbnN0IGFtb3VudCA9ICczMDAwMDAnO1xuXG4gIGNvbnN0IHYxQ29uZmlnID0ge1xuICAgIGNvbXB1dGVVbml0TGltaXQ6IDIwMF8wMDAsXG4gICAgaGVhcFNpemU6IDMyXzc2OCxcbiAgICBsb2FkZWRBY2NvdW50c0RhdGFTaXplTGltaXQ6IDY1XzUzNixcbiAgICBwcmlvcml0eUZlZTogNV8wMDAsXG4gIH07XG5cbiAgY29uc3QgbmV3QnVpbGRlciA9ICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gbmV3IFYxUGF5bWVudEJ1aWxkZXIoY29pbkNvbmZpZyk7XG4gICAgYnVpbGRlci5zZW5kZXIodXNlci5wdWIpO1xuICAgIGJ1aWxkZXIuc2VuZCh7IGFkZHJlc3M6IHJlY2lwaWVudCwgYW1vdW50IH0pO1xuICAgIGJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICBidWlsZGVyLnRyYW5zYWN0aW9uQ29uZmlnKHYxQ29uZmlnKTtcbiAgICByZXR1cm4gYnVpbGRlcjtcbiAgfTtcblxuICBjb25zdCBzaWduV2l0aCA9IChrZXlQYWlyOiBTb2xhbmFLZXlzLCBtZXNzYWdlQnl0ZXM6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5ID0+IHtcbiAgICBjb25zdCBwcnYgPSBrZXlQYWlyLnBydjtcbiAgICBpZiAodHlwZW9mIHBydiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwcml2YXRlIGtleSBmb3IgdGVzdCBzaWduZXInKTtcbiAgICB9XG4gICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcih7IHBydiB9KTtcbiAgICByZXR1cm4gbmFjbC5zaWduLmRldGFjaGVkKG1lc3NhZ2VCeXRlcywga3AuZ2V0S2V5cyh0cnVlKS5wcnYgYXMgVWludDhBcnJheSk7XG4gIH07XG5cbiAgaXQoJ2V4cG9zZXMgdGhlIHN0cnVjdHVyZWQgc2VuZCgpIHN1cmZhY2UnLCAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ld0J1aWxkZXIoKTtcbiAgICBidWlsZGVyLnNlbmQoeyBhZGRyZXNzOiByZWNpcGllbnQsIGFtb3VudCB9KS5zaG91bGQuZXF1YWwoYnVpbGRlcik7XG4gIH0pO1xuXG4gIGl0KCdidWlsZHMgYSB2MSB0cmFuc2ZlciBtZXNzYWdlICsgc2lnbmVkIHdpcmUgYW5kIHJvdW5kLXRyaXBzIHRocm91Z2ggcGFyc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ld0J1aWxkZXIoKTtcbiAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHVzZXIucHJ2IH0pO1xuICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICB0eC52MU1lc3NhZ2VCeXRlcyFbMF0uc2hvdWxkLmVxdWFsKDB4ODEpO1xuICAgIHR4LnYxVHJhbnNhY3Rpb25CeXRlcyEubGVuZ3RoLnNob3VsZC5lcXVhbCh0eC52MU1lc3NhZ2VCeXRlcyEubGVuZ3RoICsgNjQpO1xuICAgIHR4LnNpZ25hYmxlUGF5bG9hZC5lcXVhbHMoQnVmZmVyLmZyb20odHgudjFNZXNzYWdlQnl0ZXMhKSkuc2hvdWxkLmJlLnRydWUoKTtcblxuICAgIC8vIHRoZSB0cmFuc2ZlciBpbnN0cnVjdGlvbiBpcyBhIFN5c3RlbVByb2dyYW0gdHJhbnNmZXIgKGRpc2NyaW1pbmF0b3IgMilcbiAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVjFNZXNzYWdlKHR4LnYxTWVzc2FnZUJ5dGVzISk7XG4gICAgZGVjb2RlZC5jb21waWxlZEluc3RydWN0aW9uc1swXS5kYXRhWzBdLnNob3VsZC5lcXVhbCgyKTtcbiAgICBkZWNvZGVkLnN0YXRpY0FjY291bnRzW2RlY29kZWQuY29tcGlsZWRJbnN0cnVjdGlvbnNbMF0ucHJvZ3JhbUFkZHJlc3NJbmRleF0uc2hvdWxkLmVxdWFsKFxuICAgICAgU3lzdGVtUHJvZ3JhbS5wcm9ncmFtSWQudG9CYXNlNTgoKVxuICAgICk7XG5cbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVdpcmVUcmFuc2FjdGlvbih0eC52MVRyYW5zYWN0aW9uQnl0ZXMhKTtcbiAgICBwYXJzZWQuc2lnbmVyUHVibGljS2V5cy5zaG91bGQuZGVlcEVxdWFsKFt1c2VyLnB1Yl0pO1xuICAgIHZlcmlmeVYxU2lnbmF0dXJlcyhwYXJzZWQubWVzc2FnZUJ5dGVzLCBwYXJzZWQuc2lnbmF0dXJlcywgcGFyc2VkLnNpZ25lclB1YmxpY0tleXMpO1xuICB9KTtcblxuICBpdCgnaW5qZWN0cyB0aGUgQWR2YW5jZU5vbmNlQWNjb3VudCBpbnN0cnVjdGlvbiBhbmQgYXNzZW1ibGVzIHVzZXIgKyBnYXMtdGFuayBzaWduYXR1cmVzIGluIHNpZ25lciBvcmRlcicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gbmV3QnVpbGRlcigpO1xuICAgIGJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7XG4gICAgICB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlQWNjb3VudC5wdWIsXG4gICAgICBhdXRoV2FsbGV0QWRkcmVzczogZ2FzVGFuay5wdWIsXG4gICAgfSk7XG4gICAgYnVpbGRlci5zaWduKHsga2V5OiB1c2VyLnBydiB9KTtcblxuICAgIGNvbnN0IHVuc2lnbmVkID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgY29uc3QgbWVzc2FnZUJ5dGVzID0gdW5zaWduZWQudjFNZXNzYWdlQnl0ZXMhO1xuXG4gICAgLy8gMiByZXF1aXJlZCBzaWduZXJzOiB1c2VyIChmZWUgcGF5ZXIpICsgZ2FzLXRhbmsgbm9uY2UgYXV0aG9yaXR5XG4gICAgbWVzc2FnZUJ5dGVzWzFdLnNob3VsZC5lcXVhbCgyKTtcblxuICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVWMU1lc3NhZ2UobWVzc2FnZUJ5dGVzKTtcbiAgICAvLyBub25jZSBoYXNoIG9jY3VwaWVzIHRoZSBibG9ja2hhc2ggZmllbGRcbiAgICBkZWNvZGVkLmJsb2NraGFzaC5zaG91bGQuZXF1YWwocmVjZW50QmxvY2tIYXNoKTtcbiAgICAvLyBmaXJzdCBpbnN0cnVjdGlvbiBpcyBBZHZhbmNlTm9uY2VBY2NvdW50IChTeXN0ZW0gUHJvZ3JhbSwgZGlzY3JpbWluYXRvciA0KVxuICAgIGRlY29kZWQuY29tcGlsZWRJbnN0cnVjdGlvbnNbMF0uZGF0YVswXS5zaG91bGQuZXF1YWwoNCk7XG4gICAgZGVjb2RlZC5zdGF0aWNBY2NvdW50c1tkZWNvZGVkLmNvbXBpbGVkSW5zdHJ1Y3Rpb25zWzBdLnByb2dyYW1BZGRyZXNzSW5kZXhdLnNob3VsZC5lcXVhbChcbiAgICAgIFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLnRvQmFzZTU4KClcbiAgICApO1xuICAgIC8vIHNpZ25lciBvcmRlcjogZmVlIHBheWVyICh1c2VyKSBmaXJzdCwgdGhlbiBnYXMgdGFua1xuICAgIGRlY29kZWQuc3RhdGljQWNjb3VudHMuc2xpY2UoMCwgMikuc2hvdWxkLmRlZXBFcXVhbChbdXNlci5wdWIsIGdhc1RhbmsucHViXSk7XG5cbiAgICAvLyBhdHRhY2ggdGhlIGdhcy10YW5rIEhTTSBzaWduYXR1cmUgb3ZlciB0aGUgc2FtZSBtZXNzYWdlIGJ5dGVzXG4gICAgY29uc3QgZ2FzVGFua1NpZyA9IHNpZ25XaXRoKGdhc1RhbmssIG1lc3NhZ2VCeXRlcyk7XG4gICAgYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IGdhc1RhbmsucHViIH0sIEJ1ZmZlci5mcm9tKGdhc1RhbmtTaWcpKTtcbiAgICBjb25zdCBzaWduZWQgPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcblxuICAgIC8vIG1lc3NhZ2UgYnl0ZS1pZGVudGl0eSBiZXR3ZWVuIGJ1aWxkIGFuZCBzaWduXG4gICAgQnVmZmVyLmZyb20oc2lnbmVkLnYxTWVzc2FnZUJ5dGVzISkuZXF1YWxzKEJ1ZmZlci5mcm9tKG1lc3NhZ2VCeXRlcykpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgc2lnbmVkLnYxVHJhbnNhY3Rpb25CeXRlcyEubGVuZ3RoLnNob3VsZC5lcXVhbChtZXNzYWdlQnl0ZXMubGVuZ3RoICsgMiAqIDY0KTtcblxuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlV2lyZVRyYW5zYWN0aW9uKHNpZ25lZC52MVRyYW5zYWN0aW9uQnl0ZXMhKTtcbiAgICBwYXJzZWQuc2lnbmVyUHVibGljS2V5cy5zaG91bGQuZGVlcEVxdWFsKFt1c2VyLnB1YiwgZ2FzVGFuay5wdWJdKTtcbiAgICB2ZXJpZnlWMVNpZ25hdHVyZXMocGFyc2VkLm1lc3NhZ2VCeXRlcywgcGFyc2VkLnNpZ25hdHVyZXMsIHBhcnNlZC5zaWduZXJQdWJsaWNLZXlzKTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyB3aGVuIHRyYW5zYWN0aW9uQ29uZmlnIGlzIG1pc3NpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBWMVBheW1lbnRCdWlsZGVyKGNvaW5Db25maWcpO1xuICAgIGJ1aWxkZXIuc2VuZGVyKHVzZXIucHViKTtcbiAgICBidWlsZGVyLnNlbmQoeyBhZGRyZXNzOiByZWNpcGllbnQsIGFtb3VudCB9KTtcbiAgICBidWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3RyYW5zYWN0aW9uQ29uZmlnIGlzIHJlcXVpcmVkLyk7XG4gIH0pO1xuXG4gIGl0KCd2YWxpZGF0ZXMgcmVjaXBpZW50IGFkZHJlc3MgYW5kIGFtb3VudCcsICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gbmV3IFYxUGF5bWVudEJ1aWxkZXIoY29pbkNvbmZpZyk7XG4gICAgc2hvdWxkLnRocm93cygoKSA9PiBidWlsZGVyLnNlbmQoeyBhZGRyZXNzOiAnbm90LWFuLWFkZHJlc3MnLCBhbW91bnQgfSksIC9hZGRyZXNzLyk7XG4gICAgc2hvdWxkLnRocm93cygoKSA9PiBidWlsZGVyLnNlbmQoeyBhZGRyZXNzOiByZWNpcGllbnQsIGFtb3VudDogJ2FiYycgfSksIC9hbW91bnQvKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v1TransactionBuilder.d.ts","sourceRoot":"","sources":["../../../../../test/unit/transactionBuilder/v1TransactionBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,331 @@
|
|
|
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 tweetnacl_1 = __importDefault(require("tweetnacl"));
|
|
41
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
42
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
43
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
44
|
+
const bs58_1 = __importDefault(require("bs58"));
|
|
45
|
+
const src_1 = require("../../../src");
|
|
46
|
+
const parseWireTransaction_1 = require("../../../src/lib/serialization/parseWireTransaction");
|
|
47
|
+
const constants_1 = require("../../../src/lib/constants");
|
|
48
|
+
const v1CustomInstructionBuilder_1 = require("../../../src/lib/v1CustomInstructionBuilder");
|
|
49
|
+
const testData = __importStar(require("../../resources/sol"));
|
|
50
|
+
class TestV1Builder extends src_1.V1TransactionBuilder {
|
|
51
|
+
get transactionType() {
|
|
52
|
+
return sdk_core_1.TransactionType.Send;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
describe('Solana V1 Transaction Builder (SIMD-0296/0385)', () => {
|
|
56
|
+
const coinConfig = statics_1.coins.get('tsol');
|
|
57
|
+
const user = new src_1.KeyPair(testData.authAccount).getKeys();
|
|
58
|
+
const gasTank = new src_1.KeyPair({ prv: testData.prvKeys.prvKey1.base58 }).getKeys();
|
|
59
|
+
const nonceAccount = new src_1.KeyPair(testData.nonceAccount).getKeys();
|
|
60
|
+
const recipient = 'ENn8a2tGMS9bR5XV7smGHJvNgzkyxJmnD2eUvQxY5jSP';
|
|
61
|
+
const recentBlockHash = 'GHtXQBsoZHVnNFa9YevAzFr17DJjgHXk3ycTKD5xD3Zi';
|
|
62
|
+
const amount = '300000';
|
|
63
|
+
const v1Config = {
|
|
64
|
+
computeUnitLimit: 200000,
|
|
65
|
+
heapSize: 32768,
|
|
66
|
+
loadedAccountsDataSizeLimit: 65536,
|
|
67
|
+
priorityFee: 5000,
|
|
68
|
+
};
|
|
69
|
+
const transfer = {
|
|
70
|
+
type: constants_1.InstructionBuilderTypes.Transfer,
|
|
71
|
+
params: { fromAddress: user.pub, toAddress: recipient, amount },
|
|
72
|
+
};
|
|
73
|
+
const newBuilder = () => {
|
|
74
|
+
const builder = new TestV1Builder(coinConfig);
|
|
75
|
+
builder.sender(user.pub);
|
|
76
|
+
builder.nonce(recentBlockHash);
|
|
77
|
+
builder.instructions([transfer]);
|
|
78
|
+
builder.transactionConfig(v1Config);
|
|
79
|
+
return builder;
|
|
80
|
+
};
|
|
81
|
+
const signWith = (keyPair, messageBytes) => {
|
|
82
|
+
const prv = keyPair.prv;
|
|
83
|
+
if (typeof prv !== 'string') {
|
|
84
|
+
throw new Error('Missing private key for test signer');
|
|
85
|
+
}
|
|
86
|
+
const kp = new src_1.KeyPair({ prv });
|
|
87
|
+
return tweetnacl_1.default.sign.detached(messageBytes, kp.getKeys(true).prv);
|
|
88
|
+
};
|
|
89
|
+
describe('single signer', () => {
|
|
90
|
+
it('builds a v1 message + signed wire and round-trips through parse', async () => {
|
|
91
|
+
const builder = newBuilder();
|
|
92
|
+
builder.sign({ key: user.prv });
|
|
93
|
+
const tx = (await builder.build());
|
|
94
|
+
tx.v1MessageBytes[0].should.equal(0x81);
|
|
95
|
+
tx.v1TransactionBytes.length.should.equal(tx.v1MessageBytes.length + 64);
|
|
96
|
+
// signable payload is the message bytes
|
|
97
|
+
tx.signablePayload.equals(Buffer.from(tx.v1MessageBytes)).should.be.true();
|
|
98
|
+
const parsed = (0, src_1.parseWireTransaction)(tx.v1TransactionBytes);
|
|
99
|
+
parsed.signerPublicKeys.should.deepEqual([user.pub]);
|
|
100
|
+
(0, parseWireTransaction_1.verifyV1Signatures)(parsed.messageBytes, parsed.signatures, parsed.signerPublicKeys);
|
|
101
|
+
// broadcast format round-trips through from()
|
|
102
|
+
const raw = tx.toBroadcastFormat();
|
|
103
|
+
const reparsed = new TestV1Builder(coinConfig);
|
|
104
|
+
reparsed.from(raw);
|
|
105
|
+
reparsed.transaction.toBroadcastFormat().should.equal(raw);
|
|
106
|
+
});
|
|
107
|
+
it('throws when transactionConfig is missing', async () => {
|
|
108
|
+
const builder = new TestV1Builder(coinConfig);
|
|
109
|
+
builder.sender(user.pub);
|
|
110
|
+
builder.nonce(recentBlockHash);
|
|
111
|
+
builder.instructions([transfer]);
|
|
112
|
+
await builder.build().should.be.rejectedWith(/transactionConfig is required/);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('durable nonce (2 signatures)', () => {
|
|
116
|
+
it('injects the AdvanceNonceAccount instruction and assembles user + gas-tank signatures in signer order', async () => {
|
|
117
|
+
const builder = newBuilder();
|
|
118
|
+
builder.nonce(recentBlockHash, {
|
|
119
|
+
walletNonceAddress: nonceAccount.pub,
|
|
120
|
+
authWalletAddress: gasTank.pub,
|
|
121
|
+
});
|
|
122
|
+
builder.sign({ key: user.prv });
|
|
123
|
+
const unsigned = (await builder.build());
|
|
124
|
+
const messageBytes = unsigned.v1MessageBytes;
|
|
125
|
+
// 2 required signers: user (fee payer) + gas-tank nonce authority
|
|
126
|
+
messageBytes[1].should.equal(2);
|
|
127
|
+
const decoded = (0, src_1.decodeV1Message)(messageBytes);
|
|
128
|
+
// nonce hash occupies the blockhash field
|
|
129
|
+
decoded.blockhash.should.equal(recentBlockHash);
|
|
130
|
+
// first instruction is AdvanceNonceAccount (System Program, discriminator 4)
|
|
131
|
+
decoded.compiledInstructions[0].data[0].should.equal(4);
|
|
132
|
+
decoded.staticAccounts[decoded.compiledInstructions[0].programAddressIndex].should.equal(web3_js_1.SystemProgram.programId.toBase58());
|
|
133
|
+
// signer order: fee payer (user) first, then gas tank
|
|
134
|
+
decoded.staticAccounts.slice(0, 2).should.deepEqual([user.pub, gasTank.pub]);
|
|
135
|
+
// attach the gas-tank HSM signature over the same message bytes
|
|
136
|
+
const gasTankSig = signWith(gasTank, messageBytes);
|
|
137
|
+
builder.addSignature({ pub: gasTank.pub }, Buffer.from(gasTankSig));
|
|
138
|
+
const signed = (await builder.build());
|
|
139
|
+
// message byte-identity between build and sign
|
|
140
|
+
signed.v1MessageBytes.should.deepEqual(messageBytes);
|
|
141
|
+
const parsed = (0, src_1.parseWireTransaction)(signed.v1TransactionBytes);
|
|
142
|
+
parsed.signerPublicKeys.should.deepEqual([user.pub, gasTank.pub]);
|
|
143
|
+
(0, parseWireTransaction_1.verifyV1Signatures)(parsed.messageBytes, parsed.signatures, parsed.signerPublicKeys);
|
|
144
|
+
});
|
|
145
|
+
it('orders signatures by the compiled message when the gas tank is the fee payer', async () => {
|
|
146
|
+
const builder = newBuilder();
|
|
147
|
+
builder.nonce(recentBlockHash, {
|
|
148
|
+
walletNonceAddress: nonceAccount.pub,
|
|
149
|
+
authWalletAddress: gasTank.pub,
|
|
150
|
+
});
|
|
151
|
+
builder.feePayer(gasTank.pub);
|
|
152
|
+
builder.sign({ key: user.prv });
|
|
153
|
+
const unsigned = (await builder.build());
|
|
154
|
+
const messageBytes = unsigned.v1MessageBytes;
|
|
155
|
+
const decoded = (0, src_1.decodeV1Message)(messageBytes);
|
|
156
|
+
// gas tank (fee payer) is the first signer, user second
|
|
157
|
+
decoded.staticAccounts.slice(0, 2).should.deepEqual([gasTank.pub, user.pub]);
|
|
158
|
+
const userSig = signWith(user, messageBytes);
|
|
159
|
+
const gasTankSig = signWith(gasTank, messageBytes);
|
|
160
|
+
builder.addSignature({ pub: user.pub }, Buffer.from(userSig));
|
|
161
|
+
builder.addSignature({ pub: gasTank.pub }, Buffer.from(gasTankSig));
|
|
162
|
+
const signed = (await builder.build());
|
|
163
|
+
const parsed = (0, src_1.parseWireTransaction)(signed.v1TransactionBytes);
|
|
164
|
+
parsed.signerPublicKeys.should.deepEqual([gasTank.pub, user.pub]);
|
|
165
|
+
(0, parseWireTransaction_1.verifyV1Signatures)(parsed.messageBytes, parsed.signatures, parsed.signerPublicKeys);
|
|
166
|
+
});
|
|
167
|
+
it('zero-fills a missing signature slot so the wire shape stays valid', async () => {
|
|
168
|
+
const builder = newBuilder();
|
|
169
|
+
builder.nonce(recentBlockHash, {
|
|
170
|
+
walletNonceAddress: nonceAccount.pub,
|
|
171
|
+
authWalletAddress: gasTank.pub,
|
|
172
|
+
});
|
|
173
|
+
builder.sign({ key: user.prv });
|
|
174
|
+
const tx = (await builder.build());
|
|
175
|
+
const parsed = (0, src_1.parseWireTransaction)(tx.v1TransactionBytes);
|
|
176
|
+
parsed.signerPublicKeys.should.deepEqual([user.pub, gasTank.pub]);
|
|
177
|
+
parsed.signatures[0].some((b) => b !== 0).should.be.true();
|
|
178
|
+
parsed.signatures[1].every((b) => b === 0).should.be.true();
|
|
179
|
+
should_1.default.throws(() => (0, parseWireTransaction_1.verifyV1Signatures)(parsed.messageBytes, parsed.signatures, parsed.signerPublicKeys));
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
describe('buildAdvanceNonceAccountInstruction', () => {
|
|
183
|
+
it('constructs the nonce advance instruction with the authority as signer', () => {
|
|
184
|
+
const ix = (0, src_1.buildAdvanceNonceAccountInstruction)(nonceAccount.pub, gasTank.pub);
|
|
185
|
+
ix.programId.toBase58().should.equal(web3_js_1.SystemProgram.programId.toBase58());
|
|
186
|
+
ix.data[0].should.equal(4);
|
|
187
|
+
ix.keys[0].pubkey.toBase58().should.equal(nonceAccount.pub);
|
|
188
|
+
ix.keys[0].isWritable.should.be.true();
|
|
189
|
+
ix.keys[0].isSigner.should.be.false();
|
|
190
|
+
// web3.js nonceAdvance includes the recent-blockhashes sysvar as the second key
|
|
191
|
+
ix.keys[1].pubkey.toBase58().should.equal('SysvarRecentB1ockHashes11111111111111111111');
|
|
192
|
+
ix.keys[2].pubkey.toBase58().should.equal(gasTank.pub);
|
|
193
|
+
ix.keys[2].isSigner.should.be.true();
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
describe('nonce validation', () => {
|
|
197
|
+
it('rejects an invalid blockhash', () => {
|
|
198
|
+
const builder = newBuilder();
|
|
199
|
+
should_1.default.throws(() => builder.nonce('not-a-blockhash'), /Invalid or missing blockHash/);
|
|
200
|
+
});
|
|
201
|
+
it('rejects a nonce whose authority equals the nonce account', () => {
|
|
202
|
+
const builder = newBuilder();
|
|
203
|
+
should_1.default.throws(() => builder.nonce(recentBlockHash, { walletNonceAddress: user.pub, authWalletAddress: user.pub }), /walletNonceAddress cannot be equal to authWalletAddress/);
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
describe('from()', () => {
|
|
207
|
+
it('parses a signed v1 wire and exposes toJson via the metadata transaction', async () => {
|
|
208
|
+
const builder = newBuilder();
|
|
209
|
+
builder.sign({ key: user.prv });
|
|
210
|
+
const tx = (await builder.build());
|
|
211
|
+
const raw = tx.toBroadcastFormat();
|
|
212
|
+
const reparsed = new TestV1Builder(coinConfig);
|
|
213
|
+
reparsed.from(raw);
|
|
214
|
+
const reparsedTx = reparsed.transaction;
|
|
215
|
+
reparsedTx.toBroadcastFormat().should.equal(raw);
|
|
216
|
+
const json = reparsedTx.toJson();
|
|
217
|
+
json.nonce.should.equal(recentBlockHash);
|
|
218
|
+
json.numSignatures.should.equal(1);
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
describe('V1CustomInstructionBuilder', function () {
|
|
223
|
+
const coinConfig = statics_1.coins.get('tsol');
|
|
224
|
+
const user = new src_1.KeyPair(testData.authAccount).getKeys();
|
|
225
|
+
const gasTank = new src_1.KeyPair({ prv: testData.prvKeys.prvKey1.base58 }).getKeys();
|
|
226
|
+
const nonceAccount = new src_1.KeyPair(testData.nonceAccount).getKeys();
|
|
227
|
+
const recentBlockHash = 'GHtXQBsoZHVnNFa9YevAzFr17DJjgHXk3ycTKD5xD3Zi';
|
|
228
|
+
const v1Config = {
|
|
229
|
+
computeUnitLimit: 200000,
|
|
230
|
+
heapSize: 32768,
|
|
231
|
+
loadedAccountsDataSizeLimit: 65536,
|
|
232
|
+
priorityFee: 5000,
|
|
233
|
+
};
|
|
234
|
+
const signWith = (keyPair, messageBytes) => {
|
|
235
|
+
const prv = keyPair.prv;
|
|
236
|
+
if (typeof prv !== 'string') {
|
|
237
|
+
throw new Error('Missing private key for test signer');
|
|
238
|
+
}
|
|
239
|
+
const kp = new src_1.KeyPair({ prv });
|
|
240
|
+
return tweetnacl_1.default.sign.detached(messageBytes, kp.getKeys(true).prv);
|
|
241
|
+
};
|
|
242
|
+
it('builds a v1 transaction from a custom instruction + 2 signatures in signer order', async function () {
|
|
243
|
+
const recipient = 'C3sGf4xZb7kP1mQr8tYw9uVx2nD5hJ6aLcE4oRqS7iB';
|
|
244
|
+
const builder = new v1CustomInstructionBuilder_1.V1CustomInstructionBuilder(coinConfig);
|
|
245
|
+
builder.sender(user.pub);
|
|
246
|
+
builder.nonce(recentBlockHash, { walletNonceAddress: nonceAccount.pub, authWalletAddress: gasTank.pub });
|
|
247
|
+
builder.transactionConfig(v1Config);
|
|
248
|
+
builder.addInstruction(web3_js_1.SystemProgram.transfer({
|
|
249
|
+
fromPubkey: new web3_js_1.PublicKey(user.pub),
|
|
250
|
+
toPubkey: new web3_js_1.PublicKey(recipient),
|
|
251
|
+
lamports: 1000000,
|
|
252
|
+
}));
|
|
253
|
+
builder.sign({ key: user.prv });
|
|
254
|
+
const unsigned = (await builder.build());
|
|
255
|
+
const gasTankSig = signWith(gasTank, unsigned.v1MessageBytes);
|
|
256
|
+
builder.addSignature({ pub: gasTank.pub }, Buffer.from(gasTankSig));
|
|
257
|
+
const signed = (await builder.build());
|
|
258
|
+
const parsed = (0, src_1.parseWireTransaction)(signed.v1TransactionBytes);
|
|
259
|
+
parsed.signerPublicKeys.should.deepEqual([user.pub, gasTank.pub]);
|
|
260
|
+
(0, parseWireTransaction_1.verifyV1Signatures)(parsed.messageBytes, parsed.signatures, parsed.signerPublicKeys);
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
describe('V1TransactionBuilder envelope surface (fromVersionedData + SDK injector)', function () {
|
|
264
|
+
const coinConfig = statics_1.coins.get('tsol');
|
|
265
|
+
const user = new src_1.KeyPair(testData.authAccount).getKeys();
|
|
266
|
+
const gasTank = new src_1.KeyPair({ prv: testData.prvKeys.prvKey1.base58 }).getKeys();
|
|
267
|
+
const nonceAccount = new src_1.KeyPair(testData.nonceAccount).getKeys();
|
|
268
|
+
const recentBlockHash = 'GHtXQBsoZHVnNFa9YevAzFr17DJjgHXk3ycTKD5xD3Zi';
|
|
269
|
+
const envelope = {
|
|
270
|
+
version: 1,
|
|
271
|
+
versionedInstructions: [
|
|
272
|
+
{ programIdIndex: 1, accountKeyIndexes: [0, 1], data: '2UzHM' }, // base58 of 0x01000000
|
|
273
|
+
],
|
|
274
|
+
addressLookupTables: [],
|
|
275
|
+
staticAccountKeys: [user.pub, 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'],
|
|
276
|
+
messageHeader: { numRequiredSignatures: 1, numReadonlySignedAccounts: 0, numReadonlyUnsignedAccounts: 1 },
|
|
277
|
+
transactionConfig: {
|
|
278
|
+
computeUnitLimit: 200000,
|
|
279
|
+
heapSize: 32768,
|
|
280
|
+
loadedAccountsDataSizeLimit: null,
|
|
281
|
+
priorityFee: null,
|
|
282
|
+
},
|
|
283
|
+
};
|
|
284
|
+
it('fromVersionedData builds the same v1 message as manual addInstruction', async function () {
|
|
285
|
+
const fromData = new v1CustomInstructionBuilder_1.V1CustomInstructionBuilder(coinConfig);
|
|
286
|
+
fromData.fromVersionedData(envelope);
|
|
287
|
+
fromData.nonce(recentBlockHash);
|
|
288
|
+
fromData.sign({ key: user.prv });
|
|
289
|
+
const a = (await fromData.build());
|
|
290
|
+
const manual = new v1CustomInstructionBuilder_1.V1CustomInstructionBuilder(coinConfig);
|
|
291
|
+
manual.sender(user.pub);
|
|
292
|
+
manual.nonce(recentBlockHash);
|
|
293
|
+
manual.transactionConfig({ computeUnitLimit: 200000, heapSize: 32768 });
|
|
294
|
+
for (const ix of envelope.versionedInstructions) {
|
|
295
|
+
manual.addInstruction((0, src_1.toV1TransactionInstruction)(ix, envelope));
|
|
296
|
+
}
|
|
297
|
+
manual.sign({ key: user.prv });
|
|
298
|
+
const b = (await manual.build());
|
|
299
|
+
a.v1MessageBytes.should.deepEqual(b.v1MessageBytes);
|
|
300
|
+
});
|
|
301
|
+
it('SDK injectV1NonceAdvanceInstruction grows the header and promotes the authority', function () {
|
|
302
|
+
const injected = (0, src_1.injectV1NonceAdvanceInstruction)(envelope, {
|
|
303
|
+
walletNonceAddress: nonceAccount.pub,
|
|
304
|
+
authWalletAddress: gasTank.pub,
|
|
305
|
+
});
|
|
306
|
+
injected.messageHeader.numRequiredSignatures.should.equal(2);
|
|
307
|
+
injected.messageHeader.numReadonlySignedAccounts.should.equal(1);
|
|
308
|
+
injected.messageHeader.numReadonlyUnsignedAccounts.should.equal(3);
|
|
309
|
+
const nonceIx = injected.versionedInstructions[0];
|
|
310
|
+
injected.staticAccountKeys[nonceIx.programIdIndex].should.equal(web3_js_1.SystemProgram.programId.toBase58());
|
|
311
|
+
Buffer.from(bs58_1.default.decode(nonceIx.data))
|
|
312
|
+
.equals(Buffer.from([4, 0, 0, 0]))
|
|
313
|
+
.should.be.true();
|
|
314
|
+
// idempotent on a second pass
|
|
315
|
+
const twice = (0, src_1.injectV1NonceAdvanceInstruction)(injected, {
|
|
316
|
+
walletNonceAddress: nonceAccount.pub,
|
|
317
|
+
authWalletAddress: gasTank.pub,
|
|
318
|
+
});
|
|
319
|
+
twice.versionedInstructions.length.should.equal(injected.versionedInstructions.length);
|
|
320
|
+
});
|
|
321
|
+
it('transactionConfig coerces unset fields to null (SDK serializer contract)', async function () {
|
|
322
|
+
const builder = new v1CustomInstructionBuilder_1.V1CustomInstructionBuilder(coinConfig);
|
|
323
|
+
builder.fromVersionedData(envelope);
|
|
324
|
+
builder.nonce(recentBlockHash);
|
|
325
|
+
builder.transactionConfig({ computeUnitLimit: 200000 });
|
|
326
|
+
const tx = (await builder.build());
|
|
327
|
+
const decoded = (0, src_1.decodeV1Message)(tx.v1MessageBytes);
|
|
328
|
+
decoded.configValues.some((v) => v.kind === 'u32' && v.value === 200000).should.be.true();
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjFUcmFuc2FjdGlvbkJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3YxVHJhbnNhY3Rpb25CdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDBEQUE2QjtBQUM3QixpREFBNEM7QUFDNUMsbURBQXlGO0FBQ3pGLDZDQUEyRDtBQUMzRCxnREFBMEI7QUFDMUIsc0NBU3NCO0FBQ3RCLDhGQUF5RjtBQUN6RiwwREFBcUU7QUFDckUsNEZBQXlGO0FBRXpGLDhEQUFnRDtBQUVoRCxNQUFNLGFBQWMsU0FBUSwwQkFBb0I7SUFDOUMsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBRUQsUUFBUSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtJQUM5RCxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksYUFBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2hGLE1BQU0sWUFBWSxHQUFHLElBQUksYUFBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsRSxNQUFNLFNBQVMsR0FBRyw4Q0FBOEMsQ0FBQztJQUNqRSxNQUFNLGVBQWUsR0FBRyw4Q0FBOEMsQ0FBQztJQUN2RSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUM7SUFF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QUFBLHFCQUFlLEVBQUMsRUFBRSxDQUFDLGNBQWUsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLE1BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0YsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlLCB0eXBlIFNvbFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFB1YmxpY0tleSwgU3lzdGVtUHJvZ3JhbSB9IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5pbXBvcnQgYmFzZTU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IHtcbiAgYnVpbGRBZHZhbmNlTm9uY2VBY2NvdW50SW5zdHJ1Y3Rpb24sXG4gIGRlY29kZVYxTWVzc2FnZSxcbiAgaW5qZWN0VjFOb25jZUFkdmFuY2VJbnN0cnVjdGlvbixcbiAgS2V5UGFpcixcbiAgcGFyc2VXaXJlVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uLFxuICBWMVRyYW5zYWN0aW9uQnVpbGRlcixcbiAgdG9WMVRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyB2ZXJpZnlWMVNpZ25hdHVyZXMgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3NlcmlhbGl6YXRpb24vcGFyc2VXaXJlVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBWMUN1c3RvbUluc3RydWN0aW9uQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvdjFDdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgU29sYW5hS2V5cywgVHJhbnNmZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2lmYWNlJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uLy4uL3Jlc291cmNlcy9zb2wnO1xuXG5jbGFzcyBUZXN0VjFCdWlsZGVyIGV4dGVuZHMgVjFUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgfVxufVxuXG5kZXNjcmliZSgnU29sYW5hIFYxIFRyYW5zYWN0aW9uIEJ1aWxkZXIgKFNJTUQtMDI5Ni8wMzg1KScsICgpID0+IHtcbiAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCgndHNvbCcpO1xuICBjb25zdCB1c2VyID0gbmV3IEtleVBhaXIodGVzdERhdGEuYXV0aEFjY291bnQpLmdldEtleXMoKTtcbiAgY29uc3QgZ2FzVGFuayA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5wcnZLZXlzLnBydktleTEuYmFzZTU4IH0pLmdldEtleXMoKTtcbiAgY29uc3Qgbm9uY2VBY2NvdW50ID0gbmV3IEtleVBhaXIodGVzdERhdGEubm9uY2VBY2NvdW50KS5nZXRLZXlzKCk7XG4gIGNvbnN0IHJlY2lwaWVudCA9ICdFTm44YTJ0R01TOWJSNVhWN3NtR0hKdk5nemt5eEptbkQyZVV2UXhZNWpTUCc7XG4gIGNvbnN0IHJlY2VudEJsb2NrSGFzaCA9ICdHSHRYUUJzb1pIVm5ORmE5WWV2QXpGcjE3REpqZ0hYazN5Y1RLRDV4RDNaaSc7XG4gIGNvbnN0IGFtb3VudCA9ICczMDAwMDAnO1xuXG4gIGNvbnN0IHYxQ29uZmlnID0ge1xuICAgIGNvbXB1dGVVbml0TGltaXQ6IDIwMF8wMDAsXG4gICAgaGVhcFNpemU6IDMyXzc2OCxcbiAgICBsb2FkZWRBY2NvdW50c0RhdGFTaXplTGltaXQ6IDY1XzUzNixcbiAgICBwcmlvcml0eUZlZTogNV8wMDAsXG4gIH07XG5cbiAgY29uc3QgdHJhbnNmZXI6IFRyYW5zZmVyID0ge1xuICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlRyYW5zZmVyLFxuICAgIHBhcmFtczogeyBmcm9tQWRkcmVzczogdXNlci5wdWIsIHRvQWRkcmVzczogcmVjaXBpZW50LCBhbW91bnQgfSxcbiAgfTtcblxuICBjb25zdCBuZXdCdWlsZGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGVzdFYxQnVpbGRlcihjb2luQ29uZmlnKTtcbiAgICBidWlsZGVyLnNlbmRlcih1c2VyLnB1Yik7XG4gICAgYnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgIGJ1aWxkZXIuaW5zdHJ1Y3Rpb25zKFt0cmFuc2Zlcl0pO1xuICAgIGJ1aWxkZXIudHJhbnNhY3Rpb25Db25maWcodjFDb25maWcpO1xuICAgIHJldHVybiBidWlsZGVyO1xuICB9O1xuXG4gIGNvbnN0IHNpZ25XaXRoID0gKGtleVBhaXI6IFNvbGFuYUtleXMsIG1lc3NhZ2VCeXRlczogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkgPT4ge1xuICAgIGNvbnN0IHBydiA9IGtleVBhaXIucHJ2O1xuICAgIGlmICh0eXBlb2YgcHJ2ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5IGZvciB0ZXN0IHNpZ25lcicpO1xuICAgIH1cbiAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKHsgcHJ2IH0pO1xuICAgIHJldHVybiBuYWNsLnNpZ24uZGV0YWNoZWQobWVzc2FnZUJ5dGVzLCBrcC5nZXRLZXlzKHRydWUpLnBydiBhcyBVaW50OEFycmF5KTtcbiAgfTtcblxuICBkZXNjcmliZSgnc2luZ2xlIHNpZ25lcicsICgpID0+IHtcbiAgICBpdCgnYnVpbGRzIGEgdjEgbWVzc2FnZSArIHNpZ25lZCB3aXJlIGFuZCByb3VuZC10cmlwcyB0aHJvdWdoIHBhcnNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ld0J1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdXNlci5wcnYgfSk7XG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgICB0eC52MU1lc3NhZ2VCeXRlcyFbMF0uc2hvdWxkLmVxdWFsKDB4ODEpO1xuICAgICAgdHgudjFUcmFuc2FjdGlvbkJ5dGVzIS5sZW5ndGguc2hvdWxkLmVxdWFsKHR4LnYxTWVzc2FnZUJ5dGVzIS5sZW5ndGggKyA2NCk7XG4gICAgICAvLyBzaWduYWJsZSBwYXlsb2FkIGlzIHRoZSBtZXNzYWdlIGJ5dGVzXG4gICAgICB0eC5zaWduYWJsZVBheWxvYWQuZXF1YWxzKEJ1ZmZlci5mcm9tKHR4LnYxTWVzc2FnZUJ5dGVzISkpLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlV2lyZVRyYW5zYWN0aW9uKHR4LnYxVHJhbnNhY3Rpb25CeXRlcyEpO1xuICAgICAgcGFyc2VkLnNpZ25lclB1YmxpY0tleXMuc2hvdWxkLmRlZXBFcXVhbChbdXNlci5wdWJdKTtcbiAgICAgIHZlcmlmeVYxU2lnbmF0dXJlcyhwYXJzZWQubWVzc2FnZUJ5dGVzLCBwYXJzZWQuc2lnbmF0dXJlcywgcGFyc2VkLnNpZ25lclB1YmxpY0tleXMpO1xuXG4gICAgICAvLyBicm9hZGNhc3QgZm9ybWF0IHJvdW5kLXRyaXBzIHRocm91Z2ggZnJvbSgpXG4gICAgICBjb25zdCByYXcgPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3QgcmVwYXJzZWQgPSBuZXcgVGVzdFYxQnVpbGRlcihjb2luQ29uZmlnKTtcbiAgICAgIHJlcGFyc2VkLmZyb20ocmF3KTtcbiAgICAgIChyZXBhcnNlZCBhcyB1bmtub3duIGFzIHsgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uIH0pLnRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2hvdWxkLmVxdWFsKHJhdyk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gdHJhbnNhY3Rpb25Db25maWcgaXMgbWlzc2luZycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGVzdFYxQnVpbGRlcihjb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIuc2VuZGVyKHVzZXIucHViKTtcbiAgICAgIGJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICAgIGJ1aWxkZXIuaW5zdHJ1Y3Rpb25zKFt0cmFuc2Zlcl0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3RyYW5zYWN0aW9uQ29uZmlnIGlzIHJlcXVpcmVkLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkdXJhYmxlIG5vbmNlICgyIHNpZ25hdHVyZXMpJywgKCkgPT4ge1xuICAgIGl0KCdpbmplY3RzIHRoZSBBZHZhbmNlTm9uY2VBY2NvdW50IGluc3RydWN0aW9uIGFuZCBhc3NlbWJsZXMgdXNlciArIGdhcy10YW5rIHNpZ25hdHVyZXMgaW4gc2lnbmVyIG9yZGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ld0J1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7XG4gICAgICAgIHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YixcbiAgICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IGdhc1RhbmsucHViLFxuICAgICAgfSk7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHVzZXIucHJ2IH0pO1xuXG4gICAgICBjb25zdCB1bnNpZ25lZCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgbWVzc2FnZUJ5dGVzID0gdW5zaWduZWQudjFNZXNzYWdlQnl0ZXMhO1xuXG4gICAgICAvLyAyIHJlcXVpcmVkIHNpZ25lcnM6IHVzZXIgKGZlZSBwYXllcikgKyBnYXMtdGFuayBub25jZSBhdXRob3JpdHlcbiAgICAgIG1lc3NhZ2VCeXRlc1sxXS5zaG91bGQuZXF1YWwoMik7XG5cbiAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVWMU1lc3NhZ2UobWVzc2FnZUJ5dGVzKTtcbiAgICAgIC8vIG5vbmNlIGhhc2ggb2NjdXBpZXMgdGhlIGJsb2NraGFzaCBmaWVsZFxuICAgICAgZGVjb2RlZC5ibG9ja2hhc2guc2hvdWxkLmVxdWFsKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICAvLyBmaXJzdCBpbnN0cnVjdGlvbiBpcyBBZHZhbmNlTm9uY2VBY2NvdW50IChTeXN0ZW0gUHJvZ3JhbSwgZGlzY3JpbWluYXRvciA0KVxuICAgICAgZGVjb2RlZC5jb21waWxlZEluc3RydWN0aW9uc1swXS5kYXRhWzBdLnNob3VsZC5lcXVhbCg0KTtcbiAgICAgIGRlY29kZWQuc3RhdGljQWNjb3VudHNbZGVjb2RlZC5jb21waWxlZEluc3RydWN0aW9uc1swXS5wcm9ncmFtQWRkcmVzc0luZGV4XS5zaG91bGQuZXF1YWwoXG4gICAgICAgIFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLnRvQmFzZTU4KClcbiAgICAgICk7XG4gICAgICAvLyBzaWduZXIgb3JkZXI6IGZlZSBwYXllciAodXNlcikgZmlyc3QsIHRoZW4gZ2FzIHRhbmtcbiAgICAgIGRlY29kZWQuc3RhdGljQWNjb3VudHMuc2xpY2UoMCwgMikuc2hvdWxkLmRlZXBFcXVhbChbdXNlci5wdWIsIGdhc1RhbmsucHViXSk7XG5cbiAgICAgIC8vIGF0dGFjaCB0aGUgZ2FzLXRhbmsgSFNNIHNpZ25hdHVyZSBvdmVyIHRoZSBzYW1lIG1lc3NhZ2UgYnl0ZXNcbiAgICAgIGNvbnN0IGdhc1RhbmtTaWcgPSBzaWduV2l0aChnYXNUYW5rLCBtZXNzYWdlQnl0ZXMpO1xuICAgICAgYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IGdhc1RhbmsucHViIH0sIEJ1ZmZlci5mcm9tKGdhc1RhbmtTaWcpKTtcbiAgICAgIGNvbnN0IHNpZ25lZCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgICAvLyBtZXNzYWdlIGJ5dGUtaWRlbnRpdHkgYmV0d2VlbiBidWlsZCBhbmQgc2lnblxuICAgICAgc2lnbmVkLnYxTWVzc2FnZUJ5dGVzIS5zaG91bGQuZGVlcEVxdWFsKG1lc3NhZ2VCeXRlcyk7XG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlV2lyZVRyYW5zYWN0aW9uKHNpZ25lZC52MVRyYW5zYWN0aW9uQnl0ZXMhKTtcbiAgICAgIHBhcnNlZC5zaWduZXJQdWJsaWNLZXlzLnNob3VsZC5kZWVwRXF1YWwoW3VzZXIucHViLCBnYXNUYW5rLnB1Yl0pO1xuICAgICAgdmVyaWZ5VjFTaWduYXR1cmVzKHBhcnNlZC5tZXNzYWdlQnl0ZXMsIHBhcnNlZC5zaWduYXR1cmVzLCBwYXJzZWQuc2lnbmVyUHVibGljS2V5cyk7XG4gICAgfSk7XG5cbiAgICBpdCgnb3JkZXJzIHNpZ25hdHVyZXMgYnkgdGhlIGNvbXBpbGVkIG1lc3NhZ2Ugd2hlbiB0aGUgZ2FzIHRhbmsgaXMgdGhlIGZlZSBwYXllcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXdCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCwge1xuICAgICAgICB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlQWNjb3VudC5wdWIsXG4gICAgICAgIGF1dGhXYWxsZXRBZGRyZXNzOiBnYXNUYW5rLnB1YixcbiAgICAgIH0pO1xuICAgICAgYnVpbGRlci5mZWVQYXllcihnYXNUYW5rLnB1Yik7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHVzZXIucHJ2IH0pO1xuXG4gICAgICBjb25zdCB1bnNpZ25lZCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgbWVzc2FnZUJ5dGVzID0gdW5zaWduZWQudjFNZXNzYWdlQnl0ZXMhO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVYxTWVzc2FnZShtZXNzYWdlQnl0ZXMpO1xuICAgICAgLy8gZ2FzIHRhbmsgKGZlZSBwYXllcikgaXMgdGhlIGZpcnN0IHNpZ25lciwgdXNlciBzZWNvbmRcbiAgICAgIGRlY29kZWQuc3RhdGljQWNjb3VudHMuc2xpY2UoMCwgMikuc2hvdWxkLmRlZXBFcXVhbChbZ2FzVGFuay5wdWIsIHVzZXIucHViXSk7XG5cbiAgICAgIGNvbnN0IHVzZXJTaWcgPSBzaWduV2l0aCh1c2VyLCBtZXNzYWdlQnl0ZXMpO1xuICAgICAgY29uc3QgZ2FzVGFua1NpZyA9IHNpZ25XaXRoKGdhc1RhbmssIG1lc3NhZ2VCeXRlcyk7XG4gICAgICBidWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1YjogdXNlci5wdWIgfSwgQnVmZmVyLmZyb20odXNlclNpZykpO1xuICAgICAgYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IGdhc1RhbmsucHViIH0sIEJ1ZmZlci5mcm9tKGdhc1RhbmtTaWcpKTtcbiAgICAgIGNvbnN0IHNpZ25lZCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVdpcmVUcmFuc2FjdGlvbihzaWduZWQudjFUcmFuc2FjdGlvbkJ5dGVzISk7XG4gICAgICBwYXJzZWQuc2lnbmVyUHVibGljS2V5cy5zaG91bGQuZGVlcEVxdWFsKFtnYXNUYW5rLnB1YiwgdXNlci5wdWJdKTtcbiAgICAgIHZlcmlmeVYxU2lnbmF0dXJlcyhwYXJzZWQubWVzc2FnZUJ5dGVzLCBwYXJzZWQuc2lnbmF0dXJlcywgcGFyc2VkLnNpZ25lclB1YmxpY0tleXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3plcm8tZmlsbHMgYSBtaXNzaW5nIHNpZ25hdHVyZSBzbG90IHNvIHRoZSB3aXJlIHNoYXBlIHN0YXlzIHZhbGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ld0J1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7XG4gICAgICAgIHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YixcbiAgICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IGdhc1RhbmsucHViLFxuICAgICAgfSk7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHVzZXIucHJ2IH0pO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VXaXJlVHJhbnNhY3Rpb24odHgudjFUcmFuc2FjdGlvbkJ5dGVzISk7XG4gICAgICBwYXJzZWQuc2lnbmVyUHVibGljS2V5cy5zaG91bGQuZGVlcEVxdWFsKFt1c2VyLnB1YiwgZ2FzVGFuay5wdWJdKTtcbiAgICAgIHBhcnNlZC5zaWduYXR1cmVzWzBdLnNvbWUoKGIpID0+IGIgIT09IDApLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBwYXJzZWQuc2lnbmF0dXJlc1sxXS5ldmVyeSgoYikgPT4gYiA9PT0gMCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gdmVyaWZ5VjFTaWduYXR1cmVzKHBhcnNlZC5tZXNzYWdlQnl0ZXMsIHBhcnNlZC5zaWduYXR1cmVzLCBwYXJzZWQuc2lnbmVyUHVibGljS2V5cykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGRBZHZhbmNlTm9uY2VBY2NvdW50SW5zdHJ1Y3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ2NvbnN0cnVjdHMgdGhlIG5vbmNlIGFkdmFuY2UgaW5zdHJ1Y3Rpb24gd2l0aCB0aGUgYXV0aG9yaXR5IGFzIHNpZ25lcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGl4ID0gYnVpbGRBZHZhbmNlTm9uY2VBY2NvdW50SW5zdHJ1Y3Rpb24obm9uY2VBY2NvdW50LnB1YiwgZ2FzVGFuay5wdWIpO1xuICAgICAgaXgucHJvZ3JhbUlkLnRvQmFzZTU4KCkuc2hvdWxkLmVxdWFsKFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLnRvQmFzZTU4KCkpO1xuICAgICAgaXguZGF0YVswXS5zaG91bGQuZXF1YWwoNCk7XG4gICAgICBpeC5rZXlzWzBdLnB1YmtleS50b0Jhc2U1OCgpLnNob3VsZC5lcXVhbChub25jZUFjY291bnQucHViKTtcbiAgICAgIGl4LmtleXNbMF0uaXNXcml0YWJsZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgaXgua2V5c1swXS5pc1NpZ25lci5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIC8vIHdlYjMuanMgbm9uY2VBZHZhbmNlIGluY2x1ZGVzIHRoZSByZWNlbnQtYmxvY2toYXNoZXMgc3lzdmFyIGFzIHRoZSBzZWNvbmQga2V5XG4gICAgICBpeC5rZXlzWzFdLnB1YmtleS50b0Jhc2U1OCgpLnNob3VsZC5lcXVhbCgnU3lzdmFyUmVjZW50QjFvY2tIYXNoZXMxMTExMTExMTExMTExMTExMTExMScpO1xuICAgICAgaXgua2V5c1syXS5wdWJrZXkudG9CYXNlNTgoKS5zaG91bGQuZXF1YWwoZ2FzVGFuay5wdWIpO1xuICAgICAgaXgua2V5c1syXS5pc1NpZ25lci5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbm9uY2UgdmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBpdCgncmVqZWN0cyBhbiBpbnZhbGlkIGJsb2NraGFzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXdCdWlsZGVyKCk7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IGJ1aWxkZXIubm9uY2UoJ25vdC1hLWJsb2NraGFzaCcpLCAvSW52YWxpZCBvciBtaXNzaW5nIGJsb2NrSGFzaC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBub25jZSB3aG9zZSBhdXRob3JpdHkgZXF1YWxzIHRoZSBub25jZSBhY2NvdW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ld0J1aWxkZXIoKTtcbiAgICAgIHNob3VsZC50aHJvd3MoXG4gICAgICAgICgpID0+IGJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7IHdhbGxldE5vbmNlQWRkcmVzczogdXNlci5wdWIsIGF1dGhXYWxsZXRBZGRyZXNzOiB1c2VyLnB1YiB9KSxcbiAgICAgICAgL3dhbGxldE5vbmNlQWRkcmVzcyBjYW5ub3QgYmUgZXF1YWwgdG8gYXV0aFdhbGxldEFkZHJlc3MvXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZnJvbSgpJywgKCkgPT4ge1xuICAgIGl0KCdwYXJzZXMgYSBzaWduZWQgdjEgd2lyZSBhbmQgZXhwb3NlcyB0b0pzb24gdmlhIHRoZSBtZXRhZGF0YSB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXdCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHVzZXIucHJ2IH0pO1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHJhdyA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIGNvbnN0IHJlcGFyc2VkID0gbmV3IFRlc3RWMUJ1aWxkZXIoY29pbkNvbmZpZyk7XG4gICAgICByZXBhcnNlZC5mcm9tKHJhdyk7XG4gICAgICBjb25zdCByZXBhcnNlZFR4ID0gKHJlcGFyc2VkIGFzIHVua25vd24gYXMgeyB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24gfSkudHJhbnNhY3Rpb247XG4gICAgICByZXBhcnNlZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2hvdWxkLmVxdWFsKHJhdyk7XG5cbiAgICAgIGNvbnN0IGpzb24gPSByZXBhcnNlZFR4LnRvSnNvbigpO1xuICAgICAganNvbi5ub25jZS5zaG91bGQuZXF1YWwocmVjZW50QmxvY2tIYXNoKTtcbiAgICAgIGpzb24ubnVtU2lnbmF0dXJlcy5zaG91bGQuZXF1YWwoMSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdWMUN1c3RvbUluc3RydWN0aW9uQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCgndHNvbCcpO1xuICBjb25zdCB1c2VyID0gbmV3IEtleVBhaXIodGVzdERhdGEuYXV0aEFjY291bnQpLmdldEtleXMoKTtcbiAgY29uc3QgZ2FzVGFuayA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5wcnZLZXlzLnBydktleTEuYmFzZTU4IH0pLmdldEtleXMoKTtcbiAgY29uc3Qgbm9uY2VBY2NvdW50ID0gbmV3IEtleVBhaXIodGVzdERhdGEubm9uY2VBY2NvdW50KS5nZXRLZXlzKCk7XG4gIGNvbnN0IHJlY2VudEJsb2NrSGFzaCA9ICdHSHRYUUJzb1pIVm5ORmE5WWV2QXpGcjE3REpqZ0hYazN5Y1RLRDV4RDNaaSc7XG4gIGNvbnN0IHYxQ29uZmlnID0ge1xuICAgIGNvbXB1dGVVbml0TGltaXQ6IDIwMF8wMDAsXG4gICAgaGVhcFNpemU6IDMyXzc2OCxcbiAgICBsb2FkZWRBY2NvdW50c0RhdGFTaXplTGltaXQ6IDY1XzUzNixcbiAgICBwcmlvcml0eUZlZTogNV8wMDAsXG4gIH07XG5cbiAgY29uc3Qgc2lnbldpdGggPSAoa2V5UGFpcjogU29sYW5hS2V5cywgbWVzc2FnZUJ5dGVzOiBVaW50OEFycmF5KTogVWludDhBcnJheSA9PiB7XG4gICAgY29uc3QgcHJ2ID0ga2V5UGFpci5wcnY7XG4gICAgaWYgKHR5cGVvZiBwcnYgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXkgZm9yIHRlc3Qgc2lnbmVyJyk7XG4gICAgfVxuICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnYgfSk7XG4gICAgcmV0dXJuIG5hY2wuc2lnbi5kZXRhY2hlZChtZXNzYWdlQnl0ZXMsIGtwLmdldEtleXModHJ1ZSkucHJ2IGFzIFVpbnQ4QXJyYXkpO1xuICB9O1xuXG4gIGl0KCdidWlsZHMgYSB2MSB0cmFuc2FjdGlvbiBmcm9tIGEgY3VzdG9tIGluc3RydWN0aW9uICsgMiBzaWduYXR1cmVzIGluIHNpZ25lciBvcmRlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZWNpcGllbnQgPSAnQzNzR2Y0eFpiN2tQMW1Rcjh0WXc5dVZ4Mm5ENWhKNmFMY0U0b1JxUzdpQic7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBWMUN1c3RvbUluc3RydWN0aW9uQnVpbGRlcihjb2luQ29uZmlnKTtcbiAgICBidWlsZGVyLnNlbmRlcih1c2VyLnB1Yik7XG4gICAgYnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gsIHsgd2FsbGV0Tm9uY2VBZGRyZXNzOiBub25jZUFjY291bnQucHViLCBhdXRoV2FsbGV0QWRkcmVzczogZ2FzVGFuay5wdWIgfSk7XG4gICAgYnVpbGRlci50cmFuc2FjdGlvbkNvbmZpZyh2MUNvbmZpZyk7XG4gICAgYnVpbGRlci5hZGRJbnN0cnVjdGlvbihcbiAgICAgIFN5c3RlbVByb2dyYW0udHJhbnNmZXIoe1xuICAgICAgICBmcm9tUHVia2V5OiBuZXcgUHVibGljS2V5KHVzZXIucHViKSxcbiAgICAgICAgdG9QdWJrZXk6IG5ldyBQdWJsaWNLZXkocmVjaXBpZW50KSxcbiAgICAgICAgbGFtcG9ydHM6IDFfMDAwXzAwMCxcbiAgICAgIH0pXG4gICAgKTtcbiAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHVzZXIucHJ2IH0pO1xuXG4gICAgY29uc3QgdW5zaWduZWQgPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICBjb25zdCBnYXNUYW5rU2lnID0gc2lnbldpdGgoZ2FzVGFuaywgdW5zaWduZWQudjFNZXNzYWdlQnl0ZXMhKTtcbiAgICBidWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1YjogZ2FzVGFuay5wdWIgfSwgQnVmZmVyLmZyb20oZ2FzVGFua1NpZykpO1xuICAgIGNvbnN0IHNpZ25lZCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VXaXJlVHJhbnNhY3Rpb24oc2lnbmVkLnYxVHJhbnNhY3Rpb25CeXRlcyEpO1xuICAgIHBhcnNlZC5zaWduZXJQdWJsaWNLZXlzLnNob3VsZC5kZWVwRXF1YWwoW3VzZXIucHViLCBnYXNUYW5rLnB1Yl0pO1xuICAgIHZlcmlmeVYxU2lnbmF0dXJlcyhwYXJzZWQubWVzc2FnZUJ5dGVzLCBwYXJzZWQuc2lnbmF0dXJlcywgcGFyc2VkLnNpZ25lclB1YmxpY0tleXMpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnVjFUcmFuc2FjdGlvbkJ1aWxkZXIgZW52ZWxvcGUgc3VyZmFjZSAoZnJvbVZlcnNpb25lZERhdGEgKyBTREsgaW5qZWN0b3IpJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0c29sJyk7XG4gIGNvbnN0IHVzZXIgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5hdXRoQWNjb3VudCkuZ2V0S2V5cygpO1xuICBjb25zdCBnYXNUYW5rID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLnBydktleXMucHJ2S2V5MS5iYXNlNTggfSkuZ2V0S2V5cygpO1xuICBjb25zdCBub25jZUFjY291bnQgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5ub25jZUFjY291bnQpLmdldEtleXMoKTtcbiAgY29uc3QgcmVjZW50QmxvY2tIYXNoID0gJ0dIdFhRQnNvWkhWbk5GYTlZZXZBekZyMTdESmpnSFhrM3ljVEtENXhEM1ppJztcblxuICBjb25zdCBlbnZlbG9wZTogU29sVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhID0ge1xuICAgIHZlcnNpb246IDEsXG4gICAgdmVyc2lvbmVkSW5zdHJ1Y3Rpb25zOiBbXG4gICAgICB7IHByb2dyYW1JZEluZGV4OiAxLCBhY2NvdW50S2V5SW5kZXhlczogWzAsIDFdLCBkYXRhOiAnMlV6SE0nIH0sIC8vIGJhc2U1OCBvZiAweDAxMDAwMDAwXG4gICAgXSxcbiAgICBhZGRyZXNzTG9va3VwVGFibGVzOiBbXSxcbiAgICBzdGF0aWNBY2NvdW50S2V5czogW3VzZXIucHViLCAnTWVtb1NxNGdxQUJBWEtiOTZxbkg4VHlzTmNXeE15V0NxWGdETEdtZmNIciddLFxuICAgIG1lc3NhZ2VIZWFkZXI6IHsgbnVtUmVxdWlyZWRTaWduYXR1cmVzOiAxLCBudW1SZWFkb25seVNpZ25lZEFjY291bnRzOiAwLCBudW1SZWFkb25seVVuc2lnbmVkQWNjb3VudHM6IDEgfSxcbiAgICB0cmFuc2FjdGlvbkNvbmZpZzoge1xuICAgICAgY29tcHV0ZVVuaXRMaW1pdDogMjAwXzAwMCxcbiAgICAgIGhlYXBTaXplOiAzMl83NjgsXG4gICAgICBsb2FkZWRBY2NvdW50c0RhdGFTaXplTGltaXQ6IG51bGwsXG4gICAgICBwcmlvcml0eUZlZTogbnVsbCxcbiAgICB9LFxuICB9O1xuXG4gIGl0KCdmcm9tVmVyc2lvbmVkRGF0YSBidWlsZHMgdGhlIHNhbWUgdjEgbWVzc2FnZSBhcyBtYW51YWwgYWRkSW5zdHJ1Y3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZnJvbURhdGEgPSBuZXcgVjFDdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIoY29pbkNvbmZpZyk7XG4gICAgZnJvbURhdGEuZnJvbVZlcnNpb25lZERhdGEoZW52ZWxvcGUpO1xuICAgIGZyb21EYXRhLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgZnJvbURhdGEuc2lnbih7IGtleTogdXNlci5wcnYgfSk7XG4gICAgY29uc3QgYSA9IChhd2FpdCBmcm9tRGF0YS5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcblxuICAgIGNvbnN0IG1hbnVhbCA9IG5ldyBWMUN1c3RvbUluc3RydWN0aW9uQnVpbGRlcihjb2luQ29uZmlnKTtcbiAgICBtYW51YWwuc2VuZGVyKHVzZXIucHViKTtcbiAgICBtYW51YWwubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICBtYW51YWwudHJhbnNhY3Rpb25Db25maWcoeyBjb21wdXRlVW5pdExpbWl0OiAyMDBfMDAwLCBoZWFwU2l6ZTogMzJfNzY4IH0pO1xuICAgIGZvciAoY29uc3QgaXggb2YgZW52ZWxvcGUudmVyc2lvbmVkSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBtYW51YWwuYWRkSW5zdHJ1Y3Rpb24odG9WMVRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24oaXgsIGVudmVsb3BlKSk7XG4gICAgfVxuICAgIG1hbnVhbC5zaWduKHsga2V5OiB1c2VyLnBydiB9KTtcbiAgICBjb25zdCBiID0gKGF3YWl0IG1hbnVhbC5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcblxuICAgIGEudjFNZXNzYWdlQnl0ZXMhLnNob3VsZC5kZWVwRXF1YWwoYi52MU1lc3NhZ2VCeXRlcyEpO1xuICB9KTtcblxuICBpdCgnU0RLIGluamVjdFYxTm9uY2VBZHZhbmNlSW5zdHJ1Y3Rpb24gZ3Jvd3MgdGhlIGhlYWRlciBhbmQgcHJvbW90ZXMgdGhlIGF1dGhvcml0eScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpbmplY3RlZCA9IGluamVjdFYxTm9uY2VBZHZhbmNlSW5zdHJ1Y3Rpb24oZW52ZWxvcGUsIHtcbiAgICAgIHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YixcbiAgICAgIGF1dGhXYWxsZXRBZGRyZXNzOiBnYXNUYW5rLnB1YixcbiAgICB9KTtcbiAgICBpbmplY3RlZC5tZXNzYWdlSGVhZGVyLm51bVJlcXVpcmVkU2lnbmF0dXJlcy5zaG91bGQuZXF1YWwoMik7XG4gICAgaW5qZWN0ZWQubWVzc2FnZUhlYWRlci5udW1SZWFkb25seVNpZ25lZEFjY291bnRzLnNob3VsZC5lcXVhbCgxKTtcbiAgICBpbmplY3RlZC5tZXNzYWdlSGVhZGVyLm51bVJlYWRvbmx5VW5zaWduZWRBY2NvdW50cy5zaG91bGQuZXF1YWwoMyk7XG4gICAgY29uc3Qgbm9uY2VJeCA9IGluamVjdGVkLnZlcnNpb25lZEluc3RydWN0aW9uc1swXTtcbiAgICBpbmplY3RlZC5zdGF0aWNBY2NvdW50S2V5c1tub25jZUl4LnByb2dyYW1JZEluZGV4XS5zaG91bGQuZXF1YWwoU3lzdGVtUHJvZ3JhbS5wcm9ncmFtSWQudG9CYXNlNTgoKSk7XG4gICAgQnVmZmVyLmZyb20oYmFzZTU4LmRlY29kZShub25jZUl4LmRhdGEpKVxuICAgICAgLmVxdWFscyhCdWZmZXIuZnJvbShbNCwgMCwgMCwgMF0pKVxuICAgICAgLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAvLyBpZGVtcG90ZW50IG9uIGEgc2Vjb25kIHBhc3NcbiAgICBjb25zdCB0d2ljZSA9IGluamVjdFYxTm9uY2VBZHZhbmNlSW5zdHJ1Y3Rpb24oaW5qZWN0ZWQsIHtcbiAgICAgIHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YixcbiAgICAgIGF1dGhXYWxsZXRBZGRyZXNzOiBnYXNUYW5rLnB1YixcbiAgICB9KTtcbiAgICB0d2ljZS52ZXJzaW9uZWRJbnN0cnVjdGlvbnMubGVuZ3RoLnNob3VsZC5lcXVhbChpbmplY3RlZC52ZXJzaW9uZWRJbnN0cnVjdGlvbnMubGVuZ3RoKTtcbiAgfSk7XG5cbiAgaXQoJ3RyYW5zYWN0aW9uQ29uZmlnIGNvZXJjZXMgdW5zZXQgZmllbGRzIHRvIG51bGwgKFNESyBzZXJpYWxpemVyIGNvbnRyYWN0KScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBidWlsZGVyID0gbmV3IFYxQ3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyKGNvaW5Db25maWcpO1xuICAgIGJ1aWxkZXIuZnJvbVZlcnNpb25lZERhdGEoZW52ZWxvcGUpO1xuICAgIGJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICBidWlsZGVyLnRyYW5zYWN0aW9uQ29uZmlnKHsgY29tcHV0ZVVuaXRMaW1pdDogMjAwXzAwMCB9KTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVWMU1lc3NhZ2UodHgudjFNZXNzYWdlQnl0ZXMhKTtcbiAgICBkZWNvZGVkLmNvbmZpZ1ZhbHVlcy5zb21lKCh2KSA9PiB2LmtpbmQgPT09ICd1MzInICYmIHYudmFsdWUgPT09IDIwMF8wMDApLnNob3VsZC5iZS50cnVlKCk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletInitBuilder.d.ts","sourceRoot":"","sources":["../../../../../test/unit/transactionBuilder/walletInitBuilder.ts"],"names":[],"mappings":""}
|