@aptos-labs/ts-sdk 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/{accountAddress-D0xKX-UM.d.ts → accountAddress-AL8HRxQC.d.ts} +8 -0
- package/dist/common/chunk-ZMDE3DNL.js.map +1 -1
- package/dist/common/cli/index.d.ts +1 -1
- package/dist/common/cli/index.js.map +1 -1
- package/dist/common/index.d.ts +22 -3
- package/dist/common/index.js +30 -30
- package/dist/common/index.js.map +1 -1
- package/dist/esm/account/AbstractKeylessAccount.mjs +1 -1
- package/dist/esm/account/AbstractedAccount.mjs +1 -1
- package/dist/esm/account/Account.mjs +1 -1
- package/dist/esm/account/AccountUtils.mjs +1 -1
- package/dist/esm/account/DerivableAbstractedAccount.mjs +1 -1
- package/dist/esm/account/Ed25519Account.mjs +1 -1
- package/dist/esm/account/EphemeralKeyPair.mjs +1 -1
- package/dist/esm/account/FederatedKeylessAccount.mjs +1 -1
- package/dist/esm/account/KeylessAccount.mjs +1 -1
- package/dist/esm/account/MultiEd25519Account.mjs +1 -1
- package/dist/esm/account/MultiKeyAccount.mjs +1 -1
- package/dist/esm/account/SingleKeyAccount.mjs +1 -1
- package/dist/esm/account/index.mjs +1 -1
- package/dist/esm/account/utils.mjs +1 -1
- package/dist/esm/api/account/abstraction.mjs +1 -1
- package/dist/esm/api/account.mjs +1 -1
- package/dist/esm/api/ans.mjs +1 -1
- package/dist/esm/api/aptos.mjs +1 -1
- package/dist/esm/api/coin.d.mts +3 -3
- package/dist/esm/api/coin.mjs +1 -1
- package/dist/esm/api/digitalAsset.d.mts +1 -1
- package/dist/esm/api/digitalAsset.mjs +1 -1
- package/dist/esm/api/event.mjs +1 -1
- package/dist/esm/api/faucet.mjs +1 -1
- package/dist/esm/api/fungibleAsset.mjs +1 -1
- package/dist/esm/api/general.mjs +1 -1
- package/dist/esm/api/index.mjs +1 -1
- package/dist/esm/api/keyless.mjs +1 -1
- package/dist/esm/api/object.mjs +1 -1
- package/dist/esm/api/staking.mjs +1 -1
- package/dist/esm/api/table.mjs +1 -1
- package/dist/esm/api/transaction.mjs +1 -1
- package/dist/esm/api/transactionSubmission/build.mjs +1 -1
- package/dist/esm/api/transactionSubmission/management.mjs +1 -1
- package/dist/esm/api/transactionSubmission/sign.mjs +1 -1
- package/dist/esm/api/transactionSubmission/simulate.mjs +1 -1
- package/dist/esm/api/transactionSubmission/submit.mjs +1 -1
- package/dist/esm/api/utils.mjs +1 -1
- package/dist/esm/bcs/deserializer.d.mts +8 -0
- package/dist/esm/bcs/deserializer.mjs +1 -1
- package/dist/esm/bcs/index.mjs +1 -1
- package/dist/esm/bcs/serializable/moveStructs.mjs +1 -1
- package/dist/esm/{chunk-34R7FSQF.mjs → chunk-57J5YBMT.mjs} +2 -2
- package/dist/esm/{chunk-USB3LA6B.mjs → chunk-AMAPBD4D.mjs} +2 -2
- package/dist/esm/chunk-BK56GLTP.mjs +4 -0
- package/dist/esm/chunk-BK56GLTP.mjs.map +1 -0
- package/dist/esm/{chunk-G7WH6GQP.mjs → chunk-CFQFFP6N.mjs} +2 -2
- package/dist/esm/{chunk-4JT5AESZ.mjs → chunk-CO67Y6YE.mjs} +2 -2
- package/dist/esm/chunk-CW35YAMN.mjs +2 -0
- package/dist/esm/{chunk-HW7TSJI2.mjs → chunk-CZYH3G7E.mjs} +2 -2
- package/dist/esm/chunk-FLZPUYXQ.mjs +2 -0
- package/dist/esm/chunk-FLZPUYXQ.mjs.map +1 -0
- package/dist/esm/{chunk-ZNLOQO4Q.mjs → chunk-GBNAG7KK.mjs} +2 -2
- package/dist/esm/{chunk-6UZHMEK3.mjs → chunk-HETYL3WN.mjs} +2 -2
- package/dist/esm/{chunk-SE2VS7WM.mjs → chunk-KRBZ54CY.mjs} +2 -2
- package/dist/esm/{chunk-G6HENV5D.mjs → chunk-Q4W3WJ2U.mjs} +2 -2
- package/dist/esm/{chunk-EF4FA5I6.mjs → chunk-RQX6JOEN.mjs} +2 -2
- package/dist/esm/{chunk-MA4QUN6P.mjs → chunk-U7HD6PQV.mjs} +2 -2
- package/dist/esm/{chunk-TDGLYA35.mjs → chunk-UOP7GBXB.mjs} +2 -2
- package/dist/esm/{chunk-K43K3YG7.mjs → chunk-UQWF24SS.mjs} +2 -2
- package/dist/esm/{chunk-2UBI3AZJ.mjs → chunk-V2QSMVJ5.mjs} +2 -2
- package/dist/esm/{chunk-TLFZOAAB.mjs → chunk-V74WPKSY.mjs} +2 -2
- package/dist/esm/chunk-VEGW6HP5.mjs +2 -0
- package/dist/esm/{chunk-HLF3U7IS.mjs.map → chunk-VEGW6HP5.mjs.map} +1 -1
- package/dist/esm/client/core.mjs +1 -1
- package/dist/esm/client/get.mjs +1 -1
- package/dist/esm/client/index.mjs +1 -1
- package/dist/esm/client/post.mjs +1 -1
- package/dist/esm/core/crypto/abstraction.mjs +1 -1
- package/dist/esm/core/crypto/deserializationUtils.d.mts +36 -0
- package/dist/esm/core/crypto/deserializationUtils.mjs +2 -0
- package/dist/esm/core/crypto/deserializationUtils.mjs.map +1 -0
- package/dist/esm/core/crypto/ed25519.mjs +1 -1
- package/dist/esm/core/crypto/ephemeral.mjs +1 -1
- package/dist/esm/core/crypto/federatedKeyless.mjs +1 -1
- package/dist/esm/core/crypto/index.d.mts +1 -0
- package/dist/esm/core/crypto/index.mjs +1 -1
- package/dist/esm/core/crypto/keyless.mjs +1 -1
- package/dist/esm/core/crypto/multiEd25519.mjs +1 -1
- package/dist/esm/core/crypto/multiKey.mjs +1 -1
- package/dist/esm/core/crypto/proof.mjs +1 -1
- package/dist/esm/core/crypto/publicKey.mjs +1 -1
- package/dist/esm/core/crypto/secp256k1.mjs +1 -1
- package/dist/esm/core/crypto/signature.mjs +1 -1
- package/dist/esm/core/crypto/singleKey.mjs +1 -1
- package/dist/esm/core/index.d.mts +1 -0
- package/dist/esm/core/index.mjs +1 -1
- package/dist/esm/errors/index.mjs +1 -1
- package/dist/esm/index.d.mts +1 -0
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/internal/abstraction.mjs +1 -1
- package/dist/esm/internal/account.mjs +1 -1
- package/dist/esm/internal/ans.mjs +1 -1
- package/dist/esm/internal/coin.mjs +1 -1
- package/dist/esm/internal/digitalAsset.mjs +1 -1
- package/dist/esm/internal/event.mjs +1 -1
- package/dist/esm/internal/faucet.mjs +1 -1
- package/dist/esm/internal/fungibleAsset.mjs +1 -1
- package/dist/esm/internal/general.mjs +1 -1
- package/dist/esm/internal/keyless.mjs +1 -1
- package/dist/esm/internal/object.mjs +1 -1
- package/dist/esm/internal/staking.mjs +1 -1
- package/dist/esm/internal/table.mjs +1 -1
- package/dist/esm/internal/transaction.mjs +1 -1
- package/dist/esm/internal/transactionSubmission.mjs +1 -1
- package/dist/esm/internal/utils/index.mjs +1 -1
- package/dist/esm/internal/utils/utils.mjs +1 -1
- package/dist/esm/internal/view.mjs +1 -1
- package/dist/esm/transactions/authenticator/account.mjs +1 -1
- package/dist/esm/transactions/authenticator/index.mjs +1 -1
- package/dist/esm/transactions/authenticator/transaction.mjs +1 -1
- package/dist/esm/transactions/index.mjs +1 -1
- package/dist/esm/transactions/instances/index.mjs +1 -1
- package/dist/esm/transactions/instances/moduleId.mjs +1 -1
- package/dist/esm/transactions/instances/multiAgentTransaction.mjs +1 -1
- package/dist/esm/transactions/instances/rawTransaction.mjs +1 -1
- package/dist/esm/transactions/instances/rotationProofChallenge.mjs +1 -1
- package/dist/esm/transactions/instances/signedTransaction.mjs +1 -1
- package/dist/esm/transactions/instances/simpleTransaction.mjs +1 -1
- package/dist/esm/transactions/instances/transactionPayload.mjs +1 -1
- package/dist/esm/transactions/management/accountSequenceNumber.mjs +1 -1
- package/dist/esm/transactions/management/index.mjs +1 -1
- package/dist/esm/transactions/management/transactionWorker.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/helpers.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/index.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/remoteAbi.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/signingMessage.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/transactionBuilder.mjs +1 -1
- package/dist/esm/transactions/typeTag/index.mjs +1 -1
- package/dist/esm/transactions/typeTag/parser.mjs +1 -1
- package/dist/esm/utils/index.mjs +1 -1
- package/dist/esm/utils/normalizeBundle.mjs +1 -1
- package/dist/esm/version.d.mts +1 -1
- package/dist/esm/version.mjs +1 -1
- package/package.json +3 -3
- package/src/bcs/deserializer.ts +13 -0
- package/src/core/crypto/deserializationUtils.ts +106 -0
- package/src/core/crypto/index.ts +1 -0
- package/src/internal/move/jwks/build/jwk/BuildInfo.yaml +56 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/account.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aggregator.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aggregator_factory.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aggregator_v2.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aptos_account.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aptos_coin.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aptos_governance.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/block.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/chain_id.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/chain_status.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/code.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/coin.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/config_buffer.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/consensus_config.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/create_signer.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/delegation_pool.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/dispatchable_fungible_asset.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/dkg.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/event.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/execution_config.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/function_info.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/fungible_asset.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/gas_schedule.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/genesis.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/governance_proposal.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/guid.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/jwk_consensus_config.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/jwks.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/keyless_account.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/managed_coin.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/multisig_account.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/object.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/object_code_deployment.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/optional_aggregator.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/primary_fungible_store.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/randomness.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/randomness_api_v0_config.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/randomness_config.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/randomness_config_seqnum.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/reconfiguration.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/reconfiguration_state.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/reconfiguration_with_dkg.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/resource_account.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/stake.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/staking_config.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/staking_contract.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/staking_proxy.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/state_storage.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/storage_gas.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/system_addresses.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/timestamp.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/transaction_context.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/transaction_fee.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/transaction_validation.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/util.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/validator_consensus_info.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/version.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/vesting.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/voting.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/any.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/aptos_hash.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/big_vector.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/bls12381.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/bls12381_algebra.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/bn254_algebra.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/capability.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/comparator.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/copyable_any.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/crypto_algebra.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/debug.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/ed25519.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/fixed_point64.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/from_bcs.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/math128.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/math64.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/math_fixed.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/math_fixed64.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/multi_ed25519.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/pool_u64.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/pool_u64_unbound.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/ristretto255.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/ristretto255_bulletproofs.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/ristretto255_elgamal.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/ristretto255_pedersen.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/secp256k1.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/simple_map.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/smart_table.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/smart_vector.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/string_utils.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/table.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/table_with_length.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/type_info.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/acl.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/bcs.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/bit_vector.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/error.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/features.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/fixed_point32.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/hash.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/option.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/signer.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/string.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/vector.mv +0 -0
- package/src/internal/move/jwks/build/jwk/bytecode_scripts/main.mv +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/account.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aggregator.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aggregator_factory.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aggregator_v2.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aptos_account.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aptos_coin.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aptos_governance.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/block.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/chain_id.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/chain_status.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/code.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/coin.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/config_buffer.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/consensus_config.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/create_signer.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/delegation_pool.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/dispatchable_fungible_asset.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/dkg.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/event.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/execution_config.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/function_info.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/fungible_asset.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/gas_schedule.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/genesis.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/governance_proposal.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/guid.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/jwk_consensus_config.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/jwks.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/keyless_account.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/managed_coin.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/multisig_account.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/object.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/object_code_deployment.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/optional_aggregator.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/primary_fungible_store.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/randomness.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/randomness_api_v0_config.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/randomness_config.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/randomness_config_seqnum.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/reconfiguration.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/reconfiguration_state.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/reconfiguration_with_dkg.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/resource_account.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/stake.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/staking_config.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/staking_contract.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/staking_proxy.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/state_storage.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/storage_gas.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/system_addresses.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/timestamp.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/transaction_context.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/transaction_fee.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/transaction_validation.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/util.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/validator_consensus_info.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/version.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/vesting.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/voting.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/any.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/aptos_hash.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/big_vector.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/bls12381.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/bls12381_algebra.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/bn254_algebra.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/capability.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/comparator.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/copyable_any.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/crypto_algebra.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/debug.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/ed25519.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/fixed_point64.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/from_bcs.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/math128.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/math64.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/math_fixed.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/math_fixed64.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/multi_ed25519.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/pool_u64.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/pool_u64_unbound.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/ristretto255.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/ristretto255_bulletproofs.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/ristretto255_elgamal.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/ristretto255_pedersen.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/secp256k1.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/simple_map.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/smart_table.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/smart_vector.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/string_utils.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/table.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/table_with_length.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/type_info.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/acl.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/bcs.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/bit_vector.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/error.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/features.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/fixed_point32.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/hash.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/option.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/signer.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/string.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/vector.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/source_maps/main.mvsm +0 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/account.move +1533 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aggregator.move +48 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aggregator_factory.move +66 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aggregator_v2.move +280 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aptos_account.move +443 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aptos_coin.move +204 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aptos_governance.move +1387 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/block.move +394 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/chain_id.move +41 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/chain_status.move +48 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/code.move +367 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/coin.move +2214 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/config_buffer.move +101 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/consensus_config.move +77 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/create_signer.move +21 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/delegation_pool.move +5568 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/dispatchable_fungible_asset.move +228 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/dkg.move +121 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/event.move +92 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/execution_config.move +66 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/function_info.move +100 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/fungible_asset.move +1566 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/gas_schedule.move +176 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/genesis.move +550 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/governance_proposal.move +23 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/guid.move +68 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/jwk_consensus_config.move +148 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/jwks.move +817 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/keyless_account.move +312 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/managed_coin.move +205 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/multisig_account.move +2477 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/object.move +1073 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/object_code_deployment.move +147 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/optional_aggregator.move +295 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/primary_fungible_store.move +405 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/randomness.move +574 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/randomness_api_v0_config.move +57 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/randomness_config.move +153 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/randomness_config_seqnum.move +49 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/reconfiguration.move +237 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/reconfiguration_state.move +132 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/reconfiguration_with_dkg.move +69 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/resource_account.move +267 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/stake.move +3286 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/staking_config.move +686 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/staking_contract.move +1618 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/staking_proxy.move +228 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/state_storage.move +90 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/storage_gas.move +622 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/system_addresses.move +82 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/timestamp.move +88 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/transaction_context.move +262 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/transaction_fee.move +457 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/transaction_validation.move +501 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/util.move +16 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/validator_consensus_info.move +42 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/version.move +115 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/vesting.move +2183 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/voting.move +1279 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/any.move +57 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/aptos_hash.move +253 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/big_vector.move +469 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/bls12381.move +985 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/bls12381_algebra.move +802 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/bn254_algebra.move +855 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/capability.move +193 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/comparator.move +173 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/copyable_any.move +45 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/crypto_algebra.move +351 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/debug.move +278 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ed25519.move +262 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/fixed_point64.move +447 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/from_bcs.move +91 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/math128.move +381 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/math64.move +336 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/math_fixed.move +139 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/math_fixed64.move +142 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/multi_ed25519.move +482 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/pool_u64.move +571 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/pool_u64_unbound.move +270 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ristretto255.move +1310 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ristretto255_bulletproofs.move +253 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ristretto255_elgamal.move +234 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ristretto255_pedersen.move +158 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/secp256k1.move +114 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/simple_map.move +319 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/smart_table.move +769 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/smart_vector.move +766 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/string_utils.move +148 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/table.move +152 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/table_with_length.move +141 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/type_info.move +351 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/acl.move +46 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/bcs.move +27 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/bit_vector.move +239 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/error.move +88 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/features.move +780 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/fixed_point32.move +295 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/hash.move +8 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/option.move +356 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/signer.move +21 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/string.move +93 -0
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/vector.move +669 -0
- package/src/internal/move/jwks/build/jwk/sources/main.move +20 -0
- package/src/version.ts +1 -1
- package/dist/esm/chunk-5YLNYSBT.mjs +0 -4
- package/dist/esm/chunk-5YLNYSBT.mjs.map +0 -1
- package/dist/esm/chunk-DLIBG6H7.mjs +0 -2
- package/dist/esm/chunk-DLIBG6H7.mjs.map +0 -1
- package/dist/esm/chunk-HLF3U7IS.mjs +0 -2
- package/dist/esm/chunk-RIRJNQ7B.mjs +0 -2
- /package/dist/esm/{chunk-34R7FSQF.mjs.map → chunk-57J5YBMT.mjs.map} +0 -0
- /package/dist/esm/{chunk-USB3LA6B.mjs.map → chunk-AMAPBD4D.mjs.map} +0 -0
- /package/dist/esm/{chunk-G7WH6GQP.mjs.map → chunk-CFQFFP6N.mjs.map} +0 -0
- /package/dist/esm/{chunk-4JT5AESZ.mjs.map → chunk-CO67Y6YE.mjs.map} +0 -0
- /package/dist/esm/{chunk-RIRJNQ7B.mjs.map → chunk-CW35YAMN.mjs.map} +0 -0
- /package/dist/esm/{chunk-HW7TSJI2.mjs.map → chunk-CZYH3G7E.mjs.map} +0 -0
- /package/dist/esm/{chunk-ZNLOQO4Q.mjs.map → chunk-GBNAG7KK.mjs.map} +0 -0
- /package/dist/esm/{chunk-6UZHMEK3.mjs.map → chunk-HETYL3WN.mjs.map} +0 -0
- /package/dist/esm/{chunk-SE2VS7WM.mjs.map → chunk-KRBZ54CY.mjs.map} +0 -0
- /package/dist/esm/{chunk-G6HENV5D.mjs.map → chunk-Q4W3WJ2U.mjs.map} +0 -0
- /package/dist/esm/{chunk-EF4FA5I6.mjs.map → chunk-RQX6JOEN.mjs.map} +0 -0
- /package/dist/esm/{chunk-MA4QUN6P.mjs.map → chunk-U7HD6PQV.mjs.map} +0 -0
- /package/dist/esm/{chunk-TDGLYA35.mjs.map → chunk-UOP7GBXB.mjs.map} +0 -0
- /package/dist/esm/{chunk-K43K3YG7.mjs.map → chunk-UQWF24SS.mjs.map} +0 -0
- /package/dist/esm/{chunk-2UBI3AZJ.mjs.map → chunk-V2QSMVJ5.mjs.map} +0 -0
- /package/dist/esm/{chunk-TLFZOAAB.mjs.map → chunk-V74WPKSY.mjs.map} +0 -0
package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/fungible_asset.move
ADDED
|
@@ -0,0 +1,1566 @@
|
|
|
1
|
+
/// This defines the fungible asset module that can issue fungible asset of any `Metadata` object. The
|
|
2
|
+
/// metadata object can be any object that equipped with `Metadata` resource.
|
|
3
|
+
module aptos_framework::fungible_asset {
|
|
4
|
+
use aptos_framework::aggregator_v2::{Self, Aggregator};
|
|
5
|
+
use aptos_framework::create_signer;
|
|
6
|
+
use aptos_framework::event;
|
|
7
|
+
use aptos_framework::function_info::{Self, FunctionInfo};
|
|
8
|
+
use aptos_framework::object::{Self, Object, ConstructorRef, DeleteRef, ExtendRef};
|
|
9
|
+
use std::string;
|
|
10
|
+
use std::features;
|
|
11
|
+
|
|
12
|
+
use std::error;
|
|
13
|
+
use std::option::{Self, Option};
|
|
14
|
+
use std::signer;
|
|
15
|
+
use std::string::String;
|
|
16
|
+
|
|
17
|
+
friend aptos_framework::coin;
|
|
18
|
+
friend aptos_framework::primary_fungible_store;
|
|
19
|
+
friend aptos_framework::aptos_account;
|
|
20
|
+
|
|
21
|
+
friend aptos_framework::dispatchable_fungible_asset;
|
|
22
|
+
|
|
23
|
+
/// Amount cannot be zero.
|
|
24
|
+
const EAMOUNT_CANNOT_BE_ZERO: u64 = 1;
|
|
25
|
+
/// The transfer ref and the fungible asset do not match.
|
|
26
|
+
const ETRANSFER_REF_AND_FUNGIBLE_ASSET_MISMATCH: u64 = 2;
|
|
27
|
+
/// Store is disabled from sending and receiving this fungible asset.
|
|
28
|
+
const ESTORE_IS_FROZEN: u64 = 3;
|
|
29
|
+
/// Insufficient balance to withdraw or transfer.
|
|
30
|
+
const EINSUFFICIENT_BALANCE: u64 = 4;
|
|
31
|
+
/// The fungible asset's supply has exceeded maximum.
|
|
32
|
+
const EMAX_SUPPLY_EXCEEDED: u64 = 5;
|
|
33
|
+
/// Fungible asset do not match when merging.
|
|
34
|
+
const EFUNGIBLE_ASSET_MISMATCH: u64 = 6;
|
|
35
|
+
/// The mint ref and the store do not match.
|
|
36
|
+
const EMINT_REF_AND_STORE_MISMATCH: u64 = 7;
|
|
37
|
+
/// Account is not the store's owner.
|
|
38
|
+
const ENOT_STORE_OWNER: u64 = 8;
|
|
39
|
+
/// Transfer ref and store do not match.
|
|
40
|
+
const ETRANSFER_REF_AND_STORE_MISMATCH: u64 = 9;
|
|
41
|
+
/// Burn ref and store do not match.
|
|
42
|
+
const EBURN_REF_AND_STORE_MISMATCH: u64 = 10;
|
|
43
|
+
/// Fungible asset and store do not match.
|
|
44
|
+
const EFUNGIBLE_ASSET_AND_STORE_MISMATCH: u64 = 11;
|
|
45
|
+
/// Cannot destroy non-empty fungible assets.
|
|
46
|
+
const EAMOUNT_IS_NOT_ZERO: u64 = 12;
|
|
47
|
+
/// Burn ref and fungible asset do not match.
|
|
48
|
+
const EBURN_REF_AND_FUNGIBLE_ASSET_MISMATCH: u64 = 13;
|
|
49
|
+
/// Cannot destroy fungible stores with a non-zero balance.
|
|
50
|
+
const EBALANCE_IS_NOT_ZERO: u64 = 14;
|
|
51
|
+
/// Name of the fungible asset metadata is too long
|
|
52
|
+
const ENAME_TOO_LONG: u64 = 15;
|
|
53
|
+
/// Symbol of the fungible asset metadata is too long
|
|
54
|
+
const ESYMBOL_TOO_LONG: u64 = 16;
|
|
55
|
+
/// Decimals is over the maximum of 32
|
|
56
|
+
const EDECIMALS_TOO_LARGE: u64 = 17;
|
|
57
|
+
/// Fungibility is only available for non-deletable objects.
|
|
58
|
+
const EOBJECT_IS_DELETABLE: u64 = 18;
|
|
59
|
+
/// URI for the icon of the fungible asset metadata is too long
|
|
60
|
+
const EURI_TOO_LONG: u64 = 19;
|
|
61
|
+
/// The fungible asset's supply will be negative which should be impossible.
|
|
62
|
+
const ESUPPLY_UNDERFLOW: u64 = 20;
|
|
63
|
+
/// Supply resource is not found for a metadata object.
|
|
64
|
+
const ESUPPLY_NOT_FOUND: u64 = 21;
|
|
65
|
+
/// Flag for Concurrent Supply not enabled
|
|
66
|
+
const ECONCURRENT_SUPPLY_NOT_ENABLED: u64 = 22;
|
|
67
|
+
/// Flag for the existence of fungible store.
|
|
68
|
+
const EFUNGIBLE_STORE_EXISTENCE: u64 = 23;
|
|
69
|
+
/// Account is not the owner of metadata object.
|
|
70
|
+
const ENOT_METADATA_OWNER: u64 = 24;
|
|
71
|
+
/// Provided withdraw function type doesn't meet the signature requirement.
|
|
72
|
+
const EWITHDRAW_FUNCTION_SIGNATURE_MISMATCH: u64 = 25;
|
|
73
|
+
/// Provided deposit function type doesn't meet the signature requirement.
|
|
74
|
+
const EDEPOSIT_FUNCTION_SIGNATURE_MISMATCH: u64 = 26;
|
|
75
|
+
/// Provided derived_balance function type doesn't meet the signature requirement.
|
|
76
|
+
const EDERIVED_BALANCE_FUNCTION_SIGNATURE_MISMATCH: u64 = 27;
|
|
77
|
+
/// Invalid withdraw/deposit on dispatchable token. The specified token has a dispatchable function hook.
|
|
78
|
+
/// Need to invoke dispatchable_fungible_asset::withdraw/deposit to perform transfer.
|
|
79
|
+
const EINVALID_DISPATCHABLE_OPERATIONS: u64 = 28;
|
|
80
|
+
/// Trying to re-register dispatch hook on a fungible asset.
|
|
81
|
+
const EALREADY_REGISTERED: u64 = 29;
|
|
82
|
+
/// Fungible metadata does not exist on this account.
|
|
83
|
+
const EFUNGIBLE_METADATA_EXISTENCE: u64 = 30;
|
|
84
|
+
/// Cannot register dispatch hook for APT.
|
|
85
|
+
const EAPT_NOT_DISPATCHABLE: u64 = 31;
|
|
86
|
+
/// Flag for Concurrent Supply not enabled
|
|
87
|
+
const ECONCURRENT_BALANCE_NOT_ENABLED: u64 = 32;
|
|
88
|
+
/// Provided derived_supply function type doesn't meet the signature requirement.
|
|
89
|
+
const EDERIVED_SUPPLY_FUNCTION_SIGNATURE_MISMATCH: u64 = 33;
|
|
90
|
+
|
|
91
|
+
//
|
|
92
|
+
// Constants
|
|
93
|
+
//
|
|
94
|
+
|
|
95
|
+
const MAX_NAME_LENGTH: u64 = 32;
|
|
96
|
+
const MAX_SYMBOL_LENGTH: u64 = 10;
|
|
97
|
+
const MAX_DECIMALS: u8 = 32;
|
|
98
|
+
const MAX_URI_LENGTH: u64 = 512;
|
|
99
|
+
|
|
100
|
+
/// Maximum possible coin supply.
|
|
101
|
+
const MAX_U128: u128 = 340282366920938463463374607431768211455;
|
|
102
|
+
|
|
103
|
+
#[resource_group_member(group = aptos_framework::object::ObjectGroup)]
|
|
104
|
+
struct Supply has key {
|
|
105
|
+
current: u128,
|
|
106
|
+
// option::none() means unlimited supply.
|
|
107
|
+
maximum: Option<u128>,
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
#[resource_group_member(group = aptos_framework::object::ObjectGroup)]
|
|
111
|
+
struct ConcurrentSupply has key {
|
|
112
|
+
current: Aggregator<u128>,
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
#[resource_group_member(group = aptos_framework::object::ObjectGroup)]
|
|
116
|
+
/// Metadata of a Fungible asset
|
|
117
|
+
struct Metadata has key, copy, drop {
|
|
118
|
+
/// Name of the fungible metadata, i.e., "USDT".
|
|
119
|
+
name: String,
|
|
120
|
+
/// Symbol of the fungible metadata, usually a shorter version of the name.
|
|
121
|
+
/// For example, Singapore Dollar is SGD.
|
|
122
|
+
symbol: String,
|
|
123
|
+
/// Number of decimals used for display purposes.
|
|
124
|
+
/// For example, if `decimals` equals `2`, a balance of `505` coins should
|
|
125
|
+
/// be displayed to a user as `5.05` (`505 / 10 ** 2`).
|
|
126
|
+
decimals: u8,
|
|
127
|
+
/// The Uniform Resource Identifier (uri) pointing to an image that can be used as the icon for this fungible
|
|
128
|
+
/// asset.
|
|
129
|
+
icon_uri: String,
|
|
130
|
+
/// The Uniform Resource Identifier (uri) pointing to the website for the fungible asset.
|
|
131
|
+
project_uri: String,
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
#[resource_group_member(group = aptos_framework::object::ObjectGroup)]
|
|
135
|
+
/// Defines a `FungibleAsset`, such that all `FungibleStore`s stores are untransferable at
|
|
136
|
+
/// the object layer.
|
|
137
|
+
struct Untransferable has key {}
|
|
138
|
+
|
|
139
|
+
#[resource_group_member(group = aptos_framework::object::ObjectGroup)]
|
|
140
|
+
/// The store object that holds fungible assets of a specific type associated with an account.
|
|
141
|
+
struct FungibleStore has key {
|
|
142
|
+
/// The address of the base metadata object.
|
|
143
|
+
metadata: Object<Metadata>,
|
|
144
|
+
/// The balance of the fungible metadata.
|
|
145
|
+
balance: u64,
|
|
146
|
+
/// If true, owner transfer is disabled that only `TransferRef` can move in/out from this store.
|
|
147
|
+
frozen: bool,
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
#[resource_group_member(group = aptos_framework::object::ObjectGroup)]
|
|
151
|
+
struct DispatchFunctionStore has key {
|
|
152
|
+
withdraw_function: Option<FunctionInfo>,
|
|
153
|
+
deposit_function: Option<FunctionInfo>,
|
|
154
|
+
derived_balance_function: Option<FunctionInfo>,
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
#[resource_group_member(group = aptos_framework::object::ObjectGroup)]
|
|
158
|
+
struct DeriveSupply has key {
|
|
159
|
+
dispatch_function: Option<FunctionInfo>
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
#[resource_group_member(group = aptos_framework::object::ObjectGroup)]
|
|
163
|
+
/// The store object that holds concurrent fungible asset balance.
|
|
164
|
+
struct ConcurrentFungibleBalance has key {
|
|
165
|
+
/// The balance of the fungible metadata.
|
|
166
|
+
balance: Aggregator<u64>,
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/// FungibleAsset can be passed into function for type safety and to guarantee a specific amount.
|
|
170
|
+
/// FungibleAsset is ephemeral and cannot be stored directly. It must be deposited back into a store.
|
|
171
|
+
struct FungibleAsset {
|
|
172
|
+
metadata: Object<Metadata>,
|
|
173
|
+
amount: u64,
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/// MintRef can be used to mint the fungible asset into an account's store.
|
|
177
|
+
struct MintRef has drop, store {
|
|
178
|
+
metadata: Object<Metadata>
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/// TransferRef can be used to allow or disallow the owner of fungible assets from transferring the asset
|
|
182
|
+
/// and allow the holder of TransferRef to transfer fungible assets from any account.
|
|
183
|
+
struct TransferRef has drop, store {
|
|
184
|
+
metadata: Object<Metadata>
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/// BurnRef can be used to burn fungible assets from a given holder account.
|
|
188
|
+
struct BurnRef has drop, store {
|
|
189
|
+
metadata: Object<Metadata>
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/// MutateMetadataRef can be used to directly modify the fungible asset's Metadata.
|
|
193
|
+
struct MutateMetadataRef has drop, store {
|
|
194
|
+
metadata: Object<Metadata>
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
#[event]
|
|
198
|
+
/// Emitted when fungible assets are deposited into a store.
|
|
199
|
+
struct Deposit has drop, store {
|
|
200
|
+
store: address,
|
|
201
|
+
amount: u64,
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
#[event]
|
|
205
|
+
/// Emitted when fungible assets are withdrawn from a store.
|
|
206
|
+
struct Withdraw has drop, store {
|
|
207
|
+
store: address,
|
|
208
|
+
amount: u64,
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
#[event]
|
|
212
|
+
/// Emitted when a store's frozen status is updated.
|
|
213
|
+
struct Frozen has drop, store {
|
|
214
|
+
store: address,
|
|
215
|
+
frozen: bool,
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
inline fun default_to_concurrent_fungible_supply(): bool {
|
|
219
|
+
features::concurrent_fungible_assets_enabled()
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
inline fun allow_upgrade_to_concurrent_fungible_balance(): bool {
|
|
223
|
+
features::concurrent_fungible_balance_enabled()
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
inline fun default_to_concurrent_fungible_balance(): bool {
|
|
227
|
+
features::default_to_concurrent_fungible_balance_enabled()
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/// Make an existing object fungible by adding the Metadata resource.
|
|
231
|
+
/// This returns the capabilities to mint, burn, and transfer.
|
|
232
|
+
/// maximum_supply defines the behavior of maximum supply when monitoring:
|
|
233
|
+
/// - option::none(): Monitoring unlimited supply
|
|
234
|
+
/// (width of the field - MAX_U128 is the implicit maximum supply)
|
|
235
|
+
/// if option::some(MAX_U128) is used, it is treated as unlimited supply.
|
|
236
|
+
/// - option::some(max): Monitoring fixed supply with `max` as the maximum supply.
|
|
237
|
+
public fun add_fungibility(
|
|
238
|
+
constructor_ref: &ConstructorRef,
|
|
239
|
+
maximum_supply: Option<u128>,
|
|
240
|
+
name: String,
|
|
241
|
+
symbol: String,
|
|
242
|
+
decimals: u8,
|
|
243
|
+
icon_uri: String,
|
|
244
|
+
project_uri: String,
|
|
245
|
+
): Object<Metadata> {
|
|
246
|
+
assert!(!object::can_generate_delete_ref(constructor_ref), error::invalid_argument(EOBJECT_IS_DELETABLE));
|
|
247
|
+
let metadata_object_signer = &object::generate_signer(constructor_ref);
|
|
248
|
+
assert!(string::length(&name) <= MAX_NAME_LENGTH, error::out_of_range(ENAME_TOO_LONG));
|
|
249
|
+
assert!(string::length(&symbol) <= MAX_SYMBOL_LENGTH, error::out_of_range(ESYMBOL_TOO_LONG));
|
|
250
|
+
assert!(decimals <= MAX_DECIMALS, error::out_of_range(EDECIMALS_TOO_LARGE));
|
|
251
|
+
assert!(string::length(&icon_uri) <= MAX_URI_LENGTH, error::out_of_range(EURI_TOO_LONG));
|
|
252
|
+
assert!(string::length(&project_uri) <= MAX_URI_LENGTH, error::out_of_range(EURI_TOO_LONG));
|
|
253
|
+
move_to(metadata_object_signer,
|
|
254
|
+
Metadata {
|
|
255
|
+
name,
|
|
256
|
+
symbol,
|
|
257
|
+
decimals,
|
|
258
|
+
icon_uri,
|
|
259
|
+
project_uri,
|
|
260
|
+
}
|
|
261
|
+
);
|
|
262
|
+
|
|
263
|
+
if (default_to_concurrent_fungible_supply()) {
|
|
264
|
+
let unlimited = option::is_none(&maximum_supply);
|
|
265
|
+
move_to(metadata_object_signer, ConcurrentSupply {
|
|
266
|
+
current: if (unlimited) {
|
|
267
|
+
aggregator_v2::create_unbounded_aggregator()
|
|
268
|
+
} else {
|
|
269
|
+
aggregator_v2::create_aggregator(option::extract(&mut maximum_supply))
|
|
270
|
+
},
|
|
271
|
+
});
|
|
272
|
+
} else {
|
|
273
|
+
move_to(metadata_object_signer, Supply {
|
|
274
|
+
current: 0,
|
|
275
|
+
maximum: maximum_supply
|
|
276
|
+
});
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
object::object_from_constructor_ref<Metadata>(constructor_ref)
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/// Set that only untransferable stores can be created for this fungible asset.
|
|
283
|
+
public fun set_untransferable(constructor_ref: &ConstructorRef) {
|
|
284
|
+
let metadata_addr = object::address_from_constructor_ref(constructor_ref);
|
|
285
|
+
assert!(exists<Metadata>(metadata_addr), error::not_found(EFUNGIBLE_METADATA_EXISTENCE));
|
|
286
|
+
let metadata_signer = &object::generate_signer(constructor_ref);
|
|
287
|
+
move_to(metadata_signer, Untransferable {});
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
#[view]
|
|
292
|
+
/// Returns true if the FA is untransferable.
|
|
293
|
+
public fun is_untransferable<T: key>(metadata: Object<T>): bool {
|
|
294
|
+
exists<Untransferable>(object::object_address(&metadata))
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/// Create a fungible asset store whose transfer rule would be overloaded by the provided function.
|
|
298
|
+
public(friend) fun register_dispatch_functions(
|
|
299
|
+
constructor_ref: &ConstructorRef,
|
|
300
|
+
withdraw_function: Option<FunctionInfo>,
|
|
301
|
+
deposit_function: Option<FunctionInfo>,
|
|
302
|
+
derived_balance_function: Option<FunctionInfo>,
|
|
303
|
+
) {
|
|
304
|
+
// Verify that caller type matches callee type so wrongly typed function cannot be registered.
|
|
305
|
+
option::for_each_ref(&withdraw_function, |withdraw_function| {
|
|
306
|
+
let dispatcher_withdraw_function_info = function_info::new_function_info_from_address(
|
|
307
|
+
@aptos_framework,
|
|
308
|
+
string::utf8(b"dispatchable_fungible_asset"),
|
|
309
|
+
string::utf8(b"dispatchable_withdraw"),
|
|
310
|
+
);
|
|
311
|
+
|
|
312
|
+
assert!(
|
|
313
|
+
function_info::check_dispatch_type_compatibility(
|
|
314
|
+
&dispatcher_withdraw_function_info,
|
|
315
|
+
withdraw_function
|
|
316
|
+
),
|
|
317
|
+
error::invalid_argument(
|
|
318
|
+
EWITHDRAW_FUNCTION_SIGNATURE_MISMATCH
|
|
319
|
+
)
|
|
320
|
+
);
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
option::for_each_ref(&deposit_function, |deposit_function| {
|
|
324
|
+
let dispatcher_deposit_function_info = function_info::new_function_info_from_address(
|
|
325
|
+
@aptos_framework,
|
|
326
|
+
string::utf8(b"dispatchable_fungible_asset"),
|
|
327
|
+
string::utf8(b"dispatchable_deposit"),
|
|
328
|
+
);
|
|
329
|
+
// Verify that caller type matches callee type so wrongly typed function cannot be registered.
|
|
330
|
+
assert!(
|
|
331
|
+
function_info::check_dispatch_type_compatibility(
|
|
332
|
+
&dispatcher_deposit_function_info,
|
|
333
|
+
deposit_function
|
|
334
|
+
),
|
|
335
|
+
error::invalid_argument(
|
|
336
|
+
EDEPOSIT_FUNCTION_SIGNATURE_MISMATCH
|
|
337
|
+
)
|
|
338
|
+
);
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
option::for_each_ref(&derived_balance_function, |balance_function| {
|
|
342
|
+
let dispatcher_derived_balance_function_info = function_info::new_function_info_from_address(
|
|
343
|
+
@aptos_framework,
|
|
344
|
+
string::utf8(b"dispatchable_fungible_asset"),
|
|
345
|
+
string::utf8(b"dispatchable_derived_balance"),
|
|
346
|
+
);
|
|
347
|
+
// Verify that caller type matches callee type so wrongly typed function cannot be registered.
|
|
348
|
+
assert!(
|
|
349
|
+
function_info::check_dispatch_type_compatibility(
|
|
350
|
+
&dispatcher_derived_balance_function_info,
|
|
351
|
+
balance_function
|
|
352
|
+
),
|
|
353
|
+
error::invalid_argument(
|
|
354
|
+
EDERIVED_BALANCE_FUNCTION_SIGNATURE_MISMATCH
|
|
355
|
+
)
|
|
356
|
+
);
|
|
357
|
+
});
|
|
358
|
+
register_dispatch_function_sanity_check(constructor_ref);
|
|
359
|
+
assert!(
|
|
360
|
+
!exists<DispatchFunctionStore>(
|
|
361
|
+
object::address_from_constructor_ref(constructor_ref)
|
|
362
|
+
),
|
|
363
|
+
error::already_exists(EALREADY_REGISTERED)
|
|
364
|
+
);
|
|
365
|
+
|
|
366
|
+
let store_obj = &object::generate_signer(constructor_ref);
|
|
367
|
+
|
|
368
|
+
// Store the overload function hook.
|
|
369
|
+
move_to<DispatchFunctionStore>(
|
|
370
|
+
store_obj,
|
|
371
|
+
DispatchFunctionStore {
|
|
372
|
+
withdraw_function,
|
|
373
|
+
deposit_function,
|
|
374
|
+
derived_balance_function,
|
|
375
|
+
}
|
|
376
|
+
);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/// Define the derived supply dispatch with the provided function.
|
|
380
|
+
public(friend) fun register_derive_supply_dispatch_function(
|
|
381
|
+
constructor_ref: &ConstructorRef,
|
|
382
|
+
dispatch_function: Option<FunctionInfo>
|
|
383
|
+
) {
|
|
384
|
+
// Verify that caller type matches callee type so wrongly typed function cannot be registered.
|
|
385
|
+
option::for_each_ref(&dispatch_function, |supply_function| {
|
|
386
|
+
let function_info = function_info::new_function_info_from_address(
|
|
387
|
+
@aptos_framework,
|
|
388
|
+
string::utf8(b"dispatchable_fungible_asset"),
|
|
389
|
+
string::utf8(b"dispatchable_derived_supply"),
|
|
390
|
+
);
|
|
391
|
+
// Verify that caller type matches callee type so wrongly typed function cannot be registered.
|
|
392
|
+
assert!(
|
|
393
|
+
function_info::check_dispatch_type_compatibility(
|
|
394
|
+
&function_info,
|
|
395
|
+
supply_function
|
|
396
|
+
),
|
|
397
|
+
error::invalid_argument(
|
|
398
|
+
EDERIVED_SUPPLY_FUNCTION_SIGNATURE_MISMATCH
|
|
399
|
+
)
|
|
400
|
+
);
|
|
401
|
+
});
|
|
402
|
+
register_dispatch_function_sanity_check(constructor_ref);
|
|
403
|
+
assert!(
|
|
404
|
+
!exists<DeriveSupply>(
|
|
405
|
+
object::address_from_constructor_ref(constructor_ref)
|
|
406
|
+
),
|
|
407
|
+
error::already_exists(EALREADY_REGISTERED)
|
|
408
|
+
);
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
let store_obj = &object::generate_signer(constructor_ref);
|
|
412
|
+
|
|
413
|
+
// Store the overload function hook.
|
|
414
|
+
move_to<DeriveSupply>(
|
|
415
|
+
store_obj,
|
|
416
|
+
DeriveSupply {
|
|
417
|
+
dispatch_function
|
|
418
|
+
}
|
|
419
|
+
);
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
/// Check the requirements for registering a dispatchable function.
|
|
423
|
+
inline fun register_dispatch_function_sanity_check(
|
|
424
|
+
constructor_ref: &ConstructorRef,
|
|
425
|
+
) {
|
|
426
|
+
// Cannot register hook for APT.
|
|
427
|
+
assert!(
|
|
428
|
+
object::address_from_constructor_ref(constructor_ref) != @aptos_fungible_asset,
|
|
429
|
+
error::permission_denied(EAPT_NOT_DISPATCHABLE)
|
|
430
|
+
);
|
|
431
|
+
assert!(
|
|
432
|
+
!object::can_generate_delete_ref(constructor_ref),
|
|
433
|
+
error::invalid_argument(EOBJECT_IS_DELETABLE)
|
|
434
|
+
);
|
|
435
|
+
assert!(
|
|
436
|
+
exists<Metadata>(
|
|
437
|
+
object::address_from_constructor_ref(constructor_ref)
|
|
438
|
+
),
|
|
439
|
+
error::not_found(EFUNGIBLE_METADATA_EXISTENCE),
|
|
440
|
+
);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/// Creates a mint ref that can be used to mint fungible assets from the given fungible object's constructor ref.
|
|
444
|
+
/// This can only be called at object creation time as constructor_ref is only available then.
|
|
445
|
+
public fun generate_mint_ref(constructor_ref: &ConstructorRef): MintRef {
|
|
446
|
+
let metadata = object::object_from_constructor_ref<Metadata>(constructor_ref);
|
|
447
|
+
MintRef { metadata }
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/// Creates a burn ref that can be used to burn fungible assets from the given fungible object's constructor ref.
|
|
451
|
+
/// This can only be called at object creation time as constructor_ref is only available then.
|
|
452
|
+
public fun generate_burn_ref(constructor_ref: &ConstructorRef): BurnRef {
|
|
453
|
+
let metadata = object::object_from_constructor_ref<Metadata>(constructor_ref);
|
|
454
|
+
BurnRef { metadata }
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
/// Creates a transfer ref that can be used to freeze/unfreeze/transfer fungible assets from the given fungible
|
|
458
|
+
/// object's constructor ref.
|
|
459
|
+
/// This can only be called at object creation time as constructor_ref is only available then.
|
|
460
|
+
public fun generate_transfer_ref(constructor_ref: &ConstructorRef): TransferRef {
|
|
461
|
+
let metadata = object::object_from_constructor_ref<Metadata>(constructor_ref);
|
|
462
|
+
TransferRef { metadata }
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/// Creates a mutate metadata ref that can be used to change the metadata information of fungible assets from the
|
|
466
|
+
/// given fungible object's constructor ref.
|
|
467
|
+
/// This can only be called at object creation time as constructor_ref is only available then.
|
|
468
|
+
public fun generate_mutate_metadata_ref(constructor_ref: &ConstructorRef): MutateMetadataRef {
|
|
469
|
+
let metadata = object::object_from_constructor_ref<Metadata>(constructor_ref);
|
|
470
|
+
MutateMetadataRef { metadata }
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
#[view]
|
|
474
|
+
/// Get the current supply from the `metadata` object.
|
|
475
|
+
public fun supply<T: key>(metadata: Object<T>): Option<u128> acquires Supply, ConcurrentSupply {
|
|
476
|
+
let metadata_address = object::object_address(&metadata);
|
|
477
|
+
if (exists<ConcurrentSupply>(metadata_address)) {
|
|
478
|
+
let supply = borrow_global<ConcurrentSupply>(metadata_address);
|
|
479
|
+
option::some(aggregator_v2::read(&supply.current))
|
|
480
|
+
} else if (exists<Supply>(metadata_address)) {
|
|
481
|
+
let supply = borrow_global<Supply>(metadata_address);
|
|
482
|
+
option::some(supply.current)
|
|
483
|
+
} else {
|
|
484
|
+
option::none()
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
#[view]
|
|
489
|
+
/// Get the maximum supply from the `metadata` object.
|
|
490
|
+
/// If supply is unlimited (or set explicitly to MAX_U128), none is returned
|
|
491
|
+
public fun maximum<T: key>(metadata: Object<T>): Option<u128> acquires Supply, ConcurrentSupply {
|
|
492
|
+
let metadata_address = object::object_address(&metadata);
|
|
493
|
+
if (exists<ConcurrentSupply>(metadata_address)) {
|
|
494
|
+
let supply = borrow_global<ConcurrentSupply>(metadata_address);
|
|
495
|
+
let max_value = aggregator_v2::max_value(&supply.current);
|
|
496
|
+
if (max_value == MAX_U128) {
|
|
497
|
+
option::none()
|
|
498
|
+
} else {
|
|
499
|
+
option::some(max_value)
|
|
500
|
+
}
|
|
501
|
+
} else if (exists<Supply>(metadata_address)) {
|
|
502
|
+
let supply = borrow_global<Supply>(metadata_address);
|
|
503
|
+
supply.maximum
|
|
504
|
+
} else {
|
|
505
|
+
option::none()
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
#[view]
|
|
510
|
+
/// Get the name of the fungible asset from the `metadata` object.
|
|
511
|
+
public fun name<T: key>(metadata: Object<T>): String acquires Metadata {
|
|
512
|
+
borrow_fungible_metadata(&metadata).name
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
#[view]
|
|
516
|
+
/// Get the symbol of the fungible asset from the `metadata` object.
|
|
517
|
+
public fun symbol<T: key>(metadata: Object<T>): String acquires Metadata {
|
|
518
|
+
borrow_fungible_metadata(&metadata).symbol
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
#[view]
|
|
522
|
+
/// Get the decimals from the `metadata` object.
|
|
523
|
+
public fun decimals<T: key>(metadata: Object<T>): u8 acquires Metadata {
|
|
524
|
+
borrow_fungible_metadata(&metadata).decimals
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
#[view]
|
|
528
|
+
/// Get the icon uri from the `metadata` object.
|
|
529
|
+
public fun icon_uri<T: key>(metadata: Object<T>): String acquires Metadata {
|
|
530
|
+
borrow_fungible_metadata(&metadata).icon_uri
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
#[view]
|
|
534
|
+
/// Get the project uri from the `metadata` object.
|
|
535
|
+
public fun project_uri<T: key>(metadata: Object<T>): String acquires Metadata {
|
|
536
|
+
borrow_fungible_metadata(&metadata).project_uri
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
#[view]
|
|
540
|
+
/// Get the metadata struct from the `metadata` object.
|
|
541
|
+
public fun metadata<T: key>(metadata: Object<T>): Metadata acquires Metadata {
|
|
542
|
+
*borrow_fungible_metadata(&metadata)
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
#[view]
|
|
546
|
+
/// Return whether the provided address has a store initialized.
|
|
547
|
+
public fun store_exists(store: address): bool {
|
|
548
|
+
store_exists_inline(store)
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
/// Return whether the provided address has a store initialized.
|
|
552
|
+
inline fun store_exists_inline(store: address): bool {
|
|
553
|
+
exists<FungibleStore>(store)
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
/// Return whether the provided address has a concurrent fungible balance initialized,
|
|
557
|
+
/// at the fungible store address.
|
|
558
|
+
inline fun concurrent_fungible_balance_exists_inline(store: address): bool {
|
|
559
|
+
exists<ConcurrentFungibleBalance>(store)
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
/// Return the underlying metadata object
|
|
563
|
+
public fun metadata_from_asset(fa: &FungibleAsset): Object<Metadata> {
|
|
564
|
+
fa.metadata
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
#[view]
|
|
568
|
+
/// Return the underlying metadata object.
|
|
569
|
+
public fun store_metadata<T: key>(store: Object<T>): Object<Metadata> acquires FungibleStore {
|
|
570
|
+
borrow_store_resource(&store).metadata
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
/// Return the `amount` of a given fungible asset.
|
|
574
|
+
public fun amount(fa: &FungibleAsset): u64 {
|
|
575
|
+
fa.amount
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
#[view]
|
|
579
|
+
/// Get the balance of a given store.
|
|
580
|
+
public fun balance<T: key>(store: Object<T>): u64 acquires FungibleStore, ConcurrentFungibleBalance {
|
|
581
|
+
let store_addr = object::object_address(&store);
|
|
582
|
+
if (store_exists_inline(store_addr)) {
|
|
583
|
+
let store_balance = borrow_store_resource(&store).balance;
|
|
584
|
+
if (store_balance == 0 && concurrent_fungible_balance_exists_inline(store_addr)) {
|
|
585
|
+
let balance_resource = borrow_global<ConcurrentFungibleBalance>(store_addr);
|
|
586
|
+
aggregator_v2::read(&balance_resource.balance)
|
|
587
|
+
} else {
|
|
588
|
+
store_balance
|
|
589
|
+
}
|
|
590
|
+
} else {
|
|
591
|
+
0
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
#[view]
|
|
596
|
+
/// Check whether the balance of a given store is >= `amount`.
|
|
597
|
+
public fun is_balance_at_least<T: key>(store: Object<T>, amount: u64): bool acquires FungibleStore, ConcurrentFungibleBalance {
|
|
598
|
+
let store_addr = object::object_address(&store);
|
|
599
|
+
is_address_balance_at_least(store_addr, amount)
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
/// Check whether the balance of a given store is >= `amount`.
|
|
603
|
+
public(friend) fun is_address_balance_at_least(store_addr: address, amount: u64): bool acquires FungibleStore, ConcurrentFungibleBalance {
|
|
604
|
+
if (store_exists_inline(store_addr)) {
|
|
605
|
+
let store_balance = borrow_global<FungibleStore>(store_addr).balance;
|
|
606
|
+
if (store_balance == 0 && concurrent_fungible_balance_exists_inline(store_addr)) {
|
|
607
|
+
let balance_resource = borrow_global<ConcurrentFungibleBalance>(store_addr);
|
|
608
|
+
aggregator_v2::is_at_least(&balance_resource.balance, amount)
|
|
609
|
+
} else {
|
|
610
|
+
store_balance >= amount
|
|
611
|
+
}
|
|
612
|
+
} else {
|
|
613
|
+
amount == 0
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
#[view]
|
|
618
|
+
/// Return whether a store is frozen.
|
|
619
|
+
///
|
|
620
|
+
/// If the store has not been created, we default to returning false so deposits can be sent to it.
|
|
621
|
+
public fun is_frozen<T: key>(store: Object<T>): bool acquires FungibleStore {
|
|
622
|
+
let store_addr = object::object_address(&store);
|
|
623
|
+
store_exists_inline(store_addr) && borrow_global<FungibleStore>(store_addr).frozen
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
#[view]
|
|
627
|
+
/// Return whether a fungible asset type is dispatchable.
|
|
628
|
+
public fun is_store_dispatchable<T: key>(store: Object<T>): bool acquires FungibleStore {
|
|
629
|
+
let fa_store = borrow_store_resource(&store);
|
|
630
|
+
let metadata_addr = object::object_address(&fa_store.metadata);
|
|
631
|
+
exists<DispatchFunctionStore>(metadata_addr)
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
public fun deposit_dispatch_function<T: key>(store: Object<T>): Option<FunctionInfo> acquires FungibleStore, DispatchFunctionStore {
|
|
635
|
+
let fa_store = borrow_store_resource(&store);
|
|
636
|
+
let metadata_addr = object::object_address(&fa_store.metadata);
|
|
637
|
+
if(exists<DispatchFunctionStore>(metadata_addr)) {
|
|
638
|
+
borrow_global<DispatchFunctionStore>(metadata_addr).deposit_function
|
|
639
|
+
} else {
|
|
640
|
+
option::none()
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
fun has_deposit_dispatch_function(metadata: Object<Metadata>): bool acquires DispatchFunctionStore {
|
|
645
|
+
let metadata_addr = object::object_address(&metadata);
|
|
646
|
+
// Short circuit on APT for better perf
|
|
647
|
+
if(metadata_addr != @aptos_fungible_asset && exists<DispatchFunctionStore>(metadata_addr)) {
|
|
648
|
+
option::is_some(&borrow_global<DispatchFunctionStore>(metadata_addr).deposit_function)
|
|
649
|
+
} else {
|
|
650
|
+
false
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
public fun withdraw_dispatch_function<T: key>(store: Object<T>): Option<FunctionInfo> acquires FungibleStore, DispatchFunctionStore {
|
|
655
|
+
let fa_store = borrow_store_resource(&store);
|
|
656
|
+
let metadata_addr = object::object_address(&fa_store.metadata);
|
|
657
|
+
if(exists<DispatchFunctionStore>(metadata_addr)) {
|
|
658
|
+
borrow_global<DispatchFunctionStore>(metadata_addr).withdraw_function
|
|
659
|
+
} else {
|
|
660
|
+
option::none()
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
fun has_withdraw_dispatch_function(metadata: Object<Metadata>): bool acquires DispatchFunctionStore {
|
|
665
|
+
let metadata_addr = object::object_address(&metadata);
|
|
666
|
+
// Short circuit on APT for better perf
|
|
667
|
+
if (metadata_addr != @aptos_fungible_asset && exists<DispatchFunctionStore>(metadata_addr)) {
|
|
668
|
+
option::is_some(&borrow_global<DispatchFunctionStore>(metadata_addr).withdraw_function)
|
|
669
|
+
} else {
|
|
670
|
+
false
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
public(friend) fun derived_balance_dispatch_function<T: key>(store: Object<T>): Option<FunctionInfo> acquires FungibleStore, DispatchFunctionStore {
|
|
675
|
+
let fa_store = borrow_store_resource(&store);
|
|
676
|
+
let metadata_addr = object::object_address(&fa_store.metadata);
|
|
677
|
+
if (exists<DispatchFunctionStore>(metadata_addr)) {
|
|
678
|
+
borrow_global<DispatchFunctionStore>(metadata_addr).derived_balance_function
|
|
679
|
+
} else {
|
|
680
|
+
option::none()
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
public(friend) fun derived_supply_dispatch_function<T: key>(metadata: Object<T>): Option<FunctionInfo> acquires DeriveSupply {
|
|
685
|
+
let metadata_addr = object::object_address(&metadata);
|
|
686
|
+
if (exists<DeriveSupply>(metadata_addr)) {
|
|
687
|
+
borrow_global<DeriveSupply>(metadata_addr).dispatch_function
|
|
688
|
+
} else {
|
|
689
|
+
option::none()
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
public fun asset_metadata(fa: &FungibleAsset): Object<Metadata> {
|
|
694
|
+
fa.metadata
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
/// Get the underlying metadata object from the `MintRef`.
|
|
698
|
+
public fun mint_ref_metadata(ref: &MintRef): Object<Metadata> {
|
|
699
|
+
ref.metadata
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
/// Get the underlying metadata object from the `TransferRef`.
|
|
703
|
+
public fun transfer_ref_metadata(ref: &TransferRef): Object<Metadata> {
|
|
704
|
+
ref.metadata
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
/// Get the underlying metadata object from the `BurnRef`.
|
|
708
|
+
public fun burn_ref_metadata(ref: &BurnRef): Object<Metadata> {
|
|
709
|
+
ref.metadata
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
/// Get the underlying metadata object from the `MutateMetadataRef`.
|
|
713
|
+
public fun object_from_metadata_ref(ref: &MutateMetadataRef): Object<Metadata> {
|
|
714
|
+
ref.metadata
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
/// Transfer an `amount` of fungible asset from `from_store`, which should be owned by `sender`, to `receiver`.
|
|
718
|
+
/// Note: it does not move the underlying object.
|
|
719
|
+
public entry fun transfer<T: key>(
|
|
720
|
+
sender: &signer,
|
|
721
|
+
from: Object<T>,
|
|
722
|
+
to: Object<T>,
|
|
723
|
+
amount: u64,
|
|
724
|
+
) acquires FungibleStore, DispatchFunctionStore, ConcurrentFungibleBalance {
|
|
725
|
+
let fa = withdraw(sender, from, amount);
|
|
726
|
+
deposit(to, fa);
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
/// Allow an object to hold a store for fungible assets.
|
|
730
|
+
/// Applications can use this to create multiple stores for isolating fungible assets for different purposes.
|
|
731
|
+
public fun create_store<T: key>(
|
|
732
|
+
constructor_ref: &ConstructorRef,
|
|
733
|
+
metadata: Object<T>,
|
|
734
|
+
): Object<FungibleStore> {
|
|
735
|
+
let store_obj = &object::generate_signer(constructor_ref);
|
|
736
|
+
move_to(store_obj, FungibleStore {
|
|
737
|
+
metadata: object::convert(metadata),
|
|
738
|
+
balance: 0,
|
|
739
|
+
frozen: false,
|
|
740
|
+
});
|
|
741
|
+
|
|
742
|
+
if (is_untransferable(metadata)) {
|
|
743
|
+
object::set_untransferable(constructor_ref);
|
|
744
|
+
};
|
|
745
|
+
|
|
746
|
+
if (default_to_concurrent_fungible_balance()) {
|
|
747
|
+
move_to(store_obj, ConcurrentFungibleBalance {
|
|
748
|
+
balance: aggregator_v2::create_unbounded_aggregator(),
|
|
749
|
+
});
|
|
750
|
+
};
|
|
751
|
+
|
|
752
|
+
object::object_from_constructor_ref<FungibleStore>(constructor_ref)
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
/// Used to delete a store. Requires the store to be completely empty prior to removing it
|
|
756
|
+
public fun remove_store(delete_ref: &DeleteRef) acquires FungibleStore, FungibleAssetEvents, ConcurrentFungibleBalance {
|
|
757
|
+
let store = &object::object_from_delete_ref<FungibleStore>(delete_ref);
|
|
758
|
+
let addr = object::object_address(store);
|
|
759
|
+
let FungibleStore { metadata: _, balance, frozen: _ }
|
|
760
|
+
= move_from<FungibleStore>(addr);
|
|
761
|
+
assert!(balance == 0, error::permission_denied(EBALANCE_IS_NOT_ZERO));
|
|
762
|
+
|
|
763
|
+
if (concurrent_fungible_balance_exists_inline(addr)) {
|
|
764
|
+
let ConcurrentFungibleBalance { balance } = move_from<ConcurrentFungibleBalance>(addr);
|
|
765
|
+
assert!(aggregator_v2::read(&balance) == 0, error::permission_denied(EBALANCE_IS_NOT_ZERO));
|
|
766
|
+
};
|
|
767
|
+
|
|
768
|
+
// Cleanup deprecated event handles if exist.
|
|
769
|
+
if (exists<FungibleAssetEvents>(addr)) {
|
|
770
|
+
let FungibleAssetEvents {
|
|
771
|
+
deposit_events,
|
|
772
|
+
withdraw_events,
|
|
773
|
+
frozen_events,
|
|
774
|
+
} = move_from<FungibleAssetEvents>(addr);
|
|
775
|
+
event::destroy_handle(deposit_events);
|
|
776
|
+
event::destroy_handle(withdraw_events);
|
|
777
|
+
event::destroy_handle(frozen_events);
|
|
778
|
+
};
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
/// Withdraw `amount` of the fungible asset from `store` by the owner.
|
|
782
|
+
public fun withdraw<T: key>(
|
|
783
|
+
owner: &signer,
|
|
784
|
+
store: Object<T>,
|
|
785
|
+
amount: u64,
|
|
786
|
+
): FungibleAsset acquires FungibleStore, DispatchFunctionStore, ConcurrentFungibleBalance {
|
|
787
|
+
withdraw_sanity_check(owner, store, true);
|
|
788
|
+
withdraw_internal(object::object_address(&store), amount)
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
/// Check the permission for withdraw operation.
|
|
792
|
+
public(friend) fun withdraw_sanity_check<T: key>(
|
|
793
|
+
owner: &signer,
|
|
794
|
+
store: Object<T>,
|
|
795
|
+
abort_on_dispatch: bool,
|
|
796
|
+
) acquires FungibleStore, DispatchFunctionStore {
|
|
797
|
+
assert!(object::owns(store, signer::address_of(owner)), error::permission_denied(ENOT_STORE_OWNER));
|
|
798
|
+
let fa_store = borrow_store_resource(&store);
|
|
799
|
+
assert!(
|
|
800
|
+
!abort_on_dispatch || !has_withdraw_dispatch_function(fa_store.metadata),
|
|
801
|
+
error::invalid_argument(EINVALID_DISPATCHABLE_OPERATIONS)
|
|
802
|
+
);
|
|
803
|
+
assert!(!fa_store.frozen, error::permission_denied(ESTORE_IS_FROZEN));
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
/// Deposit `amount` of the fungible asset to `store`.
|
|
807
|
+
public fun deposit_sanity_check<T: key>(
|
|
808
|
+
store: Object<T>,
|
|
809
|
+
abort_on_dispatch: bool
|
|
810
|
+
) acquires FungibleStore, DispatchFunctionStore {
|
|
811
|
+
let fa_store = borrow_store_resource(&store);
|
|
812
|
+
assert!(
|
|
813
|
+
!abort_on_dispatch || !has_deposit_dispatch_function(fa_store.metadata),
|
|
814
|
+
error::invalid_argument(EINVALID_DISPATCHABLE_OPERATIONS)
|
|
815
|
+
);
|
|
816
|
+
assert!(!fa_store.frozen, error::permission_denied(ESTORE_IS_FROZEN));
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
/// Deposit `amount` of the fungible asset to `store`.
|
|
820
|
+
public fun deposit<T: key>(store: Object<T>, fa: FungibleAsset) acquires FungibleStore, DispatchFunctionStore, ConcurrentFungibleBalance {
|
|
821
|
+
deposit_sanity_check(store, true);
|
|
822
|
+
deposit_internal(object::object_address(&store), fa);
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
/// Mint the specified `amount` of the fungible asset.
|
|
826
|
+
public fun mint(ref: &MintRef, amount: u64): FungibleAsset acquires Supply, ConcurrentSupply {
|
|
827
|
+
let metadata = ref.metadata;
|
|
828
|
+
mint_internal(metadata, amount)
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
/// CAN ONLY BE CALLED BY coin.move for migration.
|
|
832
|
+
public(friend) fun mint_internal(
|
|
833
|
+
metadata: Object<Metadata>,
|
|
834
|
+
amount: u64
|
|
835
|
+
): FungibleAsset acquires Supply, ConcurrentSupply {
|
|
836
|
+
increase_supply(&metadata, amount);
|
|
837
|
+
FungibleAsset {
|
|
838
|
+
metadata,
|
|
839
|
+
amount
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
/// Mint the specified `amount` of the fungible asset to a destination store.
|
|
844
|
+
public fun mint_to<T: key>(ref: &MintRef, store: Object<T>, amount: u64)
|
|
845
|
+
acquires FungibleStore, Supply, ConcurrentSupply, DispatchFunctionStore, ConcurrentFungibleBalance {
|
|
846
|
+
deposit_sanity_check(store, false);
|
|
847
|
+
deposit_internal(object::object_address(&store), mint(ref, amount));
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
/// Enable/disable a store's ability to do direct transfers of the fungible asset.
|
|
851
|
+
public fun set_frozen_flag<T: key>(
|
|
852
|
+
ref: &TransferRef,
|
|
853
|
+
store: Object<T>,
|
|
854
|
+
frozen: bool,
|
|
855
|
+
) acquires FungibleStore {
|
|
856
|
+
assert!(
|
|
857
|
+
ref.metadata == store_metadata(store),
|
|
858
|
+
error::invalid_argument(ETRANSFER_REF_AND_STORE_MISMATCH),
|
|
859
|
+
);
|
|
860
|
+
set_frozen_flag_internal(store, frozen)
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
public(friend) fun set_frozen_flag_internal<T: key>(
|
|
864
|
+
store: Object<T>,
|
|
865
|
+
frozen: bool
|
|
866
|
+
) acquires FungibleStore {
|
|
867
|
+
let store_addr = object::object_address(&store);
|
|
868
|
+
borrow_global_mut<FungibleStore>(store_addr).frozen = frozen;
|
|
869
|
+
|
|
870
|
+
event::emit(Frozen { store: store_addr, frozen });
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
/// Burns a fungible asset
|
|
874
|
+
public fun burn(ref: &BurnRef, fa: FungibleAsset) acquires Supply, ConcurrentSupply {
|
|
875
|
+
assert!(
|
|
876
|
+
ref.metadata == metadata_from_asset(&fa),
|
|
877
|
+
error::invalid_argument(EBURN_REF_AND_FUNGIBLE_ASSET_MISMATCH)
|
|
878
|
+
);
|
|
879
|
+
burn_internal(fa);
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
/// CAN ONLY BE CALLED BY coin.move for migration.
|
|
883
|
+
public(friend) fun burn_internal(
|
|
884
|
+
fa: FungibleAsset
|
|
885
|
+
): u64 acquires Supply, ConcurrentSupply {
|
|
886
|
+
let FungibleAsset {
|
|
887
|
+
metadata,
|
|
888
|
+
amount
|
|
889
|
+
} = fa;
|
|
890
|
+
decrease_supply(&metadata, amount);
|
|
891
|
+
amount
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
/// Burn the `amount` of the fungible asset from the given store.
|
|
895
|
+
public fun burn_from<T: key>(
|
|
896
|
+
ref: &BurnRef,
|
|
897
|
+
store: Object<T>,
|
|
898
|
+
amount: u64
|
|
899
|
+
) acquires FungibleStore, Supply, ConcurrentSupply, ConcurrentFungibleBalance {
|
|
900
|
+
// ref metadata match is checked in burn() call
|
|
901
|
+
burn(ref, withdraw_internal(object::object_address(&store), amount));
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
public(friend) fun address_burn_from(
|
|
905
|
+
ref: &BurnRef,
|
|
906
|
+
store_addr: address,
|
|
907
|
+
amount: u64
|
|
908
|
+
) acquires FungibleStore, Supply, ConcurrentSupply, ConcurrentFungibleBalance {
|
|
909
|
+
// ref metadata match is checked in burn() call
|
|
910
|
+
burn(ref, withdraw_internal(store_addr, amount));
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
/// Withdraw `amount` of the fungible asset from the `store` ignoring `frozen`.
|
|
914
|
+
public fun withdraw_with_ref<T: key>(
|
|
915
|
+
ref: &TransferRef,
|
|
916
|
+
store: Object<T>,
|
|
917
|
+
amount: u64
|
|
918
|
+
): FungibleAsset acquires FungibleStore, ConcurrentFungibleBalance {
|
|
919
|
+
assert!(
|
|
920
|
+
ref.metadata == store_metadata(store),
|
|
921
|
+
error::invalid_argument(ETRANSFER_REF_AND_STORE_MISMATCH),
|
|
922
|
+
);
|
|
923
|
+
withdraw_internal(object::object_address(&store), amount)
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
/// Deposit the fungible asset into the `store` ignoring `frozen`.
|
|
927
|
+
public fun deposit_with_ref<T: key>(
|
|
928
|
+
ref: &TransferRef,
|
|
929
|
+
store: Object<T>,
|
|
930
|
+
fa: FungibleAsset
|
|
931
|
+
) acquires FungibleStore, ConcurrentFungibleBalance {
|
|
932
|
+
assert!(
|
|
933
|
+
ref.metadata == fa.metadata,
|
|
934
|
+
error::invalid_argument(ETRANSFER_REF_AND_FUNGIBLE_ASSET_MISMATCH)
|
|
935
|
+
);
|
|
936
|
+
deposit_internal(object::object_address(&store), fa);
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
/// Transfer `amount` of the fungible asset with `TransferRef` even it is frozen.
|
|
940
|
+
public fun transfer_with_ref<T: key>(
|
|
941
|
+
transfer_ref: &TransferRef,
|
|
942
|
+
from: Object<T>,
|
|
943
|
+
to: Object<T>,
|
|
944
|
+
amount: u64,
|
|
945
|
+
) acquires FungibleStore, ConcurrentFungibleBalance {
|
|
946
|
+
let fa = withdraw_with_ref(transfer_ref, from, amount);
|
|
947
|
+
deposit_with_ref(transfer_ref, to, fa);
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
/// Mutate specified fields of the fungible asset's `Metadata`.
|
|
951
|
+
public fun mutate_metadata(
|
|
952
|
+
metadata_ref: &MutateMetadataRef,
|
|
953
|
+
name: Option<String>,
|
|
954
|
+
symbol: Option<String>,
|
|
955
|
+
decimals: Option<u8>,
|
|
956
|
+
icon_uri: Option<String>,
|
|
957
|
+
project_uri: Option<String>,
|
|
958
|
+
) acquires Metadata {
|
|
959
|
+
let metadata_address = object::object_address(&metadata_ref.metadata);
|
|
960
|
+
let mutable_metadata = borrow_global_mut<Metadata>(metadata_address);
|
|
961
|
+
|
|
962
|
+
if (option::is_some(&name)){
|
|
963
|
+
mutable_metadata.name = option::extract(&mut name);
|
|
964
|
+
};
|
|
965
|
+
if (option::is_some(&symbol)){
|
|
966
|
+
mutable_metadata.symbol = option::extract(&mut symbol);
|
|
967
|
+
};
|
|
968
|
+
if (option::is_some(&decimals)){
|
|
969
|
+
mutable_metadata.decimals = option::extract(&mut decimals);
|
|
970
|
+
};
|
|
971
|
+
if (option::is_some(&icon_uri)){
|
|
972
|
+
mutable_metadata.icon_uri = option::extract(&mut icon_uri);
|
|
973
|
+
};
|
|
974
|
+
if (option::is_some(&project_uri)){
|
|
975
|
+
mutable_metadata.project_uri = option::extract(&mut project_uri);
|
|
976
|
+
};
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
/// Create a fungible asset with zero amount.
|
|
980
|
+
/// This can be useful when starting a series of computations where the initial value is 0.
|
|
981
|
+
public fun zero<T: key>(metadata: Object<T>): FungibleAsset {
|
|
982
|
+
FungibleAsset {
|
|
983
|
+
metadata: object::convert(metadata),
|
|
984
|
+
amount: 0,
|
|
985
|
+
}
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
/// Extract a given amount from the given fungible asset and return a new one.
|
|
989
|
+
public fun extract(fungible_asset: &mut FungibleAsset, amount: u64): FungibleAsset {
|
|
990
|
+
assert!(fungible_asset.amount >= amount, error::invalid_argument(EINSUFFICIENT_BALANCE));
|
|
991
|
+
fungible_asset.amount = fungible_asset.amount - amount;
|
|
992
|
+
FungibleAsset {
|
|
993
|
+
metadata: fungible_asset.metadata,
|
|
994
|
+
amount,
|
|
995
|
+
}
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
/// "Merges" the two given fungible assets. The fungible asset passed in as `dst_fungible_asset` will have a value
|
|
999
|
+
/// equal to the sum of the two (`dst_fungible_asset` and `src_fungible_asset`).
|
|
1000
|
+
public fun merge(dst_fungible_asset: &mut FungibleAsset, src_fungible_asset: FungibleAsset) {
|
|
1001
|
+
let FungibleAsset { metadata, amount } = src_fungible_asset;
|
|
1002
|
+
assert!(metadata == dst_fungible_asset.metadata, error::invalid_argument(EFUNGIBLE_ASSET_MISMATCH));
|
|
1003
|
+
dst_fungible_asset.amount = dst_fungible_asset.amount + amount;
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
/// Destroy an empty fungible asset.
|
|
1007
|
+
public fun destroy_zero(fungible_asset: FungibleAsset) {
|
|
1008
|
+
let FungibleAsset { amount, metadata: _ } = fungible_asset;
|
|
1009
|
+
assert!(amount == 0, error::invalid_argument(EAMOUNT_IS_NOT_ZERO));
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
public(friend) fun deposit_internal(store_addr: address, fa: FungibleAsset) acquires FungibleStore, ConcurrentFungibleBalance {
|
|
1013
|
+
let FungibleAsset { metadata, amount } = fa;
|
|
1014
|
+
assert!(exists<FungibleStore>(store_addr), error::not_found(EFUNGIBLE_STORE_EXISTENCE));
|
|
1015
|
+
let store = borrow_global_mut<FungibleStore>(store_addr);
|
|
1016
|
+
assert!(metadata == store.metadata, error::invalid_argument(EFUNGIBLE_ASSET_AND_STORE_MISMATCH));
|
|
1017
|
+
|
|
1018
|
+
if (amount == 0) return;
|
|
1019
|
+
|
|
1020
|
+
if (store.balance == 0 && concurrent_fungible_balance_exists_inline(store_addr)) {
|
|
1021
|
+
let balance_resource = borrow_global_mut<ConcurrentFungibleBalance>(store_addr);
|
|
1022
|
+
aggregator_v2::add(&mut balance_resource.balance, amount);
|
|
1023
|
+
} else {
|
|
1024
|
+
store.balance = store.balance + amount;
|
|
1025
|
+
};
|
|
1026
|
+
|
|
1027
|
+
event::emit(Deposit { store: store_addr, amount });
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
/// Extract `amount` of the fungible asset from `store`.
|
|
1031
|
+
public(friend) fun withdraw_internal(
|
|
1032
|
+
store_addr: address,
|
|
1033
|
+
amount: u64,
|
|
1034
|
+
): FungibleAsset acquires FungibleStore, ConcurrentFungibleBalance {
|
|
1035
|
+
assert!(exists<FungibleStore>(store_addr), error::not_found(EFUNGIBLE_STORE_EXISTENCE));
|
|
1036
|
+
|
|
1037
|
+
let store = borrow_global_mut<FungibleStore>(store_addr);
|
|
1038
|
+
let metadata = store.metadata;
|
|
1039
|
+
if (amount != 0) {
|
|
1040
|
+
if (store.balance == 0 && concurrent_fungible_balance_exists_inline(store_addr)) {
|
|
1041
|
+
let balance_resource = borrow_global_mut<ConcurrentFungibleBalance>(store_addr);
|
|
1042
|
+
assert!(
|
|
1043
|
+
aggregator_v2::try_sub(&mut balance_resource.balance, amount),
|
|
1044
|
+
error::invalid_argument(EINSUFFICIENT_BALANCE)
|
|
1045
|
+
);
|
|
1046
|
+
} else {
|
|
1047
|
+
assert!(store.balance >= amount, error::invalid_argument(EINSUFFICIENT_BALANCE));
|
|
1048
|
+
store.balance = store.balance - amount;
|
|
1049
|
+
};
|
|
1050
|
+
|
|
1051
|
+
event::emit<Withdraw>(Withdraw { store: store_addr, amount });
|
|
1052
|
+
};
|
|
1053
|
+
FungibleAsset { metadata, amount }
|
|
1054
|
+
}
|
|
1055
|
+
|
|
1056
|
+
/// Increase the supply of a fungible asset by minting.
|
|
1057
|
+
fun increase_supply<T: key>(metadata: &Object<T>, amount: u64) acquires Supply, ConcurrentSupply {
|
|
1058
|
+
if (amount == 0) {
|
|
1059
|
+
return
|
|
1060
|
+
};
|
|
1061
|
+
let metadata_address = object::object_address(metadata);
|
|
1062
|
+
|
|
1063
|
+
if (exists<ConcurrentSupply>(metadata_address)) {
|
|
1064
|
+
let supply = borrow_global_mut<ConcurrentSupply>(metadata_address);
|
|
1065
|
+
assert!(
|
|
1066
|
+
aggregator_v2::try_add(&mut supply.current, (amount as u128)),
|
|
1067
|
+
error::out_of_range(EMAX_SUPPLY_EXCEEDED)
|
|
1068
|
+
);
|
|
1069
|
+
} else if (exists<Supply>(metadata_address)) {
|
|
1070
|
+
let supply = borrow_global_mut<Supply>(metadata_address);
|
|
1071
|
+
if (option::is_some(&supply.maximum)) {
|
|
1072
|
+
let max = *option::borrow_mut(&mut supply.maximum);
|
|
1073
|
+
assert!(
|
|
1074
|
+
max - supply.current >= (amount as u128),
|
|
1075
|
+
error::out_of_range(EMAX_SUPPLY_EXCEEDED)
|
|
1076
|
+
)
|
|
1077
|
+
};
|
|
1078
|
+
supply.current = supply.current + (amount as u128);
|
|
1079
|
+
} else {
|
|
1080
|
+
abort error::not_found(ESUPPLY_NOT_FOUND)
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
/// Decrease the supply of a fungible asset by burning.
|
|
1085
|
+
fun decrease_supply<T: key>(metadata: &Object<T>, amount: u64) acquires Supply, ConcurrentSupply {
|
|
1086
|
+
if (amount == 0) {
|
|
1087
|
+
return
|
|
1088
|
+
};
|
|
1089
|
+
let metadata_address = object::object_address(metadata);
|
|
1090
|
+
|
|
1091
|
+
if (exists<ConcurrentSupply>(metadata_address)) {
|
|
1092
|
+
let supply = borrow_global_mut<ConcurrentSupply>(metadata_address);
|
|
1093
|
+
|
|
1094
|
+
assert!(
|
|
1095
|
+
aggregator_v2::try_sub(&mut supply.current, (amount as u128)),
|
|
1096
|
+
error::out_of_range(ESUPPLY_UNDERFLOW)
|
|
1097
|
+
);
|
|
1098
|
+
} else if (exists<Supply>(metadata_address)) {
|
|
1099
|
+
assert!(exists<Supply>(metadata_address), error::not_found(ESUPPLY_NOT_FOUND));
|
|
1100
|
+
let supply = borrow_global_mut<Supply>(metadata_address);
|
|
1101
|
+
assert!(
|
|
1102
|
+
supply.current >= (amount as u128),
|
|
1103
|
+
error::invalid_state(ESUPPLY_UNDERFLOW)
|
|
1104
|
+
);
|
|
1105
|
+
supply.current = supply.current - (amount as u128);
|
|
1106
|
+
} else {
|
|
1107
|
+
assert!(false, error::not_found(ESUPPLY_NOT_FOUND));
|
|
1108
|
+
}
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
inline fun borrow_fungible_metadata<T: key>(
|
|
1112
|
+
metadata: &Object<T>
|
|
1113
|
+
): &Metadata acquires Metadata {
|
|
1114
|
+
let addr = object::object_address(metadata);
|
|
1115
|
+
borrow_global<Metadata>(addr)
|
|
1116
|
+
}
|
|
1117
|
+
|
|
1118
|
+
inline fun borrow_fungible_metadata_mut<T: key>(
|
|
1119
|
+
metadata: &Object<T>
|
|
1120
|
+
): &mut Metadata acquires Metadata {
|
|
1121
|
+
let addr = object::object_address(metadata);
|
|
1122
|
+
borrow_global_mut<Metadata>(addr)
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
inline fun borrow_store_resource<T: key>(store: &Object<T>): &FungibleStore acquires FungibleStore {
|
|
1126
|
+
let store_addr = object::object_address(store);
|
|
1127
|
+
assert!(exists<FungibleStore>(store_addr), error::not_found(EFUNGIBLE_STORE_EXISTENCE));
|
|
1128
|
+
borrow_global<FungibleStore>(store_addr)
|
|
1129
|
+
}
|
|
1130
|
+
|
|
1131
|
+
public fun upgrade_to_concurrent(
|
|
1132
|
+
ref: &ExtendRef,
|
|
1133
|
+
) acquires Supply {
|
|
1134
|
+
let metadata_object_address = object::address_from_extend_ref(ref);
|
|
1135
|
+
let metadata_object_signer = object::generate_signer_for_extending(ref);
|
|
1136
|
+
assert!(
|
|
1137
|
+
features::concurrent_fungible_assets_enabled(),
|
|
1138
|
+
error::invalid_argument(ECONCURRENT_SUPPLY_NOT_ENABLED)
|
|
1139
|
+
);
|
|
1140
|
+
assert!(exists<Supply>(metadata_object_address), error::not_found(ESUPPLY_NOT_FOUND));
|
|
1141
|
+
let Supply {
|
|
1142
|
+
current,
|
|
1143
|
+
maximum,
|
|
1144
|
+
} = move_from<Supply>(metadata_object_address);
|
|
1145
|
+
|
|
1146
|
+
let unlimited = option::is_none(&maximum);
|
|
1147
|
+
let supply = ConcurrentSupply {
|
|
1148
|
+
current: if (unlimited) {
|
|
1149
|
+
aggregator_v2::create_unbounded_aggregator_with_value(current)
|
|
1150
|
+
}
|
|
1151
|
+
else {
|
|
1152
|
+
aggregator_v2::create_aggregator_with_value(current, option::extract(&mut maximum))
|
|
1153
|
+
},
|
|
1154
|
+
};
|
|
1155
|
+
move_to(&metadata_object_signer, supply);
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
public entry fun upgrade_store_to_concurrent<T: key>(
|
|
1159
|
+
owner: &signer,
|
|
1160
|
+
store: Object<T>,
|
|
1161
|
+
) acquires FungibleStore {
|
|
1162
|
+
assert!(object::owns(store, signer::address_of(owner)), error::permission_denied(ENOT_STORE_OWNER));
|
|
1163
|
+
assert!(!is_frozen(store), error::invalid_argument(ESTORE_IS_FROZEN));
|
|
1164
|
+
assert!(allow_upgrade_to_concurrent_fungible_balance(), error::invalid_argument(ECONCURRENT_BALANCE_NOT_ENABLED));
|
|
1165
|
+
ensure_store_upgraded_to_concurrent_internal(object::object_address(&store));
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
/// Ensure a known `FungibleStore` has `ConcurrentFungibleBalance`.
|
|
1169
|
+
fun ensure_store_upgraded_to_concurrent_internal(
|
|
1170
|
+
fungible_store_address: address,
|
|
1171
|
+
) acquires FungibleStore {
|
|
1172
|
+
if (exists<ConcurrentFungibleBalance>(fungible_store_address)) {
|
|
1173
|
+
return
|
|
1174
|
+
};
|
|
1175
|
+
let store = borrow_global_mut<FungibleStore>(fungible_store_address);
|
|
1176
|
+
let balance = aggregator_v2::create_unbounded_aggregator_with_value(store.balance);
|
|
1177
|
+
store.balance = 0;
|
|
1178
|
+
let object_signer = create_signer::create_signer(fungible_store_address);
|
|
1179
|
+
move_to(&object_signer, ConcurrentFungibleBalance { balance });
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
#[test_only]
|
|
1183
|
+
use aptos_framework::account;
|
|
1184
|
+
|
|
1185
|
+
#[test_only]
|
|
1186
|
+
#[resource_group_member(group = aptos_framework::object::ObjectGroup)]
|
|
1187
|
+
|
|
1188
|
+
struct TestToken has key {}
|
|
1189
|
+
|
|
1190
|
+
#[test_only]
|
|
1191
|
+
public fun create_test_token(creator: &signer): (ConstructorRef, Object<TestToken>) {
|
|
1192
|
+
account::create_account_for_test(signer::address_of(creator));
|
|
1193
|
+
let creator_ref = object::create_named_object(creator, b"TEST");
|
|
1194
|
+
let object_signer = object::generate_signer(&creator_ref);
|
|
1195
|
+
move_to(&object_signer, TestToken {});
|
|
1196
|
+
|
|
1197
|
+
let token = object::object_from_constructor_ref<TestToken>(&creator_ref);
|
|
1198
|
+
(creator_ref, token)
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
#[test_only]
|
|
1202
|
+
public fun init_test_metadata(constructor_ref: &ConstructorRef): (MintRef, TransferRef, BurnRef, MutateMetadataRef) {
|
|
1203
|
+
add_fungibility(
|
|
1204
|
+
constructor_ref,
|
|
1205
|
+
option::some(100) /* max supply */,
|
|
1206
|
+
string::utf8(b"TEST"),
|
|
1207
|
+
string::utf8(b"@@"),
|
|
1208
|
+
0,
|
|
1209
|
+
string::utf8(b"http://www.example.com/favicon.ico"),
|
|
1210
|
+
string::utf8(b"http://www.example.com"),
|
|
1211
|
+
);
|
|
1212
|
+
let mint_ref = generate_mint_ref(constructor_ref);
|
|
1213
|
+
let burn_ref = generate_burn_ref(constructor_ref);
|
|
1214
|
+
let transfer_ref = generate_transfer_ref(constructor_ref);
|
|
1215
|
+
let mutate_metadata_ref= generate_mutate_metadata_ref(constructor_ref);
|
|
1216
|
+
(mint_ref, transfer_ref, burn_ref, mutate_metadata_ref)
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
#[test_only]
|
|
1220
|
+
public fun create_fungible_asset(
|
|
1221
|
+
creator: &signer
|
|
1222
|
+
): (MintRef, TransferRef, BurnRef, MutateMetadataRef, Object<Metadata>) {
|
|
1223
|
+
let (creator_ref, token_object) = create_test_token(creator);
|
|
1224
|
+
let (mint, transfer, burn, mutate_metadata) = init_test_metadata(&creator_ref);
|
|
1225
|
+
(mint, transfer, burn, mutate_metadata, object::convert(token_object))
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
#[test_only]
|
|
1229
|
+
public fun create_test_store<T: key>(owner: &signer, metadata: Object<T>): Object<FungibleStore> {
|
|
1230
|
+
let owner_addr = signer::address_of(owner);
|
|
1231
|
+
if (!account::exists_at(owner_addr)) {
|
|
1232
|
+
account::create_account_for_test(owner_addr);
|
|
1233
|
+
};
|
|
1234
|
+
create_store(&object::create_object_from_account(owner), metadata)
|
|
1235
|
+
}
|
|
1236
|
+
|
|
1237
|
+
#[test(creator = @0xcafe)]
|
|
1238
|
+
fun test_metadata_basic_flow(creator: &signer) acquires Metadata, Supply, ConcurrentSupply {
|
|
1239
|
+
let (creator_ref, metadata) = create_test_token(creator);
|
|
1240
|
+
init_test_metadata(&creator_ref);
|
|
1241
|
+
assert!(supply(metadata) == option::some(0), 1);
|
|
1242
|
+
assert!(maximum(metadata) == option::some(100), 2);
|
|
1243
|
+
assert!(name(metadata) == string::utf8(b"TEST"), 3);
|
|
1244
|
+
assert!(symbol(metadata) == string::utf8(b"@@"), 4);
|
|
1245
|
+
assert!(decimals(metadata) == 0, 5);
|
|
1246
|
+
assert!(icon_uri(metadata) == string::utf8(b"http://www.example.com/favicon.ico"), 6);
|
|
1247
|
+
assert!(project_uri(metadata) == string::utf8(b"http://www.example.com"), 7);
|
|
1248
|
+
|
|
1249
|
+
assert!(metadata(metadata) == Metadata {
|
|
1250
|
+
name: string::utf8(b"TEST"),
|
|
1251
|
+
symbol: string::utf8(b"@@"),
|
|
1252
|
+
decimals: 0,
|
|
1253
|
+
icon_uri: string::utf8(b"http://www.example.com/favicon.ico"),
|
|
1254
|
+
project_uri: string::utf8(b"http://www.example.com"),
|
|
1255
|
+
}, 8);
|
|
1256
|
+
|
|
1257
|
+
increase_supply(&metadata, 50);
|
|
1258
|
+
assert!(supply(metadata) == option::some(50), 9);
|
|
1259
|
+
decrease_supply(&metadata, 30);
|
|
1260
|
+
assert!(supply(metadata) == option::some(20), 10);
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1263
|
+
#[test(creator = @0xcafe)]
|
|
1264
|
+
#[expected_failure(abort_code = 0x20005, location = Self)]
|
|
1265
|
+
fun test_supply_overflow(creator: &signer) acquires Supply, ConcurrentSupply {
|
|
1266
|
+
let (creator_ref, metadata) = create_test_token(creator);
|
|
1267
|
+
init_test_metadata(&creator_ref);
|
|
1268
|
+
increase_supply(&metadata, 101);
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
#[test(creator = @0xcafe)]
|
|
1272
|
+
fun test_create_and_remove_store(creator: &signer) acquires FungibleStore, FungibleAssetEvents, ConcurrentFungibleBalance {
|
|
1273
|
+
let (_, _, _, _, metadata) = create_fungible_asset(creator);
|
|
1274
|
+
let creator_ref = object::create_object_from_account(creator);
|
|
1275
|
+
create_store(&creator_ref, metadata);
|
|
1276
|
+
let delete_ref = object::generate_delete_ref(&creator_ref);
|
|
1277
|
+
remove_store(&delete_ref);
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
#[test(creator = @0xcafe, aaron = @0xface)]
|
|
1281
|
+
fun test_e2e_basic_flow(
|
|
1282
|
+
creator: &signer,
|
|
1283
|
+
aaron: &signer,
|
|
1284
|
+
) acquires FungibleStore, Supply, ConcurrentSupply, DispatchFunctionStore, ConcurrentFungibleBalance, Metadata {
|
|
1285
|
+
let (mint_ref, transfer_ref, burn_ref, mutate_metadata_ref, test_token) = create_fungible_asset(creator);
|
|
1286
|
+
let metadata = mint_ref.metadata;
|
|
1287
|
+
let creator_store = create_test_store(creator, metadata);
|
|
1288
|
+
let aaron_store = create_test_store(aaron, metadata);
|
|
1289
|
+
|
|
1290
|
+
assert!(supply(test_token) == option::some(0), 1);
|
|
1291
|
+
// Mint
|
|
1292
|
+
let fa = mint(&mint_ref, 100);
|
|
1293
|
+
assert!(supply(test_token) == option::some(100), 2);
|
|
1294
|
+
// Deposit
|
|
1295
|
+
deposit(creator_store, fa);
|
|
1296
|
+
// Withdraw
|
|
1297
|
+
let fa = withdraw(creator, creator_store, 80);
|
|
1298
|
+
assert!(supply(test_token) == option::some(100), 3);
|
|
1299
|
+
deposit(aaron_store, fa);
|
|
1300
|
+
// Burn
|
|
1301
|
+
burn_from(&burn_ref, aaron_store, 30);
|
|
1302
|
+
assert!(supply(test_token) == option::some(70), 4);
|
|
1303
|
+
// Transfer
|
|
1304
|
+
transfer(creator, creator_store, aaron_store, 10);
|
|
1305
|
+
assert!(balance(creator_store) == 10, 5);
|
|
1306
|
+
assert!(balance(aaron_store) == 60, 6);
|
|
1307
|
+
|
|
1308
|
+
set_frozen_flag(&transfer_ref, aaron_store, true);
|
|
1309
|
+
assert!(is_frozen(aaron_store), 7);
|
|
1310
|
+
// Mutate Metadata
|
|
1311
|
+
mutate_metadata(
|
|
1312
|
+
&mutate_metadata_ref,
|
|
1313
|
+
option::some(string::utf8(b"mutated_name")),
|
|
1314
|
+
option::some(string::utf8(b"mutated_symbol")),
|
|
1315
|
+
option::none(),
|
|
1316
|
+
option::none(),
|
|
1317
|
+
option::none()
|
|
1318
|
+
);
|
|
1319
|
+
assert!(name(metadata) == string::utf8(b"mutated_name"), 8);
|
|
1320
|
+
assert!(symbol(metadata) == string::utf8(b"mutated_symbol"), 9);
|
|
1321
|
+
assert!(decimals(metadata) == 0, 10);
|
|
1322
|
+
assert!(icon_uri(metadata) == string::utf8(b"http://www.example.com/favicon.ico"), 11);
|
|
1323
|
+
assert!(project_uri(metadata) == string::utf8(b"http://www.example.com"), 12);
|
|
1324
|
+
}
|
|
1325
|
+
|
|
1326
|
+
#[test(creator = @0xcafe)]
|
|
1327
|
+
#[expected_failure(abort_code = 0x50003, location = Self)]
|
|
1328
|
+
fun test_frozen(
|
|
1329
|
+
creator: &signer
|
|
1330
|
+
) acquires FungibleStore, Supply, ConcurrentSupply, DispatchFunctionStore, ConcurrentFungibleBalance {
|
|
1331
|
+
let (mint_ref, transfer_ref, _burn_ref, _mutate_metadata_ref, _) = create_fungible_asset(creator);
|
|
1332
|
+
|
|
1333
|
+
let creator_store = create_test_store(creator, mint_ref.metadata);
|
|
1334
|
+
let fa = mint(&mint_ref, 100);
|
|
1335
|
+
set_frozen_flag(&transfer_ref, creator_store, true);
|
|
1336
|
+
deposit(creator_store, fa);
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1339
|
+
#[test(creator = @0xcafe)]
|
|
1340
|
+
#[expected_failure(abort_code = 0x50003, location = Self)]
|
|
1341
|
+
fun test_mint_to_frozen(
|
|
1342
|
+
creator: &signer
|
|
1343
|
+
) acquires FungibleStore, ConcurrentFungibleBalance, Supply, ConcurrentSupply, DispatchFunctionStore {
|
|
1344
|
+
let (mint_ref, transfer_ref, _burn_ref, _mutate_metadata_ref, _) = create_fungible_asset(creator);
|
|
1345
|
+
|
|
1346
|
+
let creator_store = create_test_store(creator, mint_ref.metadata);
|
|
1347
|
+
set_frozen_flag(&transfer_ref, creator_store, true);
|
|
1348
|
+
mint_to(&mint_ref, creator_store, 100);
|
|
1349
|
+
}
|
|
1350
|
+
|
|
1351
|
+
#[test(creator = @0xcafe)]
|
|
1352
|
+
#[expected_failure(abort_code = 0x50003, location = aptos_framework::object)]
|
|
1353
|
+
fun test_untransferable(
|
|
1354
|
+
creator: &signer
|
|
1355
|
+
) {
|
|
1356
|
+
let (creator_ref, _) = create_test_token(creator);
|
|
1357
|
+
let (mint_ref, _, _, _) = init_test_metadata(&creator_ref);
|
|
1358
|
+
set_untransferable(&creator_ref);
|
|
1359
|
+
|
|
1360
|
+
let creator_store = create_test_store(creator, mint_ref.metadata);
|
|
1361
|
+
object::transfer(creator, creator_store, @0x456);
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1364
|
+
#[test(creator = @0xcafe, aaron = @0xface)]
|
|
1365
|
+
fun test_transfer_with_ref(
|
|
1366
|
+
creator: &signer,
|
|
1367
|
+
aaron: &signer,
|
|
1368
|
+
) acquires FungibleStore, Supply, ConcurrentSupply, ConcurrentFungibleBalance {
|
|
1369
|
+
let (mint_ref, transfer_ref, _burn_ref, _mutate_metadata_ref, _) = create_fungible_asset(creator);
|
|
1370
|
+
let metadata = mint_ref.metadata;
|
|
1371
|
+
let creator_store = create_test_store(creator, metadata);
|
|
1372
|
+
let aaron_store = create_test_store(aaron, metadata);
|
|
1373
|
+
|
|
1374
|
+
let fa = mint(&mint_ref, 100);
|
|
1375
|
+
set_frozen_flag(&transfer_ref, creator_store, true);
|
|
1376
|
+
set_frozen_flag(&transfer_ref, aaron_store, true);
|
|
1377
|
+
deposit_with_ref(&transfer_ref, creator_store, fa);
|
|
1378
|
+
transfer_with_ref(&transfer_ref, creator_store, aaron_store, 80);
|
|
1379
|
+
assert!(balance(creator_store) == 20, 1);
|
|
1380
|
+
assert!(balance(aaron_store) == 80, 2);
|
|
1381
|
+
assert!(!!is_frozen(creator_store), 3);
|
|
1382
|
+
assert!(!!is_frozen(aaron_store), 4);
|
|
1383
|
+
}
|
|
1384
|
+
|
|
1385
|
+
#[test(creator = @0xcafe)]
|
|
1386
|
+
fun test_mutate_metadata(
|
|
1387
|
+
creator: &signer
|
|
1388
|
+
) acquires Metadata {
|
|
1389
|
+
let (mint_ref, _transfer_ref, _burn_ref, mutate_metadata_ref, _) = create_fungible_asset(creator);
|
|
1390
|
+
let metadata = mint_ref.metadata;
|
|
1391
|
+
|
|
1392
|
+
mutate_metadata(
|
|
1393
|
+
&mutate_metadata_ref,
|
|
1394
|
+
option::some(string::utf8(b"mutated_name")),
|
|
1395
|
+
option::some(string::utf8(b"mutated_symbol")),
|
|
1396
|
+
option::some(10),
|
|
1397
|
+
option::some(string::utf8(b"http://www.mutated-example.com/favicon.ico")),
|
|
1398
|
+
option::some(string::utf8(b"http://www.mutated-example.com"))
|
|
1399
|
+
);
|
|
1400
|
+
assert!(name(metadata) == string::utf8(b"mutated_name"), 1);
|
|
1401
|
+
assert!(symbol(metadata) == string::utf8(b"mutated_symbol"), 2);
|
|
1402
|
+
assert!(decimals(metadata) == 10, 3);
|
|
1403
|
+
assert!(icon_uri(metadata) == string::utf8(b"http://www.mutated-example.com/favicon.ico"), 4);
|
|
1404
|
+
assert!(project_uri(metadata) == string::utf8(b"http://www.mutated-example.com"), 5);
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
#[test(creator = @0xcafe)]
|
|
1408
|
+
fun test_partial_mutate_metadata(
|
|
1409
|
+
creator: &signer
|
|
1410
|
+
) acquires Metadata {
|
|
1411
|
+
let (mint_ref, _transfer_ref, _burn_ref, mutate_metadata_ref, _) = create_fungible_asset(creator);
|
|
1412
|
+
let metadata = mint_ref.metadata;
|
|
1413
|
+
|
|
1414
|
+
mutate_metadata(
|
|
1415
|
+
&mutate_metadata_ref,
|
|
1416
|
+
option::some(string::utf8(b"mutated_name")),
|
|
1417
|
+
option::some(string::utf8(b"mutated_symbol")),
|
|
1418
|
+
option::none(),
|
|
1419
|
+
option::none(),
|
|
1420
|
+
option::none()
|
|
1421
|
+
);
|
|
1422
|
+
assert!(name(metadata) == string::utf8(b"mutated_name"), 8);
|
|
1423
|
+
assert!(symbol(metadata) == string::utf8(b"mutated_symbol"), 9);
|
|
1424
|
+
assert!(decimals(metadata) == 0, 10);
|
|
1425
|
+
assert!(icon_uri(metadata) == string::utf8(b"http://www.example.com/favicon.ico"), 11);
|
|
1426
|
+
assert!(project_uri(metadata) == string::utf8(b"http://www.example.com"), 12);
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1429
|
+
#[test(creator = @0xcafe)]
|
|
1430
|
+
fun test_merge_and_exact(creator: &signer) acquires Supply, ConcurrentSupply {
|
|
1431
|
+
let (mint_ref, _transfer_ref, burn_ref, _mutate_metadata_ref, _) = create_fungible_asset(creator);
|
|
1432
|
+
let fa = mint(&mint_ref, 100);
|
|
1433
|
+
let cash = extract(&mut fa, 80);
|
|
1434
|
+
assert!(fa.amount == 20, 1);
|
|
1435
|
+
assert!(cash.amount == 80, 2);
|
|
1436
|
+
let more_cash = extract(&mut fa, 20);
|
|
1437
|
+
destroy_zero(fa);
|
|
1438
|
+
merge(&mut cash, more_cash);
|
|
1439
|
+
assert!(cash.amount == 100, 3);
|
|
1440
|
+
burn(&burn_ref, cash);
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1443
|
+
#[test(creator = @0xcafe)]
|
|
1444
|
+
#[expected_failure(abort_code = 0x10012, location = Self)]
|
|
1445
|
+
fun test_add_fungibility_to_deletable_object(creator: &signer) {
|
|
1446
|
+
account::create_account_for_test(signer::address_of(creator));
|
|
1447
|
+
let creator_ref = &object::create_object_from_account(creator);
|
|
1448
|
+
init_test_metadata(creator_ref);
|
|
1449
|
+
}
|
|
1450
|
+
|
|
1451
|
+
#[test(creator = @0xcafe, aaron = @0xface)]
|
|
1452
|
+
#[expected_failure(abort_code = 0x10006, location = Self)]
|
|
1453
|
+
fun test_fungible_asset_mismatch_when_merge(creator: &signer, aaron: &signer) {
|
|
1454
|
+
let (_, _, _, _, metadata1) = create_fungible_asset(creator);
|
|
1455
|
+
let (_, _, _, _, metadata2) = create_fungible_asset(aaron);
|
|
1456
|
+
let base = FungibleAsset {
|
|
1457
|
+
metadata: metadata1,
|
|
1458
|
+
amount: 1,
|
|
1459
|
+
};
|
|
1460
|
+
let addon = FungibleAsset {
|
|
1461
|
+
metadata: metadata2,
|
|
1462
|
+
amount: 1
|
|
1463
|
+
};
|
|
1464
|
+
merge(&mut base, addon);
|
|
1465
|
+
let FungibleAsset {
|
|
1466
|
+
metadata: _,
|
|
1467
|
+
amount: _
|
|
1468
|
+
} = base;
|
|
1469
|
+
}
|
|
1470
|
+
|
|
1471
|
+
#[test(fx = @aptos_framework, creator = @0xcafe)]
|
|
1472
|
+
fun test_fungible_asset_upgrade(fx: &signer, creator: &signer) acquires Supply, ConcurrentSupply, FungibleStore, ConcurrentFungibleBalance {
|
|
1473
|
+
let supply_feature = features::get_concurrent_fungible_assets_feature();
|
|
1474
|
+
let balance_feature = features::get_concurrent_fungible_balance_feature();
|
|
1475
|
+
let default_balance_feature = features::get_default_to_concurrent_fungible_balance_feature();
|
|
1476
|
+
|
|
1477
|
+
features::change_feature_flags_for_testing(fx, vector[], vector[supply_feature, balance_feature, default_balance_feature]);
|
|
1478
|
+
|
|
1479
|
+
let (creator_ref, token_object) = create_test_token(creator);
|
|
1480
|
+
let (mint_ref, transfer_ref, _burn, _mutate_metadata_ref) = init_test_metadata(&creator_ref);
|
|
1481
|
+
let test_token = object::convert<TestToken, Metadata>(token_object);
|
|
1482
|
+
assert!(exists<Supply>(object::object_address(&test_token)), 1);
|
|
1483
|
+
assert!(!exists<ConcurrentSupply>(object::object_address(&test_token)), 2);
|
|
1484
|
+
let creator_store = create_test_store(creator, test_token);
|
|
1485
|
+
assert!(exists<FungibleStore>(object::object_address(&creator_store)), 3);
|
|
1486
|
+
assert!(!exists<ConcurrentFungibleBalance>(object::object_address(&creator_store)), 4);
|
|
1487
|
+
|
|
1488
|
+
let fa = mint(&mint_ref, 30);
|
|
1489
|
+
assert!(supply(test_token) == option::some(30), 5);
|
|
1490
|
+
|
|
1491
|
+
deposit_with_ref(&transfer_ref, creator_store, fa);
|
|
1492
|
+
assert!(exists<FungibleStore>(object::object_address(&creator_store)), 13);
|
|
1493
|
+
assert!(borrow_store_resource(&creator_store).balance == 30, 14);
|
|
1494
|
+
assert!(!exists<ConcurrentFungibleBalance>(object::object_address(&creator_store)), 15);
|
|
1495
|
+
|
|
1496
|
+
features::change_feature_flags_for_testing(fx, vector[supply_feature, balance_feature], vector[default_balance_feature]);
|
|
1497
|
+
|
|
1498
|
+
let extend_ref = object::generate_extend_ref(&creator_ref);
|
|
1499
|
+
// manual conversion of supply
|
|
1500
|
+
upgrade_to_concurrent(&extend_ref);
|
|
1501
|
+
assert!(!exists<Supply>(object::object_address(&test_token)), 6);
|
|
1502
|
+
assert!(exists<ConcurrentSupply>(object::object_address(&test_token)), 7);
|
|
1503
|
+
|
|
1504
|
+
// assert conversion of balance
|
|
1505
|
+
upgrade_store_to_concurrent(creator, creator_store);
|
|
1506
|
+
let fb = withdraw_with_ref(&transfer_ref, creator_store, 20);
|
|
1507
|
+
// both store and new balance need to exist. Old balance should be 0.
|
|
1508
|
+
assert!(exists<FungibleStore>(object::object_address(&creator_store)), 9);
|
|
1509
|
+
assert!(borrow_store_resource(&creator_store).balance == 0, 10);
|
|
1510
|
+
assert!(exists<ConcurrentFungibleBalance>(object::object_address(&creator_store)), 11);
|
|
1511
|
+
assert!(aggregator_v2::read(&borrow_global<ConcurrentFungibleBalance>(object::object_address(&creator_store)).balance) == 10, 12);
|
|
1512
|
+
|
|
1513
|
+
deposit_with_ref(&transfer_ref, creator_store, fb);
|
|
1514
|
+
}
|
|
1515
|
+
|
|
1516
|
+
#[test(fx = @aptos_framework, creator = @0xcafe)]
|
|
1517
|
+
fun test_fungible_asset_default_concurrent(fx: &signer, creator: &signer) acquires Supply, ConcurrentSupply, FungibleStore, ConcurrentFungibleBalance {
|
|
1518
|
+
let supply_feature = features::get_concurrent_fungible_assets_feature();
|
|
1519
|
+
let balance_feature = features::get_concurrent_fungible_balance_feature();
|
|
1520
|
+
let default_balance_feature = features::get_default_to_concurrent_fungible_balance_feature();
|
|
1521
|
+
|
|
1522
|
+
features::change_feature_flags_for_testing(fx, vector[supply_feature, balance_feature, default_balance_feature], vector[]);
|
|
1523
|
+
|
|
1524
|
+
let (creator_ref, token_object) = create_test_token(creator);
|
|
1525
|
+
let (mint_ref, transfer_ref, _burn, _mutate_metadata_ref) = init_test_metadata(&creator_ref);
|
|
1526
|
+
let test_token = object::convert<TestToken, Metadata>(token_object);
|
|
1527
|
+
assert!(!exists<Supply>(object::object_address(&test_token)), 1);
|
|
1528
|
+
assert!(exists<ConcurrentSupply>(object::object_address(&test_token)), 2);
|
|
1529
|
+
let creator_store = create_test_store(creator, test_token);
|
|
1530
|
+
assert!(exists<FungibleStore>(object::object_address(&creator_store)), 3);
|
|
1531
|
+
assert!(exists<ConcurrentFungibleBalance>(object::object_address(&creator_store)), 4);
|
|
1532
|
+
|
|
1533
|
+
let fa = mint(&mint_ref, 30);
|
|
1534
|
+
assert!(supply(test_token) == option::some(30), 5);
|
|
1535
|
+
|
|
1536
|
+
deposit_with_ref(&transfer_ref, creator_store, fa);
|
|
1537
|
+
|
|
1538
|
+
assert!(exists<FungibleStore>(object::object_address(&creator_store)), 9);
|
|
1539
|
+
assert!(borrow_store_resource(&creator_store).balance == 0, 10);
|
|
1540
|
+
assert!(exists<ConcurrentFungibleBalance>(object::object_address(&creator_store)), 11);
|
|
1541
|
+
assert!(aggregator_v2::read(&borrow_global<ConcurrentFungibleBalance>(object::object_address(&creator_store)).balance) == 30, 12);
|
|
1542
|
+
}
|
|
1543
|
+
|
|
1544
|
+
#[deprecated]
|
|
1545
|
+
#[resource_group_member(group = aptos_framework::object::ObjectGroup)]
|
|
1546
|
+
struct FungibleAssetEvents has key {
|
|
1547
|
+
deposit_events: event::EventHandle<DepositEvent>,
|
|
1548
|
+
withdraw_events: event::EventHandle<WithdrawEvent>,
|
|
1549
|
+
frozen_events: event::EventHandle<FrozenEvent>,
|
|
1550
|
+
}
|
|
1551
|
+
|
|
1552
|
+
#[deprecated]
|
|
1553
|
+
struct DepositEvent has drop, store {
|
|
1554
|
+
amount: u64,
|
|
1555
|
+
}
|
|
1556
|
+
|
|
1557
|
+
#[deprecated]
|
|
1558
|
+
struct WithdrawEvent has drop, store {
|
|
1559
|
+
amount: u64,
|
|
1560
|
+
}
|
|
1561
|
+
|
|
1562
|
+
#[deprecated]
|
|
1563
|
+
struct FrozenEvent has drop, store {
|
|
1564
|
+
frozen: bool,
|
|
1565
|
+
}
|
|
1566
|
+
}
|