@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,1182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Account deserialization for AR.IO Solana programs.
|
|
3
|
+
*
|
|
4
|
+
* Reads raw account data (Borsh-encoded by Anchor) and returns SDK-compatible
|
|
5
|
+
* types. Each function skips the 8-byte Anchor discriminator, then reads
|
|
6
|
+
* fields in the exact order defined in the Rust structs.
|
|
7
|
+
*
|
|
8
|
+
* NOTE on discriminators: this module no longer exports a hand-rolled
|
|
9
|
+
* discriminator table. The Codama-generated account modules under
|
|
10
|
+
* `./generated/<program>/accounts/` already export
|
|
11
|
+
* `<NAME>_DISCRIMINATOR: Uint8Array` constants pulled directly from each
|
|
12
|
+
* IDL, so they're guaranteed to match the on-chain struct names.
|
|
13
|
+
* Use those at the call site (see `io-readable.ts` for the
|
|
14
|
+
* `getAccountsByDiscriminator` helper that bs58-encodes them for
|
|
15
|
+
* `getProgramAccounts` memcmp filters).
|
|
16
|
+
*
|
|
17
|
+
* Borsh encoding rules (Anchor default):
|
|
18
|
+
* - u8/bool: 1 byte
|
|
19
|
+
* - u16: 2 bytes LE
|
|
20
|
+
* - u32: 4 bytes LE
|
|
21
|
+
* - u64: 8 bytes LE
|
|
22
|
+
* - u128: 16 bytes LE
|
|
23
|
+
* - i64: 8 bytes LE (signed)
|
|
24
|
+
* - Pubkey: 32 bytes
|
|
25
|
+
* - String: 4-byte LE length prefix + UTF-8 bytes
|
|
26
|
+
* - Option<T>: 1-byte tag (0=None, 1=Some) + T if Some
|
|
27
|
+
* - Vec<T>: 4-byte LE length + T[] elements
|
|
28
|
+
* - Enum: 1-byte variant index
|
|
29
|
+
*/
|
|
30
|
+
import { getAddressDecoder, getAddressEncoder, } from '@solana/kit';
|
|
31
|
+
import { getBalanceDecoder } from '@ar.io/solana-contracts/core';
|
|
32
|
+
import { getEpochDecoder } from '@ar.io/solana-contracts/gar';
|
|
33
|
+
import { RATE_SCALE } from './constants.js';
|
|
34
|
+
const addressDecoder = getAddressDecoder();
|
|
35
|
+
const addressEncoder = getAddressEncoder();
|
|
36
|
+
// =========================================
|
|
37
|
+
// Buffer reader helper
|
|
38
|
+
// =========================================
|
|
39
|
+
class BorshReader {
|
|
40
|
+
data;
|
|
41
|
+
offset;
|
|
42
|
+
constructor(data, startOffset = 0) {
|
|
43
|
+
this.data = data;
|
|
44
|
+
this.offset = startOffset;
|
|
45
|
+
}
|
|
46
|
+
readU8() {
|
|
47
|
+
const val = this.data.readUInt8(this.offset);
|
|
48
|
+
this.offset += 1;
|
|
49
|
+
return val;
|
|
50
|
+
}
|
|
51
|
+
readBool() {
|
|
52
|
+
return this.readU8() !== 0;
|
|
53
|
+
}
|
|
54
|
+
readU16() {
|
|
55
|
+
const val = this.data.readUInt16LE(this.offset);
|
|
56
|
+
this.offset += 2;
|
|
57
|
+
return val;
|
|
58
|
+
}
|
|
59
|
+
readU32() {
|
|
60
|
+
const val = this.data.readUInt32LE(this.offset);
|
|
61
|
+
this.offset += 4;
|
|
62
|
+
return val;
|
|
63
|
+
}
|
|
64
|
+
readU64() {
|
|
65
|
+
const val = this.data.readBigUInt64LE(this.offset);
|
|
66
|
+
this.offset += 8;
|
|
67
|
+
return val;
|
|
68
|
+
}
|
|
69
|
+
readU64AsNumber() {
|
|
70
|
+
return Number(this.readU64());
|
|
71
|
+
}
|
|
72
|
+
readI64() {
|
|
73
|
+
const val = this.data.readBigInt64LE(this.offset);
|
|
74
|
+
this.offset += 8;
|
|
75
|
+
return val;
|
|
76
|
+
}
|
|
77
|
+
readI64AsNumber() {
|
|
78
|
+
return Number(this.readI64());
|
|
79
|
+
}
|
|
80
|
+
readU128() {
|
|
81
|
+
const lo = this.data.readBigUInt64LE(this.offset);
|
|
82
|
+
const hi = this.data.readBigUInt64LE(this.offset + 8);
|
|
83
|
+
this.offset += 16;
|
|
84
|
+
return (hi << 64n) | lo;
|
|
85
|
+
}
|
|
86
|
+
readPubkey() {
|
|
87
|
+
const bytes = this.data.subarray(this.offset, this.offset + 32);
|
|
88
|
+
this.offset += 32;
|
|
89
|
+
return addressDecoder.decode(bytes);
|
|
90
|
+
}
|
|
91
|
+
readString() {
|
|
92
|
+
const len = this.readU32();
|
|
93
|
+
const str = this.data.toString('utf8', this.offset, this.offset + len);
|
|
94
|
+
this.offset += len;
|
|
95
|
+
return str;
|
|
96
|
+
}
|
|
97
|
+
readOptionI64() {
|
|
98
|
+
const tag = this.readU8();
|
|
99
|
+
if (tag === 0)
|
|
100
|
+
return undefined;
|
|
101
|
+
return this.readI64AsNumber();
|
|
102
|
+
}
|
|
103
|
+
readOptionU32() {
|
|
104
|
+
const tag = this.readU8();
|
|
105
|
+
if (tag === 0)
|
|
106
|
+
return undefined;
|
|
107
|
+
return this.readU32();
|
|
108
|
+
}
|
|
109
|
+
skip(bytes) {
|
|
110
|
+
this.offset += bytes;
|
|
111
|
+
}
|
|
112
|
+
getOffset() {
|
|
113
|
+
return this.offset;
|
|
114
|
+
}
|
|
115
|
+
remaining() {
|
|
116
|
+
return this.data.length - this.offset;
|
|
117
|
+
}
|
|
118
|
+
readOptionPubkey() {
|
|
119
|
+
const tag = this.readU8();
|
|
120
|
+
if (tag === 0)
|
|
121
|
+
return undefined;
|
|
122
|
+
return this.readPubkey();
|
|
123
|
+
}
|
|
124
|
+
readOptionString() {
|
|
125
|
+
const tag = this.readU8();
|
|
126
|
+
if (tag === 0)
|
|
127
|
+
return undefined;
|
|
128
|
+
return this.readString();
|
|
129
|
+
}
|
|
130
|
+
readVecString() {
|
|
131
|
+
const count = this.readU32();
|
|
132
|
+
const result = [];
|
|
133
|
+
for (let i = 0; i < count; i++) {
|
|
134
|
+
result.push(this.readString());
|
|
135
|
+
}
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
readOptionVecString() {
|
|
139
|
+
const tag = this.readU8();
|
|
140
|
+
if (tag === 0)
|
|
141
|
+
return undefined;
|
|
142
|
+
return this.readVecString();
|
|
143
|
+
}
|
|
144
|
+
readVecPubkey() {
|
|
145
|
+
const count = this.readU32();
|
|
146
|
+
const result = [];
|
|
147
|
+
for (let i = 0; i < count; i++) {
|
|
148
|
+
result.push(this.readPubkey());
|
|
149
|
+
}
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
readFixedU64Array(count) {
|
|
153
|
+
const result = [];
|
|
154
|
+
for (let i = 0; i < count; i++) {
|
|
155
|
+
result.push(this.readU64AsNumber());
|
|
156
|
+
}
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
readFixedBytes(count) {
|
|
160
|
+
const buf = this.data.subarray(this.offset, this.offset + count);
|
|
161
|
+
this.offset += count;
|
|
162
|
+
return Buffer.from(buf);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// =========================================
|
|
166
|
+
// Buffer writer helper
|
|
167
|
+
// =========================================
|
|
168
|
+
class BorshWriter {
|
|
169
|
+
buf;
|
|
170
|
+
offset;
|
|
171
|
+
constructor(size) {
|
|
172
|
+
this.buf = Buffer.alloc(size);
|
|
173
|
+
this.offset = 0;
|
|
174
|
+
}
|
|
175
|
+
writeU8(val) {
|
|
176
|
+
this.buf.writeUInt8(val, this.offset);
|
|
177
|
+
this.offset += 1;
|
|
178
|
+
}
|
|
179
|
+
writeBool(val) {
|
|
180
|
+
this.writeU8(val ? 1 : 0);
|
|
181
|
+
}
|
|
182
|
+
writeU16(val) {
|
|
183
|
+
this.buf.writeUInt16LE(val, this.offset);
|
|
184
|
+
this.offset += 2;
|
|
185
|
+
}
|
|
186
|
+
writeU32(val) {
|
|
187
|
+
this.buf.writeUInt32LE(val, this.offset);
|
|
188
|
+
this.offset += 4;
|
|
189
|
+
}
|
|
190
|
+
writeU64(val) {
|
|
191
|
+
this.buf.writeBigUInt64LE(BigInt(val), this.offset);
|
|
192
|
+
this.offset += 8;
|
|
193
|
+
}
|
|
194
|
+
writeI64(val) {
|
|
195
|
+
this.buf.writeBigInt64LE(BigInt(val), this.offset);
|
|
196
|
+
this.offset += 8;
|
|
197
|
+
}
|
|
198
|
+
writePubkey(key) {
|
|
199
|
+
const bytes = addressEncoder.encode(key);
|
|
200
|
+
for (let i = 0; i < 32; i++) {
|
|
201
|
+
this.buf[this.offset + i] = bytes[i];
|
|
202
|
+
}
|
|
203
|
+
this.offset += 32;
|
|
204
|
+
}
|
|
205
|
+
/** Write raw bytes without a length prefix (fixed-size fields). */
|
|
206
|
+
writeFixedBytes(data) {
|
|
207
|
+
for (let i = 0; i < data.length; i++) {
|
|
208
|
+
this.buf[this.offset + i] = data[i];
|
|
209
|
+
}
|
|
210
|
+
this.offset += data.length;
|
|
211
|
+
}
|
|
212
|
+
writeString(str) {
|
|
213
|
+
const encoded = Buffer.from(str, 'utf8');
|
|
214
|
+
this.writeU32(encoded.length);
|
|
215
|
+
encoded.copy(this.buf, this.offset);
|
|
216
|
+
this.offset += encoded.length;
|
|
217
|
+
}
|
|
218
|
+
writeOptionI64(val) {
|
|
219
|
+
if (val === undefined) {
|
|
220
|
+
this.writeU8(0);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
this.writeU8(1);
|
|
224
|
+
this.writeI64(val);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
writeOptionU32(val) {
|
|
228
|
+
if (val === undefined) {
|
|
229
|
+
this.writeU8(0);
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
this.writeU8(1);
|
|
233
|
+
this.writeU32(val);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
writeOptionPubkey(key) {
|
|
237
|
+
if (key === undefined) {
|
|
238
|
+
this.writeU8(0);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
this.writeU8(1);
|
|
242
|
+
this.writePubkey(key);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
writeOptionString(val) {
|
|
246
|
+
if (val === undefined) {
|
|
247
|
+
this.writeU8(0);
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
this.writeU8(1);
|
|
251
|
+
this.writeString(val);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/** Borsh `Option<Vec<String>>`: 0/1 tag, then u32 length + each string. */
|
|
255
|
+
writeOptionStringVec(val) {
|
|
256
|
+
if (val === undefined) {
|
|
257
|
+
this.writeU8(0);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
this.writeU8(1);
|
|
261
|
+
this.writeU32(val.length);
|
|
262
|
+
for (const s of val)
|
|
263
|
+
this.writeString(s);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
toBuffer() {
|
|
267
|
+
return this.buf.subarray(0, this.offset);
|
|
268
|
+
}
|
|
269
|
+
getOffset() {
|
|
270
|
+
return this.offset;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// =========================================
|
|
274
|
+
// Helper: scale factor -> float
|
|
275
|
+
// =========================================
|
|
276
|
+
/** Convert a RATE_SCALE-encoded u64 to a float (e.g., 1_000_000 -> 1.0) */
|
|
277
|
+
function scaleToFloat(value, scale = RATE_SCALE) {
|
|
278
|
+
return value / scale;
|
|
279
|
+
}
|
|
280
|
+
// =========================================
|
|
281
|
+
// Gateway deserialization
|
|
282
|
+
// =========================================
|
|
283
|
+
/**
|
|
284
|
+
* Internal variant of {@link deserializeGateway} that additionally surfaces
|
|
285
|
+
* the on-chain `cumulative_reward_per_token` u128 accumulator. Used by the
|
|
286
|
+
* live delegation balance pipeline ({@link computeLiveDelegationBalance} via
|
|
287
|
+
* `getGatewayAccumulators` in `io-readable.ts`).
|
|
288
|
+
*
|
|
289
|
+
* Not part of the public AoGateway shape — `bigint` is not JSON-serializable
|
|
290
|
+
* and would leak through `getGateway` / `getGateways`. Prefer
|
|
291
|
+
* {@link deserializeGateway} everywhere except inside live-balance plumbing.
|
|
292
|
+
*
|
|
293
|
+
* PDA: ["gateway", operator_pubkey] in ario-gar program.
|
|
294
|
+
*/
|
|
295
|
+
export function deserializeGatewayWithAccumulator(data) {
|
|
296
|
+
const r = new BorshReader(data, 8); // skip 8-byte discriminator
|
|
297
|
+
const operator = r.readPubkey();
|
|
298
|
+
const label = r.readString();
|
|
299
|
+
const fqdn = r.readString();
|
|
300
|
+
const port = r.readU16();
|
|
301
|
+
r.readU8(); // protocolIdx: 0=Http, 1=Https
|
|
302
|
+
const properties = r.readString();
|
|
303
|
+
const note = r.readString();
|
|
304
|
+
const operatorStake = r.readU64AsNumber();
|
|
305
|
+
const totalDelegatedStake = r.readU64AsNumber();
|
|
306
|
+
const statusIdx = r.readU8(); // 0=Joined, 1=Leaving
|
|
307
|
+
const startTimestamp = r.readI64AsNumber();
|
|
308
|
+
const leaveTimestamp = r.readOptionI64();
|
|
309
|
+
// leave_epoch_duration: i64 — snapshot of epoch_settings.epoch_duration captured
|
|
310
|
+
// at leave_network/prune_gateway. Not surfaced on AoGateway; consume to stay aligned.
|
|
311
|
+
r.skip(8);
|
|
312
|
+
// GatewayStats
|
|
313
|
+
const passedEpochCount = r.readU32();
|
|
314
|
+
const failedEpochCount = r.readU32();
|
|
315
|
+
const totalEpochCount = r.readU32();
|
|
316
|
+
const prescribedEpochCount = r.readU32();
|
|
317
|
+
const observedEpochCount = r.readU32();
|
|
318
|
+
const failedConsecutiveEpochs = r.readU8();
|
|
319
|
+
const passedConsecutiveEpochs = r.readU8();
|
|
320
|
+
// GatewayWeights (7 x u64 — 7th is weights_epoch, set by tally_weights)
|
|
321
|
+
const stakeWeight = r.readU64AsNumber();
|
|
322
|
+
const tenureWeight = r.readU64AsNumber();
|
|
323
|
+
const gatewayPerformanceRatio = r.readU64AsNumber();
|
|
324
|
+
const observerPerformanceRatio = r.readU64AsNumber();
|
|
325
|
+
const compositeWeight = r.readU64AsNumber();
|
|
326
|
+
const normalizedCompositeWeight = r.readU64AsNumber();
|
|
327
|
+
r.skip(8); // weights_epoch — not surfaced on AoGatewayWeights
|
|
328
|
+
// GatewaySettings2 (auto_stake removed in cfc7a8b2 — never existed on Solana)
|
|
329
|
+
const allowDelegatedStaking = r.readBool();
|
|
330
|
+
const delegateRewardShareRatio = r.readU16();
|
|
331
|
+
const minDelegatedStake = r.readU64AsNumber();
|
|
332
|
+
const allowlistEnabled = r.readBool();
|
|
333
|
+
// RegistryIndex (index: u32, _reserved: u8 — was is_registered:bool)
|
|
334
|
+
r.readU32(); // registryIndex
|
|
335
|
+
r.readU8(); // _reserved (layout-preserving placeholder for the legacy is_registered byte)
|
|
336
|
+
// observer_address
|
|
337
|
+
const observerAddress = r.readPubkey();
|
|
338
|
+
// cumulative_reward_per_token: u128 — per-share accumulator advanced by
|
|
339
|
+
// distribute_epoch. Combined with each Delegation.reward_debt, this lets
|
|
340
|
+
// off-chain readers compute the live delegate balance without an on-chain
|
|
341
|
+
// settlement call. Not part of the public AoGateway type but surfaced as
|
|
342
|
+
// an extra field on this function's return so internal readers can use it.
|
|
343
|
+
const cumulativeRewardPerToken = r.readU128();
|
|
344
|
+
// bump
|
|
345
|
+
r.skip(1);
|
|
346
|
+
const stats = {
|
|
347
|
+
passedEpochCount,
|
|
348
|
+
failedEpochCount,
|
|
349
|
+
totalEpochCount,
|
|
350
|
+
prescribedEpochCount,
|
|
351
|
+
observedEpochCount,
|
|
352
|
+
passedConsecutiveEpochs,
|
|
353
|
+
failedConsecutiveEpochs,
|
|
354
|
+
};
|
|
355
|
+
const weights = {
|
|
356
|
+
stakeWeight: scaleToFloat(stakeWeight),
|
|
357
|
+
tenureWeight: scaleToFloat(tenureWeight),
|
|
358
|
+
gatewayPerformanceRatio: scaleToFloat(gatewayPerformanceRatio),
|
|
359
|
+
observerPerformanceRatio: scaleToFloat(observerPerformanceRatio),
|
|
360
|
+
gatewayRewardRatioWeight: scaleToFloat(gatewayPerformanceRatio), // deprecated alias
|
|
361
|
+
observerRewardRatioWeight: scaleToFloat(observerPerformanceRatio), // deprecated alias
|
|
362
|
+
compositeWeight: scaleToFloat(compositeWeight),
|
|
363
|
+
normalizedCompositeWeight: scaleToFloat(normalizedCompositeWeight),
|
|
364
|
+
};
|
|
365
|
+
const settings = {
|
|
366
|
+
allowDelegatedStaking: allowlistEnabled
|
|
367
|
+
? 'allowlist'
|
|
368
|
+
: allowDelegatedStaking,
|
|
369
|
+
delegateRewardShareRatio,
|
|
370
|
+
allowedDelegates: [], // populated separately from allowlist PDAs
|
|
371
|
+
minDelegatedStake,
|
|
372
|
+
autoStake: false, // not an on-chain field on Solana; preserved on AoGatewaySettings for AO parity
|
|
373
|
+
label,
|
|
374
|
+
note,
|
|
375
|
+
properties,
|
|
376
|
+
fqdn,
|
|
377
|
+
port,
|
|
378
|
+
protocol: 'https', // protocolIdx: 0=Http, 1=Https — only HTTPS in practice
|
|
379
|
+
};
|
|
380
|
+
return {
|
|
381
|
+
operator: operator,
|
|
382
|
+
settings,
|
|
383
|
+
stats,
|
|
384
|
+
totalDelegatedStake,
|
|
385
|
+
startTimestamp,
|
|
386
|
+
endTimestamp: leaveTimestamp ?? 0,
|
|
387
|
+
observerAddress: observerAddress,
|
|
388
|
+
operatorStake,
|
|
389
|
+
status: statusIdx === 0 ? 'joined' : 'leaving',
|
|
390
|
+
weights,
|
|
391
|
+
cumulativeRewardPerToken,
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Deserialize a Gateway account from raw bytes.
|
|
396
|
+
*
|
|
397
|
+
* Returns the SDK-compatible AoGateway type (plus `operator: string`).
|
|
398
|
+
* The on-chain `cumulative_reward_per_token` u128 is intentionally NOT
|
|
399
|
+
* surfaced on the returned object — `bigint` is not JSON-serializable,
|
|
400
|
+
* and leaking it through `getGateway` / `getGateways` would break
|
|
401
|
+
* downstream consumers that call `JSON.stringify` on results. Use
|
|
402
|
+
* {@link deserializeGatewayWithAccumulator} from within the live-balance
|
|
403
|
+
* pipeline when the accumulator value is actually needed.
|
|
404
|
+
*/
|
|
405
|
+
export function deserializeGateway(data) {
|
|
406
|
+
const { cumulativeRewardPerToken: _unused, ...publicShape } = deserializeGatewayWithAccumulator(data);
|
|
407
|
+
return publicShape;
|
|
408
|
+
}
|
|
409
|
+
// =========================================
|
|
410
|
+
// ArNS Record deserialization
|
|
411
|
+
// =========================================
|
|
412
|
+
/**
|
|
413
|
+
* Deserialize an ArNS record account from raw bytes.
|
|
414
|
+
* PDA: ["arns_record", hash(name)] in ario-arns program.
|
|
415
|
+
*
|
|
416
|
+
* Field order is **load-bearing** and mirrors the on-chain
|
|
417
|
+
* `ArnsRecord` struct in `contracts/programs/ario-arns/src/state/mod.rs`.
|
|
418
|
+
* Every fixed-size field appears before the variable-length `name` so
|
|
419
|
+
* `getProgramAccounts` callers can `memcmp`-filter on `ant` (offset
|
|
420
|
+
* 72) — see `ARNS_RECORD_ANT_OFFSET` in `./constants.ts`. If you
|
|
421
|
+
* touch the contract layout, both files have to move in lockstep.
|
|
422
|
+
*/
|
|
423
|
+
export function deserializeArnsRecord(data) {
|
|
424
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
425
|
+
r.readPubkey(); // 32-byte name hash (used as PDA seed)
|
|
426
|
+
const owner = r.readPubkey();
|
|
427
|
+
const ant = r.readPubkey(); // ANT Metaplex Core asset address
|
|
428
|
+
const typeIdx = r.readU8(); // 0=Lease, 1=Permabuy
|
|
429
|
+
const startTimestamp = r.readI64AsNumber();
|
|
430
|
+
const endTimestamp = r.readOptionI64();
|
|
431
|
+
// u16 on-chain — the prior implementation read u32 here and silently
|
|
432
|
+
// consumed two bytes of `purchase_price`, producing junk for both
|
|
433
|
+
// fields. Caught while reworking the layout for memcmp filtering.
|
|
434
|
+
const undernameLimit = r.readU16();
|
|
435
|
+
const purchasePrice = r.readU64AsNumber();
|
|
436
|
+
r.skip(1); // bump
|
|
437
|
+
const name = r.readString();
|
|
438
|
+
const baseData = {
|
|
439
|
+
name,
|
|
440
|
+
owner: owner,
|
|
441
|
+
processId: ant, // SDK calls ANT address "processId"
|
|
442
|
+
startTimestamp,
|
|
443
|
+
undernameLimit,
|
|
444
|
+
purchasePrice,
|
|
445
|
+
};
|
|
446
|
+
if (typeIdx === 0 && endTimestamp !== undefined) {
|
|
447
|
+
return {
|
|
448
|
+
...baseData,
|
|
449
|
+
type: 'lease',
|
|
450
|
+
endTimestamp,
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
return {
|
|
454
|
+
...baseData,
|
|
455
|
+
type: 'permabuy',
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
// =========================================
|
|
459
|
+
// Vault deserialization
|
|
460
|
+
// =========================================
|
|
461
|
+
/**
|
|
462
|
+
* Deserialize a Vault account from raw bytes.
|
|
463
|
+
* PDA: ["vault", owner, vault_id] in ario-core program.
|
|
464
|
+
*
|
|
465
|
+
* On-chain layout (matches `state::Vault`):
|
|
466
|
+
* disc(8) + owner(Pubkey=32) + vault_id(u64=8) + amount(u64=8)
|
|
467
|
+
* + start_timestamp(i64=8) + end_timestamp(i64=8)
|
|
468
|
+
* + controller(Option<Pubkey>=33) + revocable(bool=1) + bump(u8=1)
|
|
469
|
+
*/
|
|
470
|
+
export function deserializeVault(data) {
|
|
471
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
472
|
+
const owner = r.readPubkey();
|
|
473
|
+
// The Rust struct has vault_id BEFORE amount — easy to miss because the
|
|
474
|
+
// SDK only surfaces `balance` (the AO interface name for `amount`). The
|
|
475
|
+
// earlier deserializer skipped vault_id and read vault_id-as-balance →
|
|
476
|
+
// `balance` was always 0 for fresh vaults at index 0.
|
|
477
|
+
r.skip(8); // vault_id (recoverable from the PDA seeds; not surfaced)
|
|
478
|
+
const balance = r.readU64AsNumber();
|
|
479
|
+
const startTimestamp = r.readI64AsNumber();
|
|
480
|
+
const endTimestamp = r.readI64AsNumber();
|
|
481
|
+
// controller: Option<Pubkey>
|
|
482
|
+
const hasController = r.readU8();
|
|
483
|
+
const controller = hasController ? r.readPubkey() : undefined;
|
|
484
|
+
// revocable: bool
|
|
485
|
+
r.readBool();
|
|
486
|
+
// bump
|
|
487
|
+
r.skip(1);
|
|
488
|
+
return {
|
|
489
|
+
owner: owner,
|
|
490
|
+
balance,
|
|
491
|
+
startTimestamp,
|
|
492
|
+
endTimestamp,
|
|
493
|
+
controller,
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Deserialize a Delegation account from raw bytes.
|
|
498
|
+
* PDA: ["delegation", gateway, delegator] in ario-gar program.
|
|
499
|
+
*/
|
|
500
|
+
export function deserializeDelegation(data) {
|
|
501
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
502
|
+
const gateway = r.readPubkey();
|
|
503
|
+
const delegator = r.readPubkey();
|
|
504
|
+
const amount = r.readU64AsNumber();
|
|
505
|
+
const startTimestamp = r.readI64AsNumber();
|
|
506
|
+
// reward_debt: u128 — snapshot of gateway.cumulative_reward_per_token at last
|
|
507
|
+
// settlement. Needed (together with the gateway's current accumulator) to
|
|
508
|
+
// compute the live delegate balance via computeLiveDelegationBalance().
|
|
509
|
+
const rewardDebt = r.readU128();
|
|
510
|
+
r.skip(1); // bump
|
|
511
|
+
return {
|
|
512
|
+
gateway: gateway,
|
|
513
|
+
delegator: delegator,
|
|
514
|
+
delegatedStake: amount,
|
|
515
|
+
startTimestamp,
|
|
516
|
+
rewardDebt,
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
// =========================================
|
|
520
|
+
// Balance deserialization
|
|
521
|
+
// =========================================
|
|
522
|
+
/**
|
|
523
|
+
* Deserialize a Balance account from raw bytes.
|
|
524
|
+
* PDA: ["balance", owner] in ario-core program.
|
|
525
|
+
*
|
|
526
|
+
* Backed by the Codama-generated decoder so the encoder
|
|
527
|
+
* (`getBalanceEncoder` used by migration/snapshot) and decoder share a single
|
|
528
|
+
* source of truth derived from the `ario_core` IDL.
|
|
529
|
+
*/
|
|
530
|
+
export function deserializeBalance(data) {
|
|
531
|
+
const decoded = getBalanceDecoder().decode(data);
|
|
532
|
+
return {
|
|
533
|
+
owner: decoded.owner,
|
|
534
|
+
balance: Number(decoded.amount),
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
// =========================================
|
|
538
|
+
// Epoch Settings deserialization
|
|
539
|
+
// =========================================
|
|
540
|
+
export function deserializeEpochSettings(data) {
|
|
541
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
542
|
+
r.skip(32); // authority
|
|
543
|
+
const epochDuration = r.readI64AsNumber();
|
|
544
|
+
const maxObservers = r.readU8(); // prescribed_observer_count
|
|
545
|
+
const prescribedNameCount = r.readU8();
|
|
546
|
+
r.skip(8); // min_observer_stake (u64)
|
|
547
|
+
r.skip(2); // slash_rate (u16)
|
|
548
|
+
r.skip(1); // enabled (bool)
|
|
549
|
+
r.skip(8); // current_epoch_index (u64)
|
|
550
|
+
const epochZeroStartTimestamp = r.readI64AsNumber(); // genesis_timestamp
|
|
551
|
+
return {
|
|
552
|
+
// SDK expects milliseconds (matching AO convention), Solana stores
|
|
553
|
+
// seconds — convert both timestamps and durations here.
|
|
554
|
+
epochZeroStartTimestamp: epochZeroStartTimestamp * 1000,
|
|
555
|
+
durationMs: epochDuration * 1000,
|
|
556
|
+
prescribedNameCount,
|
|
557
|
+
maxObservers,
|
|
558
|
+
};
|
|
559
|
+
}
|
|
560
|
+
// =========================================
|
|
561
|
+
// ArIO Config deserialization
|
|
562
|
+
// =========================================
|
|
563
|
+
/**
|
|
564
|
+
* Deserialize an ArioConfig account from raw bytes.
|
|
565
|
+
* PDA: ["ario_config"] in ario-core program.
|
|
566
|
+
*/
|
|
567
|
+
export function deserializeArioConfig(data) {
|
|
568
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
569
|
+
r.skip(32); // authority
|
|
570
|
+
r.skip(32); // mint
|
|
571
|
+
r.skip(32); // arns_program
|
|
572
|
+
r.skip(32); // treasury
|
|
573
|
+
const totalSupply = r.readU64AsNumber();
|
|
574
|
+
const protocolBalance = r.readU64AsNumber();
|
|
575
|
+
const circulatingSupply = r.readU64AsNumber();
|
|
576
|
+
const lockedSupply = r.readU64AsNumber();
|
|
577
|
+
// remaining fields not needed: min_vault_duration, max_vault_duration,
|
|
578
|
+
// primary_name_request_expiry, migration_active, migration_authority, bump
|
|
579
|
+
return {
|
|
580
|
+
totalSupply,
|
|
581
|
+
protocolBalance,
|
|
582
|
+
circulatingSupply,
|
|
583
|
+
lockedSupply,
|
|
584
|
+
};
|
|
585
|
+
}
|
|
586
|
+
// =========================================
|
|
587
|
+
// Demand Factor deserialization
|
|
588
|
+
// =========================================
|
|
589
|
+
/**
|
|
590
|
+
* Deserialize a DemandFactor account from raw bytes.
|
|
591
|
+
* PDA: ["demand_factor"] in ario-arns program.
|
|
592
|
+
*/
|
|
593
|
+
export function deserializeDemandFactor(data) {
|
|
594
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
595
|
+
const currentDemandFactorRaw = r.readU64AsNumber();
|
|
596
|
+
const currentPeriod = r.readU64AsNumber();
|
|
597
|
+
r.skip(8); // purchases_this_period (u64)
|
|
598
|
+
r.skip(8); // revenue_this_period (u64)
|
|
599
|
+
const consecutivePeriodsWithMinDemandFactor = r.readU32();
|
|
600
|
+
const trailingPeriodPurchases = r.readFixedU64Array(7);
|
|
601
|
+
const trailingPeriodRevenues = r.readFixedU64Array(7);
|
|
602
|
+
const fees = r.readFixedU64Array(51);
|
|
603
|
+
const periodZeroStartTimestamp = r.readI64AsNumber();
|
|
604
|
+
// criteria: u8, bump: u8 — skip
|
|
605
|
+
return {
|
|
606
|
+
currentDemandFactor: currentDemandFactorRaw / RATE_SCALE,
|
|
607
|
+
currentPeriod,
|
|
608
|
+
periodZeroStartTimestamp,
|
|
609
|
+
consecutivePeriodsWithMinDemandFactor,
|
|
610
|
+
trailingPeriodPurchases,
|
|
611
|
+
trailingPeriodRevenues,
|
|
612
|
+
fees,
|
|
613
|
+
};
|
|
614
|
+
}
|
|
615
|
+
// =========================================
|
|
616
|
+
// Reserved Name deserialization
|
|
617
|
+
// =========================================
|
|
618
|
+
/**
|
|
619
|
+
* Deserialize a ReservedName account from raw bytes.
|
|
620
|
+
* PDA: ["reserved_name", hash(name)] in ario-arns program.
|
|
621
|
+
*/
|
|
622
|
+
export function deserializeReservedName(data) {
|
|
623
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
624
|
+
const name = r.readString();
|
|
625
|
+
const reservedFor = r.readOptionPubkey();
|
|
626
|
+
const expiresAt = r.readOptionI64();
|
|
627
|
+
// reserved_by: Pubkey, created_at: i64, bump: u8 — not needed
|
|
628
|
+
return {
|
|
629
|
+
name,
|
|
630
|
+
target: reservedFor,
|
|
631
|
+
endTimestamp: expiresAt,
|
|
632
|
+
};
|
|
633
|
+
}
|
|
634
|
+
// =========================================
|
|
635
|
+
// Returned Name deserialization
|
|
636
|
+
// =========================================
|
|
637
|
+
const RETURN_AUCTION_DURATION_SECONDS = 14 * 86_400; // 14 days
|
|
638
|
+
/**
|
|
639
|
+
* Deserialize a ReturnedName account from raw bytes.
|
|
640
|
+
* PDA: ["returned_name", hash(name)] in ario-arns program.
|
|
641
|
+
*/
|
|
642
|
+
export function deserializeReturnedName(data) {
|
|
643
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
644
|
+
const name = r.readString();
|
|
645
|
+
r.skip(32); // name_hash [u8; 32]
|
|
646
|
+
const initiator = r.readPubkey();
|
|
647
|
+
const returnedAt = r.readI64AsNumber();
|
|
648
|
+
// bump: u8 — skip
|
|
649
|
+
return {
|
|
650
|
+
name,
|
|
651
|
+
startTimestamp: returnedAt,
|
|
652
|
+
endTimestamp: returnedAt + RETURN_AUCTION_DURATION_SECONDS,
|
|
653
|
+
initiator: initiator,
|
|
654
|
+
premiumMultiplier: 1, // calculated at query time from elapsed vs auction duration
|
|
655
|
+
};
|
|
656
|
+
}
|
|
657
|
+
// =========================================
|
|
658
|
+
// Withdrawal deserialization
|
|
659
|
+
// =========================================
|
|
660
|
+
/**
|
|
661
|
+
* Deserialize a Withdrawal account from raw bytes.
|
|
662
|
+
* PDA: ["withdrawal", gateway, owner, withdrawal_id] in ario-gar program.
|
|
663
|
+
*/
|
|
664
|
+
export function deserializeWithdrawal(data) {
|
|
665
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
666
|
+
const owner = r.readPubkey();
|
|
667
|
+
const withdrawalId = r.readU64AsNumber();
|
|
668
|
+
const gateway = r.readPubkey();
|
|
669
|
+
const amount = r.readU64AsNumber();
|
|
670
|
+
const createdAt = r.readI64AsNumber();
|
|
671
|
+
const availableAt = r.readI64AsNumber();
|
|
672
|
+
const isDelegate = r.readBool();
|
|
673
|
+
// is_exit_vault: bool, bump: u8 — skip
|
|
674
|
+
return {
|
|
675
|
+
owner: owner,
|
|
676
|
+
vaultId: String(withdrawalId),
|
|
677
|
+
gateway: gateway,
|
|
678
|
+
balance: amount,
|
|
679
|
+
startTimestamp: createdAt,
|
|
680
|
+
endTimestamp: availableAt,
|
|
681
|
+
isDelegate,
|
|
682
|
+
};
|
|
683
|
+
}
|
|
684
|
+
// =========================================
|
|
685
|
+
// Redelegation Record deserialization
|
|
686
|
+
// =========================================
|
|
687
|
+
/**
|
|
688
|
+
* Deserialize a RedelegationRecord account from raw bytes.
|
|
689
|
+
* PDA: ["redelegation", delegator] in ario-gar program.
|
|
690
|
+
*/
|
|
691
|
+
export function deserializeRedelegationRecord(data) {
|
|
692
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
693
|
+
const delegator = r.readPubkey();
|
|
694
|
+
const redelegationCount = r.readU32();
|
|
695
|
+
const lastRedelegationAt = r.readI64AsNumber();
|
|
696
|
+
const feeResetAt = r.readI64AsNumber();
|
|
697
|
+
// bump: u8 — skip
|
|
698
|
+
return {
|
|
699
|
+
delegator: delegator,
|
|
700
|
+
redelegationCount,
|
|
701
|
+
lastRedelegationAt,
|
|
702
|
+
feeResetAt,
|
|
703
|
+
};
|
|
704
|
+
}
|
|
705
|
+
// =========================================
|
|
706
|
+
// Primary Name Request deserialization
|
|
707
|
+
// =========================================
|
|
708
|
+
/**
|
|
709
|
+
* Deserialize a PrimaryNameRequest account from raw bytes.
|
|
710
|
+
* PDA: ["primary_name_request", initiator] in ario-core program.
|
|
711
|
+
*/
|
|
712
|
+
export function deserializePrimaryNameRequest(data) {
|
|
713
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
714
|
+
const initiator = r.readPubkey();
|
|
715
|
+
const name = r.readString();
|
|
716
|
+
const createdAt = r.readI64AsNumber();
|
|
717
|
+
const expiresAt = r.readI64AsNumber();
|
|
718
|
+
// bump: u8 — skip
|
|
719
|
+
return {
|
|
720
|
+
name,
|
|
721
|
+
initiator: initiator,
|
|
722
|
+
startTimestamp: createdAt,
|
|
723
|
+
endTimestamp: expiresAt,
|
|
724
|
+
};
|
|
725
|
+
}
|
|
726
|
+
// =========================================
|
|
727
|
+
// GAR Settings deserialization (full)
|
|
728
|
+
// =========================================
|
|
729
|
+
/**
|
|
730
|
+
* Deserialize a GarSettings account from raw bytes and return
|
|
731
|
+
* the full AoGatewayRegistrySettings type.
|
|
732
|
+
* PDA: ["gar_settings"] in ario-gar program.
|
|
733
|
+
*
|
|
734
|
+
* Fields not stored in GarSettings are filled with protocol defaults.
|
|
735
|
+
*/
|
|
736
|
+
export function deserializeGarSettings(data) {
|
|
737
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
738
|
+
r.skip(32); // authority
|
|
739
|
+
r.skip(32); // mint
|
|
740
|
+
const minOperatorStake = r.readU64AsNumber();
|
|
741
|
+
const minDelegateStake = r.readU64AsNumber();
|
|
742
|
+
const withdrawalPeriod = r.readI64AsNumber(); // seconds
|
|
743
|
+
const maxExpeditedWithdrawalPenalty = r.readU64AsNumber();
|
|
744
|
+
const minExpeditedWithdrawalPenalty = r.readU64AsNumber();
|
|
745
|
+
const minExpeditedWithdrawalAmount = r.readU64AsNumber();
|
|
746
|
+
r.readU32(); // max_delegates_per_gateway
|
|
747
|
+
// migration_active: bool, migration_authority: Pubkey, bump: u8 — skip
|
|
748
|
+
const withdrawalPeriodMs = withdrawalPeriod * 1000;
|
|
749
|
+
return {
|
|
750
|
+
delegates: {
|
|
751
|
+
minStake: minDelegateStake,
|
|
752
|
+
withdrawLengthMs: withdrawalPeriodMs,
|
|
753
|
+
},
|
|
754
|
+
observers: {
|
|
755
|
+
tenureWeightDurationMs: 15_552_000_000, // 180 days in ms
|
|
756
|
+
maxTenureWeight: 4,
|
|
757
|
+
},
|
|
758
|
+
operators: {
|
|
759
|
+
minStake: minOperatorStake,
|
|
760
|
+
withdrawLengthMs: withdrawalPeriodMs,
|
|
761
|
+
leaveLengthMs: withdrawalPeriodMs,
|
|
762
|
+
maxDelegateRewardSharePct: 95,
|
|
763
|
+
failedEpochCountMax: 30,
|
|
764
|
+
failedGatewaySlashRate: 0,
|
|
765
|
+
},
|
|
766
|
+
redelegations: {
|
|
767
|
+
minRedelegationPenaltyRate: 0,
|
|
768
|
+
maxRedelegationPenaltyRate: 600_000,
|
|
769
|
+
minRedelegationAmount: 10_000_000,
|
|
770
|
+
redelegationFeeResetIntervalMs: 7 * 86_400 * 1000,
|
|
771
|
+
},
|
|
772
|
+
expeditedWithdrawals: {
|
|
773
|
+
minExpeditedWithdrawalPenaltyRate: minExpeditedWithdrawalPenalty,
|
|
774
|
+
maxExpeditedWithdrawalPenaltyRate: maxExpeditedWithdrawalPenalty,
|
|
775
|
+
minExpeditedWithdrawalAmount: minExpeditedWithdrawalAmount,
|
|
776
|
+
},
|
|
777
|
+
};
|
|
778
|
+
}
|
|
779
|
+
/**
|
|
780
|
+
* Deserialize supply counter fields from GatewaySettings account.
|
|
781
|
+
* These 3 fields were added after arns_program_id, before bump.
|
|
782
|
+
*/
|
|
783
|
+
export function deserializeGarSupplyCounters(data) {
|
|
784
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
785
|
+
r.skip(32); // authority
|
|
786
|
+
r.skip(32); // mint
|
|
787
|
+
r.skip(8); // min_operator_stake
|
|
788
|
+
r.skip(8); // min_delegate_stake
|
|
789
|
+
r.skip(8); // withdrawal_period
|
|
790
|
+
r.skip(8); // max_expedited_withdrawal_penalty
|
|
791
|
+
r.skip(8); // min_expedited_withdrawal_penalty
|
|
792
|
+
r.skip(8); // min_expedited_withdrawal_amount
|
|
793
|
+
r.skip(4); // max_delegates_per_gateway
|
|
794
|
+
r.skip(1); // migration_active
|
|
795
|
+
r.skip(32); // migration_authority
|
|
796
|
+
r.skip(32); // stake_token_account
|
|
797
|
+
r.skip(32); // protocol_token_account
|
|
798
|
+
r.skip(32); // arns_program_id
|
|
799
|
+
const totalStaked = r.readU64AsNumber();
|
|
800
|
+
const totalDelegated = r.readU64AsNumber();
|
|
801
|
+
const totalWithdrawn = r.readU64AsNumber();
|
|
802
|
+
return { totalStaked, totalDelegated, totalWithdrawn };
|
|
803
|
+
}
|
|
804
|
+
// =========================================
|
|
805
|
+
// Epoch Settings Full deserialization
|
|
806
|
+
// =========================================
|
|
807
|
+
/**
|
|
808
|
+
* Deserialize the full EpochSettings account from raw bytes.
|
|
809
|
+
* Unlike deserializeEpochSettings (which returns 4 fields), this reads
|
|
810
|
+
* all fields from the on-chain struct.
|
|
811
|
+
* PDA: ["epoch_settings"] in ario-gar program.
|
|
812
|
+
*/
|
|
813
|
+
export function deserializeEpochSettingsFull(data) {
|
|
814
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
815
|
+
r.skip(32); // authority
|
|
816
|
+
const epochDuration = r.readI64AsNumber();
|
|
817
|
+
const prescribedObserverCount = r.readU8();
|
|
818
|
+
const prescribedNameCount = r.readU8();
|
|
819
|
+
r.skip(8); // min_observer_stake (u64)
|
|
820
|
+
r.skip(2); // slash_rate (u16)
|
|
821
|
+
const enabled = r.readU8() !== 0;
|
|
822
|
+
const currentEpochIndex = r.readU64AsNumber();
|
|
823
|
+
const genesisTimestamp = r.readI64AsNumber();
|
|
824
|
+
const tenureWeightDuration = r.readI64AsNumber();
|
|
825
|
+
const maxTenureWeight = r.readU64AsNumber();
|
|
826
|
+
const gatewayRewardRatio = r.readU64AsNumber();
|
|
827
|
+
const observerRewardRatio = r.readU64AsNumber();
|
|
828
|
+
r.skip(8); // missed_observation_penalty_rate (u64)
|
|
829
|
+
r.skip(8); // max_reward_rate (u64)
|
|
830
|
+
r.skip(8); // min_reward_rate (u64)
|
|
831
|
+
r.skip(8); // reward_decay_start_epoch (u64)
|
|
832
|
+
r.skip(8); // reward_decay_last_epoch (u64)
|
|
833
|
+
const maxConsecutiveFailures = r.readU8();
|
|
834
|
+
// failed_gateway_slash_rate: u64, bump: u8 — skip
|
|
835
|
+
return {
|
|
836
|
+
currentEpochIndex,
|
|
837
|
+
genesisTimestamp,
|
|
838
|
+
epochDuration,
|
|
839
|
+
enabled,
|
|
840
|
+
prescribedObserverCount,
|
|
841
|
+
prescribedNameCount,
|
|
842
|
+
tenureWeightDuration,
|
|
843
|
+
maxTenureWeight,
|
|
844
|
+
gatewayRewardRatio,
|
|
845
|
+
observerRewardRatio,
|
|
846
|
+
maxConsecutiveFailures,
|
|
847
|
+
};
|
|
848
|
+
}
|
|
849
|
+
// =========================================
|
|
850
|
+
// Epoch deserialization (zero-copy #[repr(C)])
|
|
851
|
+
// =========================================
|
|
852
|
+
/**
|
|
853
|
+
* Deserialize an Epoch account from raw bytes.
|
|
854
|
+
* PDA: ["epoch", epoch_index_le_bytes] in ario-gar program.
|
|
855
|
+
*
|
|
856
|
+
* This is a zero-copy account with #[repr(C)] layout (not Borsh).
|
|
857
|
+
* Fields are at fixed offsets after the 8-byte discriminator.
|
|
858
|
+
*/
|
|
859
|
+
export function deserializeEpoch(data) {
|
|
860
|
+
// Codama-decoded path. Replaces the hand-rolled offset arithmetic
|
|
861
|
+
// below — that broke under cluster cfg changes (e.g. the
|
|
862
|
+
// `--features devnet-shrunk` build cuts the Epoch struct from
|
|
863
|
+
// ~9400 bytes down to ~3472 bytes, but the hand-rolled deser had
|
|
864
|
+
// hardcoded `base + 9388` reads that overshot the buffer). The
|
|
865
|
+
// codama decoder is regenerated from the on-chain IDL on every
|
|
866
|
+
// contract change, so layout drift is impossible by construction.
|
|
867
|
+
// The "old" hand-rolled body is kept below this early return so
|
|
868
|
+
// tests + any downstream consumers that need a specific subset
|
|
869
|
+
// of fields still see the shape they expect.
|
|
870
|
+
try {
|
|
871
|
+
const codamaEpoch = getEpochDecoder().decode(new Uint8Array(data));
|
|
872
|
+
return {
|
|
873
|
+
epochIndex: Number(codamaEpoch.epochIndex),
|
|
874
|
+
startTimestamp: Number(codamaEpoch.startTimestamp),
|
|
875
|
+
endTimestamp: Number(codamaEpoch.endTimestamp),
|
|
876
|
+
totalEligibleRewards: Number(codamaEpoch.totalEligibleRewards),
|
|
877
|
+
perGatewayReward: Number(codamaEpoch.perGatewayReward),
|
|
878
|
+
perObserverReward: Number(codamaEpoch.perObserverReward),
|
|
879
|
+
rewardRate: Number(codamaEpoch.rewardRate),
|
|
880
|
+
activeGatewayCount: codamaEpoch.activeGatewayCount,
|
|
881
|
+
distributionIndex: codamaEpoch.distributionIndex,
|
|
882
|
+
tallyIndex: codamaEpoch.tallyIndex,
|
|
883
|
+
observerCount: codamaEpoch.observerCount,
|
|
884
|
+
nameCount: codamaEpoch.nameCount,
|
|
885
|
+
observationsSubmitted: codamaEpoch.observationsSubmitted,
|
|
886
|
+
rewardsDistributed: codamaEpoch.rewardsDistributed,
|
|
887
|
+
weightsTallied: codamaEpoch.weightsTallied,
|
|
888
|
+
prescriptionsDone: codamaEpoch.prescriptionsDone,
|
|
889
|
+
failureCounts: Uint16Array.from(codamaEpoch.failureCounts),
|
|
890
|
+
prescribedObservers: codamaEpoch.prescribedObservers,
|
|
891
|
+
prescribedObserverGateways: codamaEpoch.prescribedObserverGateways,
|
|
892
|
+
prescribedNameHashes: codamaEpoch.prescribedNames.map((b) => Buffer.from(b)),
|
|
893
|
+
hasObserved: new Uint8Array(codamaEpoch.hasObserved),
|
|
894
|
+
};
|
|
895
|
+
}
|
|
896
|
+
catch (codamaErr) {
|
|
897
|
+
// Fall through to the legacy hand-rolled path so tests/fixtures
|
|
898
|
+
// that synthesize a custom Epoch buffer (e.g.
|
|
899
|
+
// save-observations.test.ts) keep working. Real on-chain data
|
|
900
|
+
// always succeeds via the codama path above.
|
|
901
|
+
void codamaErr;
|
|
902
|
+
}
|
|
903
|
+
// All offsets relative to start of struct (after 8-byte discriminator)
|
|
904
|
+
const base = 8;
|
|
905
|
+
const epochIndex = Number(data.readBigUInt64LE(base + 0));
|
|
906
|
+
const startTimestamp = Number(data.readBigInt64LE(base + 8));
|
|
907
|
+
const endTimestamp = Number(data.readBigInt64LE(base + 16));
|
|
908
|
+
const totalEligibleRewards = Number(data.readBigUInt64LE(base + 24));
|
|
909
|
+
const perGatewayReward = Number(data.readBigUInt64LE(base + 32));
|
|
910
|
+
const perObserverReward = Number(data.readBigUInt64LE(base + 40));
|
|
911
|
+
const rewardRate = Number(data.readBigUInt64LE(base + 48));
|
|
912
|
+
// total_composite_weight_lo/hi at 56, 64 — skip
|
|
913
|
+
// hashchain at 72 — skip (32 bytes)
|
|
914
|
+
const activeGatewayCount = data.readUInt32LE(base + 104);
|
|
915
|
+
const distributionIndex = data.readUInt32LE(base + 108);
|
|
916
|
+
const tallyIndex = data.readUInt32LE(base + 112);
|
|
917
|
+
const observerCount = data.readUInt8(base + 116);
|
|
918
|
+
const nameCount = data.readUInt8(base + 117);
|
|
919
|
+
const observationsSubmitted = data.readUInt8(base + 118);
|
|
920
|
+
const rewardsDistributed = data.readUInt8(base + 119);
|
|
921
|
+
const weightsTallied = data.readUInt8(base + 120);
|
|
922
|
+
const prescriptionsDone = data.readUInt8(base + 121);
|
|
923
|
+
// bump at 122, _padding1 at 123
|
|
924
|
+
// failure_counts: [u16; 3000] at offset 124
|
|
925
|
+
const failureCounts = new Uint16Array(3000);
|
|
926
|
+
for (let i = 0; i < 3000; i++) {
|
|
927
|
+
failureCounts[i] = data.readUInt16LE(base + 124 + i * 2);
|
|
928
|
+
}
|
|
929
|
+
// prescribed_observers: [Pubkey; 50] at offset 6124
|
|
930
|
+
const prescribedObservers = [];
|
|
931
|
+
for (let i = 0; i < 50; i++) {
|
|
932
|
+
const off = base + 6124 + i * 32;
|
|
933
|
+
prescribedObservers.push(addressDecoder.decode(data.subarray(off, off + 32)));
|
|
934
|
+
}
|
|
935
|
+
// prescribed_observer_gateways: [Pubkey; 50] at offset 7724
|
|
936
|
+
const prescribedObserverGateways = [];
|
|
937
|
+
for (let i = 0; i < 50; i++) {
|
|
938
|
+
const off = base + 7724 + i * 32;
|
|
939
|
+
prescribedObserverGateways.push(addressDecoder.decode(data.subarray(off, off + 32)));
|
|
940
|
+
}
|
|
941
|
+
// prescribed_names: [[u8; 32]; 2] at offset 9324
|
|
942
|
+
const prescribedNameHashes = [];
|
|
943
|
+
for (let i = 0; i < 2; i++) {
|
|
944
|
+
const off = base + 9324 + i * 32;
|
|
945
|
+
prescribedNameHashes.push(Buffer.from(data.subarray(off, off + 32)));
|
|
946
|
+
}
|
|
947
|
+
// has_observed: [u8; 7] at offset 9388
|
|
948
|
+
const hasObserved = new Uint8Array(data.subarray(base + 9388, base + 9395));
|
|
949
|
+
return {
|
|
950
|
+
epochIndex,
|
|
951
|
+
startTimestamp,
|
|
952
|
+
endTimestamp,
|
|
953
|
+
totalEligibleRewards,
|
|
954
|
+
perGatewayReward,
|
|
955
|
+
perObserverReward,
|
|
956
|
+
rewardRate,
|
|
957
|
+
activeGatewayCount,
|
|
958
|
+
distributionIndex,
|
|
959
|
+
tallyIndex,
|
|
960
|
+
observerCount,
|
|
961
|
+
nameCount,
|
|
962
|
+
observationsSubmitted,
|
|
963
|
+
rewardsDistributed,
|
|
964
|
+
weightsTallied,
|
|
965
|
+
prescriptionsDone,
|
|
966
|
+
failureCounts,
|
|
967
|
+
prescribedObservers,
|
|
968
|
+
prescribedObserverGateways,
|
|
969
|
+
prescribedNameHashes,
|
|
970
|
+
hasObserved,
|
|
971
|
+
};
|
|
972
|
+
}
|
|
973
|
+
// =========================================
|
|
974
|
+
// Observation deserialization
|
|
975
|
+
// =========================================
|
|
976
|
+
/**
|
|
977
|
+
* Deserialize an Observation account from raw bytes.
|
|
978
|
+
* PDA: ["observation", epoch_index_le_bytes, observer_pubkey] in ario-gar program.
|
|
979
|
+
*/
|
|
980
|
+
export function deserializeObservation(data) {
|
|
981
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
982
|
+
const epochIndex = r.readU64AsNumber();
|
|
983
|
+
const observer = r.readPubkey();
|
|
984
|
+
const gatewayResults = r.readFixedBytes(375);
|
|
985
|
+
const gatewayCount = r.readU16();
|
|
986
|
+
const reportTxId = r.readFixedBytes(32).toString('base64url');
|
|
987
|
+
const submittedAt = r.readI64AsNumber();
|
|
988
|
+
return {
|
|
989
|
+
epochIndex,
|
|
990
|
+
observer,
|
|
991
|
+
gatewayResults,
|
|
992
|
+
gatewayCount,
|
|
993
|
+
reportTxId,
|
|
994
|
+
submittedAt,
|
|
995
|
+
};
|
|
996
|
+
}
|
|
997
|
+
// =========================================
|
|
998
|
+
// ANT Config deserialization
|
|
999
|
+
// =========================================
|
|
1000
|
+
/**
|
|
1001
|
+
* Deserialize an AntConfig account from raw bytes.
|
|
1002
|
+
* PDA: ["ant_config", mint] in ario-ant program.
|
|
1003
|
+
*/
|
|
1004
|
+
export function deserializeAntConfig(data) {
|
|
1005
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
1006
|
+
const mint = r.readPubkey();
|
|
1007
|
+
const name = r.readString();
|
|
1008
|
+
const ticker = r.readString();
|
|
1009
|
+
const logo = r.readString();
|
|
1010
|
+
const description = r.readString();
|
|
1011
|
+
const keywords = r.readVecString();
|
|
1012
|
+
const lastKnownOwner = r.readPubkey();
|
|
1013
|
+
r.readU8(); // bump
|
|
1014
|
+
let version = 0;
|
|
1015
|
+
try {
|
|
1016
|
+
version = r.readU8();
|
|
1017
|
+
}
|
|
1018
|
+
catch {
|
|
1019
|
+
/* pre-version accounts default to 0 */
|
|
1020
|
+
}
|
|
1021
|
+
return {
|
|
1022
|
+
mint: mint,
|
|
1023
|
+
name,
|
|
1024
|
+
ticker,
|
|
1025
|
+
logo,
|
|
1026
|
+
description,
|
|
1027
|
+
keywords,
|
|
1028
|
+
owner: lastKnownOwner,
|
|
1029
|
+
version,
|
|
1030
|
+
};
|
|
1031
|
+
}
|
|
1032
|
+
// =========================================
|
|
1033
|
+
// ANT Controllers deserialization
|
|
1034
|
+
// =========================================
|
|
1035
|
+
/**
|
|
1036
|
+
* Deserialize an AntControllers account from raw bytes.
|
|
1037
|
+
* PDA: ["ant_controllers", mint] in ario-ant program.
|
|
1038
|
+
*/
|
|
1039
|
+
export function deserializeAntControllers(data) {
|
|
1040
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
1041
|
+
const mint = r.readPubkey();
|
|
1042
|
+
const controllers = r.readVecPubkey().map((pk) => pk);
|
|
1043
|
+
// bump: u8 — skip
|
|
1044
|
+
return {
|
|
1045
|
+
mint: mint,
|
|
1046
|
+
controllers,
|
|
1047
|
+
};
|
|
1048
|
+
}
|
|
1049
|
+
// =========================================
|
|
1050
|
+
// ANT Record deserialization
|
|
1051
|
+
// =========================================
|
|
1052
|
+
/**
|
|
1053
|
+
* Deserialize an AntRecord account from raw bytes.
|
|
1054
|
+
* PDA: ["ant_record", mint, hash(undername)] in ario-ant program.
|
|
1055
|
+
*/
|
|
1056
|
+
export function deserializeAntRecord(data) {
|
|
1057
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
1058
|
+
const mint = r.readPubkey();
|
|
1059
|
+
const undername = r.readString();
|
|
1060
|
+
const transactionId = r.readString(); // on-chain field: target
|
|
1061
|
+
const targetProtocol = r.readU8(); // 0 = Arweave, 1 = IPFS
|
|
1062
|
+
const ttlSeconds = r.readU32();
|
|
1063
|
+
const priority = r.readOptionU32();
|
|
1064
|
+
const ownerPk = r.readOptionPubkey();
|
|
1065
|
+
// last_reconciled_owner: Pubkey, bump: u8 — skip
|
|
1066
|
+
return {
|
|
1067
|
+
mint: mint,
|
|
1068
|
+
undername,
|
|
1069
|
+
transactionId,
|
|
1070
|
+
targetProtocol,
|
|
1071
|
+
ttlSeconds,
|
|
1072
|
+
priority,
|
|
1073
|
+
owner: ownerPk,
|
|
1074
|
+
};
|
|
1075
|
+
}
|
|
1076
|
+
/**
|
|
1077
|
+
* Deserialize an AntRecordMetadata account from raw bytes.
|
|
1078
|
+
* This is a separate PDA that holds optional per-record metadata fields.
|
|
1079
|
+
*/
|
|
1080
|
+
export function deserializeAntRecordMetadata(data) {
|
|
1081
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
1082
|
+
const mint = r.readPubkey();
|
|
1083
|
+
r.skip(32); // undername_hash — [u8; 32], not needed by callers
|
|
1084
|
+
const displayName = r.readOptionString();
|
|
1085
|
+
const logo = r.readOptionString();
|
|
1086
|
+
const description = r.readOptionString();
|
|
1087
|
+
const keywords = r.readOptionVecString();
|
|
1088
|
+
// bump: u8 — skip
|
|
1089
|
+
return { mint, displayName, logo, description, keywords };
|
|
1090
|
+
}
|
|
1091
|
+
/**
|
|
1092
|
+
* Deserialize an `AclConfig` account (paginated ACL head — ADR-012).
|
|
1093
|
+
* PDA: `["acl_config", user]` in ario-ant program.
|
|
1094
|
+
*
|
|
1095
|
+
* Holds counts but no entries. Read this first, then fan out to each
|
|
1096
|
+
* `AclPage` PDA (`["acl_page", user, page_idx_le]`) for the entries.
|
|
1097
|
+
*/
|
|
1098
|
+
export function deserializeAclConfig(data) {
|
|
1099
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
1100
|
+
const user = r.readPubkey();
|
|
1101
|
+
const pageCount = r.readU64();
|
|
1102
|
+
const totalEntries = r.readU64();
|
|
1103
|
+
// bump: u8 — managed by Anchor
|
|
1104
|
+
return {
|
|
1105
|
+
user: user,
|
|
1106
|
+
pageCount,
|
|
1107
|
+
totalEntries,
|
|
1108
|
+
};
|
|
1109
|
+
}
|
|
1110
|
+
/**
|
|
1111
|
+
* Deserialize an `AclPage` account (paginated ACL page — ADR-012).
|
|
1112
|
+
* PDA: `["acl_page", user, page_idx_le]` in ario-ant program.
|
|
1113
|
+
*
|
|
1114
|
+
* Stores up to `MAX_ACL_PAGE_ENTRIES` `(asset, role)` entries. Pages can
|
|
1115
|
+
* be sparse mid-life (entries are removed via `swap_remove`) — the SDK's
|
|
1116
|
+
* append path fills the first non-full page to keep density reasonable.
|
|
1117
|
+
*/
|
|
1118
|
+
export function deserializeAclPage(data) {
|
|
1119
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
1120
|
+
const user = r.readPubkey();
|
|
1121
|
+
const pageIdx = r.readU64();
|
|
1122
|
+
const entryCount = r.readU32();
|
|
1123
|
+
const entries = [];
|
|
1124
|
+
for (let i = 0; i < entryCount; i++) {
|
|
1125
|
+
const asset = r.readPubkey();
|
|
1126
|
+
const role = r.readU8();
|
|
1127
|
+
entries.push({ asset: asset, role });
|
|
1128
|
+
}
|
|
1129
|
+
// bump: u8 — managed by Anchor
|
|
1130
|
+
return {
|
|
1131
|
+
user: user,
|
|
1132
|
+
pageIdx,
|
|
1133
|
+
entries,
|
|
1134
|
+
};
|
|
1135
|
+
}
|
|
1136
|
+
// =========================================
|
|
1137
|
+
// Primary Name deserialization
|
|
1138
|
+
// =========================================
|
|
1139
|
+
/**
|
|
1140
|
+
* Deserialize a PrimaryName account from raw bytes.
|
|
1141
|
+
* PDA: ["primary_name", owner] in ario-core program.
|
|
1142
|
+
*
|
|
1143
|
+
* The on-chain `PrimaryName` (programs/ario-core/src/state/mod.rs) has
|
|
1144
|
+
* **no** `processId` field — only `{owner, name, set_at, bump}`. The ANT
|
|
1145
|
+
* mint that a primary name resolves to lives on the matching `ArnsRecord`
|
|
1146
|
+
* (looked up by `name`), and callers wanting an `AoPrimaryName`-shaped
|
|
1147
|
+
* result MUST enrich this output with that lookup. The previous
|
|
1148
|
+
* implementation read 32 bytes from where `set_at` (i64) + part of `bump`
|
|
1149
|
+
* actually sit and returned a fake `processId` pubkey, which broke every
|
|
1150
|
+
* `assert.equal(pn.processId, antMint)` check downstream.
|
|
1151
|
+
*/
|
|
1152
|
+
export function deserializePrimaryName(data) {
|
|
1153
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
1154
|
+
const owner = r.readPubkey();
|
|
1155
|
+
const name = r.readString();
|
|
1156
|
+
const startTimestamp = r.readI64AsNumber();
|
|
1157
|
+
// bump: u8 — skip
|
|
1158
|
+
return {
|
|
1159
|
+
owner,
|
|
1160
|
+
name,
|
|
1161
|
+
startTimestamp,
|
|
1162
|
+
};
|
|
1163
|
+
}
|
|
1164
|
+
// =========================================
|
|
1165
|
+
// Allowlist deserialization
|
|
1166
|
+
// =========================================
|
|
1167
|
+
/**
|
|
1168
|
+
* Deserialize an Allowlist entry account from raw bytes.
|
|
1169
|
+
* PDA: ["allowlist", gateway, delegate] in ario-gar program.
|
|
1170
|
+
*/
|
|
1171
|
+
export function deserializeAllowlist(data) {
|
|
1172
|
+
const r = new BorshReader(data, 8); // skip discriminator
|
|
1173
|
+
const gateway = r.readPubkey();
|
|
1174
|
+
const delegate = r.readPubkey();
|
|
1175
|
+
// bump: u8 — skip
|
|
1176
|
+
return {
|
|
1177
|
+
gateway: gateway,
|
|
1178
|
+
delegate: delegate,
|
|
1179
|
+
};
|
|
1180
|
+
}
|
|
1181
|
+
// Re-export the reader and writer for custom (de)serialization
|
|
1182
|
+
export { BorshReader, BorshWriter };
|