@ar.io/sdk 3.24.0 → 4.0.0-solana.10
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/README.md +143 -23
- package/lib/esm/cli/cli.js +200 -40
- package/lib/esm/cli/commands/antCommands.js +40 -14
- package/lib/esm/cli/commands/arnsPurchaseCommands.js +46 -7
- package/lib/esm/cli/commands/escrowCommands.js +208 -0
- package/lib/esm/cli/commands/gatewayWriteCommands.js +132 -22
- package/lib/esm/cli/commands/pruneCommands.js +166 -0
- package/lib/esm/cli/commands/readCommands.js +10 -2
- package/lib/esm/cli/commands/transfer.js +6 -6
- package/lib/esm/cli/options.js +141 -2
- package/lib/esm/cli/utils.js +280 -39
- package/lib/esm/common/ant-registry.js +25 -3
- package/lib/esm/common/ant.js +50 -5
- package/lib/esm/common/contracts/ao-process.js +4 -6
- package/lib/esm/common/io.js +41 -0
- package/lib/esm/common/marketplace.js +24 -79
- package/lib/esm/constants.js +13 -1
- package/lib/esm/solana/ant-readable.js +387 -0
- package/lib/esm/solana/ant-registry-readable.js +118 -0
- package/lib/esm/solana/ant-registry-writeable.js +457 -0
- package/lib/esm/solana/ant-writeable.js +352 -0
- package/lib/esm/solana/ata.js +55 -0
- package/lib/esm/solana/canonical-message.js +92 -0
- package/lib/esm/solana/clusters.js +62 -0
- package/lib/esm/solana/constants.js +130 -0
- package/lib/esm/solana/delegation-math.js +63 -0
- package/lib/esm/solana/deserialize.js +1182 -0
- package/lib/esm/solana/escrow.js +797 -0
- package/lib/esm/solana/events.js +210 -0
- package/lib/esm/solana/funding-plan.js +682 -0
- package/lib/esm/solana/generated/ant/events/aclEntryAddedEvent.js +21 -0
- package/lib/esm/solana/generated/ant/events/aclEntryRemovedEvent.js +21 -0
- package/lib/esm/solana/generated/ant/events/antMetadataUpdatedEvent.js +21 -0
- package/lib/esm/solana/generated/ant/events/antReconciledEvent.js +21 -0
- package/lib/esm/solana/generated/ant/events/antTransferredEvent.js +21 -0
- package/lib/esm/solana/generated/ant/events/attributesClearedEvent.js +21 -0
- package/lib/esm/solana/generated/ant/events/attributesSyncedEvent.js +21 -0
- package/lib/esm/solana/generated/ant/events/controllerAddedEvent.js +21 -0
- package/lib/esm/solana/generated/ant/events/controllerRemovedEvent.js +21 -0
- package/lib/esm/solana/generated/ant/events/index.js +16 -0
- package/lib/esm/solana/generated/ant/events/recordMetadataPrunedEvent.js +21 -0
- package/lib/esm/solana/generated/ant/events/recordMetadataRemovedEvent.js +21 -0
- package/lib/esm/solana/generated/ant/events/recordMetadataUpdatedEvent.js +21 -0
- package/lib/esm/solana/generated/ant/events/recordRemovedEvent.js +21 -0
- package/lib/esm/solana/generated/ant/events/recordSetEvent.js +21 -0
- package/lib/esm/solana/generated/ant/events/recordTransferredEvent.js +21 -0
- package/lib/esm/solana/generated/ant-escrow/events/escrowCancelledEvent.js +21 -0
- package/lib/esm/solana/generated/ant-escrow/events/escrowClaimedEvent.js +21 -0
- package/lib/esm/solana/generated/ant-escrow/events/escrowDepositedEvent.js +21 -0
- package/lib/esm/solana/generated/ant-escrow/events/escrowRecipientUpdatedEvent.js +21 -0
- package/lib/esm/solana/generated/ant-escrow/events/index.js +5 -0
- package/lib/esm/solana/generated/arns/events/demandFactorUpdatedEvent.js +21 -0
- package/lib/esm/solana/generated/arns/events/index.js +13 -0
- package/lib/esm/solana/generated/arns/events/leaseExtendedEvent.js +21 -0
- package/lib/esm/solana/generated/arns/events/namePurchasedEvent.js +21 -0
- package/lib/esm/solana/generated/arns/events/nameReassignedEvent.js +21 -0
- package/lib/esm/solana/generated/arns/events/nameReleasedEvent.js +21 -0
- package/lib/esm/solana/generated/arns/events/nameReservedEvent.js +21 -0
- package/lib/esm/solana/generated/arns/events/nameUnreservedEvent.js +21 -0
- package/lib/esm/solana/generated/arns/events/nameUpgradedEvent.js +21 -0
- package/lib/esm/solana/generated/arns/events/namesPrunedEvent.js +21 -0
- package/lib/esm/solana/generated/arns/events/reservedNameClaimedEvent.js +21 -0
- package/lib/esm/solana/generated/arns/events/returnedNamePurchasedEvent.js +21 -0
- package/lib/esm/solana/generated/arns/events/undernameIncreasedEvent.js +21 -0
- package/lib/esm/solana/generated/core/events/configUpdatedEvent.js +21 -0
- package/lib/esm/solana/generated/core/events/coreMigrationFinalizedEvent.js +21 -0
- package/lib/esm/solana/generated/core/events/index.js +14 -0
- package/lib/esm/solana/generated/core/events/primaryNameRemovedEvent.js +21 -0
- package/lib/esm/solana/generated/core/events/primaryNameRequestExpiredEvent.js +21 -0
- package/lib/esm/solana/generated/core/events/primaryNameRequestedEvent.js +21 -0
- package/lib/esm/solana/generated/core/events/primaryNameSetEvent.js +21 -0
- package/lib/esm/solana/generated/core/events/supplyFinalizedEvent.js +21 -0
- package/lib/esm/solana/generated/core/events/transferEvent.js +21 -0
- package/lib/esm/solana/generated/core/events/vaultCreatedEvent.js +21 -0
- package/lib/esm/solana/generated/core/events/vaultExtendedEvent.js +21 -0
- package/lib/esm/solana/generated/core/events/vaultIncreasedEvent.js +21 -0
- package/lib/esm/solana/generated/core/events/vaultReleasedEvent.js +21 -0
- package/lib/esm/solana/generated/core/events/vaultRevokedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/allowlistToggledEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/delegateAllowlistedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/delegationClosedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/delegationDecreasedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/delegationEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/epochClosedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/epochCreatedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/epochDistributedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/epochPrescribedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/epochWeightsTalliedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/epochsToggledEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/fundingPlanAppliedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/garMigrationFinalizedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/gatewayFinalizedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/gatewayJoinedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/gatewayLeavingEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/gatewayPrunedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/gatewaySettingsUpdatedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/index.js +31 -0
- package/lib/esm/solana/generated/gar/events/instantWithdrawalEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/observationSubmittedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/observerAddressUpdatedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/operatorStakeIncreasedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/redelegationEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/residueVaultCreatedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/rewardsCompoundedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/stakePaymentEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/withdrawalCancelledEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/withdrawalClaimedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/withdrawalCreatedEvent.js +21 -0
- package/lib/esm/solana/generated/gar/events/withdrawalPaymentEvent.js +21 -0
- package/lib/esm/solana/generated/mpl-core/accounts/assetV1.js +42 -0
- package/lib/esm/solana/generated/mpl-core/accounts/collectionV1.js +42 -0
- package/lib/esm/solana/generated/mpl-core/accounts/hashedAssetV1.js +45 -0
- package/lib/esm/solana/generated/mpl-core/accounts/index.js +12 -0
- package/lib/esm/solana/generated/mpl-core/accounts/pluginHeaderV1.js +45 -0
- package/lib/esm/solana/generated/mpl-core/accounts/pluginRegistryV1.js +42 -0
- package/lib/esm/solana/generated/mpl-core/errors/index.js +8 -0
- package/lib/esm/solana/generated/mpl-core/errors/mplCore.js +136 -0
- package/lib/esm/solana/generated/mpl-core/index.js +8 -0
- package/lib/esm/solana/generated/mpl-core/instructions/addCollectionExternalPluginAdapterV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/addCollectionPluginV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/addExternalPluginAdapterV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/addPluginV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/approveCollectionPluginAuthorityV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/approvePluginAuthorityV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/burnCollectionV1.js +49 -0
- package/lib/esm/solana/generated/mpl-core/instructions/burnV1.js +49 -0
- package/lib/esm/solana/generated/mpl-core/instructions/collect.js +42 -0
- package/lib/esm/solana/generated/mpl-core/instructions/compressV1.js +50 -0
- package/lib/esm/solana/generated/mpl-core/instructions/createCollectionV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/createCollectionV2.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/createV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/createV2.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/decompressV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/executeV1.js +56 -0
- package/lib/esm/solana/generated/mpl-core/instructions/index.js +40 -0
- package/lib/esm/solana/generated/mpl-core/instructions/removeCollectionExternalPluginAdapterV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/removeCollectionPluginV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/removeExternalPluginAdapterV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/removePluginV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/revokeCollectionPluginAuthorityV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/revokePluginAuthorityV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/transferV1.js +49 -0
- package/lib/esm/solana/generated/mpl-core/instructions/updateCollectionExternalPluginAdapterV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/updateCollectionInfoV1.js +45 -0
- package/lib/esm/solana/generated/mpl-core/instructions/updateCollectionPluginV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/updateCollectionV1.js +52 -0
- package/lib/esm/solana/generated/mpl-core/instructions/updateExternalPluginAdapterV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/updatePluginV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/updateV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/updateV2.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/writeCollectionExternalPluginAdapterDataV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/instructions/writeExternalPluginAdapterDataV1.js +53 -0
- package/lib/esm/solana/generated/mpl-core/program-address.js +1 -0
- package/lib/esm/solana/generated/mpl-core/types/addAssetsToGroupV1Args.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/addBlocker.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/addCollectionsToGroupV1Args.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/addGroupsToGroupV1Args.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/agentIdentity.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/agentIdentityInitInfo.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/agentIdentityUpdateInfo.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/appData.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/appDataInitInfo.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/appDataUpdateInfo.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/attribute.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/attributes.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/authority.js +24 -0
- package/lib/esm/solana/generated/mpl-core/types/autograph.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/autographSignature.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/bubblegumV2.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/burnDelegate.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/closeGroupV1Args.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/compressionProof.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/creator.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/dataSection.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/dataSectionInitInfo.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/dataSectionUpdateInfo.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/dataState.js +23 -0
- package/lib/esm/solana/generated/mpl-core/types/edition.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/externalCheckResult.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/externalPluginAdapter.js +25 -0
- package/lib/esm/solana/generated/mpl-core/types/externalPluginAdapterInitInfo.js +25 -0
- package/lib/esm/solana/generated/mpl-core/types/externalPluginAdapterKey.js +25 -0
- package/lib/esm/solana/generated/mpl-core/types/externalPluginAdapterSchema.js +24 -0
- package/lib/esm/solana/generated/mpl-core/types/externalPluginAdapterType.js +28 -0
- package/lib/esm/solana/generated/mpl-core/types/externalPluginAdapterUpdateInfo.js +25 -0
- package/lib/esm/solana/generated/mpl-core/types/externalRegistryRecord.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/externalValidationResult.js +24 -0
- package/lib/esm/solana/generated/mpl-core/types/extraAccount.js +25 -0
- package/lib/esm/solana/generated/mpl-core/types/freezeDelegate.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/freezeExecute.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/groups.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/hashablePluginSchema.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/hashedAssetSchema.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/hookableLifecycleEvent.js +26 -0
- package/lib/esm/solana/generated/mpl-core/types/immutableMetadata.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/index.js +89 -0
- package/lib/esm/solana/generated/mpl-core/types/key.js +28 -0
- package/lib/esm/solana/generated/mpl-core/types/lifecycleHook.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/lifecycleHookInitInfo.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/lifecycleHookUpdateInfo.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/linkedAppData.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/linkedAppDataInitInfo.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/linkedAppDataUpdateInfo.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/linkedDataKey.js +25 -0
- package/lib/esm/solana/generated/mpl-core/types/linkedLifecycleHook.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/linkedLifecycleHookInitInfo.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/linkedLifecycleHookUpdateInfo.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/masterEdition.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/oracle.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/oracleInitInfo.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/oracleUpdateInfo.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/oracleValidation.js +25 -0
- package/lib/esm/solana/generated/mpl-core/types/permanentBurnDelegate.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/permanentFreezeDelegate.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/permanentFreezeExecute.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/permanentTransferDelegate.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/plugin.js +25 -0
- package/lib/esm/solana/generated/mpl-core/types/pluginAuthorityPair.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/pluginType.js +40 -0
- package/lib/esm/solana/generated/mpl-core/types/registryRecord.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/relationshipKind.js +25 -0
- package/lib/esm/solana/generated/mpl-core/types/removeAssetsFromGroupV1Args.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/removeCollectionsFromGroupV1Args.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/removeGroupsFromGroupV1Args.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/royalties.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/ruleSet.js +24 -0
- package/lib/esm/solana/generated/mpl-core/types/seed.js +24 -0
- package/lib/esm/solana/generated/mpl-core/types/transferDelegate.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/updateAuthority.js +24 -0
- package/lib/esm/solana/generated/mpl-core/types/updateDelegate.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/updateGroupV1Args.js +17 -0
- package/lib/esm/solana/generated/mpl-core/types/updateType.js +24 -0
- package/lib/esm/solana/generated/mpl-core/types/validationResult.js +25 -0
- package/lib/esm/solana/generated/mpl-core/types/validationResultsOffset.js +24 -0
- package/lib/esm/solana/generated/mpl-core/types/verifiedCreators.js +18 -0
- package/lib/esm/solana/generated/mpl-core/types/verifiedCreatorsSignature.js +17 -0
- package/lib/esm/solana/index.js +85 -0
- package/lib/esm/solana/instruction.js +24 -0
- package/lib/esm/solana/io-readable.js +1752 -0
- package/lib/esm/solana/io-writeable.js +2215 -0
- package/lib/esm/solana/json-rpc.js +74 -0
- package/lib/esm/solana/metadata.js +66 -0
- package/lib/esm/solana/mpl-core.js +142 -0
- package/lib/esm/solana/pda.js +317 -0
- package/lib/esm/solana/send.js +117 -0
- package/lib/esm/solana/spawn-ant.js +210 -0
- package/lib/esm/solana/types.js +1 -0
- package/lib/esm/types/ant.js +19 -7
- package/lib/esm/types/io.js +8 -1
- package/lib/esm/utils/ant.js +1 -0
- package/lib/esm/utils/ao.js +1 -0
- package/lib/esm/version.js +1 -1
- package/lib/types/cli/commands/antCommands.d.ts +2 -7
- package/lib/types/cli/commands/arnsPurchaseCommands.d.ts +12 -0
- package/lib/types/cli/commands/escrowCommands.d.ts +62 -0
- package/lib/types/cli/commands/pruneCommands.d.ts +31 -0
- package/lib/types/cli/commands/readCommands.d.ts +2 -0
- package/lib/types/cli/options.d.ts +112 -0
- package/lib/types/cli/types.d.ts +6 -0
- package/lib/types/cli/utils.d.ts +43 -5
- package/lib/types/common/ant-registry.d.ts +41 -0
- package/lib/types/common/ant.d.ts +35 -2
- package/lib/types/common/contracts/ao-process.d.ts +2 -16
- package/lib/types/common/io.d.ts +42 -2
- package/lib/types/common/marketplace.d.ts +2 -14
- package/lib/types/constants.d.ts +11 -1
- package/lib/types/solana/ant-readable.d.ts +121 -0
- package/lib/types/solana/ant-registry-readable.d.ts +90 -0
- package/lib/types/solana/ant-registry-writeable.d.ts +234 -0
- package/lib/types/solana/ant-writeable.d.ts +162 -0
- package/lib/types/solana/ata.d.ts +29 -0
- package/lib/types/solana/canonical-message.d.ts +82 -0
- package/lib/types/solana/clusters.d.ts +62 -0
- package/lib/types/solana/constants.d.ts +103 -0
- package/lib/types/solana/delegation-math.d.ts +20 -0
- package/lib/types/solana/deserialize.d.ts +440 -0
- package/lib/types/solana/escrow.d.ts +403 -0
- package/lib/types/solana/events.d.ts +156 -0
- package/lib/types/solana/funding-plan.d.ts +210 -0
- package/lib/types/solana/generated/ant/events/aclEntryAddedEvent.d.ts +26 -0
- package/lib/types/solana/generated/ant/events/aclEntryRemovedEvent.d.ts +26 -0
- package/lib/types/solana/generated/ant/events/antMetadataUpdatedEvent.d.ts +28 -0
- package/lib/types/solana/generated/ant/events/antReconciledEvent.d.ts +28 -0
- package/lib/types/solana/generated/ant/events/antTransferredEvent.d.ts +26 -0
- package/lib/types/solana/generated/ant/events/attributesClearedEvent.d.ts +26 -0
- package/lib/types/solana/generated/ant/events/attributesSyncedEvent.d.ts +24 -0
- package/lib/types/solana/generated/ant/events/controllerAddedEvent.d.ts +26 -0
- package/lib/types/solana/generated/ant/events/controllerRemovedEvent.d.ts +26 -0
- package/lib/types/solana/generated/ant/events/index.d.ts +15 -0
- package/lib/types/solana/generated/ant/events/recordMetadataPrunedEvent.d.ts +26 -0
- package/lib/types/solana/generated/ant/events/recordMetadataRemovedEvent.d.ts +26 -0
- package/lib/types/solana/generated/ant/events/recordMetadataUpdatedEvent.d.ts +28 -0
- package/lib/types/solana/generated/ant/events/recordRemovedEvent.d.ts +26 -0
- package/lib/types/solana/generated/ant/events/recordSetEvent.d.ts +34 -0
- package/lib/types/solana/generated/ant/events/recordTransferredEvent.d.ts +30 -0
- package/lib/types/solana/generated/ant-escrow/events/escrowCancelledEvent.d.ts +28 -0
- package/lib/types/solana/generated/ant-escrow/events/escrowClaimedEvent.d.ts +32 -0
- package/lib/types/solana/generated/ant-escrow/events/escrowDepositedEvent.d.ts +36 -0
- package/lib/types/solana/generated/ant-escrow/events/escrowRecipientUpdatedEvent.d.ts +26 -0
- package/lib/types/solana/generated/ant-escrow/events/index.d.ts +4 -0
- package/lib/types/solana/generated/arns/events/demandFactorUpdatedEvent.d.ts +28 -0
- package/lib/types/solana/generated/arns/events/index.d.ts +12 -0
- package/lib/types/solana/generated/arns/events/leaseExtendedEvent.d.ts +32 -0
- package/lib/types/solana/generated/arns/events/namePurchasedEvent.d.ts +34 -0
- package/lib/types/solana/generated/arns/events/nameReassignedEvent.d.ts +28 -0
- package/lib/types/solana/generated/arns/events/nameReleasedEvent.d.ts +24 -0
- package/lib/types/solana/generated/arns/events/nameReservedEvent.d.ts +28 -0
- package/lib/types/solana/generated/arns/events/nameUnreservedEvent.d.ts +24 -0
- package/lib/types/solana/generated/arns/events/nameUpgradedEvent.d.ts +28 -0
- package/lib/types/solana/generated/arns/events/namesPrunedEvent.d.ts +26 -0
- package/lib/types/solana/generated/arns/events/reservedNameClaimedEvent.d.ts +24 -0
- package/lib/types/solana/generated/arns/events/returnedNamePurchasedEvent.d.ts +32 -0
- package/lib/types/solana/generated/arns/events/undernameIncreasedEvent.d.ts +32 -0
- package/lib/types/solana/generated/core/events/configUpdatedEvent.d.ts +26 -0
- package/lib/types/solana/generated/core/events/coreMigrationFinalizedEvent.d.ts +26 -0
- package/lib/types/solana/generated/core/events/index.d.ts +13 -0
- package/lib/types/solana/generated/core/events/primaryNameRemovedEvent.d.ts +26 -0
- package/lib/types/solana/generated/core/events/primaryNameRequestExpiredEvent.d.ts +26 -0
- package/lib/types/solana/generated/core/events/primaryNameRequestedEvent.d.ts +30 -0
- package/lib/types/solana/generated/core/events/primaryNameSetEvent.d.ts +24 -0
- package/lib/types/solana/generated/core/events/supplyFinalizedEvent.d.ts +26 -0
- package/lib/types/solana/generated/core/events/transferEvent.d.ts +26 -0
- package/lib/types/solana/generated/core/events/vaultCreatedEvent.d.ts +28 -0
- package/lib/types/solana/generated/core/events/vaultExtendedEvent.d.ts +26 -0
- package/lib/types/solana/generated/core/events/vaultIncreasedEvent.d.ts +28 -0
- package/lib/types/solana/generated/core/events/vaultReleasedEvent.d.ts +26 -0
- package/lib/types/solana/generated/core/events/vaultRevokedEvent.d.ts +28 -0
- package/lib/types/solana/generated/gar/events/allowlistToggledEvent.d.ts +24 -0
- package/lib/types/solana/generated/gar/events/delegateAllowlistedEvent.d.ts +26 -0
- package/lib/types/solana/generated/gar/events/delegationClosedEvent.d.ts +24 -0
- package/lib/types/solana/generated/gar/events/delegationDecreasedEvent.d.ts +28 -0
- package/lib/types/solana/generated/gar/events/delegationEvent.d.ts +28 -0
- package/lib/types/solana/generated/gar/events/epochClosedEvent.d.ts +24 -0
- package/lib/types/solana/generated/gar/events/epochCreatedEvent.d.ts +26 -0
- package/lib/types/solana/generated/gar/events/epochDistributedEvent.d.ts +26 -0
- package/lib/types/solana/generated/gar/events/epochPrescribedEvent.d.ts +28 -0
- package/lib/types/solana/generated/gar/events/epochWeightsTalliedEvent.d.ts +26 -0
- package/lib/types/solana/generated/gar/events/epochsToggledEvent.d.ts +24 -0
- package/lib/types/solana/generated/gar/events/fundingPlanAppliedEvent.d.ts +28 -0
- package/lib/types/solana/generated/gar/events/garMigrationFinalizedEvent.d.ts +26 -0
- package/lib/types/solana/generated/gar/events/gatewayFinalizedEvent.d.ts +24 -0
- package/lib/types/solana/generated/gar/events/gatewayJoinedEvent.d.ts +26 -0
- package/lib/types/solana/generated/gar/events/gatewayLeavingEvent.d.ts +22 -0
- package/lib/types/solana/generated/gar/events/gatewayPrunedEvent.d.ts +26 -0
- package/lib/types/solana/generated/gar/events/gatewaySettingsUpdatedEvent.d.ts +24 -0
- package/lib/types/solana/generated/gar/events/index.d.ts +30 -0
- package/lib/types/solana/generated/gar/events/instantWithdrawalEvent.d.ts +30 -0
- package/lib/types/solana/generated/gar/events/observationSubmittedEvent.d.ts +28 -0
- package/lib/types/solana/generated/gar/events/observerAddressUpdatedEvent.d.ts +24 -0
- package/lib/types/solana/generated/gar/events/operatorStakeIncreasedEvent.d.ts +26 -0
- package/lib/types/solana/generated/gar/events/redelegationEvent.d.ts +30 -0
- package/lib/types/solana/generated/gar/events/residueVaultCreatedEvent.d.ts +30 -0
- package/lib/types/solana/generated/gar/events/rewardsCompoundedEvent.d.ts +26 -0
- package/lib/types/solana/generated/gar/events/stakePaymentEvent.d.ts +28 -0
- package/lib/types/solana/generated/gar/events/withdrawalCancelledEvent.d.ts +30 -0
- package/lib/types/solana/generated/gar/events/withdrawalClaimedEvent.d.ts +26 -0
- package/lib/types/solana/generated/gar/events/withdrawalCreatedEvent.d.ts +28 -0
- package/lib/types/solana/generated/gar/events/withdrawalPaymentEvent.d.ts +28 -0
- package/lib/types/solana/generated/mpl-core/accounts/assetV1.d.ts +37 -0
- package/lib/types/solana/generated/mpl-core/accounts/collectionV1.d.ts +37 -0
- package/lib/types/solana/generated/mpl-core/accounts/hashedAssetV1.d.ts +30 -0
- package/lib/types/solana/generated/mpl-core/accounts/index.d.ts +12 -0
- package/lib/types/solana/generated/mpl-core/accounts/pluginHeaderV1.d.ts +30 -0
- package/lib/types/solana/generated/mpl-core/accounts/pluginRegistryV1.d.ts +31 -0
- package/lib/types/solana/generated/mpl-core/errors/index.d.ts +8 -0
- package/lib/types/solana/generated/mpl-core/errors/mplCore.d.ts +133 -0
- package/lib/types/solana/generated/mpl-core/index.d.ts +8 -0
- package/lib/types/solana/generated/mpl-core/instructions/addCollectionExternalPluginAdapterV1.d.ts +56 -0
- package/lib/types/solana/generated/mpl-core/instructions/addCollectionPluginV1.d.ts +59 -0
- package/lib/types/solana/generated/mpl-core/instructions/addExternalPluginAdapterV1.d.ts +60 -0
- package/lib/types/solana/generated/mpl-core/instructions/addPluginV1.d.ts +63 -0
- package/lib/types/solana/generated/mpl-core/instructions/approveCollectionPluginAuthorityV1.d.ts +59 -0
- package/lib/types/solana/generated/mpl-core/instructions/approvePluginAuthorityV1.d.ts +63 -0
- package/lib/types/solana/generated/mpl-core/instructions/burnCollectionV1.d.ts +52 -0
- package/lib/types/solana/generated/mpl-core/instructions/burnV1.d.ts +60 -0
- package/lib/types/solana/generated/mpl-core/instructions/collect.d.ts +39 -0
- package/lib/types/solana/generated/mpl-core/instructions/compressV1.d.ts +55 -0
- package/lib/types/solana/generated/mpl-core/instructions/createCollectionV1.d.ts +58 -0
- package/lib/types/solana/generated/mpl-core/instructions/createCollectionV2.d.ts +61 -0
- package/lib/types/solana/generated/mpl-core/instructions/createV1.d.ts +77 -0
- package/lib/types/solana/generated/mpl-core/instructions/createV2.d.ts +80 -0
- package/lib/types/solana/generated/mpl-core/instructions/decompressV1.d.ts +60 -0
- package/lib/types/solana/generated/mpl-core/instructions/executeV1.d.ts +63 -0
- package/lib/types/solana/generated/mpl-core/instructions/index.d.ts +40 -0
- package/lib/types/solana/generated/mpl-core/instructions/removeCollectionExternalPluginAdapterV1.d.ts +56 -0
- package/lib/types/solana/generated/mpl-core/instructions/removeCollectionPluginV1.d.ts +56 -0
- package/lib/types/solana/generated/mpl-core/instructions/removeExternalPluginAdapterV1.d.ts +60 -0
- package/lib/types/solana/generated/mpl-core/instructions/removePluginV1.d.ts +60 -0
- package/lib/types/solana/generated/mpl-core/instructions/revokeCollectionPluginAuthorityV1.d.ts +56 -0
- package/lib/types/solana/generated/mpl-core/instructions/revokePluginAuthorityV1.d.ts +60 -0
- package/lib/types/solana/generated/mpl-core/instructions/transferV1.d.ts +64 -0
- package/lib/types/solana/generated/mpl-core/instructions/updateCollectionExternalPluginAdapterV1.d.ts +59 -0
- package/lib/types/solana/generated/mpl-core/instructions/updateCollectionInfoV1.d.ts +47 -0
- package/lib/types/solana/generated/mpl-core/instructions/updateCollectionPluginV1.d.ts +56 -0
- package/lib/types/solana/generated/mpl-core/instructions/updateCollectionV1.d.ts +62 -0
- package/lib/types/solana/generated/mpl-core/instructions/updateExternalPluginAdapterV1.d.ts +63 -0
- package/lib/types/solana/generated/mpl-core/instructions/updatePluginV1.d.ts +60 -0
- package/lib/types/solana/generated/mpl-core/instructions/updateV1.d.ts +66 -0
- package/lib/types/solana/generated/mpl-core/instructions/updateV2.d.ts +70 -0
- package/lib/types/solana/generated/mpl-core/instructions/writeCollectionExternalPluginAdapterDataV1.d.ts +63 -0
- package/lib/types/solana/generated/mpl-core/instructions/writeExternalPluginAdapterDataV1.d.ts +67 -0
- package/lib/types/solana/generated/mpl-core/program-address.d.ts +7 -0
- package/lib/types/solana/generated/mpl-core/types/addAssetsToGroupV1Args.d.ts +13 -0
- package/lib/types/solana/generated/mpl-core/types/addBlocker.d.ts +13 -0
- package/lib/types/solana/generated/mpl-core/types/addCollectionsToGroupV1Args.d.ts +13 -0
- package/lib/types/solana/generated/mpl-core/types/addGroupsToGroupV1Args.d.ts +15 -0
- package/lib/types/solana/generated/mpl-core/types/agentIdentity.d.ts +15 -0
- package/lib/types/solana/generated/mpl-core/types/agentIdentityInitInfo.d.ts +22 -0
- package/lib/types/solana/generated/mpl-core/types/agentIdentityUpdateInfo.d.ts +20 -0
- package/lib/types/solana/generated/mpl-core/types/appData.d.ts +20 -0
- package/lib/types/solana/generated/mpl-core/types/appDataInitInfo.d.ts +22 -0
- package/lib/types/solana/generated/mpl-core/types/appDataUpdateInfo.d.ts +18 -0
- package/lib/types/solana/generated/mpl-core/types/attribute.d.ts +16 -0
- package/lib/types/solana/generated/mpl-core/types/attributes.d.ts +18 -0
- package/lib/types/solana/generated/mpl-core/types/authority.d.ts +29 -0
- package/lib/types/solana/generated/mpl-core/types/autograph.d.ts +18 -0
- package/lib/types/solana/generated/mpl-core/types/autographSignature.d.ts +16 -0
- package/lib/types/solana/generated/mpl-core/types/bubblegumV2.d.ts +13 -0
- package/lib/types/solana/generated/mpl-core/types/burnDelegate.d.ts +13 -0
- package/lib/types/solana/generated/mpl-core/types/closeGroupV1Args.d.ts +13 -0
- package/lib/types/solana/generated/mpl-core/types/compressionProof.d.ts +28 -0
- package/lib/types/solana/generated/mpl-core/types/creator.d.ts +16 -0
- package/lib/types/solana/generated/mpl-core/types/dataSection.d.ts +20 -0
- package/lib/types/solana/generated/mpl-core/types/dataSectionInitInfo.d.ts +20 -0
- package/lib/types/solana/generated/mpl-core/types/dataSectionUpdateInfo.d.ts +13 -0
- package/lib/types/solana/generated/mpl-core/types/dataState.d.ts +16 -0
- package/lib/types/solana/generated/mpl-core/types/edition.d.ts +15 -0
- package/lib/types/solana/generated/mpl-core/types/externalCheckResult.d.ts +15 -0
- package/lib/types/solana/generated/mpl-core/types/externalPluginAdapter.d.ts +66 -0
- package/lib/types/solana/generated/mpl-core/types/externalPluginAdapterInitInfo.d.ts +66 -0
- package/lib/types/solana/generated/mpl-core/types/externalPluginAdapterKey.d.ts +64 -0
- package/lib/types/solana/generated/mpl-core/types/externalPluginAdapterSchema.d.ts +17 -0
- package/lib/types/solana/generated/mpl-core/types/externalPluginAdapterType.d.ts +21 -0
- package/lib/types/solana/generated/mpl-core/types/externalPluginAdapterUpdateInfo.d.ts +59 -0
- package/lib/types/solana/generated/mpl-core/types/externalRegistryRecord.d.ts +28 -0
- package/lib/types/solana/generated/mpl-core/types/externalValidationResult.d.ts +17 -0
- package/lib/types/solana/generated/mpl-core/types/extraAccount.d.ts +86 -0
- package/lib/types/solana/generated/mpl-core/types/freezeDelegate.d.ts +15 -0
- package/lib/types/solana/generated/mpl-core/types/freezeExecute.d.ts +15 -0
- package/lib/types/solana/generated/mpl-core/types/groups.d.ts +15 -0
- package/lib/types/solana/generated/mpl-core/types/hashablePluginSchema.d.ts +22 -0
- package/lib/types/solana/generated/mpl-core/types/hashedAssetSchema.d.ts +16 -0
- package/lib/types/solana/generated/mpl-core/types/hookableLifecycleEvent.d.ts +19 -0
- package/lib/types/solana/generated/mpl-core/types/immutableMetadata.d.ts +13 -0
- package/lib/types/solana/generated/mpl-core/types/index.d.ts +89 -0
- package/lib/types/solana/generated/mpl-core/types/key.d.ts +21 -0
- package/lib/types/solana/generated/mpl-core/types/lifecycleHook.d.ts +24 -0
- package/lib/types/solana/generated/mpl-core/types/lifecycleHookInitInfo.d.ts +28 -0
- package/lib/types/solana/generated/mpl-core/types/lifecycleHookUpdateInfo.d.ts +22 -0
- package/lib/types/solana/generated/mpl-core/types/linkedAppData.d.ts +20 -0
- package/lib/types/solana/generated/mpl-core/types/linkedAppDataInitInfo.d.ts +22 -0
- package/lib/types/solana/generated/mpl-core/types/linkedAppDataUpdateInfo.d.ts +18 -0
- package/lib/types/solana/generated/mpl-core/types/linkedDataKey.d.ts +31 -0
- package/lib/types/solana/generated/mpl-core/types/linkedLifecycleHook.d.ts +24 -0
- package/lib/types/solana/generated/mpl-core/types/linkedLifecycleHookInitInfo.d.ts +28 -0
- package/lib/types/solana/generated/mpl-core/types/linkedLifecycleHookUpdateInfo.d.ts +22 -0
- package/lib/types/solana/generated/mpl-core/types/masterEdition.d.ts +21 -0
- package/lib/types/solana/generated/mpl-core/types/oracle.d.ts +22 -0
- package/lib/types/solana/generated/mpl-core/types/oracleInitInfo.d.ts +26 -0
- package/lib/types/solana/generated/mpl-core/types/oracleUpdateInfo.d.ts +22 -0
- package/lib/types/solana/generated/mpl-core/types/oracleValidation.d.ts +35 -0
- package/lib/types/solana/generated/mpl-core/types/permanentBurnDelegate.d.ts +13 -0
- package/lib/types/solana/generated/mpl-core/types/permanentFreezeDelegate.d.ts +15 -0
- package/lib/types/solana/generated/mpl-core/types/permanentFreezeExecute.d.ts +15 -0
- package/lib/types/solana/generated/mpl-core/types/permanentTransferDelegate.d.ts +13 -0
- package/lib/types/solana/generated/mpl-core/types/plugin.d.ts +150 -0
- package/lib/types/solana/generated/mpl-core/types/pluginAuthorityPair.d.ts +20 -0
- package/lib/types/solana/generated/mpl-core/types/pluginType.d.ts +33 -0
- package/lib/types/solana/generated/mpl-core/types/registryRecord.d.ts +22 -0
- package/lib/types/solana/generated/mpl-core/types/relationshipKind.d.ts +18 -0
- package/lib/types/solana/generated/mpl-core/types/removeAssetsFromGroupV1Args.d.ts +15 -0
- package/lib/types/solana/generated/mpl-core/types/removeCollectionsFromGroupV1Args.d.ts +15 -0
- package/lib/types/solana/generated/mpl-core/types/removeGroupsFromGroupV1Args.d.ts +15 -0
- package/lib/types/solana/generated/mpl-core/types/royalties.d.ts +22 -0
- package/lib/types/solana/generated/mpl-core/types/ruleSet.d.ts +27 -0
- package/lib/types/solana/generated/mpl-core/types/seed.d.ts +36 -0
- package/lib/types/solana/generated/mpl-core/types/transferDelegate.d.ts +13 -0
- package/lib/types/solana/generated/mpl-core/types/updateAuthority.d.ts +27 -0
- package/lib/types/solana/generated/mpl-core/types/updateDelegate.d.ts +15 -0
- package/lib/types/solana/generated/mpl-core/types/updateGroupV1Args.d.ts +19 -0
- package/lib/types/solana/generated/mpl-core/types/updateType.d.ts +17 -0
- package/lib/types/solana/generated/mpl-core/types/validationResult.d.ts +18 -0
- package/lib/types/solana/generated/mpl-core/types/validationResultsOffset.d.ts +33 -0
- package/lib/types/solana/generated/mpl-core/types/verifiedCreators.d.ts +18 -0
- package/lib/types/solana/generated/mpl-core/types/verifiedCreatorsSignature.d.ts +16 -0
- package/lib/types/solana/index.d.ts +63 -0
- package/lib/types/solana/instruction.d.ts +24 -0
- package/lib/types/solana/io-readable.d.ts +360 -0
- package/lib/types/solana/io-writeable.d.ts +533 -0
- package/lib/types/solana/json-rpc.d.ts +32 -0
- package/lib/types/solana/metadata.d.ts +69 -0
- package/lib/types/solana/mpl-core.d.ts +76 -0
- package/lib/types/solana/pda.d.ts +95 -0
- package/lib/types/solana/send.d.ts +16 -0
- package/lib/types/solana/spawn-ant.d.ts +130 -0
- package/lib/types/solana/types.d.ts +67 -0
- package/lib/types/types/ant-registry.d.ts +39 -0
- package/lib/types/types/ant.d.ts +22 -4
- package/lib/types/types/io.d.ts +56 -1
- package/lib/types/version.d.ts +1 -1
- package/package.json +33 -16
- package/lib/cjs/cli/cli.js +0 -822
- package/lib/cjs/cli/commands/antCommands.js +0 -113
- package/lib/cjs/cli/commands/arnsPurchaseCommands.js +0 -212
- package/lib/cjs/cli/commands/gatewayWriteCommands.js +0 -210
- package/lib/cjs/cli/commands/readCommands.js +0 -215
- package/lib/cjs/cli/commands/transfer.js +0 -159
- package/lib/cjs/cli/options.js +0 -470
- package/lib/cjs/cli/types.js +0 -2
- package/lib/cjs/cli/utils.js +0 -639
- package/lib/cjs/common/ant-registry.js +0 -155
- package/lib/cjs/common/ant-versions.js +0 -93
- package/lib/cjs/common/ant.js +0 -1182
- package/lib/cjs/common/arweave.js +0 -27
- package/lib/cjs/common/contracts/ao-process.js +0 -224
- package/lib/cjs/common/error.js +0 -64
- package/lib/cjs/common/faucet.js +0 -150
- package/lib/cjs/common/hyperbeam/hb.js +0 -173
- package/lib/cjs/common/index.js +0 -42
- package/lib/cjs/common/io.js +0 -1423
- package/lib/cjs/common/logger.js +0 -83
- package/lib/cjs/common/loggers/winston.js +0 -68
- package/lib/cjs/common/marketplace.js +0 -731
- package/lib/cjs/common/turbo.js +0 -223
- package/lib/cjs/constants.js +0 -41
- package/lib/cjs/node/index.js +0 -39
- package/lib/cjs/package.json +0 -1
- package/lib/cjs/types/ant-registry.js +0 -2
- package/lib/cjs/types/ant.js +0 -168
- package/lib/cjs/types/common.js +0 -2
- package/lib/cjs/types/faucet.js +0 -2
- package/lib/cjs/types/index.js +0 -37
- package/lib/cjs/types/io.js +0 -51
- package/lib/cjs/types/token.js +0 -116
- package/lib/cjs/utils/ant.js +0 -108
- package/lib/cjs/utils/ao.js +0 -432
- package/lib/cjs/utils/arweave.js +0 -285
- package/lib/cjs/utils/base64.js +0 -62
- package/lib/cjs/utils/hash.js +0 -56
- package/lib/cjs/utils/index.js +0 -38
- package/lib/cjs/utils/json.js +0 -26
- package/lib/cjs/utils/processes.js +0 -173
- package/lib/cjs/utils/random.js +0 -30
- package/lib/cjs/utils/schema.js +0 -15
- package/lib/cjs/utils/url.js +0 -37
- package/lib/cjs/version.js +0 -20
- package/lib/cjs/web/index.js +0 -41
|
@@ -0,0 +1,797 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solana ANT-escrow and Token-escrow clients — `ario-ant-escrow` program.
|
|
3
|
+
*
|
|
4
|
+
* ANTEscrow holds a Metaplex Core ANT NFT in trustless custody and
|
|
5
|
+
* releases it after on-chain verification of an Arweave RSA-PSS-4096 or
|
|
6
|
+
* Ethereum ECDSA signature over a canonical claim message.
|
|
7
|
+
*
|
|
8
|
+
* TokenEscrow holds ARIO SPL tokens (liquid or vaulted) in trustless
|
|
9
|
+
* custody with the same multi-protocol claim flow.
|
|
10
|
+
*
|
|
11
|
+
* Design: `docs/ANT_ESCROW_DESIGN.md` (account model, canonical message
|
|
12
|
+
* format, threat model). Plan: `docs/ANT_ESCROW_IMPLEMENTATION_PLAN.md`.
|
|
13
|
+
*
|
|
14
|
+
* All instruction encoding is delegated to the Codama-generated builders
|
|
15
|
+
* in `./generated/ant-escrow/instructions/` — they own the discriminator,
|
|
16
|
+
* Borsh codec, and account-meta wiring derived from the on-chain IDL.
|
|
17
|
+
*/
|
|
18
|
+
import { fetchMaybeEscrowAnt, fetchMaybeEscrowToken, getCancelDepositInstruction, getCancelTokenDepositInstruction, getCancelVaultDepositInstruction, getClaimAntArweaveAttestedInstruction, getClaimAntEthereumInstruction, getClaimTokensArweaveAttestedInstruction, getClaimTokensEthereumInstruction, getClaimVaultArweaveAttestedInstruction, getClaimVaultEthereumInstruction, getDepositAntInstruction, getDepositTokensInstruction, getDepositVaultInstruction, getUpdateRecipientInstruction, getUpdateTokenRecipientInstruction, getUpdateVaultRecipientInstruction, } from '@ar.io/solana-contracts/ant-escrow';
|
|
19
|
+
import { fetchMaybeVaultCounter, getVaultedTransferInstructionAsync, } from '@ar.io/solana-contracts/core';
|
|
20
|
+
import { Logger } from '../common/logger.js';
|
|
21
|
+
import { getAssociatedTokenAddressKit } from './ata.js';
|
|
22
|
+
import { ARIO_ANT_ESCROW_PROGRAM_ID, ARIO_CORE_PROGRAM_ID, ESCROW_ARWEAVE_PUBKEY_LEN, ESCROW_ASSET_TYPE_VAULT, ESCROW_ETHEREUM_PUBKEY_LEN, ESCROW_PROTOCOL_ARWEAVE, ESCROW_PROTOCOL_ETHEREUM, } from './constants.js';
|
|
23
|
+
import { getEscrowAntPDA, getEscrowTokenPDA, getEscrowVaultPDA, getVaultCounterPDA, getVaultPDA, } from './pda.js';
|
|
24
|
+
import { sendAndConfirm } from './send.js';
|
|
25
|
+
/** Map the Codama-generated `EscrowAnt` raw decoded type to our public
|
|
26
|
+
* `EscrowAntState` with protocol enum + active-prefix pubkey slice. */
|
|
27
|
+
function toEscrowAntState(raw) {
|
|
28
|
+
const recipientProtocol = raw.recipientProtocol === ESCROW_PROTOCOL_ARWEAVE ? 'arweave' : 'ethereum';
|
|
29
|
+
const expectedLen = recipientProtocol === 'arweave'
|
|
30
|
+
? ESCROW_ARWEAVE_PUBKEY_LEN
|
|
31
|
+
: ESCROW_ETHEREUM_PUBKEY_LEN;
|
|
32
|
+
if (raw.recipientProtocol !== ESCROW_PROTOCOL_ARWEAVE &&
|
|
33
|
+
raw.recipientProtocol !== ESCROW_PROTOCOL_ETHEREUM) {
|
|
34
|
+
throw new Error(`EscrowAnt: unknown protocol byte ${raw.recipientProtocol}`);
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
version: raw.version,
|
|
38
|
+
bump: raw.bump,
|
|
39
|
+
depositor: raw.depositor,
|
|
40
|
+
antMint: raw.antMint,
|
|
41
|
+
recipientProtocol,
|
|
42
|
+
recipientPubkey: new Uint8Array(raw.recipientPubkey.subarray(0, expectedLen)),
|
|
43
|
+
nonce: new Uint8Array(raw.nonce),
|
|
44
|
+
depositSlot: raw.depositSlot,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function protocolToByte(p) {
|
|
48
|
+
return p === 'arweave' ? ESCROW_PROTOCOL_ARWEAVE : ESCROW_PROTOCOL_ETHEREUM;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Solana-backed client for the trustless ANT-escrow program. All write
|
|
52
|
+
* methods require both `rpcSubscriptions` and `signer`; read methods
|
|
53
|
+
* only need `rpc`.
|
|
54
|
+
*/
|
|
55
|
+
export class ANTEscrow {
|
|
56
|
+
rpc;
|
|
57
|
+
rpcSubscriptions;
|
|
58
|
+
signer;
|
|
59
|
+
programId;
|
|
60
|
+
commitment;
|
|
61
|
+
logger;
|
|
62
|
+
constructor(config) {
|
|
63
|
+
this.rpc = config.rpc;
|
|
64
|
+
this.rpcSubscriptions = config.rpcSubscriptions;
|
|
65
|
+
this.signer = config.signer;
|
|
66
|
+
this.programId = config.programId ?? ARIO_ANT_ESCROW_PROGRAM_ID;
|
|
67
|
+
this.commitment = config.commitment ?? 'confirmed';
|
|
68
|
+
this.logger = config.logger ?? Logger.default;
|
|
69
|
+
}
|
|
70
|
+
static init(config) {
|
|
71
|
+
return new ANTEscrow(config);
|
|
72
|
+
}
|
|
73
|
+
// -------------------------------------------------------------------
|
|
74
|
+
// Reads
|
|
75
|
+
// -------------------------------------------------------------------
|
|
76
|
+
/** Fetch the on-chain `EscrowAnt` for an ANT mint, or `null` if no
|
|
77
|
+
* active escrow exists. Uses the Codama-generated decoder. */
|
|
78
|
+
async get(antMint) {
|
|
79
|
+
const [pda] = await getEscrowAntPDA(antMint, this.programId);
|
|
80
|
+
const account = await fetchMaybeEscrowAnt(this.rpc, pda, {
|
|
81
|
+
commitment: this.commitment,
|
|
82
|
+
});
|
|
83
|
+
if (!account.exists)
|
|
84
|
+
return null;
|
|
85
|
+
return toEscrowAntState(account.data);
|
|
86
|
+
}
|
|
87
|
+
/** Address of the EscrowAnt PDA for an ANT mint (no RPC call). */
|
|
88
|
+
async getPda(antMint) {
|
|
89
|
+
const [pda] = await getEscrowAntPDA(antMint, this.programId);
|
|
90
|
+
return pda;
|
|
91
|
+
}
|
|
92
|
+
// -------------------------------------------------------------------
|
|
93
|
+
// Write — depositor-side
|
|
94
|
+
// -------------------------------------------------------------------
|
|
95
|
+
/**
|
|
96
|
+
* Lock an ANT into escrow. The signer (depositor) must currently own
|
|
97
|
+
* the asset; mpl-core's TransferV1 CPI enforces this.
|
|
98
|
+
*
|
|
99
|
+
* `recipient.publicKey` length must match `recipient.protocol`:
|
|
100
|
+
* - `'arweave'` → 512-byte RSA-4096 modulus (the JWK `n` field)
|
|
101
|
+
* - `'ethereum'` → 20-byte address
|
|
102
|
+
*/
|
|
103
|
+
async deposit(args) {
|
|
104
|
+
const signer = this.requireSigner('deposit');
|
|
105
|
+
const ix = await this.depositIx(args, signer);
|
|
106
|
+
return this.send([ix]);
|
|
107
|
+
}
|
|
108
|
+
async depositIx(args, depositor) {
|
|
109
|
+
this.assertPubkeyLen(args.recipient);
|
|
110
|
+
const [escrow] = await getEscrowAntPDA(args.antMint, this.programId);
|
|
111
|
+
return getDepositAntInstruction({
|
|
112
|
+
escrow,
|
|
113
|
+
antAsset: args.antMint,
|
|
114
|
+
depositor,
|
|
115
|
+
recipientProtocol: protocolToByte(args.recipient.protocol),
|
|
116
|
+
recipientPubkey: args.recipient.publicKey,
|
|
117
|
+
}, { programAddress: this.programId });
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Re-target the escrow at a new recipient identity. Rotates the
|
|
121
|
+
* on-chain nonce, invalidating any in-flight claim signatures bound
|
|
122
|
+
* to the prior recipient.
|
|
123
|
+
*/
|
|
124
|
+
async updateRecipient(args) {
|
|
125
|
+
const signer = this.requireSigner('updateRecipient');
|
|
126
|
+
this.assertPubkeyLen(args.newRecipient);
|
|
127
|
+
const [escrow] = await getEscrowAntPDA(args.antMint, this.programId);
|
|
128
|
+
const ix = getUpdateRecipientInstruction({
|
|
129
|
+
escrow,
|
|
130
|
+
depositor: signer,
|
|
131
|
+
newProtocol: protocolToByte(args.newRecipient.protocol),
|
|
132
|
+
newPubkey: args.newRecipient.publicKey,
|
|
133
|
+
}, { programAddress: this.programId });
|
|
134
|
+
return this.send([ix]);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Pull an escrowed ANT back to the depositor. Closes the escrow PDA
|
|
138
|
+
* and refunds rent.
|
|
139
|
+
*/
|
|
140
|
+
async cancel(args) {
|
|
141
|
+
const signer = this.requireSigner('cancel');
|
|
142
|
+
const [escrow] = await getEscrowAntPDA(args.antMint, this.programId);
|
|
143
|
+
const ix = getCancelDepositInstruction({
|
|
144
|
+
escrow,
|
|
145
|
+
antAsset: args.antMint,
|
|
146
|
+
depositor: signer,
|
|
147
|
+
}, { programAddress: this.programId });
|
|
148
|
+
return this.send([ix]);
|
|
149
|
+
}
|
|
150
|
+
// -------------------------------------------------------------------
|
|
151
|
+
// Write — claim
|
|
152
|
+
// -------------------------------------------------------------------
|
|
153
|
+
/**
|
|
154
|
+
* Submit an Arweave RSA-PSS-4096 signature to release the ANT.
|
|
155
|
+
* Anyone can submit (the fee payer = `signer`); only `claimant`
|
|
156
|
+
* receives the ANT, and only the original `depositor` receives rent.
|
|
157
|
+
*/
|
|
158
|
+
async claimArweave(args) {
|
|
159
|
+
const escrow = await this.requireEscrow(args.antMint);
|
|
160
|
+
if (escrow.recipientProtocol !== 'arweave') {
|
|
161
|
+
throw new Error(`escrow recipient is ${escrow.recipientProtocol}, not arweave`);
|
|
162
|
+
}
|
|
163
|
+
const ix = await this.claimArweaveIx({
|
|
164
|
+
...args,
|
|
165
|
+
saltLen: args.saltLen ?? 32,
|
|
166
|
+
depositor: escrow.depositor,
|
|
167
|
+
messageNonce: escrow.nonce,
|
|
168
|
+
});
|
|
169
|
+
// RSA-PSS-4096 verification via sol_big_mod_exp is CU-intensive
|
|
170
|
+
// (~200K+ for the full claim including Transfer CPI). Use 400K to
|
|
171
|
+
// provide comfortable headroom.
|
|
172
|
+
return this.send([ix], 400_000);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Build the ANT-claim-via-Arweave-attested instruction.
|
|
176
|
+
*
|
|
177
|
+
* **API note**: this method previously took user-side RSA-PSS params
|
|
178
|
+
* (`signature`, `saltLen`, `messageNonce`). The on-chain ix was
|
|
179
|
+
* renamed to `claim_ant_arweave_attested` (canonical contracts
|
|
180
|
+
* `ar-io-solana-contracts` PR-19+): verification is now via
|
|
181
|
+
* instruction-introspection of a preceding Ed25519 sigverify ix
|
|
182
|
+
* issued by the off-chain attestor (see
|
|
183
|
+
* `migration/attestor/`). Those data args are no longer fed to the
|
|
184
|
+
* builder. Callers MUST prepend the attestor's sigverify ix to the
|
|
185
|
+
* transaction or it will fail on-chain. A higher-level helper that
|
|
186
|
+
* fetches the attestor's signature and assembles the full tx is
|
|
187
|
+
* tracked as a follow-up.
|
|
188
|
+
*
|
|
189
|
+
* @deprecated Args `signature`, `saltLen`, `messageNonce` are
|
|
190
|
+
* ignored. Use the new attested flow.
|
|
191
|
+
*/
|
|
192
|
+
async claimArweaveIx(args) {
|
|
193
|
+
if (args.messageNonce.length !== 32) {
|
|
194
|
+
throw new Error('messageNonce must be 32 bytes');
|
|
195
|
+
}
|
|
196
|
+
const signer = this.requireSigner('claimArweave');
|
|
197
|
+
const [escrow] = await getEscrowAntPDA(args.antMint, this.programId);
|
|
198
|
+
return getClaimAntArweaveAttestedInstruction({
|
|
199
|
+
escrow,
|
|
200
|
+
antAsset: args.antMint,
|
|
201
|
+
claimant: args.claimant,
|
|
202
|
+
depositor: args.depositor,
|
|
203
|
+
payer: signer,
|
|
204
|
+
messageNonce: args.messageNonce,
|
|
205
|
+
}, { programAddress: this.programId });
|
|
206
|
+
}
|
|
207
|
+
/** Submit an Ethereum ECDSA secp256k1 + EIP-191 signature. */
|
|
208
|
+
async claimEthereum(args) {
|
|
209
|
+
const escrow = await this.requireEscrow(args.antMint);
|
|
210
|
+
if (escrow.recipientProtocol !== 'ethereum') {
|
|
211
|
+
throw new Error(`escrow recipient is ${escrow.recipientProtocol}, not ethereum`);
|
|
212
|
+
}
|
|
213
|
+
const ix = await this.claimEthereumIx({
|
|
214
|
+
...args,
|
|
215
|
+
depositor: escrow.depositor,
|
|
216
|
+
messageNonce: escrow.nonce,
|
|
217
|
+
});
|
|
218
|
+
return this.send([ix]);
|
|
219
|
+
}
|
|
220
|
+
async claimEthereumIx(args) {
|
|
221
|
+
if (args.signature.length !== 65) {
|
|
222
|
+
throw new Error('ethereum signature must be 65 bytes (r||s||v)');
|
|
223
|
+
}
|
|
224
|
+
if (args.messageNonce.length !== 32) {
|
|
225
|
+
throw new Error('messageNonce must be 32 bytes');
|
|
226
|
+
}
|
|
227
|
+
const signer = this.requireSigner('claimEthereum');
|
|
228
|
+
const [escrow] = await getEscrowAntPDA(args.antMint, this.programId);
|
|
229
|
+
return getClaimAntEthereumInstruction({
|
|
230
|
+
escrow,
|
|
231
|
+
antAsset: args.antMint,
|
|
232
|
+
claimant: args.claimant,
|
|
233
|
+
depositor: args.depositor,
|
|
234
|
+
payer: signer,
|
|
235
|
+
messageNonce: args.messageNonce,
|
|
236
|
+
signature: args.signature,
|
|
237
|
+
}, { programAddress: this.programId });
|
|
238
|
+
}
|
|
239
|
+
// -------------------------------------------------------------------
|
|
240
|
+
// Internals
|
|
241
|
+
// -------------------------------------------------------------------
|
|
242
|
+
async send(instructions, computeUnitLimit = 200_000) {
|
|
243
|
+
const signer = this.requireSigner('send');
|
|
244
|
+
if (!this.rpcSubscriptions) {
|
|
245
|
+
throw new Error('ANTEscrow: rpcSubscriptions required for write operations');
|
|
246
|
+
}
|
|
247
|
+
return sendAndConfirm({
|
|
248
|
+
rpc: this.rpc,
|
|
249
|
+
rpcSubscriptions: this.rpcSubscriptions,
|
|
250
|
+
signer,
|
|
251
|
+
instructions,
|
|
252
|
+
commitment: this.commitment,
|
|
253
|
+
computeUnitLimit,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
requireSigner(op) {
|
|
257
|
+
if (!this.signer) {
|
|
258
|
+
throw new Error(`ANTEscrow.${op}: signer is required for writes`);
|
|
259
|
+
}
|
|
260
|
+
return this.signer;
|
|
261
|
+
}
|
|
262
|
+
async requireEscrow(antMint) {
|
|
263
|
+
const escrow = await this.get(antMint);
|
|
264
|
+
if (!escrow) {
|
|
265
|
+
throw new Error(`no escrow found for ANT ${antMint}`);
|
|
266
|
+
}
|
|
267
|
+
return escrow;
|
|
268
|
+
}
|
|
269
|
+
assertPubkeyLen(recipient) {
|
|
270
|
+
const expected = recipient.protocol === 'arweave'
|
|
271
|
+
? ESCROW_ARWEAVE_PUBKEY_LEN
|
|
272
|
+
: ESCROW_ETHEREUM_PUBKEY_LEN;
|
|
273
|
+
if (recipient.publicKey.length !== expected) {
|
|
274
|
+
throw new Error(`recipient.publicKey: expected ${expected} bytes for protocol=${recipient.protocol}, got ${recipient.publicKey.length}`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/** Map the Codama-generated `EscrowToken` raw decoded type to our public
|
|
279
|
+
* `EscrowTokenState` with protocol enum + active-prefix pubkey slice. */
|
|
280
|
+
function toEscrowTokenState(raw) {
|
|
281
|
+
const recipientProtocol = raw.recipientProtocol === ESCROW_PROTOCOL_ARWEAVE ? 'arweave' : 'ethereum';
|
|
282
|
+
if (raw.recipientProtocol !== ESCROW_PROTOCOL_ARWEAVE &&
|
|
283
|
+
raw.recipientProtocol !== ESCROW_PROTOCOL_ETHEREUM) {
|
|
284
|
+
throw new Error(`EscrowToken: unknown protocol byte ${raw.recipientProtocol}`);
|
|
285
|
+
}
|
|
286
|
+
const expectedLen = recipientProtocol === 'arweave'
|
|
287
|
+
? ESCROW_ARWEAVE_PUBKEY_LEN
|
|
288
|
+
: ESCROW_ETHEREUM_PUBKEY_LEN;
|
|
289
|
+
return {
|
|
290
|
+
version: raw.version,
|
|
291
|
+
bump: raw.bump,
|
|
292
|
+
depositor: raw.depositor,
|
|
293
|
+
assetType: raw.assetType === ESCROW_ASSET_TYPE_VAULT ? 'vault' : 'token',
|
|
294
|
+
amount: raw.amount,
|
|
295
|
+
arioMint: raw.arioMint,
|
|
296
|
+
assetId: new Uint8Array(raw.assetId),
|
|
297
|
+
recipientProtocol,
|
|
298
|
+
recipientPubkey: new Uint8Array(raw.recipientPubkey.subarray(0, expectedLen)),
|
|
299
|
+
nonce: new Uint8Array(raw.nonce),
|
|
300
|
+
depositSlot: raw.depositSlot,
|
|
301
|
+
vaultEndTimestamp: raw.vaultEndTimestamp,
|
|
302
|
+
vaultRevocable: raw.vaultRevocable,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
// =========================================
|
|
306
|
+
// ATA helper
|
|
307
|
+
// =========================================
|
|
308
|
+
/** Associated Token Account program address. */
|
|
309
|
+
const ATA_PROGRAM_ADDRESS = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL';
|
|
310
|
+
/**
|
|
311
|
+
* Build a `CreateAssociatedTokenAccountIdempotent` instruction.
|
|
312
|
+
* Uses instruction index 1 (idempotent variant) of the ATA program.
|
|
313
|
+
*/
|
|
314
|
+
function buildCreateAtaIdempotentIx(payer, ata, owner, mint) {
|
|
315
|
+
const SYSTEM_PROGRAM = '11111111111111111111111111111111';
|
|
316
|
+
const TOKEN_PROGRAM = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA';
|
|
317
|
+
return {
|
|
318
|
+
programAddress: ATA_PROGRAM_ADDRESS,
|
|
319
|
+
accounts: [
|
|
320
|
+
{ address: payer, role: 3 }, // writable signer
|
|
321
|
+
{ address: ata, role: 1 }, // writable
|
|
322
|
+
{ address: owner, role: 0 }, // readonly
|
|
323
|
+
{ address: mint, role: 0 }, // readonly
|
|
324
|
+
{ address: SYSTEM_PROGRAM, role: 0 }, // readonly
|
|
325
|
+
{ address: TOKEN_PROGRAM, role: 0 }, // readonly
|
|
326
|
+
],
|
|
327
|
+
data: new Uint8Array([1]), // CreateIdempotent = instruction discriminator 1
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
// =========================================
|
|
331
|
+
// TokenEscrow client
|
|
332
|
+
// =========================================
|
|
333
|
+
/**
|
|
334
|
+
* Solana-backed client for the trustless token/vault escrow program. All
|
|
335
|
+
* write methods require both `rpcSubscriptions` and `signer`; read methods
|
|
336
|
+
* only need `rpc`.
|
|
337
|
+
*
|
|
338
|
+
* Uses the same config shape as {@link ANTEscrow}.
|
|
339
|
+
*/
|
|
340
|
+
export class TokenEscrow {
|
|
341
|
+
rpc;
|
|
342
|
+
rpcSubscriptions;
|
|
343
|
+
signer;
|
|
344
|
+
programId;
|
|
345
|
+
coreProgram;
|
|
346
|
+
commitment;
|
|
347
|
+
logger;
|
|
348
|
+
constructor(config) {
|
|
349
|
+
this.rpc = config.rpc;
|
|
350
|
+
this.rpcSubscriptions = config.rpcSubscriptions;
|
|
351
|
+
this.signer = config.signer;
|
|
352
|
+
this.programId = config.programId ?? ARIO_ANT_ESCROW_PROGRAM_ID;
|
|
353
|
+
this.coreProgram = config.coreProgram ?? ARIO_CORE_PROGRAM_ID;
|
|
354
|
+
this.commitment = config.commitment ?? 'confirmed';
|
|
355
|
+
this.logger = config.logger ?? Logger.default;
|
|
356
|
+
}
|
|
357
|
+
static init(config) {
|
|
358
|
+
return new TokenEscrow(config);
|
|
359
|
+
}
|
|
360
|
+
// -------------------------------------------------------------------
|
|
361
|
+
// Reads
|
|
362
|
+
// -------------------------------------------------------------------
|
|
363
|
+
/**
|
|
364
|
+
* Fetch the on-chain `EscrowToken` for a depositor and asset ID, or
|
|
365
|
+
* `null` if no active escrow exists. Uses the Codama-generated decoder.
|
|
366
|
+
*/
|
|
367
|
+
async get(depositor, assetId) {
|
|
368
|
+
const [pda] = await getEscrowTokenPDA(depositor, assetId, this.programId);
|
|
369
|
+
const account = await fetchMaybeEscrowToken(this.rpc, pda, {
|
|
370
|
+
commitment: this.commitment,
|
|
371
|
+
});
|
|
372
|
+
if (!account.exists)
|
|
373
|
+
return null;
|
|
374
|
+
return toEscrowTokenState(account.data);
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Fetch the on-chain `EscrowToken` for a vault escrow, or `null` if
|
|
378
|
+
* no active escrow exists.
|
|
379
|
+
*/
|
|
380
|
+
async getVault(depositor, assetId) {
|
|
381
|
+
const [pda] = await getEscrowVaultPDA(depositor, assetId, this.programId);
|
|
382
|
+
const account = await fetchMaybeEscrowToken(this.rpc, pda, {
|
|
383
|
+
commitment: this.commitment,
|
|
384
|
+
});
|
|
385
|
+
if (!account.exists)
|
|
386
|
+
return null;
|
|
387
|
+
return toEscrowTokenState(account.data);
|
|
388
|
+
}
|
|
389
|
+
/** Address of the EscrowToken PDA (no RPC call). */
|
|
390
|
+
async getTokenPda(depositor, assetId) {
|
|
391
|
+
const [pda] = await getEscrowTokenPDA(depositor, assetId, this.programId);
|
|
392
|
+
return pda;
|
|
393
|
+
}
|
|
394
|
+
/** Address of the EscrowVault PDA (no RPC call). */
|
|
395
|
+
async getVaultPda(depositor, assetId) {
|
|
396
|
+
const [pda] = await getEscrowVaultPDA(depositor, assetId, this.programId);
|
|
397
|
+
return pda;
|
|
398
|
+
}
|
|
399
|
+
// -------------------------------------------------------------------
|
|
400
|
+
// Write — deposit
|
|
401
|
+
// -------------------------------------------------------------------
|
|
402
|
+
/**
|
|
403
|
+
* Deposit liquid ARIO tokens into escrow for a designated Arweave or
|
|
404
|
+
* Ethereum recipient. Prepends a create-ATA-idempotent instruction for
|
|
405
|
+
* the escrow PDA's token account in the same transaction.
|
|
406
|
+
*/
|
|
407
|
+
async depositTokens(args) {
|
|
408
|
+
const signer = this.requireSigner('depositTokens');
|
|
409
|
+
this.assertPubkeyLen(args.recipient);
|
|
410
|
+
this.assertAssetIdLen(args.assetId);
|
|
411
|
+
const [escrow] = await getEscrowTokenPDA(signer.address, args.assetId, this.programId);
|
|
412
|
+
// Derive the escrow PDA's ATA for the ARIO mint.
|
|
413
|
+
const escrowAta = await getAssociatedTokenAddressKit(args.arioMint, escrow, true);
|
|
414
|
+
// Prepend create-ATA-idempotent so the escrow token account exists.
|
|
415
|
+
const createAtaIx = buildCreateAtaIdempotentIx(signer.address, escrowAta, escrow, args.arioMint);
|
|
416
|
+
const depositIx = getDepositTokensInstruction({
|
|
417
|
+
escrow,
|
|
418
|
+
depositorTokenAccount: args.depositorTokenAccount,
|
|
419
|
+
escrowTokenAccount: escrowAta,
|
|
420
|
+
arioMint: args.arioMint,
|
|
421
|
+
depositor: signer,
|
|
422
|
+
assetId: args.assetId,
|
|
423
|
+
amount: args.amount,
|
|
424
|
+
recipientProtocol: protocolToByte(args.recipient.protocol),
|
|
425
|
+
recipientPubkey: args.recipient.publicKey,
|
|
426
|
+
}, { programAddress: this.programId });
|
|
427
|
+
return this.send([createAtaIx, depositIx]);
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Deposit ARIO tokens into escrow as a vaulted (time-locked) position.
|
|
431
|
+
* Same as `depositTokens` but additionally records the lock duration
|
|
432
|
+
* and revocability flag. Uses the vault PDA seed.
|
|
433
|
+
*/
|
|
434
|
+
async depositVault(args) {
|
|
435
|
+
const signer = this.requireSigner('depositVault');
|
|
436
|
+
this.assertPubkeyLen(args.recipient);
|
|
437
|
+
this.assertAssetIdLen(args.assetId);
|
|
438
|
+
const [escrow] = await getEscrowVaultPDA(signer.address, args.assetId, this.programId);
|
|
439
|
+
const escrowAta = await getAssociatedTokenAddressKit(args.arioMint, escrow, true);
|
|
440
|
+
const createAtaIx = buildCreateAtaIdempotentIx(signer.address, escrowAta, escrow, args.arioMint);
|
|
441
|
+
const depositIx = getDepositVaultInstruction({
|
|
442
|
+
escrow,
|
|
443
|
+
depositorTokenAccount: args.depositorTokenAccount,
|
|
444
|
+
escrowTokenAccount: escrowAta,
|
|
445
|
+
arioMint: args.arioMint,
|
|
446
|
+
depositor: signer,
|
|
447
|
+
assetId: args.assetId,
|
|
448
|
+
amount: args.amount,
|
|
449
|
+
lockDurationSeconds: args.lockDurationSeconds,
|
|
450
|
+
revocable: args.revocable,
|
|
451
|
+
recipientProtocol: protocolToByte(args.recipient.protocol),
|
|
452
|
+
recipientPubkey: args.recipient.publicKey,
|
|
453
|
+
}, { programAddress: this.programId });
|
|
454
|
+
return this.send([createAtaIx, depositIx]);
|
|
455
|
+
}
|
|
456
|
+
// -------------------------------------------------------------------
|
|
457
|
+
// Write — claim
|
|
458
|
+
// -------------------------------------------------------------------
|
|
459
|
+
/**
|
|
460
|
+
* Submit an Arweave RSA-PSS-4096 signature to release escrowed tokens.
|
|
461
|
+
* Anyone can submit (fee payer = `signer`); only `claimant` receives
|
|
462
|
+
* the tokens, and `depositor` receives rent.
|
|
463
|
+
*/
|
|
464
|
+
async claimTokensArweave(args) {
|
|
465
|
+
const escrow = await this.requireTokenEscrow(args.depositor, args.assetId);
|
|
466
|
+
if (escrow.recipientProtocol !== 'arweave') {
|
|
467
|
+
throw new Error(`escrow recipient is ${escrow.recipientProtocol}, not arweave`);
|
|
468
|
+
}
|
|
469
|
+
const ix = await this.claimTokensArweaveIx({
|
|
470
|
+
...args,
|
|
471
|
+
saltLen: args.saltLen ?? 32,
|
|
472
|
+
messageNonce: escrow.nonce,
|
|
473
|
+
});
|
|
474
|
+
// The on-chain claim handler delivers liquid tokens to
|
|
475
|
+
// `claimantTokenAccount`; for fresh-wallet claimants the canonical ATA
|
|
476
|
+
// doesn't exist yet (#3012). Idempotent-create when canonical.
|
|
477
|
+
const createAtaIx = await this._createClaimantAtaIfCanonical(args.claimant, args.claimantTokenAccount, escrow.arioMint);
|
|
478
|
+
// RSA-PSS-4096 verification is CU-intensive; use 400K.
|
|
479
|
+
return this.send(createAtaIx ? [createAtaIx, ix] : [ix], 400_000);
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* @deprecated Args `signature`, `saltLen`, `messageNonce` are ignored.
|
|
483
|
+
* Use the new attested flow — see `claimArweaveIx` doc.
|
|
484
|
+
*/
|
|
485
|
+
async claimTokensArweaveIx(args) {
|
|
486
|
+
if (args.messageNonce.length !== 32) {
|
|
487
|
+
throw new Error('messageNonce must be 32 bytes');
|
|
488
|
+
}
|
|
489
|
+
const signer = this.requireSigner('claimTokensArweave');
|
|
490
|
+
const [escrow] = await getEscrowTokenPDA(args.depositor, args.assetId, this.programId);
|
|
491
|
+
return getClaimTokensArweaveAttestedInstruction({
|
|
492
|
+
escrow,
|
|
493
|
+
escrowTokenAccount: args.escrowTokenAccount,
|
|
494
|
+
claimantTokenAccount: args.claimantTokenAccount,
|
|
495
|
+
claimant: args.claimant,
|
|
496
|
+
depositor: args.depositor,
|
|
497
|
+
payer: signer,
|
|
498
|
+
messageNonce: args.messageNonce,
|
|
499
|
+
}, { programAddress: this.programId });
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Submit an Ethereum ECDSA secp256k1 + EIP-191 signature to release
|
|
503
|
+
* escrowed tokens.
|
|
504
|
+
*/
|
|
505
|
+
async claimTokensEthereum(args) {
|
|
506
|
+
const escrow = await this.requireTokenEscrow(args.depositor, args.assetId);
|
|
507
|
+
if (escrow.recipientProtocol !== 'ethereum') {
|
|
508
|
+
throw new Error(`escrow recipient is ${escrow.recipientProtocol}, not ethereum`);
|
|
509
|
+
}
|
|
510
|
+
const ix = await this.claimTokensEthereumIx({
|
|
511
|
+
...args,
|
|
512
|
+
messageNonce: escrow.nonce,
|
|
513
|
+
});
|
|
514
|
+
// Same fresh-wallet #3012 vector as claimTokensArweave — bundle a
|
|
515
|
+
// canonical-ATA idempotent-create when applicable.
|
|
516
|
+
const createAtaIx = await this._createClaimantAtaIfCanonical(args.claimant, args.claimantTokenAccount, escrow.arioMint);
|
|
517
|
+
return this.send(createAtaIx ? [createAtaIx, ix] : [ix]);
|
|
518
|
+
}
|
|
519
|
+
async claimTokensEthereumIx(args) {
|
|
520
|
+
if (args.signature.length !== 65) {
|
|
521
|
+
throw new Error('ethereum signature must be 65 bytes (r||s||v)');
|
|
522
|
+
}
|
|
523
|
+
if (args.messageNonce.length !== 32) {
|
|
524
|
+
throw new Error('messageNonce must be 32 bytes');
|
|
525
|
+
}
|
|
526
|
+
const signer = this.requireSigner('claimTokensEthereum');
|
|
527
|
+
const [escrow] = await getEscrowTokenPDA(args.depositor, args.assetId, this.programId);
|
|
528
|
+
return getClaimTokensEthereumInstruction({
|
|
529
|
+
escrow,
|
|
530
|
+
escrowTokenAccount: args.escrowTokenAccount,
|
|
531
|
+
claimantTokenAccount: args.claimantTokenAccount,
|
|
532
|
+
claimant: args.claimant,
|
|
533
|
+
depositor: args.depositor,
|
|
534
|
+
payer: signer,
|
|
535
|
+
messageNonce: args.messageNonce,
|
|
536
|
+
signature: args.signature,
|
|
537
|
+
}, { programAddress: this.programId });
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Submit an Arweave RSA-PSS-4096 signature to release escrowed vault tokens.
|
|
541
|
+
*
|
|
542
|
+
* The on-chain handler routes by vault state via instructions-sysvar
|
|
543
|
+
* introspection: an expired vault sends tokens straight to
|
|
544
|
+
* `claimantTokenAccount`; an active (still-locked) vault routes them to
|
|
545
|
+
* `payerTokenAccount` and requires a matching `ario_core::vaulted_transfer`
|
|
546
|
+
* sibling instruction in the same transaction.
|
|
547
|
+
*
|
|
548
|
+
* This method auto-detects the path from `vaultEndTimestamp` and bundles
|
|
549
|
+
* the sibling `vaulted_transfer` ix automatically when the vault is still
|
|
550
|
+
* active — callers do not need to construct it themselves.
|
|
551
|
+
*/
|
|
552
|
+
async claimVaultArweave(args) {
|
|
553
|
+
const escrow = await this.requireVaultEscrow(args.depositor, args.assetId);
|
|
554
|
+
if (escrow.recipientProtocol !== 'arweave') {
|
|
555
|
+
throw new Error(`escrow recipient is ${escrow.recipientProtocol}, not arweave`);
|
|
556
|
+
}
|
|
557
|
+
const signer = this.requireSigner('claimVaultArweave');
|
|
558
|
+
const [escrowPda] = await getEscrowVaultPDA(args.depositor, args.assetId, this.programId);
|
|
559
|
+
// `args.signature` and `args.saltLen` are no longer fed to the
|
|
560
|
+
// builder — the on-chain `claim_vault_arweave_attested` ix verifies
|
|
561
|
+
// the attestor's Ed25519 signature via instruction-introspection
|
|
562
|
+
// of a preceding sigverify ix. See doc on `claimArweaveIx`.
|
|
563
|
+
const claimIx = getClaimVaultArweaveAttestedInstruction({
|
|
564
|
+
escrow: escrowPda,
|
|
565
|
+
escrowTokenAccount: args.escrowTokenAccount,
|
|
566
|
+
claimantTokenAccount: args.claimantTokenAccount,
|
|
567
|
+
payerTokenAccount: args.payerTokenAccount,
|
|
568
|
+
claimant: args.claimant,
|
|
569
|
+
depositor: args.depositor,
|
|
570
|
+
payer: signer,
|
|
571
|
+
messageNonce: escrow.nonce,
|
|
572
|
+
}, { programAddress: this.programId });
|
|
573
|
+
const ixs = await this.maybeBundleVaultedTransfer(escrow, args, claimIx);
|
|
574
|
+
return this.send(ixs, 400_000);
|
|
575
|
+
}
|
|
576
|
+
/**
|
|
577
|
+
* Submit an Ethereum ECDSA signature to release escrowed vault tokens. See
|
|
578
|
+
* {@link claimVaultArweave} for the expired/active vault routing semantics.
|
|
579
|
+
* Auto-bundles the sibling `vaulted_transfer` ix for active vaults.
|
|
580
|
+
*/
|
|
581
|
+
async claimVaultEthereum(args) {
|
|
582
|
+
const escrow = await this.requireVaultEscrow(args.depositor, args.assetId);
|
|
583
|
+
if (escrow.recipientProtocol !== 'ethereum') {
|
|
584
|
+
throw new Error(`escrow recipient is ${escrow.recipientProtocol}, not ethereum`);
|
|
585
|
+
}
|
|
586
|
+
const signer = this.requireSigner('claimVaultEthereum');
|
|
587
|
+
const [escrowPda] = await getEscrowVaultPDA(args.depositor, args.assetId, this.programId);
|
|
588
|
+
const claimIx = getClaimVaultEthereumInstruction({
|
|
589
|
+
escrow: escrowPda,
|
|
590
|
+
escrowTokenAccount: args.escrowTokenAccount,
|
|
591
|
+
claimantTokenAccount: args.claimantTokenAccount,
|
|
592
|
+
payerTokenAccount: args.payerTokenAccount,
|
|
593
|
+
claimant: args.claimant,
|
|
594
|
+
depositor: args.depositor,
|
|
595
|
+
payer: signer,
|
|
596
|
+
messageNonce: escrow.nonce,
|
|
597
|
+
signature: args.signature,
|
|
598
|
+
}, { programAddress: this.programId });
|
|
599
|
+
const ixs = await this.maybeBundleVaultedTransfer(escrow, args, claimIx);
|
|
600
|
+
return this.send(ixs);
|
|
601
|
+
}
|
|
602
|
+
/**
|
|
603
|
+
* If the vault escrow is still locked (`vaultEndTimestamp` in the future),
|
|
604
|
+
* return `[claimIx, vaultedTransferIx]` so the on-chain claim handler can
|
|
605
|
+
* see the sibling (via `instructions_sysvar`) and re-vault tokens for the
|
|
606
|
+
* claimant. If the vault has expired, just `[claimIx]` — the on-chain
|
|
607
|
+
* handler delivers tokens directly to `claimantTokenAccount`.
|
|
608
|
+
*
|
|
609
|
+
* **Ordering matters at runtime**: `claim` must execute first so it can
|
|
610
|
+
* move tokens `escrow → payerTokenAccount`. `vaulted_transfer` then pulls
|
|
611
|
+
* from `payerTokenAccount` into the new vault. Reversing the order makes
|
|
612
|
+
* `vaulted_transfer` fail with `insufficient funds` because nothing has
|
|
613
|
+
* funded `payerTokenAccount` yet. The introspection check in
|
|
614
|
+
* `vault_introspect::verify_vaulted_transfer_in_tx` is presence-based
|
|
615
|
+
* (reads `instructions_sysvar`) so the *sibling* ordering doesn't matter
|
|
616
|
+
* for the check itself — only for atomic execution.
|
|
617
|
+
*
|
|
618
|
+
* `lockDurationSeconds` is set to the SDK-local `remaining` value. The
|
|
619
|
+
* on-chain handler accepts `lock_duration >= remaining_at_execution - 60s`
|
|
620
|
+
* (see the introspection function's tolerance), so any modest clock skew
|
|
621
|
+
* between client and chain is absorbed.
|
|
622
|
+
*/
|
|
623
|
+
/**
|
|
624
|
+
* Idempotent-create the claimant's canonical ATA when needed.
|
|
625
|
+
*
|
|
626
|
+
* The on-chain claim handler delivers liquid tokens directly to
|
|
627
|
+
* `claimantTokenAccount` for expired vaults AND for token escrows.
|
|
628
|
+
* For active vaults, the `claim_vault_*` Anchor Accounts struct still
|
|
629
|
+
* declares `claimant_token_account: Account<TokenAccount>`, which forces
|
|
630
|
+
* Anchor's account-load-time validation to require the account exist
|
|
631
|
+
* even though the active path doesn't write to it. Either way: if the
|
|
632
|
+
* claimant is a fresh wallet that has never held this mint, the ATA
|
|
633
|
+
* doesn't exist and the tx fails with `AccountNotInitialized` (#3012).
|
|
634
|
+
*
|
|
635
|
+
* Returns `null` when the caller passed a non-canonical
|
|
636
|
+
* `claimantTokenAccount` (manually-created non-ATA token account,
|
|
637
|
+
* presumably already exists — caller's responsibility).
|
|
638
|
+
*/
|
|
639
|
+
async _createClaimantAtaIfCanonical(claimant, claimantTokenAccount, mint) {
|
|
640
|
+
const canonical = await getAssociatedTokenAddressKit(mint, claimant);
|
|
641
|
+
if (claimantTokenAccount !== canonical)
|
|
642
|
+
return null;
|
|
643
|
+
const signer = this.requireSigner('createClaimantAtaIfCanonical');
|
|
644
|
+
return buildCreateAtaIdempotentIx(signer.address, canonical, claimant, mint);
|
|
645
|
+
}
|
|
646
|
+
async maybeBundleVaultedTransfer(escrow, args, claimIx) {
|
|
647
|
+
const nowSeconds = BigInt(Math.floor(Date.now() / 1000));
|
|
648
|
+
const remaining = escrow.vaultEndTimestamp - nowSeconds;
|
|
649
|
+
if (remaining <= 0n) {
|
|
650
|
+
// Expired vault → claim handler delivers liquid to claimantTokenAccount.
|
|
651
|
+
// Idempotent-create that ATA if it's the canonical derivation so a
|
|
652
|
+
// first-time recipient just works.
|
|
653
|
+
const createClaimantAtaIx = await this._createClaimantAtaIfCanonical(args.claimant, args.claimantTokenAccount, escrow.arioMint);
|
|
654
|
+
return createClaimantAtaIx ? [createClaimantAtaIx, claimIx] : [claimIx];
|
|
655
|
+
}
|
|
656
|
+
const signer = this.requireSigner('maybeBundleVaultedTransfer');
|
|
657
|
+
const nextId = await this.getNextVaultId(args.claimant);
|
|
658
|
+
const [vaultPda] = await getVaultPDA(args.claimant, nextId, this.coreProgram);
|
|
659
|
+
const vaultATA = await getAssociatedTokenAddressKit(escrow.arioMint, vaultPda, true);
|
|
660
|
+
// Active-vault path: `claim_vault_*` still validates the claimant ATA
|
|
661
|
+
// at account-load-time (Anchor `Account<TokenAccount>` constraint),
|
|
662
|
+
// even though no liquid is written to it. Idempotent-create so a fresh
|
|
663
|
+
// claimant doesn't fail the ix with AccountNotInitialized (#3012).
|
|
664
|
+
const createClaimantAtaIx = await this._createClaimantAtaIfCanonical(args.claimant, args.claimantTokenAccount, escrow.arioMint);
|
|
665
|
+
// The new vault PDA's ATA must exist before `vaulted_transfer` reads it
|
|
666
|
+
// (else `AccountNotInitialized` #3012). Idempotent so a retry after a
|
|
667
|
+
// partial-failure tx is safe. Placed after the claim ix to preserve
|
|
668
|
+
// the "claim first" tx ordering invariant.
|
|
669
|
+
const createVaultAtaIx = buildCreateAtaIdempotentIx(signer.address, vaultATA, vaultPda, escrow.arioMint);
|
|
670
|
+
const vaultedIx = await getVaultedTransferInstructionAsync({
|
|
671
|
+
vault: vaultPda,
|
|
672
|
+
senderTokenAccount: args.payerTokenAccount,
|
|
673
|
+
vaultTokenAccount: vaultATA,
|
|
674
|
+
recipient: args.claimant,
|
|
675
|
+
sender: signer,
|
|
676
|
+
amount: escrow.amount,
|
|
677
|
+
lockDurationSeconds: remaining,
|
|
678
|
+
revocable: escrow.vaultRevocable,
|
|
679
|
+
}, { programAddress: this.coreProgram });
|
|
680
|
+
const head = createClaimantAtaIx ? [createClaimantAtaIx] : [];
|
|
681
|
+
return [...head, claimIx, createVaultAtaIx, vaultedIx];
|
|
682
|
+
}
|
|
683
|
+
/** Read the recipient's `VaultCounter.nextId`, defaulting to 0n if the
|
|
684
|
+
* counter PDA hasn't been initialised yet (first vault for that owner). */
|
|
685
|
+
async getNextVaultId(owner) {
|
|
686
|
+
const [counterPda] = await getVaultCounterPDA(owner, this.coreProgram);
|
|
687
|
+
const account = await fetchMaybeVaultCounter(this.rpc, counterPda, {
|
|
688
|
+
commitment: this.commitment,
|
|
689
|
+
});
|
|
690
|
+
return account.exists ? account.data.nextId : 0n;
|
|
691
|
+
}
|
|
692
|
+
// -------------------------------------------------------------------
|
|
693
|
+
// Write — cancel
|
|
694
|
+
// -------------------------------------------------------------------
|
|
695
|
+
/**
|
|
696
|
+
* Cancel a token or vault escrow deposit and return the tokens to the
|
|
697
|
+
* depositor. Only callable by the original depositor.
|
|
698
|
+
*/
|
|
699
|
+
async cancel(args) {
|
|
700
|
+
const signer = this.requireSigner('cancel');
|
|
701
|
+
this.assertAssetIdLen(args.assetId);
|
|
702
|
+
const pdaFn = args.assetType === 'vault' ? getEscrowVaultPDA : getEscrowTokenPDA;
|
|
703
|
+
const [escrow] = await pdaFn(signer.address, args.assetId, this.programId);
|
|
704
|
+
const ix = args.assetType === 'vault'
|
|
705
|
+
? getCancelVaultDepositInstruction({
|
|
706
|
+
escrow,
|
|
707
|
+
escrowTokenAccount: args.escrowTokenAccount,
|
|
708
|
+
depositorTokenAccount: args.depositorTokenAccount,
|
|
709
|
+
depositor: signer,
|
|
710
|
+
}, { programAddress: this.programId })
|
|
711
|
+
: getCancelTokenDepositInstruction({
|
|
712
|
+
escrow,
|
|
713
|
+
escrowTokenAccount: args.escrowTokenAccount,
|
|
714
|
+
depositorTokenAccount: args.depositorTokenAccount,
|
|
715
|
+
depositor: signer,
|
|
716
|
+
}, { programAddress: this.programId });
|
|
717
|
+
return this.send([ix]);
|
|
718
|
+
}
|
|
719
|
+
// -------------------------------------------------------------------
|
|
720
|
+
// Write — update recipient
|
|
721
|
+
// -------------------------------------------------------------------
|
|
722
|
+
/**
|
|
723
|
+
* Re-target the escrow at a new recipient identity. Rotates the
|
|
724
|
+
* on-chain nonce, invalidating any in-flight claim signatures.
|
|
725
|
+
*/
|
|
726
|
+
async updateRecipient(args) {
|
|
727
|
+
const signer = this.requireSigner('updateRecipient');
|
|
728
|
+
this.assertPubkeyLen(args.newRecipient);
|
|
729
|
+
this.assertAssetIdLen(args.assetId);
|
|
730
|
+
const pdaFn = args.assetType === 'vault' ? getEscrowVaultPDA : getEscrowTokenPDA;
|
|
731
|
+
const [escrow] = await pdaFn(signer.address, args.assetId, this.programId);
|
|
732
|
+
const ix = args.assetType === 'vault'
|
|
733
|
+
? getUpdateVaultRecipientInstruction({
|
|
734
|
+
escrow,
|
|
735
|
+
depositor: signer,
|
|
736
|
+
newProtocol: protocolToByte(args.newRecipient.protocol),
|
|
737
|
+
newPubkey: args.newRecipient.publicKey,
|
|
738
|
+
}, { programAddress: this.programId })
|
|
739
|
+
: getUpdateTokenRecipientInstruction({
|
|
740
|
+
escrow,
|
|
741
|
+
depositor: signer,
|
|
742
|
+
newProtocol: protocolToByte(args.newRecipient.protocol),
|
|
743
|
+
newPubkey: args.newRecipient.publicKey,
|
|
744
|
+
}, { programAddress: this.programId });
|
|
745
|
+
return this.send([ix]);
|
|
746
|
+
}
|
|
747
|
+
// -------------------------------------------------------------------
|
|
748
|
+
// Internals
|
|
749
|
+
// -------------------------------------------------------------------
|
|
750
|
+
async send(instructions, computeUnitLimit = 200_000) {
|
|
751
|
+
const signer = this.requireSigner('send');
|
|
752
|
+
if (!this.rpcSubscriptions) {
|
|
753
|
+
throw new Error('TokenEscrow: rpcSubscriptions required for write operations');
|
|
754
|
+
}
|
|
755
|
+
return sendAndConfirm({
|
|
756
|
+
rpc: this.rpc,
|
|
757
|
+
rpcSubscriptions: this.rpcSubscriptions,
|
|
758
|
+
signer,
|
|
759
|
+
instructions,
|
|
760
|
+
commitment: this.commitment,
|
|
761
|
+
computeUnitLimit,
|
|
762
|
+
});
|
|
763
|
+
}
|
|
764
|
+
requireSigner(op) {
|
|
765
|
+
if (!this.signer) {
|
|
766
|
+
throw new Error(`TokenEscrow.${op}: signer is required for writes`);
|
|
767
|
+
}
|
|
768
|
+
return this.signer;
|
|
769
|
+
}
|
|
770
|
+
async requireTokenEscrow(depositor, assetId) {
|
|
771
|
+
const escrow = await this.get(depositor, assetId);
|
|
772
|
+
if (!escrow) {
|
|
773
|
+
throw new Error(`no token escrow found for depositor=${depositor}`);
|
|
774
|
+
}
|
|
775
|
+
return escrow;
|
|
776
|
+
}
|
|
777
|
+
async requireVaultEscrow(depositor, assetId) {
|
|
778
|
+
const escrow = await this.getVault(depositor, assetId);
|
|
779
|
+
if (!escrow) {
|
|
780
|
+
throw new Error(`no vault escrow found for depositor=${depositor}`);
|
|
781
|
+
}
|
|
782
|
+
return escrow;
|
|
783
|
+
}
|
|
784
|
+
assertPubkeyLen(recipient) {
|
|
785
|
+
const expected = recipient.protocol === 'arweave'
|
|
786
|
+
? ESCROW_ARWEAVE_PUBKEY_LEN
|
|
787
|
+
: ESCROW_ETHEREUM_PUBKEY_LEN;
|
|
788
|
+
if (recipient.publicKey.length !== expected) {
|
|
789
|
+
throw new Error(`recipient.publicKey: expected ${expected} bytes for protocol=${recipient.protocol}, got ${recipient.publicKey.length}`);
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
assertAssetIdLen(assetId) {
|
|
793
|
+
if (assetId.length !== 32) {
|
|
794
|
+
throw new Error(`assetId must be 32 bytes, got ${assetId.length}`);
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
}
|