@aptos-labs/ts-sdk 2.0.1 → 3.0.0
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/account-CEmLe1wW.d.ts +7363 -0
- package/dist/common/chunk-5JIJXVJ5.js +4 -0
- package/dist/common/chunk-5JIJXVJ5.js.map +1 -0
- package/dist/common/cli/index.d.ts +1 -1
- package/dist/common/cli/index.js +1 -1
- package/dist/common/cli/index.js.map +1 -1
- package/dist/common/index.d.ts +5756 -9761
- package/dist/common/index.js +34 -32
- package/dist/common/index.js.map +1 -1
- package/dist/esm/{Ed25519Account-D9XrCLfE.d.mts → Ed25519Account-Ccxj1zdx.d.mts} +1 -9
- package/dist/esm/account/AbstractKeylessAccount.d.mts +4 -31
- package/dist/esm/account/AbstractKeylessAccount.mjs +1 -1
- package/dist/esm/account/AbstractedAccount.d.mts +5 -32
- package/dist/esm/account/AbstractedAccount.mjs +1 -1
- package/dist/esm/account/Account.d.mts +3 -30
- package/dist/esm/account/Account.mjs +1 -1
- package/dist/esm/account/AccountUtils.d.mts +4 -31
- package/dist/esm/account/AccountUtils.mjs +1 -1
- package/dist/esm/account/DerivableAbstractedAccount.d.mts +5 -32
- package/dist/esm/account/DerivableAbstractedAccount.mjs +1 -1
- package/dist/esm/account/Ed25519Account.d.mts +3 -30
- package/dist/esm/account/Ed25519Account.mjs +1 -1
- package/dist/esm/account/EphemeralKeyPair.d.mts +2 -11
- package/dist/esm/account/EphemeralKeyPair.mjs +1 -1
- package/dist/esm/account/FederatedKeylessAccount.d.mts +4 -31
- package/dist/esm/account/FederatedKeylessAccount.mjs +1 -1
- package/dist/esm/account/KeylessAccount.d.mts +4 -31
- package/dist/esm/account/KeylessAccount.mjs +1 -1
- package/dist/esm/account/MultiEd25519Account.d.mts +3 -30
- package/dist/esm/account/MultiEd25519Account.mjs +1 -1
- package/dist/esm/account/MultiKeyAccount.d.mts +5 -32
- package/dist/esm/account/MultiKeyAccount.mjs +1 -1
- package/dist/esm/account/SingleKeyAccount.d.mts +3 -30
- package/dist/esm/account/SingleKeyAccount.mjs +1 -1
- package/dist/esm/account/index.d.mts +4 -31
- package/dist/esm/account/index.mjs +1 -1
- package/dist/esm/account/utils.d.mts +2 -6
- package/dist/esm/account/utils.mjs +1 -1
- package/dist/esm/account-9G6tix5T.d.mts +6591 -0
- package/dist/esm/api/account/abstraction.d.mts +2 -29
- package/dist/esm/api/account/abstraction.mjs +1 -1
- package/dist/esm/api/account.d.mts +3 -30
- package/dist/esm/api/account.mjs +1 -1
- package/dist/esm/api/ans.d.mts +3 -30
- package/dist/esm/api/ans.mjs +1 -1
- package/dist/esm/api/aptos.d.mts +7 -33
- package/dist/esm/api/aptos.mjs +1 -1
- package/dist/esm/api/aptosConfig.d.mts +4 -187
- package/dist/esm/api/aptosConfig.mjs +1 -1
- package/dist/esm/api/coin.d.mts +2 -29
- package/dist/esm/api/coin.mjs +1 -1
- package/dist/esm/api/digitalAsset.d.mts +3 -30
- package/dist/esm/api/digitalAsset.mjs +1 -1
- package/dist/esm/api/event.d.mts +2 -8
- package/dist/esm/api/event.mjs +1 -1
- package/dist/esm/api/faucet.d.mts +2 -8
- package/dist/esm/api/faucet.mjs +1 -1
- package/dist/esm/api/fungibleAsset.d.mts +2 -29
- package/dist/esm/api/fungibleAsset.mjs +1 -1
- package/dist/esm/api/general.d.mts +2 -29
- package/dist/esm/api/general.mjs +1 -1
- package/dist/esm/api/index.d.mts +5 -32
- package/dist/esm/api/index.mjs +1 -1
- package/dist/esm/api/keyless.d.mts +4 -31
- package/dist/esm/api/keyless.mjs +1 -1
- package/dist/esm/api/object.d.mts +2 -8
- package/dist/esm/api/object.mjs +1 -1
- package/dist/esm/api/staking.d.mts +2 -8
- package/dist/esm/api/staking.mjs +1 -1
- package/dist/esm/api/table.d.mts +2 -2
- package/dist/esm/api/table.mjs +1 -1
- package/dist/esm/api/transaction.d.mts +6 -33
- package/dist/esm/api/transaction.mjs +1 -1
- package/dist/esm/api/transactionSubmission/build.d.mts +2 -29
- package/dist/esm/api/transactionSubmission/build.mjs +1 -1
- package/dist/esm/api/transactionSubmission/management.d.mts +2 -29
- package/dist/esm/api/transactionSubmission/management.mjs +1 -1
- package/dist/esm/api/transactionSubmission/sign.d.mts +3 -30
- package/dist/esm/api/transactionSubmission/sign.mjs +1 -1
- package/dist/esm/api/transactionSubmission/simulate.d.mts +2 -29
- package/dist/esm/api/transactionSubmission/simulate.mjs +1 -1
- package/dist/esm/api/transactionSubmission/submit.d.mts +4 -31
- package/dist/esm/api/transactionSubmission/submit.mjs +1 -1
- package/dist/esm/api/utils.d.mts +2 -2
- package/dist/esm/api/utils.mjs +1 -1
- package/dist/esm/bcs/consts.d.mts +3 -1
- package/dist/esm/bcs/deserializer.d.mts +3 -304
- package/dist/esm/bcs/index.d.mts +2 -8
- package/dist/esm/bcs/index.mjs +1 -1
- package/dist/esm/bcs/serializable/entryFunctionBytes.d.mts +3 -7
- package/dist/esm/bcs/serializable/fixedBytes.d.mts +3 -90
- package/dist/esm/bcs/serializable/movePrimitives.d.mts +2 -167
- package/dist/esm/bcs/serializable/movePrimitives.mjs +1 -1
- package/dist/esm/bcs/serializable/moveStructs.d.mts +2 -430
- package/dist/esm/bcs/serializable/moveStructs.mjs +1 -1
- package/dist/esm/bcs/serializer.d.mts +3 -325
- package/dist/esm/{chunk-V74WPKSY.mjs → chunk-2XQKGWHQ.mjs} +2 -2
- package/dist/esm/chunk-4H2RMR7D.mjs +2 -0
- package/dist/esm/chunk-4H2RMR7D.mjs.map +1 -0
- package/dist/esm/{chunk-UOP7GBXB.mjs → chunk-5ZRPV4YI.mjs} +2 -2
- package/dist/esm/{chunk-V2QSMVJ5.mjs → chunk-7T62PEFI.mjs} +2 -2
- package/dist/esm/{chunk-U7HD6PQV.mjs → chunk-FSP4QM2T.mjs} +2 -2
- package/dist/esm/chunk-GMDBBVDH.mjs +6 -0
- package/dist/esm/chunk-GMDBBVDH.mjs.map +1 -0
- package/dist/esm/chunk-HMUIOIBG.mjs +2 -0
- package/dist/esm/{chunk-VEGW6HP5.mjs.map → chunk-HMUIOIBG.mjs.map} +1 -1
- package/dist/esm/{chunk-GBNAG7KK.mjs → chunk-IDHVW7HS.mjs} +2 -2
- package/dist/esm/{chunk-57J5YBMT.mjs → chunk-PFXXFUBL.mjs} +2 -2
- package/dist/esm/{chunk-KRBZ54CY.mjs → chunk-R7NQJWDG.mjs} +2 -2
- package/dist/esm/{chunk-AMAPBD4D.mjs → chunk-SAMHWS73.mjs} +2 -2
- package/dist/esm/chunk-UIVX6WSC.mjs +2 -0
- package/dist/esm/chunk-UIVX6WSC.mjs.map +1 -0
- package/dist/esm/{chunk-HETYL3WN.mjs → chunk-WOTQ7227.mjs} +2 -2
- package/dist/esm/{chunk-CZYH3G7E.mjs → chunk-YHGGNYYL.mjs} +2 -2
- package/dist/esm/cli/index.d.mts +3 -7
- package/dist/esm/cli/index.mjs +1 -1
- package/dist/esm/cli/localNode.mjs +1 -1
- package/dist/esm/cli/move.d.mts +3 -7
- package/dist/esm/client/core.d.mts +3 -3
- package/dist/esm/client/core.mjs +1 -1
- package/dist/esm/client/get.d.mts +3 -3
- package/dist/esm/client/get.mjs +1 -1
- package/dist/esm/client/index.d.mts +2 -2
- package/dist/esm/client/index.mjs +1 -1
- package/dist/esm/client/post.d.mts +3 -3
- package/dist/esm/client/post.mjs +1 -1
- package/dist/esm/core/account/index.d.mts +3 -7
- package/dist/esm/core/account/index.mjs +1 -1
- package/dist/esm/core/account/utils/address.d.mts +3 -7
- package/dist/esm/core/account/utils/address.mjs +1 -1
- package/dist/esm/core/account/utils/index.d.mts +3 -7
- package/dist/esm/core/account/utils/index.mjs +1 -1
- package/dist/esm/core/accountAddress.d.mts +3 -329
- package/dist/esm/core/accountAddress.mjs +1 -1
- package/dist/esm/core/authenticationKey.d.mts +2 -10
- package/dist/esm/core/authenticationKey.mjs +1 -1
- package/dist/esm/core/crypto/abstraction.d.mts +2 -10
- package/dist/esm/core/crypto/abstraction.mjs +1 -1
- package/dist/esm/core/crypto/deserializationUtils.d.mts +2 -10
- package/dist/esm/core/crypto/deserializationUtils.mjs +1 -1
- package/dist/esm/core/crypto/ed25519.d.mts +2 -301
- package/dist/esm/core/crypto/ed25519.mjs +1 -1
- package/dist/esm/core/crypto/ephemeral.d.mts +2 -10
- package/dist/esm/core/crypto/ephemeral.mjs +1 -1
- package/dist/esm/core/crypto/federatedKeyless.d.mts +4 -12
- package/dist/esm/core/crypto/federatedKeyless.mjs +1 -1
- package/dist/esm/core/crypto/index.d.mts +3 -17
- package/dist/esm/core/crypto/index.mjs +1 -1
- package/dist/esm/core/crypto/keyless.d.mts +3 -11
- package/dist/esm/core/crypto/keyless.mjs +1 -1
- package/dist/esm/core/crypto/multiEd25519.d.mts +2 -228
- package/dist/esm/core/crypto/multiEd25519.mjs +1 -1
- package/dist/esm/core/crypto/multiKey.d.mts +2 -254
- package/dist/esm/core/crypto/multiKey.mjs +1 -1
- package/dist/esm/core/crypto/privateKey.d.mts +2 -71
- package/dist/esm/core/crypto/privateKey.mjs +1 -1
- package/dist/esm/core/crypto/proof.d.mts +3 -4
- package/dist/esm/core/crypto/proof.mjs +1 -1
- package/dist/esm/core/crypto/publicKey.d.mts +2 -10
- package/dist/esm/core/crypto/publicKey.mjs +1 -1
- package/dist/esm/core/crypto/secp256k1.d.mts +2 -274
- package/dist/esm/core/crypto/secp256k1.mjs +1 -1
- package/dist/esm/core/crypto/signature.d.mts +3 -31
- package/dist/esm/core/crypto/signature.mjs +1 -1
- package/dist/esm/core/crypto/singleKey.d.mts +2 -182
- package/dist/esm/core/crypto/singleKey.mjs +1 -1
- package/dist/esm/core/crypto/utils.d.mts +3 -1
- package/dist/esm/core/hex.d.mts +3 -156
- package/dist/esm/core/index.d.mts +2 -16
- package/dist/esm/core/index.mjs +1 -1
- package/dist/esm/errors/index.d.mts +2 -1
- package/dist/esm/errors/index.mjs +1 -1
- package/dist/esm/{federatedKeyless-DAYXjY2Y.d.mts → federatedKeyless-CVKW5pnz.d.mts} +1 -7
- package/dist/esm/index.d.mts +4 -31
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/internal/abstraction.d.mts +2 -29
- package/dist/esm/internal/abstraction.mjs +1 -1
- package/dist/esm/internal/account.d.mts +3 -30
- package/dist/esm/internal/account.mjs +1 -1
- package/dist/esm/internal/ans.d.mts +3 -30
- package/dist/esm/internal/ans.mjs +1 -1
- package/dist/esm/internal/coin.d.mts +3 -30
- package/dist/esm/internal/coin.mjs +1 -1
- package/dist/esm/internal/digitalAsset.d.mts +3 -30
- package/dist/esm/internal/digitalAsset.mjs +1 -1
- package/dist/esm/internal/event.d.mts +2 -8
- package/dist/esm/internal/event.mjs +1 -1
- package/dist/esm/internal/faucet.d.mts +3 -9
- package/dist/esm/internal/faucet.mjs +1 -1
- package/dist/esm/internal/fungibleAsset.d.mts +3 -30
- package/dist/esm/internal/fungibleAsset.mjs +1 -1
- package/dist/esm/internal/general.d.mts +2 -2
- package/dist/esm/internal/general.mjs +1 -1
- package/dist/esm/internal/keyless.d.mts +5 -32
- package/dist/esm/internal/keyless.mjs +1 -1
- package/dist/esm/internal/object.d.mts +2 -8
- package/dist/esm/internal/object.mjs +1 -1
- package/dist/esm/internal/staking.d.mts +2 -8
- package/dist/esm/internal/staking.mjs +1 -1
- package/dist/esm/internal/table.d.mts +2 -2
- package/dist/esm/internal/table.mjs +1 -1
- package/dist/esm/internal/transaction.d.mts +3 -3
- package/dist/esm/internal/transaction.mjs +1 -1
- package/dist/esm/internal/transactionSubmission.d.mts +6 -33
- package/dist/esm/internal/transactionSubmission.mjs +1 -1
- package/dist/esm/internal/utils/index.d.mts +2 -8
- package/dist/esm/internal/utils/index.mjs +1 -1
- package/dist/esm/internal/utils/utils.d.mts +2 -8
- package/dist/esm/internal/utils/utils.mjs +1 -1
- package/dist/esm/internal/view.d.mts +1 -28
- package/dist/esm/internal/view.mjs +1 -1
- package/dist/esm/transactions/authenticator/account.d.mts +2 -179
- package/dist/esm/transactions/authenticator/account.mjs +1 -1
- package/dist/esm/transactions/authenticator/index.d.mts +2 -17
- package/dist/esm/transactions/authenticator/index.mjs +1 -1
- package/dist/esm/transactions/authenticator/transaction.d.mts +2 -17
- package/dist/esm/transactions/authenticator/transaction.mjs +1 -1
- package/dist/esm/transactions/index.d.mts +3 -30
- package/dist/esm/transactions/index.mjs +1 -1
- package/dist/esm/transactions/instances/chainId.d.mts +3 -44
- package/dist/esm/transactions/instances/identifier.d.mts +2 -44
- package/dist/esm/transactions/instances/index.d.mts +2 -27
- package/dist/esm/transactions/instances/index.mjs +1 -1
- package/dist/esm/transactions/instances/moduleId.d.mts +3 -57
- package/dist/esm/transactions/instances/moduleId.mjs +1 -1
- package/dist/esm/transactions/instances/multiAgentTransaction.d.mts +2 -60
- package/dist/esm/transactions/instances/multiAgentTransaction.mjs +1 -1
- package/dist/esm/transactions/instances/rawTransaction.d.mts +2 -150
- package/dist/esm/transactions/instances/rawTransaction.mjs +1 -1
- package/dist/esm/transactions/instances/rotationProofChallenge.d.mts +2 -12
- package/dist/esm/transactions/instances/rotationProofChallenge.mjs +1 -1
- package/dist/esm/transactions/instances/signedTransaction.d.mts +2 -23
- package/dist/esm/transactions/instances/signedTransaction.mjs +1 -1
- package/dist/esm/transactions/instances/simpleTransaction.d.mts +2 -59
- package/dist/esm/transactions/instances/simpleTransaction.mjs +1 -1
- package/dist/esm/transactions/instances/transactionArgument.d.mts +2 -74
- package/dist/esm/transactions/instances/transactionPayload.d.mts +2 -300
- package/dist/esm/transactions/instances/transactionPayload.mjs +1 -1
- package/dist/esm/transactions/management/accountSequenceNumber.d.mts +2 -29
- package/dist/esm/transactions/management/accountSequenceNumber.mjs +1 -1
- package/dist/esm/transactions/management/index.d.mts +2 -29
- package/dist/esm/transactions/management/index.mjs +1 -1
- package/dist/esm/transactions/management/transactionWorker.d.mts +2 -29
- package/dist/esm/transactions/management/transactionWorker.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/helpers.d.mts +3 -30
- package/dist/esm/transactions/transactionBuilder/helpers.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/index.d.mts +2 -29
- package/dist/esm/transactions/transactionBuilder/index.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/remoteAbi.d.mts +2 -29
- package/dist/esm/transactions/transactionBuilder/remoteAbi.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/signingMessage.d.mts +1 -28
- package/dist/esm/transactions/transactionBuilder/signingMessage.mjs +1 -1
- package/dist/esm/transactions/transactionBuilder/transactionBuilder.d.mts +3 -29
- package/dist/esm/transactions/transactionBuilder/transactionBuilder.mjs +1 -1
- package/dist/esm/transactions/typeTag/index.d.mts +2 -462
- package/dist/esm/transactions/typeTag/index.mjs +1 -1
- package/dist/esm/transactions/typeTag/parser.d.mts +2 -8
- package/dist/esm/transactions/typeTag/parser.mjs +1 -1
- package/dist/esm/transactions/types.d.mts +3 -399
- package/dist/esm/types/index.d.mts +3 -1
- package/dist/esm/types/index.mjs +1 -1
- package/dist/esm/types/types.d.mts +5 -1298
- package/dist/esm/types/types.mjs +1 -1
- package/dist/esm/utils/helpers.d.mts +2 -6
- package/dist/esm/utils/helpers.mjs +1 -1
- package/dist/esm/utils/index.d.mts +1 -6
- package/dist/esm/utils/index.mjs +1 -1
- package/dist/esm/utils/normalizeBundle.d.mts +2 -4
- 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 +18 -19
- package/src/api/aptos.ts +6 -2
- package/src/api/aptosConfig.ts +73 -2
- package/src/api/transaction.ts +9 -6
- package/src/api/transactionSubmission/build.ts +5 -1
- package/src/api/transactionSubmission/submit.ts +16 -12
- package/src/core/crypto/multiKey.ts +14 -1
- package/src/internal/transactionSubmission.ts +20 -10
- package/src/transactions/instances/transactionPayload.ts +165 -2
- package/src/transactions/management/transactionWorker.ts +1 -1
- package/src/transactions/transactionBuilder/transactionBuilder.ts +64 -5
- package/src/transactions/types.ts +61 -10
- package/src/types/types.ts +111 -0
- package/src/version.ts +1 -1
- package/dist/common/accountAddress-AL8HRxQC.d.ts +0 -3148
- package/dist/common/chunk-ZMDE3DNL.js +0 -4
- package/dist/common/chunk-ZMDE3DNL.js.map +0 -1
- package/dist/esm/chunk-BK56GLTP.mjs +0 -4
- package/dist/esm/chunk-BK56GLTP.mjs.map +0 -1
- package/dist/esm/chunk-ODAAZLPK.mjs +0 -2
- package/dist/esm/chunk-ODAAZLPK.mjs.map +0 -1
- package/dist/esm/chunk-VEGW6HP5.mjs +0 -2
- package/dist/esm/chunk-XTMUMN74.mjs +0 -2
- package/dist/esm/chunk-XTMUMN74.mjs.map +0 -1
- package/dist/esm/publicKey-CJOcUwJK.d.mts +0 -213
- package/src/internal/move/jwks/build/jwk/BuildInfo.yaml +0 -56
- 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 +0 -1533
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aggregator.move +0 -48
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aggregator_factory.move +0 -66
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aggregator_v2.move +0 -280
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aptos_account.move +0 -443
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aptos_coin.move +0 -204
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aptos_governance.move +0 -1387
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/block.move +0 -394
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/chain_id.move +0 -41
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/chain_status.move +0 -48
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/code.move +0 -367
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/coin.move +0 -2214
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/config_buffer.move +0 -101
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/consensus_config.move +0 -77
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/create_signer.move +0 -21
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/delegation_pool.move +0 -5568
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/dispatchable_fungible_asset.move +0 -228
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/dkg.move +0 -121
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/event.move +0 -92
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/execution_config.move +0 -66
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/function_info.move +0 -100
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/fungible_asset.move +0 -1566
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/gas_schedule.move +0 -176
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/genesis.move +0 -550
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/governance_proposal.move +0 -23
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/guid.move +0 -68
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/jwk_consensus_config.move +0 -148
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/jwks.move +0 -817
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/keyless_account.move +0 -312
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/managed_coin.move +0 -205
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/multisig_account.move +0 -2477
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/object.move +0 -1073
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/object_code_deployment.move +0 -147
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/optional_aggregator.move +0 -295
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/primary_fungible_store.move +0 -405
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/randomness.move +0 -574
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/randomness_api_v0_config.move +0 -57
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/randomness_config.move +0 -153
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/randomness_config_seqnum.move +0 -49
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/reconfiguration.move +0 -237
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/reconfiguration_state.move +0 -132
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/reconfiguration_with_dkg.move +0 -69
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/resource_account.move +0 -267
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/stake.move +0 -3286
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/staking_config.move +0 -686
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/staking_contract.move +0 -1618
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/staking_proxy.move +0 -228
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/state_storage.move +0 -90
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/storage_gas.move +0 -622
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/system_addresses.move +0 -82
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/timestamp.move +0 -88
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/transaction_context.move +0 -262
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/transaction_fee.move +0 -457
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/transaction_validation.move +0 -501
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/util.move +0 -16
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/validator_consensus_info.move +0 -42
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/version.move +0 -115
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/vesting.move +0 -2183
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/voting.move +0 -1279
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/any.move +0 -57
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/aptos_hash.move +0 -253
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/big_vector.move +0 -469
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/bls12381.move +0 -985
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/bls12381_algebra.move +0 -802
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/bn254_algebra.move +0 -855
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/capability.move +0 -193
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/comparator.move +0 -173
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/copyable_any.move +0 -45
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/crypto_algebra.move +0 -351
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/debug.move +0 -278
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ed25519.move +0 -262
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/fixed_point64.move +0 -447
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/from_bcs.move +0 -91
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/math128.move +0 -381
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/math64.move +0 -336
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/math_fixed.move +0 -139
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/math_fixed64.move +0 -142
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/multi_ed25519.move +0 -482
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/pool_u64.move +0 -571
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/pool_u64_unbound.move +0 -270
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ristretto255.move +0 -1310
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ristretto255_bulletproofs.move +0 -253
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ristretto255_elgamal.move +0 -234
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ristretto255_pedersen.move +0 -158
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/secp256k1.move +0 -114
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/simple_map.move +0 -319
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/smart_table.move +0 -769
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/smart_vector.move +0 -766
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/string_utils.move +0 -148
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/table.move +0 -152
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/table_with_length.move +0 -141
- package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/type_info.move +0 -351
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/acl.move +0 -46
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/bcs.move +0 -27
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/bit_vector.move +0 -239
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/error.move +0 -88
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/features.move +0 -780
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/fixed_point32.move +0 -295
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/hash.move +0 -8
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/option.move +0 -356
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/signer.move +0 -21
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/string.move +0 -93
- package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/vector.move +0 -669
- package/src/internal/move/jwks/build/jwk/sources/main.move +0 -20
- /package/dist/esm/{chunk-V74WPKSY.mjs.map → chunk-2XQKGWHQ.mjs.map} +0 -0
- /package/dist/esm/{chunk-UOP7GBXB.mjs.map → chunk-5ZRPV4YI.mjs.map} +0 -0
- /package/dist/esm/{chunk-V2QSMVJ5.mjs.map → chunk-7T62PEFI.mjs.map} +0 -0
- /package/dist/esm/{chunk-U7HD6PQV.mjs.map → chunk-FSP4QM2T.mjs.map} +0 -0
- /package/dist/esm/{chunk-GBNAG7KK.mjs.map → chunk-IDHVW7HS.mjs.map} +0 -0
- /package/dist/esm/{chunk-57J5YBMT.mjs.map → chunk-PFXXFUBL.mjs.map} +0 -0
- /package/dist/esm/{chunk-KRBZ54CY.mjs.map → chunk-R7NQJWDG.mjs.map} +0 -0
- /package/dist/esm/{chunk-AMAPBD4D.mjs.map → chunk-SAMHWS73.mjs.map} +0 -0
- /package/dist/esm/{chunk-HETYL3WN.mjs.map → chunk-WOTQ7227.mjs.map} +0 -0
- /package/dist/esm/{chunk-CZYH3G7E.mjs.map → chunk-YHGGNYYL.mjs.map} +0 -0
|
@@ -1,1279 +0,0 @@
|
|
|
1
|
-
///
|
|
2
|
-
/// This is the general Voting module that can be used as part of a DAO Governance. Voting is designed to be used by
|
|
3
|
-
/// standalone governance modules, who has full control over the voting flow and is responsible for voting power
|
|
4
|
-
/// calculation and including proper capabilities when creating the proposal so resolution can go through.
|
|
5
|
-
/// On-chain governance of the Aptos network also uses Voting.
|
|
6
|
-
///
|
|
7
|
-
/// The voting flow:
|
|
8
|
-
/// 1. The Voting module can be deployed at a known address (e.g. 0x1 for Aptos on-chain governance)
|
|
9
|
-
/// 2. The governance module, e.g. AptosGovernance, can be deployed later and define a GovernanceProposal resource type
|
|
10
|
-
/// that can also contain other information such as Capability resource for authorization.
|
|
11
|
-
/// 3. The governance module's owner can then register the ProposalType with Voting. This also hosts the proposal list
|
|
12
|
-
/// (forum) on the calling account.
|
|
13
|
-
/// 4. A proposer, through the governance module, can call Voting::create_proposal to create a proposal. create_proposal
|
|
14
|
-
/// cannot be called directly not through the governance module. A script hash of the resolution script that can later
|
|
15
|
-
/// be called to execute the proposal is required.
|
|
16
|
-
/// 5. A voter, through the governance module, can call Voting::vote on a proposal. vote requires passing a &ProposalType
|
|
17
|
-
/// and thus only the governance module that registers ProposalType can call vote.
|
|
18
|
-
/// 6. Once the proposal's expiration time has passed and more than the defined threshold has voted yes on the proposal,
|
|
19
|
-
/// anyone can call resolve which returns the content of the proposal (of type ProposalType) that can be used to execute.
|
|
20
|
-
/// 7. Only the resolution script with the same script hash specified in the proposal can call Voting::resolve as part of
|
|
21
|
-
/// the resolution process.
|
|
22
|
-
module aptos_framework::voting {
|
|
23
|
-
use std::bcs::to_bytes;
|
|
24
|
-
use std::error;
|
|
25
|
-
use std::option::{Self, Option};
|
|
26
|
-
use std::signer;
|
|
27
|
-
use std::string::{String, utf8};
|
|
28
|
-
use std::vector;
|
|
29
|
-
|
|
30
|
-
use aptos_std::from_bcs::to_u64;
|
|
31
|
-
use aptos_std::simple_map::{Self, SimpleMap};
|
|
32
|
-
use aptos_std::table::{Self, Table};
|
|
33
|
-
use aptos_std::type_info::{Self, TypeInfo};
|
|
34
|
-
|
|
35
|
-
use aptos_framework::account;
|
|
36
|
-
use aptos_framework::event::{Self, EventHandle};
|
|
37
|
-
use aptos_framework::timestamp;
|
|
38
|
-
use aptos_framework::transaction_context;
|
|
39
|
-
use aptos_std::from_bcs;
|
|
40
|
-
|
|
41
|
-
/// Current script's execution hash does not match the specified proposal's
|
|
42
|
-
const EPROPOSAL_EXECUTION_HASH_NOT_MATCHING: u64 = 1;
|
|
43
|
-
/// Proposal cannot be resolved. Either voting duration has not passed, not enough votes, or fewer yes than no votes
|
|
44
|
-
const EPROPOSAL_CANNOT_BE_RESOLVED: u64 = 2;
|
|
45
|
-
/// Proposal cannot be resolved more than once
|
|
46
|
-
const EPROPOSAL_ALREADY_RESOLVED: u64 = 3;
|
|
47
|
-
/// Proposal cannot contain an empty execution script hash
|
|
48
|
-
const EPROPOSAL_EMPTY_EXECUTION_HASH: u64 = 4;
|
|
49
|
-
/// Proposal's voting period has already ended.
|
|
50
|
-
const EPROPOSAL_VOTING_ALREADY_ENDED: u64 = 5;
|
|
51
|
-
/// Voting forum has already been registered.
|
|
52
|
-
const EVOTING_FORUM_ALREADY_REGISTERED: u64 = 6;
|
|
53
|
-
/// Minimum vote threshold cannot be higher than early resolution threshold.
|
|
54
|
-
const EINVALID_MIN_VOTE_THRESHOLD: u64 = 7;
|
|
55
|
-
/// Resolution of a proposal cannot happen atomically in the same transaction as the last vote.
|
|
56
|
-
const ERESOLUTION_CANNOT_BE_ATOMIC: u64 = 8;
|
|
57
|
-
/// Cannot vote if the specified multi-step proposal is in execution.
|
|
58
|
-
const EMULTI_STEP_PROPOSAL_IN_EXECUTION: u64 = 9;
|
|
59
|
-
/// If a proposal is multi-step, we need to use `resolve_proposal_v2()` to resolve it.
|
|
60
|
-
/// If we use `resolve()` to resolve a multi-step proposal, it will fail with EMULTI_STEP_PROPOSAL_CANNOT_USE_SINGLE_STEP_RESOLVE_FUNCTION.
|
|
61
|
-
const EMULTI_STEP_PROPOSAL_CANNOT_USE_SINGLE_STEP_RESOLVE_FUNCTION: u64 = 10;
|
|
62
|
-
/// If we call `resolve_proposal_v2()` to resolve a single-step proposal, the `next_execution_hash` parameter should be an empty vector.
|
|
63
|
-
const ESINGLE_STEP_PROPOSAL_CANNOT_HAVE_NEXT_EXECUTION_HASH: u64 = 11;
|
|
64
|
-
/// Cannot call `is_multi_step_proposal_in_execution()` on single-step proposals.
|
|
65
|
-
const EPROPOSAL_IS_SINGLE_STEP: u64 = 12;
|
|
66
|
-
|
|
67
|
-
/// ProposalStateEnum representing proposal state.
|
|
68
|
-
const PROPOSAL_STATE_PENDING: u64 = 0;
|
|
69
|
-
const PROPOSAL_STATE_SUCCEEDED: u64 = 1;
|
|
70
|
-
/// Proposal has failed because either the min vote threshold is not met or majority voted no.
|
|
71
|
-
const PROPOSAL_STATE_FAILED: u64 = 3;
|
|
72
|
-
|
|
73
|
-
/// Key used to track the resolvable time in the proposal's metadata.
|
|
74
|
-
const RESOLVABLE_TIME_METADATA_KEY: vector<u8> = b"RESOLVABLE_TIME_METADATA_KEY";
|
|
75
|
-
/// Key used to track if the proposal is multi-step
|
|
76
|
-
const IS_MULTI_STEP_PROPOSAL_KEY: vector<u8> = b"IS_MULTI_STEP_PROPOSAL_KEY";
|
|
77
|
-
/// Key used to track if the multi-step proposal is in execution / resolving in progress.
|
|
78
|
-
const IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY: vector<u8> = b"IS_MULTI_STEP_PROPOSAL_IN_EXECUTION";
|
|
79
|
-
|
|
80
|
-
/// Extra metadata (e.g. description, code url) can be part of the ProposalType struct.
|
|
81
|
-
struct Proposal<ProposalType: store> has store {
|
|
82
|
-
/// Required. The address of the proposer.
|
|
83
|
-
proposer: address,
|
|
84
|
-
|
|
85
|
-
/// Required. Should contain enough information to execute later, for example the required capability.
|
|
86
|
-
/// This is stored as an option so we can return it to governance when the proposal is resolved.
|
|
87
|
-
execution_content: Option<ProposalType>,
|
|
88
|
-
|
|
89
|
-
/// Optional. Value is serialized value of an attribute.
|
|
90
|
-
/// Currently, we have three attributes that are used by the voting flow.
|
|
91
|
-
/// 1. RESOLVABLE_TIME_METADATA_KEY: this is uesed to record the resolvable time to ensure that resolution has to be done non-atomically.
|
|
92
|
-
/// 2. IS_MULTI_STEP_PROPOSAL_KEY: this is used to track if a proposal is single-step or multi-step.
|
|
93
|
-
/// 3. IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY: this attribute only applies to multi-step proposals. A single-step proposal will not have
|
|
94
|
-
/// this field in its metadata map. The value is used to indicate if a multi-step proposal is in execution. If yes, we will disable further
|
|
95
|
-
/// voting for this multi-step proposal.
|
|
96
|
-
metadata: SimpleMap<String, vector<u8>>,
|
|
97
|
-
|
|
98
|
-
/// Timestamp when the proposal was created.
|
|
99
|
-
creation_time_secs: u64,
|
|
100
|
-
|
|
101
|
-
/// Required. The hash for the execution script module. Only the same exact script module can resolve this
|
|
102
|
-
/// proposal.
|
|
103
|
-
execution_hash: vector<u8>,
|
|
104
|
-
|
|
105
|
-
/// A proposal is only resolved if expiration has passed and the number of votes is above threshold.
|
|
106
|
-
min_vote_threshold: u128,
|
|
107
|
-
expiration_secs: u64,
|
|
108
|
-
|
|
109
|
-
/// Optional. Early resolution threshold. If specified, the proposal can be resolved early if the total
|
|
110
|
-
/// number of yes or no votes passes this threshold.
|
|
111
|
-
/// For example, this can be set to 50% of the total supply of the voting token, so if > 50% vote yes or no,
|
|
112
|
-
/// the proposal can be resolved before expiration.
|
|
113
|
-
early_resolution_vote_threshold: Option<u128>,
|
|
114
|
-
|
|
115
|
-
/// Number of votes for each outcome.
|
|
116
|
-
/// u128 since the voting power is already u64 and can add up to more than u64 can hold.
|
|
117
|
-
yes_votes: u128,
|
|
118
|
-
no_votes: u128,
|
|
119
|
-
|
|
120
|
-
/// Whether the proposal has been resolved.
|
|
121
|
-
is_resolved: bool,
|
|
122
|
-
/// Resolution timestamp if the proposal has been resolved. 0 otherwise.
|
|
123
|
-
resolution_time_secs: u64,
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
struct VotingForum<ProposalType: store> has key {
|
|
127
|
-
/// Use Table for execution optimization instead of Vector for gas cost since Vector is read entirely into memory
|
|
128
|
-
/// during execution while only relevant Table entries are.
|
|
129
|
-
proposals: Table<u64, Proposal<ProposalType>>,
|
|
130
|
-
events: VotingEvents,
|
|
131
|
-
/// Unique identifier for a proposal. This allows for 2 * 10**19 proposals.
|
|
132
|
-
next_proposal_id: u64,
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
struct VotingEvents has store {
|
|
136
|
-
create_proposal_events: EventHandle<CreateProposalEvent>,
|
|
137
|
-
register_forum_events: EventHandle<RegisterForumEvent>,
|
|
138
|
-
resolve_proposal_events: EventHandle<ResolveProposal>,
|
|
139
|
-
vote_events: EventHandle<VoteEvent>,
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
#[event]
|
|
143
|
-
struct CreateProposal has drop, store {
|
|
144
|
-
proposal_id: u64,
|
|
145
|
-
early_resolution_vote_threshold: Option<u128>,
|
|
146
|
-
execution_hash: vector<u8>,
|
|
147
|
-
expiration_secs: u64,
|
|
148
|
-
metadata: SimpleMap<String, vector<u8>>,
|
|
149
|
-
min_vote_threshold: u128,
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
#[event]
|
|
153
|
-
struct RegisterForum has drop, store {
|
|
154
|
-
hosting_account: address,
|
|
155
|
-
proposal_type_info: TypeInfo,
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
#[event]
|
|
159
|
-
struct Vote has drop, store {
|
|
160
|
-
proposal_id: u64,
|
|
161
|
-
num_votes: u64,
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
#[event]
|
|
165
|
-
struct ResolveProposal has drop, store {
|
|
166
|
-
proposal_id: u64,
|
|
167
|
-
yes_votes: u128,
|
|
168
|
-
no_votes: u128,
|
|
169
|
-
resolved_early: bool
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
struct CreateProposalEvent has drop, store {
|
|
173
|
-
proposal_id: u64,
|
|
174
|
-
early_resolution_vote_threshold: Option<u128>,
|
|
175
|
-
execution_hash: vector<u8>,
|
|
176
|
-
expiration_secs: u64,
|
|
177
|
-
metadata: SimpleMap<String, vector<u8>>,
|
|
178
|
-
min_vote_threshold: u128,
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
struct RegisterForumEvent has drop, store {
|
|
182
|
-
hosting_account: address,
|
|
183
|
-
proposal_type_info: TypeInfo,
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
struct VoteEvent has drop, store {
|
|
187
|
-
proposal_id: u64,
|
|
188
|
-
num_votes: u64,
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
public fun register<ProposalType: store>(account: &signer) {
|
|
192
|
-
let addr = signer::address_of(account);
|
|
193
|
-
assert!(!exists<VotingForum<ProposalType>>(addr), error::already_exists(EVOTING_FORUM_ALREADY_REGISTERED));
|
|
194
|
-
|
|
195
|
-
let voting_forum = VotingForum<ProposalType> {
|
|
196
|
-
next_proposal_id: 0,
|
|
197
|
-
proposals: table::new<u64, Proposal<ProposalType>>(),
|
|
198
|
-
events: VotingEvents {
|
|
199
|
-
create_proposal_events: account::new_event_handle<CreateProposalEvent>(account),
|
|
200
|
-
register_forum_events: account::new_event_handle<RegisterForumEvent>(account),
|
|
201
|
-
resolve_proposal_events: account::new_event_handle<ResolveProposal>(account),
|
|
202
|
-
vote_events: account::new_event_handle<VoteEvent>(account),
|
|
203
|
-
}
|
|
204
|
-
};
|
|
205
|
-
|
|
206
|
-
if (std::features::module_event_migration_enabled()) {
|
|
207
|
-
event::emit(
|
|
208
|
-
RegisterForum {
|
|
209
|
-
hosting_account: addr,
|
|
210
|
-
proposal_type_info: type_info::type_of<ProposalType>(),
|
|
211
|
-
},
|
|
212
|
-
);
|
|
213
|
-
};
|
|
214
|
-
event::emit_event<RegisterForumEvent>(
|
|
215
|
-
&mut voting_forum.events.register_forum_events,
|
|
216
|
-
RegisterForumEvent {
|
|
217
|
-
hosting_account: addr,
|
|
218
|
-
proposal_type_info: type_info::type_of<ProposalType>(),
|
|
219
|
-
},
|
|
220
|
-
);
|
|
221
|
-
|
|
222
|
-
move_to(account, voting_forum);
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/// Create a single-step proposal with the given parameters
|
|
226
|
-
///
|
|
227
|
-
/// @param voting_forum_address The forum's address where the proposal will be stored.
|
|
228
|
-
/// @param execution_content The execution content that will be given back at resolution time. This can contain
|
|
229
|
-
/// data such as a capability resource used to scope the execution.
|
|
230
|
-
/// @param execution_hash The hash for the execution script module. Only the same exact script module can resolve
|
|
231
|
-
/// this proposal.
|
|
232
|
-
/// @param min_vote_threshold The minimum number of votes needed to consider this proposal successful.
|
|
233
|
-
/// @param expiration_secs The time in seconds at which the proposal expires and can potentially be resolved.
|
|
234
|
-
/// @param early_resolution_vote_threshold The vote threshold for early resolution of this proposal.
|
|
235
|
-
/// @param metadata A simple_map that stores information about this proposal.
|
|
236
|
-
/// @return The proposal id.
|
|
237
|
-
public fun create_proposal<ProposalType: store>(
|
|
238
|
-
proposer: address,
|
|
239
|
-
voting_forum_address: address,
|
|
240
|
-
execution_content: ProposalType,
|
|
241
|
-
execution_hash: vector<u8>,
|
|
242
|
-
min_vote_threshold: u128,
|
|
243
|
-
expiration_secs: u64,
|
|
244
|
-
early_resolution_vote_threshold: Option<u128>,
|
|
245
|
-
metadata: SimpleMap<String, vector<u8>>,
|
|
246
|
-
): u64 acquires VotingForum {
|
|
247
|
-
create_proposal_v2(
|
|
248
|
-
proposer,
|
|
249
|
-
voting_forum_address,
|
|
250
|
-
execution_content,
|
|
251
|
-
execution_hash,
|
|
252
|
-
min_vote_threshold,
|
|
253
|
-
expiration_secs,
|
|
254
|
-
early_resolution_vote_threshold,
|
|
255
|
-
metadata,
|
|
256
|
-
false
|
|
257
|
-
)
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
/// Create a single-step or a multi-step proposal with the given parameters
|
|
261
|
-
///
|
|
262
|
-
/// @param voting_forum_address The forum's address where the proposal will be stored.
|
|
263
|
-
/// @param execution_content The execution content that will be given back at resolution time. This can contain
|
|
264
|
-
/// data such as a capability resource used to scope the execution.
|
|
265
|
-
/// @param execution_hash The sha-256 hash for the execution script module. Only the same exact script module can
|
|
266
|
-
/// resolve this proposal.
|
|
267
|
-
/// @param min_vote_threshold The minimum number of votes needed to consider this proposal successful.
|
|
268
|
-
/// @param expiration_secs The time in seconds at which the proposal expires and can potentially be resolved.
|
|
269
|
-
/// @param early_resolution_vote_threshold The vote threshold for early resolution of this proposal.
|
|
270
|
-
/// @param metadata A simple_map that stores information about this proposal.
|
|
271
|
-
/// @param is_multi_step_proposal A bool value that indicates if the proposal is single-step or multi-step.
|
|
272
|
-
/// @return The proposal id.
|
|
273
|
-
public fun create_proposal_v2<ProposalType: store>(
|
|
274
|
-
proposer: address,
|
|
275
|
-
voting_forum_address: address,
|
|
276
|
-
execution_content: ProposalType,
|
|
277
|
-
execution_hash: vector<u8>,
|
|
278
|
-
min_vote_threshold: u128,
|
|
279
|
-
expiration_secs: u64,
|
|
280
|
-
early_resolution_vote_threshold: Option<u128>,
|
|
281
|
-
metadata: SimpleMap<String, vector<u8>>,
|
|
282
|
-
is_multi_step_proposal: bool,
|
|
283
|
-
): u64 acquires VotingForum {
|
|
284
|
-
if (option::is_some(&early_resolution_vote_threshold)) {
|
|
285
|
-
assert!(
|
|
286
|
-
min_vote_threshold <= *option::borrow(&early_resolution_vote_threshold),
|
|
287
|
-
error::invalid_argument(EINVALID_MIN_VOTE_THRESHOLD),
|
|
288
|
-
);
|
|
289
|
-
};
|
|
290
|
-
// Make sure the execution script's hash is not empty.
|
|
291
|
-
assert!(vector::length(&execution_hash) > 0, error::invalid_argument(EPROPOSAL_EMPTY_EXECUTION_HASH));
|
|
292
|
-
|
|
293
|
-
let voting_forum = borrow_global_mut<VotingForum<ProposalType>>(voting_forum_address);
|
|
294
|
-
let proposal_id = voting_forum.next_proposal_id;
|
|
295
|
-
voting_forum.next_proposal_id = voting_forum.next_proposal_id + 1;
|
|
296
|
-
|
|
297
|
-
// Add a flag to indicate if this proposal is single-step or multi-step.
|
|
298
|
-
simple_map::add(&mut metadata, utf8(IS_MULTI_STEP_PROPOSAL_KEY), to_bytes(&is_multi_step_proposal));
|
|
299
|
-
|
|
300
|
-
let is_multi_step_in_execution_key = utf8(IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY);
|
|
301
|
-
if (is_multi_step_proposal) {
|
|
302
|
-
// If the given proposal is a multi-step proposal, we will add a flag to indicate if this multi-step proposal is in execution.
|
|
303
|
-
// This value is by default false. We turn this value to true when we start executing the multi-step proposal. This value
|
|
304
|
-
// will be used to disable further voting after we started executing the multi-step proposal.
|
|
305
|
-
simple_map::add(&mut metadata, is_multi_step_in_execution_key, to_bytes(&false));
|
|
306
|
-
// If the proposal is a single-step proposal, we check if the metadata passed by the client has the IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY key.
|
|
307
|
-
// If they have the key, we will remove it, because a single-step proposal that doesn't need this key.
|
|
308
|
-
} else if (simple_map::contains_key(&mut metadata, &is_multi_step_in_execution_key)) {
|
|
309
|
-
simple_map::remove(&mut metadata, &is_multi_step_in_execution_key);
|
|
310
|
-
};
|
|
311
|
-
|
|
312
|
-
table::add(&mut voting_forum.proposals, proposal_id, Proposal {
|
|
313
|
-
proposer,
|
|
314
|
-
creation_time_secs: timestamp::now_seconds(),
|
|
315
|
-
execution_content: option::some<ProposalType>(execution_content),
|
|
316
|
-
execution_hash,
|
|
317
|
-
metadata,
|
|
318
|
-
min_vote_threshold,
|
|
319
|
-
expiration_secs,
|
|
320
|
-
early_resolution_vote_threshold,
|
|
321
|
-
yes_votes: 0,
|
|
322
|
-
no_votes: 0,
|
|
323
|
-
is_resolved: false,
|
|
324
|
-
resolution_time_secs: 0,
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
if (std::features::module_event_migration_enabled()) {
|
|
328
|
-
event::emit(
|
|
329
|
-
CreateProposal {
|
|
330
|
-
proposal_id,
|
|
331
|
-
early_resolution_vote_threshold,
|
|
332
|
-
execution_hash,
|
|
333
|
-
expiration_secs,
|
|
334
|
-
metadata,
|
|
335
|
-
min_vote_threshold,
|
|
336
|
-
},
|
|
337
|
-
);
|
|
338
|
-
};
|
|
339
|
-
event::emit_event<CreateProposalEvent>(
|
|
340
|
-
&mut voting_forum.events.create_proposal_events,
|
|
341
|
-
CreateProposalEvent {
|
|
342
|
-
proposal_id,
|
|
343
|
-
early_resolution_vote_threshold,
|
|
344
|
-
execution_hash,
|
|
345
|
-
expiration_secs,
|
|
346
|
-
metadata,
|
|
347
|
-
min_vote_threshold,
|
|
348
|
-
},
|
|
349
|
-
);
|
|
350
|
-
|
|
351
|
-
proposal_id
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
/// Vote on the given proposal.
|
|
355
|
-
///
|
|
356
|
-
/// @param _proof Required so only the governance module that defines ProposalType can initiate voting.
|
|
357
|
-
/// This guarantees that voting eligibility and voting power are controlled by the right governance.
|
|
358
|
-
/// @param voting_forum_address The address of the forum where the proposals are stored.
|
|
359
|
-
/// @param proposal_id The proposal id.
|
|
360
|
-
/// @param num_votes Number of votes. Voting power should be calculated by governance.
|
|
361
|
-
/// @param should_pass Whether the votes are for yes or no.
|
|
362
|
-
public fun vote<ProposalType: store>(
|
|
363
|
-
_proof: &ProposalType,
|
|
364
|
-
voting_forum_address: address,
|
|
365
|
-
proposal_id: u64,
|
|
366
|
-
num_votes: u64,
|
|
367
|
-
should_pass: bool,
|
|
368
|
-
) acquires VotingForum {
|
|
369
|
-
let voting_forum = borrow_global_mut<VotingForum<ProposalType>>(voting_forum_address);
|
|
370
|
-
let proposal = table::borrow_mut(&mut voting_forum.proposals, proposal_id);
|
|
371
|
-
// Voting might still be possible after the proposal has enough yes votes to be resolved early. This would only
|
|
372
|
-
// lead to possible proposal resolution failure if the resolve early threshold is not definitive (e.g. < 50% + 1
|
|
373
|
-
// of the total voting token's supply). In this case, more voting might actually still be desirable.
|
|
374
|
-
// Governance mechanisms built on this voting module can apply additional rules on when voting is closed as
|
|
375
|
-
// appropriate.
|
|
376
|
-
assert!(!is_voting_period_over(proposal), error::invalid_state(EPROPOSAL_VOTING_ALREADY_ENDED));
|
|
377
|
-
assert!(!proposal.is_resolved, error::invalid_state(EPROPOSAL_ALREADY_RESOLVED));
|
|
378
|
-
// Assert this proposal is single-step, or if the proposal is multi-step, it is not in execution yet.
|
|
379
|
-
assert!(!simple_map::contains_key(&proposal.metadata, &utf8(IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY))
|
|
380
|
-
|| *simple_map::borrow(&proposal.metadata, &utf8(IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY)) == to_bytes(
|
|
381
|
-
&false
|
|
382
|
-
),
|
|
383
|
-
error::invalid_state(EMULTI_STEP_PROPOSAL_IN_EXECUTION));
|
|
384
|
-
|
|
385
|
-
if (should_pass) {
|
|
386
|
-
proposal.yes_votes = proposal.yes_votes + (num_votes as u128);
|
|
387
|
-
} else {
|
|
388
|
-
proposal.no_votes = proposal.no_votes + (num_votes as u128);
|
|
389
|
-
};
|
|
390
|
-
|
|
391
|
-
// Record the resolvable time to ensure that resolution has to be done non-atomically.
|
|
392
|
-
let timestamp_secs_bytes = to_bytes(×tamp::now_seconds());
|
|
393
|
-
let key = utf8(RESOLVABLE_TIME_METADATA_KEY);
|
|
394
|
-
if (simple_map::contains_key(&proposal.metadata, &key)) {
|
|
395
|
-
*simple_map::borrow_mut(&mut proposal.metadata, &key) = timestamp_secs_bytes;
|
|
396
|
-
} else {
|
|
397
|
-
simple_map::add(&mut proposal.metadata, key, timestamp_secs_bytes);
|
|
398
|
-
};
|
|
399
|
-
|
|
400
|
-
if (std::features::module_event_migration_enabled()) {
|
|
401
|
-
event::emit(Vote { proposal_id, num_votes });
|
|
402
|
-
};
|
|
403
|
-
event::emit_event<VoteEvent>(
|
|
404
|
-
&mut voting_forum.events.vote_events,
|
|
405
|
-
VoteEvent { proposal_id, num_votes },
|
|
406
|
-
);
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
/// Common checks on if a proposal is resolvable, regardless if the proposal is single-step or multi-step.
|
|
410
|
-
fun is_proposal_resolvable<ProposalType: store>(
|
|
411
|
-
voting_forum_address: address,
|
|
412
|
-
proposal_id: u64,
|
|
413
|
-
) acquires VotingForum {
|
|
414
|
-
let proposal_state = get_proposal_state<ProposalType>(voting_forum_address, proposal_id);
|
|
415
|
-
assert!(proposal_state == PROPOSAL_STATE_SUCCEEDED, error::invalid_state(EPROPOSAL_CANNOT_BE_RESOLVED));
|
|
416
|
-
|
|
417
|
-
let voting_forum = borrow_global_mut<VotingForum<ProposalType>>(voting_forum_address);
|
|
418
|
-
let proposal = table::borrow_mut(&mut voting_forum.proposals, proposal_id);
|
|
419
|
-
assert!(!proposal.is_resolved, error::invalid_state(EPROPOSAL_ALREADY_RESOLVED));
|
|
420
|
-
|
|
421
|
-
// We need to make sure that the resolution is happening in
|
|
422
|
-
// a separate transaction from the last vote to guard against any potential flashloan attacks.
|
|
423
|
-
let resolvable_time = to_u64(*simple_map::borrow(&proposal.metadata, &utf8(RESOLVABLE_TIME_METADATA_KEY)));
|
|
424
|
-
assert!(timestamp::now_seconds() > resolvable_time, error::invalid_state(ERESOLUTION_CANNOT_BE_ATOMIC));
|
|
425
|
-
|
|
426
|
-
assert!(
|
|
427
|
-
transaction_context::get_script_hash() == proposal.execution_hash,
|
|
428
|
-
error::invalid_argument(EPROPOSAL_EXECUTION_HASH_NOT_MATCHING),
|
|
429
|
-
);
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
/// Resolve a single-step proposal with given id. Can only be done if there are at least as many votes as min required and
|
|
433
|
-
/// there are more yes votes than no. If either of these conditions is not met, this will revert.
|
|
434
|
-
///
|
|
435
|
-
/// @param voting_forum_address The address of the forum where the proposals are stored.
|
|
436
|
-
/// @param proposal_id The proposal id.
|
|
437
|
-
public fun resolve<ProposalType: store>(
|
|
438
|
-
voting_forum_address: address,
|
|
439
|
-
proposal_id: u64,
|
|
440
|
-
): ProposalType acquires VotingForum {
|
|
441
|
-
is_proposal_resolvable<ProposalType>(voting_forum_address, proposal_id);
|
|
442
|
-
|
|
443
|
-
let voting_forum = borrow_global_mut<VotingForum<ProposalType>>(voting_forum_address);
|
|
444
|
-
let proposal = table::borrow_mut(&mut voting_forum.proposals, proposal_id);
|
|
445
|
-
|
|
446
|
-
// Assert that the specified proposal is not a multi-step proposal.
|
|
447
|
-
let multi_step_key = utf8(IS_MULTI_STEP_PROPOSAL_KEY);
|
|
448
|
-
let has_multi_step_key = simple_map::contains_key(&proposal.metadata, &multi_step_key);
|
|
449
|
-
if (has_multi_step_key) {
|
|
450
|
-
let is_multi_step_proposal = from_bcs::to_bool(*simple_map::borrow(&proposal.metadata, &multi_step_key));
|
|
451
|
-
assert!(
|
|
452
|
-
!is_multi_step_proposal,
|
|
453
|
-
error::permission_denied(EMULTI_STEP_PROPOSAL_CANNOT_USE_SINGLE_STEP_RESOLVE_FUNCTION)
|
|
454
|
-
);
|
|
455
|
-
};
|
|
456
|
-
|
|
457
|
-
let resolved_early = can_be_resolved_early(proposal);
|
|
458
|
-
proposal.is_resolved = true;
|
|
459
|
-
proposal.resolution_time_secs = timestamp::now_seconds();
|
|
460
|
-
|
|
461
|
-
if (std::features::module_event_migration_enabled()) {
|
|
462
|
-
event::emit(
|
|
463
|
-
ResolveProposal {
|
|
464
|
-
proposal_id,
|
|
465
|
-
yes_votes: proposal.yes_votes,
|
|
466
|
-
no_votes: proposal.no_votes,
|
|
467
|
-
resolved_early,
|
|
468
|
-
},
|
|
469
|
-
);
|
|
470
|
-
};
|
|
471
|
-
event::emit_event<ResolveProposal>(
|
|
472
|
-
&mut voting_forum.events.resolve_proposal_events,
|
|
473
|
-
ResolveProposal {
|
|
474
|
-
proposal_id,
|
|
475
|
-
yes_votes: proposal.yes_votes,
|
|
476
|
-
no_votes: proposal.no_votes,
|
|
477
|
-
resolved_early,
|
|
478
|
-
},
|
|
479
|
-
);
|
|
480
|
-
|
|
481
|
-
option::extract(&mut proposal.execution_content)
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
/// Resolve a single-step or a multi-step proposal with the given id.
|
|
485
|
-
/// Can only be done if there are at least as many votes as min required and
|
|
486
|
-
/// there are more yes votes than no. If either of these conditions is not met, this will revert.
|
|
487
|
-
///
|
|
488
|
-
///
|
|
489
|
-
/// @param voting_forum_address The address of the forum where the proposals are stored.
|
|
490
|
-
/// @param proposal_id The proposal id.
|
|
491
|
-
/// @param next_execution_hash The next execution hash if the given proposal is multi-step.
|
|
492
|
-
public fun resolve_proposal_v2<ProposalType: store>(
|
|
493
|
-
voting_forum_address: address,
|
|
494
|
-
proposal_id: u64,
|
|
495
|
-
next_execution_hash: vector<u8>,
|
|
496
|
-
) acquires VotingForum {
|
|
497
|
-
is_proposal_resolvable<ProposalType>(voting_forum_address, proposal_id);
|
|
498
|
-
|
|
499
|
-
let voting_forum = borrow_global_mut<VotingForum<ProposalType>>(voting_forum_address);
|
|
500
|
-
let proposal = table::borrow_mut(&mut voting_forum.proposals, proposal_id);
|
|
501
|
-
|
|
502
|
-
// Update the IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY key to indicate that the multi-step proposal is in execution.
|
|
503
|
-
let multi_step_in_execution_key = utf8(IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY);
|
|
504
|
-
if (simple_map::contains_key(&proposal.metadata, &multi_step_in_execution_key)) {
|
|
505
|
-
let is_multi_step_proposal_in_execution_value = simple_map::borrow_mut(
|
|
506
|
-
&mut proposal.metadata,
|
|
507
|
-
&multi_step_in_execution_key
|
|
508
|
-
);
|
|
509
|
-
*is_multi_step_proposal_in_execution_value = to_bytes(&true);
|
|
510
|
-
};
|
|
511
|
-
|
|
512
|
-
let multi_step_key = utf8(IS_MULTI_STEP_PROPOSAL_KEY);
|
|
513
|
-
let is_multi_step = simple_map::contains_key(&proposal.metadata, &multi_step_key) && from_bcs::to_bool(
|
|
514
|
-
*simple_map::borrow(&proposal.metadata, &multi_step_key)
|
|
515
|
-
);
|
|
516
|
-
let next_execution_hash_is_empty = vector::length(&next_execution_hash) == 0;
|
|
517
|
-
|
|
518
|
-
// Assert that if this proposal is single-step, the `next_execution_hash` parameter is empty.
|
|
519
|
-
assert!(
|
|
520
|
-
is_multi_step || next_execution_hash_is_empty,
|
|
521
|
-
error::invalid_argument(ESINGLE_STEP_PROPOSAL_CANNOT_HAVE_NEXT_EXECUTION_HASH)
|
|
522
|
-
);
|
|
523
|
-
|
|
524
|
-
// If the `next_execution_hash` parameter is empty, it means that either
|
|
525
|
-
// - this proposal is a single-step proposal, or
|
|
526
|
-
// - this proposal is multi-step and we're currently resolving the last step in the multi-step proposal.
|
|
527
|
-
// We can mark that this proposal is resolved.
|
|
528
|
-
if (next_execution_hash_is_empty) {
|
|
529
|
-
proposal.is_resolved = true;
|
|
530
|
-
proposal.resolution_time_secs = timestamp::now_seconds();
|
|
531
|
-
|
|
532
|
-
// Set the `IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY` value to false upon successful resolution of the last step of a multi-step proposal.
|
|
533
|
-
if (is_multi_step) {
|
|
534
|
-
let is_multi_step_proposal_in_execution_value = simple_map::borrow_mut(
|
|
535
|
-
&mut proposal.metadata,
|
|
536
|
-
&multi_step_in_execution_key
|
|
537
|
-
);
|
|
538
|
-
*is_multi_step_proposal_in_execution_value = to_bytes(&false);
|
|
539
|
-
};
|
|
540
|
-
} else {
|
|
541
|
-
// If the current step is not the last step,
|
|
542
|
-
// update the proposal's execution hash on-chain to the execution hash of the next step.
|
|
543
|
-
proposal.execution_hash = next_execution_hash;
|
|
544
|
-
};
|
|
545
|
-
|
|
546
|
-
// For single-step proposals, we emit one `ResolveProposal` event per proposal.
|
|
547
|
-
// For multi-step proposals, we emit one `ResolveProposal` event per step in the multi-step proposal. This means
|
|
548
|
-
// that we emit multiple `ResolveProposal` events for the same multi-step proposal.
|
|
549
|
-
let resolved_early = can_be_resolved_early(proposal);
|
|
550
|
-
if (std::features::module_event_migration_enabled()) {
|
|
551
|
-
event::emit(
|
|
552
|
-
ResolveProposal {
|
|
553
|
-
proposal_id,
|
|
554
|
-
yes_votes: proposal.yes_votes,
|
|
555
|
-
no_votes: proposal.no_votes,
|
|
556
|
-
resolved_early,
|
|
557
|
-
},
|
|
558
|
-
);
|
|
559
|
-
};
|
|
560
|
-
event::emit_event(
|
|
561
|
-
&mut voting_forum.events.resolve_proposal_events,
|
|
562
|
-
ResolveProposal {
|
|
563
|
-
proposal_id,
|
|
564
|
-
yes_votes: proposal.yes_votes,
|
|
565
|
-
no_votes: proposal.no_votes,
|
|
566
|
-
resolved_early,
|
|
567
|
-
},
|
|
568
|
-
);
|
|
569
|
-
|
|
570
|
-
}
|
|
571
|
-
|
|
572
|
-
#[view]
|
|
573
|
-
/// Return the next unassigned proposal id
|
|
574
|
-
public fun next_proposal_id<ProposalType: store>(voting_forum_address: address, ): u64 acquires VotingForum {
|
|
575
|
-
let voting_forum = borrow_global<VotingForum<ProposalType>>(voting_forum_address);
|
|
576
|
-
voting_forum.next_proposal_id
|
|
577
|
-
}
|
|
578
|
-
|
|
579
|
-
#[view]
|
|
580
|
-
public fun get_proposer<ProposalType: store>(
|
|
581
|
-
voting_forum_address: address,
|
|
582
|
-
proposal_id: u64
|
|
583
|
-
): address acquires VotingForum {
|
|
584
|
-
let proposal = get_proposal<ProposalType>(voting_forum_address, proposal_id);
|
|
585
|
-
proposal.proposer
|
|
586
|
-
}
|
|
587
|
-
|
|
588
|
-
#[view]
|
|
589
|
-
public fun is_voting_closed<ProposalType: store>(
|
|
590
|
-
voting_forum_address: address,
|
|
591
|
-
proposal_id: u64
|
|
592
|
-
): bool acquires VotingForum {
|
|
593
|
-
let proposal = get_proposal<ProposalType>(voting_forum_address, proposal_id);
|
|
594
|
-
can_be_resolved_early(proposal) || is_voting_period_over(proposal)
|
|
595
|
-
}
|
|
596
|
-
|
|
597
|
-
/// Return true if the proposal has reached early resolution threshold (if specified).
|
|
598
|
-
public fun can_be_resolved_early<ProposalType: store>(proposal: &Proposal<ProposalType>): bool {
|
|
599
|
-
if (option::is_some(&proposal.early_resolution_vote_threshold)) {
|
|
600
|
-
let early_resolution_threshold = *option::borrow(&proposal.early_resolution_vote_threshold);
|
|
601
|
-
if (proposal.yes_votes >= early_resolution_threshold || proposal.no_votes >= early_resolution_threshold) {
|
|
602
|
-
return true
|
|
603
|
-
};
|
|
604
|
-
};
|
|
605
|
-
false
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
#[view]
|
|
609
|
-
public fun get_proposal_metadata<ProposalType: store>(
|
|
610
|
-
voting_forum_address: address,
|
|
611
|
-
proposal_id: u64,
|
|
612
|
-
): SimpleMap<String, vector<u8>> acquires VotingForum {
|
|
613
|
-
let proposal = get_proposal<ProposalType>(voting_forum_address, proposal_id);
|
|
614
|
-
proposal.metadata
|
|
615
|
-
}
|
|
616
|
-
|
|
617
|
-
#[view]
|
|
618
|
-
public fun get_proposal_metadata_value<ProposalType: store>(
|
|
619
|
-
voting_forum_address: address,
|
|
620
|
-
proposal_id: u64,
|
|
621
|
-
metadata_key: String,
|
|
622
|
-
): vector<u8> acquires VotingForum {
|
|
623
|
-
let proposal = get_proposal<ProposalType>(voting_forum_address, proposal_id);
|
|
624
|
-
*simple_map::borrow(&proposal.metadata, &metadata_key)
|
|
625
|
-
}
|
|
626
|
-
|
|
627
|
-
#[view]
|
|
628
|
-
/// Return the state of the proposal with given id.
|
|
629
|
-
///
|
|
630
|
-
/// @param voting_forum_address The address of the forum where the proposals are stored.
|
|
631
|
-
/// @param proposal_id The proposal id.
|
|
632
|
-
/// @return Proposal state as an enum value.
|
|
633
|
-
public fun get_proposal_state<ProposalType: store>(
|
|
634
|
-
voting_forum_address: address,
|
|
635
|
-
proposal_id: u64,
|
|
636
|
-
): u64 acquires VotingForum {
|
|
637
|
-
if (is_voting_closed<ProposalType>(voting_forum_address, proposal_id)) {
|
|
638
|
-
let proposal = get_proposal<ProposalType>(voting_forum_address, proposal_id);
|
|
639
|
-
let yes_votes = proposal.yes_votes;
|
|
640
|
-
let no_votes = proposal.no_votes;
|
|
641
|
-
|
|
642
|
-
if (yes_votes > no_votes && yes_votes + no_votes >= proposal.min_vote_threshold) {
|
|
643
|
-
PROPOSAL_STATE_SUCCEEDED
|
|
644
|
-
} else {
|
|
645
|
-
PROPOSAL_STATE_FAILED
|
|
646
|
-
}
|
|
647
|
-
} else {
|
|
648
|
-
PROPOSAL_STATE_PENDING
|
|
649
|
-
}
|
|
650
|
-
}
|
|
651
|
-
|
|
652
|
-
#[view]
|
|
653
|
-
/// Return the proposal's creation time.
|
|
654
|
-
public fun get_proposal_creation_secs<ProposalType: store>(
|
|
655
|
-
voting_forum_address: address,
|
|
656
|
-
proposal_id: u64,
|
|
657
|
-
): u64 acquires VotingForum {
|
|
658
|
-
let proposal = get_proposal<ProposalType>(voting_forum_address, proposal_id);
|
|
659
|
-
proposal.creation_time_secs
|
|
660
|
-
}
|
|
661
|
-
|
|
662
|
-
#[view]
|
|
663
|
-
/// Return the proposal's expiration time.
|
|
664
|
-
public fun get_proposal_expiration_secs<ProposalType: store>(
|
|
665
|
-
voting_forum_address: address,
|
|
666
|
-
proposal_id: u64,
|
|
667
|
-
): u64 acquires VotingForum {
|
|
668
|
-
let proposal = get_proposal<ProposalType>(voting_forum_address, proposal_id);
|
|
669
|
-
proposal.expiration_secs
|
|
670
|
-
}
|
|
671
|
-
|
|
672
|
-
#[view]
|
|
673
|
-
/// Return the proposal's execution hash.
|
|
674
|
-
public fun get_execution_hash<ProposalType: store>(
|
|
675
|
-
voting_forum_address: address,
|
|
676
|
-
proposal_id: u64,
|
|
677
|
-
): vector<u8> acquires VotingForum {
|
|
678
|
-
let proposal = get_proposal<ProposalType>(voting_forum_address, proposal_id);
|
|
679
|
-
proposal.execution_hash
|
|
680
|
-
}
|
|
681
|
-
|
|
682
|
-
#[view]
|
|
683
|
-
/// Return the proposal's minimum vote threshold
|
|
684
|
-
public fun get_min_vote_threshold<ProposalType: store>(
|
|
685
|
-
voting_forum_address: address,
|
|
686
|
-
proposal_id: u64,
|
|
687
|
-
): u128 acquires VotingForum {
|
|
688
|
-
let proposal = get_proposal<ProposalType>(voting_forum_address, proposal_id);
|
|
689
|
-
proposal.min_vote_threshold
|
|
690
|
-
}
|
|
691
|
-
|
|
692
|
-
#[view]
|
|
693
|
-
/// Return the proposal's early resolution minimum vote threshold (optionally set)
|
|
694
|
-
public fun get_early_resolution_vote_threshold<ProposalType: store>(
|
|
695
|
-
voting_forum_address: address,
|
|
696
|
-
proposal_id: u64,
|
|
697
|
-
): Option<u128> acquires VotingForum {
|
|
698
|
-
let proposal = get_proposal<ProposalType>(voting_forum_address, proposal_id);
|
|
699
|
-
proposal.early_resolution_vote_threshold
|
|
700
|
-
}
|
|
701
|
-
|
|
702
|
-
#[view]
|
|
703
|
-
/// Return the proposal's current vote count (yes_votes, no_votes)
|
|
704
|
-
public fun get_votes<ProposalType: store>(
|
|
705
|
-
voting_forum_address: address,
|
|
706
|
-
proposal_id: u64,
|
|
707
|
-
): (u128, u128) acquires VotingForum {
|
|
708
|
-
let proposal = get_proposal<ProposalType>(voting_forum_address, proposal_id);
|
|
709
|
-
(proposal.yes_votes, proposal.no_votes)
|
|
710
|
-
}
|
|
711
|
-
|
|
712
|
-
#[view]
|
|
713
|
-
/// Return true if the governance proposal has already been resolved.
|
|
714
|
-
public fun is_resolved<ProposalType: store>(
|
|
715
|
-
voting_forum_address: address,
|
|
716
|
-
proposal_id: u64,
|
|
717
|
-
): bool acquires VotingForum {
|
|
718
|
-
let proposal = get_proposal<ProposalType>(voting_forum_address, proposal_id);
|
|
719
|
-
proposal.is_resolved
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
#[view]
|
|
723
|
-
public fun get_resolution_time_secs<ProposalType: store>(
|
|
724
|
-
voting_forum_address: address,
|
|
725
|
-
proposal_id: u64,
|
|
726
|
-
): u64 acquires VotingForum {
|
|
727
|
-
let proposal = get_proposal<ProposalType>(voting_forum_address, proposal_id);
|
|
728
|
-
proposal.resolution_time_secs
|
|
729
|
-
}
|
|
730
|
-
|
|
731
|
-
#[view]
|
|
732
|
-
/// Return true if the multi-step governance proposal is in execution.
|
|
733
|
-
public fun is_multi_step_proposal_in_execution<ProposalType: store>(
|
|
734
|
-
voting_forum_address: address,
|
|
735
|
-
proposal_id: u64,
|
|
736
|
-
): bool acquires VotingForum {
|
|
737
|
-
let voting_forum = borrow_global<VotingForum<ProposalType>>(voting_forum_address);
|
|
738
|
-
let proposal = table::borrow(&voting_forum.proposals, proposal_id);
|
|
739
|
-
let is_multi_step_in_execution_key = utf8(IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY);
|
|
740
|
-
assert!(
|
|
741
|
-
simple_map::contains_key(&proposal.metadata, &is_multi_step_in_execution_key),
|
|
742
|
-
error::invalid_argument(EPROPOSAL_IS_SINGLE_STEP)
|
|
743
|
-
);
|
|
744
|
-
from_bcs::to_bool(*simple_map::borrow(&proposal.metadata, &is_multi_step_in_execution_key))
|
|
745
|
-
}
|
|
746
|
-
|
|
747
|
-
/// Return true if the voting period of the given proposal has already ended.
|
|
748
|
-
fun is_voting_period_over<ProposalType: store>(proposal: &Proposal<ProposalType>): bool {
|
|
749
|
-
timestamp::now_seconds() > proposal.expiration_secs
|
|
750
|
-
}
|
|
751
|
-
|
|
752
|
-
inline fun get_proposal<ProposalType: store>(
|
|
753
|
-
voting_forum_address: address,
|
|
754
|
-
proposal_id: u64,
|
|
755
|
-
): &Proposal<ProposalType> acquires VotingForum {
|
|
756
|
-
let voting_forum = borrow_global<VotingForum<ProposalType>>(voting_forum_address);
|
|
757
|
-
table::borrow(&voting_forum.proposals, proposal_id)
|
|
758
|
-
}
|
|
759
|
-
|
|
760
|
-
#[test_only]
|
|
761
|
-
struct TestProposal has store {}
|
|
762
|
-
|
|
763
|
-
#[test_only]
|
|
764
|
-
const VOTING_DURATION_SECS: u64 = 100000;
|
|
765
|
-
|
|
766
|
-
#[test_only]
|
|
767
|
-
public fun create_test_proposal_generic(
|
|
768
|
-
governance: &signer,
|
|
769
|
-
early_resolution_threshold: Option<u128>,
|
|
770
|
-
use_generic_create_proposal_function: bool,
|
|
771
|
-
): u64 acquires VotingForum {
|
|
772
|
-
// Register voting forum and create a proposal.
|
|
773
|
-
register<TestProposal>(governance);
|
|
774
|
-
let governance_address = signer::address_of(governance);
|
|
775
|
-
let proposal = TestProposal {};
|
|
776
|
-
|
|
777
|
-
// This works because our Move unit test extensions mock out the execution hash to be [1].
|
|
778
|
-
let execution_hash = vector::empty<u8>();
|
|
779
|
-
vector::push_back(&mut execution_hash, 1);
|
|
780
|
-
let metadata = simple_map::create<String, vector<u8>>();
|
|
781
|
-
|
|
782
|
-
if (use_generic_create_proposal_function) {
|
|
783
|
-
create_proposal_v2<TestProposal>(
|
|
784
|
-
governance_address,
|
|
785
|
-
governance_address,
|
|
786
|
-
proposal,
|
|
787
|
-
execution_hash,
|
|
788
|
-
10,
|
|
789
|
-
timestamp::now_seconds() + VOTING_DURATION_SECS,
|
|
790
|
-
early_resolution_threshold,
|
|
791
|
-
metadata,
|
|
792
|
-
use_generic_create_proposal_function
|
|
793
|
-
)
|
|
794
|
-
} else {
|
|
795
|
-
create_proposal<TestProposal>(
|
|
796
|
-
governance_address,
|
|
797
|
-
governance_address,
|
|
798
|
-
proposal,
|
|
799
|
-
execution_hash,
|
|
800
|
-
10,
|
|
801
|
-
timestamp::now_seconds() + VOTING_DURATION_SECS,
|
|
802
|
-
early_resolution_threshold,
|
|
803
|
-
metadata,
|
|
804
|
-
)
|
|
805
|
-
}
|
|
806
|
-
}
|
|
807
|
-
|
|
808
|
-
#[test_only]
|
|
809
|
-
public fun resolve_proposal_for_test<ProposalType>(
|
|
810
|
-
voting_forum_address: address,
|
|
811
|
-
proposal_id: u64,
|
|
812
|
-
is_multi_step: bool,
|
|
813
|
-
finish_multi_step_execution: bool
|
|
814
|
-
) acquires VotingForum {
|
|
815
|
-
if (is_multi_step) {
|
|
816
|
-
let execution_hash = vector::empty<u8>();
|
|
817
|
-
vector::push_back(&mut execution_hash, 1);
|
|
818
|
-
resolve_proposal_v2<TestProposal>(voting_forum_address, proposal_id, execution_hash);
|
|
819
|
-
|
|
820
|
-
if (finish_multi_step_execution) {
|
|
821
|
-
resolve_proposal_v2<TestProposal>(voting_forum_address, proposal_id, vector::empty<u8>());
|
|
822
|
-
};
|
|
823
|
-
} else {
|
|
824
|
-
let proposal = resolve<TestProposal>(voting_forum_address, proposal_id);
|
|
825
|
-
let TestProposal {} = proposal;
|
|
826
|
-
};
|
|
827
|
-
}
|
|
828
|
-
|
|
829
|
-
#[test_only]
|
|
830
|
-
public fun create_test_proposal(
|
|
831
|
-
governance: &signer,
|
|
832
|
-
early_resolution_threshold: Option<u128>,
|
|
833
|
-
): u64 acquires VotingForum {
|
|
834
|
-
create_test_proposal_generic(governance, early_resolution_threshold, false)
|
|
835
|
-
}
|
|
836
|
-
|
|
837
|
-
#[test_only]
|
|
838
|
-
public fun create_proposal_with_empty_execution_hash_should_fail_generic(
|
|
839
|
-
governance: &signer,
|
|
840
|
-
is_multi_step: bool
|
|
841
|
-
) acquires VotingForum {
|
|
842
|
-
account::create_account_for_test(@aptos_framework);
|
|
843
|
-
let governance_address = signer::address_of(governance);
|
|
844
|
-
account::create_account_for_test(governance_address);
|
|
845
|
-
register<TestProposal>(governance);
|
|
846
|
-
let proposal = TestProposal {};
|
|
847
|
-
|
|
848
|
-
// This should fail because execution hash is empty.
|
|
849
|
-
if (is_multi_step) {
|
|
850
|
-
create_proposal_v2<TestProposal>(
|
|
851
|
-
governance_address,
|
|
852
|
-
governance_address,
|
|
853
|
-
proposal,
|
|
854
|
-
b"",
|
|
855
|
-
10,
|
|
856
|
-
100000,
|
|
857
|
-
option::none<u128>(),
|
|
858
|
-
simple_map::create<String, vector<u8>>(),
|
|
859
|
-
is_multi_step
|
|
860
|
-
);
|
|
861
|
-
} else {
|
|
862
|
-
create_proposal<TestProposal>(
|
|
863
|
-
governance_address,
|
|
864
|
-
governance_address,
|
|
865
|
-
proposal,
|
|
866
|
-
b"",
|
|
867
|
-
10,
|
|
868
|
-
100000,
|
|
869
|
-
option::none<u128>(),
|
|
870
|
-
simple_map::create<String, vector<u8>>(),
|
|
871
|
-
);
|
|
872
|
-
};
|
|
873
|
-
}
|
|
874
|
-
|
|
875
|
-
#[test(governance = @0x123)]
|
|
876
|
-
#[expected_failure(abort_code = 0x10004, location = Self)]
|
|
877
|
-
public fun create_proposal_with_empty_execution_hash_should_fail(governance: &signer) acquires VotingForum {
|
|
878
|
-
create_proposal_with_empty_execution_hash_should_fail_generic(governance, false);
|
|
879
|
-
}
|
|
880
|
-
|
|
881
|
-
#[test(governance = @0x123)]
|
|
882
|
-
#[expected_failure(abort_code = 0x10004, location = Self)]
|
|
883
|
-
public fun create_proposal_with_empty_execution_hash_should_fail_multi_step(
|
|
884
|
-
governance: &signer
|
|
885
|
-
) acquires VotingForum {
|
|
886
|
-
create_proposal_with_empty_execution_hash_should_fail_generic(governance, true);
|
|
887
|
-
}
|
|
888
|
-
|
|
889
|
-
#[test_only]
|
|
890
|
-
public entry fun test_voting_passed_generic(
|
|
891
|
-
aptos_framework: &signer,
|
|
892
|
-
governance: &signer,
|
|
893
|
-
use_create_multi_step: bool,
|
|
894
|
-
use_resolve_multi_step: bool
|
|
895
|
-
) acquires VotingForum {
|
|
896
|
-
account::create_account_for_test(@aptos_framework);
|
|
897
|
-
timestamp::set_time_has_started_for_testing(aptos_framework);
|
|
898
|
-
|
|
899
|
-
// Register voting forum and create a proposal.
|
|
900
|
-
let governance_address = signer::address_of(governance);
|
|
901
|
-
account::create_account_for_test(governance_address);
|
|
902
|
-
let proposal_id = create_test_proposal_generic(governance, option::none<u128>(), use_create_multi_step);
|
|
903
|
-
assert!(get_proposal_state<TestProposal>(governance_address, proposal_id) == PROPOSAL_STATE_PENDING, 0);
|
|
904
|
-
|
|
905
|
-
// Vote.
|
|
906
|
-
let proof = TestProposal {};
|
|
907
|
-
vote<TestProposal>(&proof, governance_address, proposal_id, 10, true);
|
|
908
|
-
let TestProposal {} = proof;
|
|
909
|
-
|
|
910
|
-
// Resolve.
|
|
911
|
-
timestamp::fast_forward_seconds(VOTING_DURATION_SECS + 1);
|
|
912
|
-
assert!(get_proposal_state<TestProposal>(governance_address, proposal_id) == PROPOSAL_STATE_SUCCEEDED, 1);
|
|
913
|
-
|
|
914
|
-
// This if statement is specifically for the test `test_voting_passed_single_step_can_use_generic_function()`.
|
|
915
|
-
// It's testing when we have a single-step proposal that was created by the single-step `create_proposal()`,
|
|
916
|
-
// we should be able to successfully resolve it using the generic `resolve_proposal_v2` function.
|
|
917
|
-
if (!use_create_multi_step && use_resolve_multi_step) {
|
|
918
|
-
resolve_proposal_v2<TestProposal>(governance_address, proposal_id, vector::empty<u8>());
|
|
919
|
-
} else {
|
|
920
|
-
resolve_proposal_for_test<TestProposal>(governance_address, proposal_id, use_resolve_multi_step, true);
|
|
921
|
-
};
|
|
922
|
-
let voting_forum = borrow_global<VotingForum<TestProposal>>(governance_address);
|
|
923
|
-
assert!(table::borrow(&voting_forum.proposals, proposal_id).is_resolved, 2);
|
|
924
|
-
}
|
|
925
|
-
|
|
926
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
927
|
-
public entry fun test_voting_passed(aptos_framework: &signer, governance: &signer) acquires VotingForum {
|
|
928
|
-
test_voting_passed_generic(aptos_framework, governance, false, false);
|
|
929
|
-
}
|
|
930
|
-
|
|
931
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
932
|
-
public entry fun test_voting_passed_multi_step(aptos_framework: &signer, governance: &signer) acquires VotingForum {
|
|
933
|
-
test_voting_passed_generic(aptos_framework, governance, true, true);
|
|
934
|
-
}
|
|
935
|
-
|
|
936
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
937
|
-
#[expected_failure(abort_code = 0x5000a, location = Self)]
|
|
938
|
-
public entry fun test_voting_passed_multi_step_cannot_use_single_step_resolve_function(
|
|
939
|
-
aptos_framework: &signer,
|
|
940
|
-
governance: &signer
|
|
941
|
-
) acquires VotingForum {
|
|
942
|
-
test_voting_passed_generic(aptos_framework, governance, true, false);
|
|
943
|
-
}
|
|
944
|
-
|
|
945
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
946
|
-
public entry fun test_voting_passed_single_step_can_use_generic_function(
|
|
947
|
-
aptos_framework: &signer,
|
|
948
|
-
governance: &signer
|
|
949
|
-
) acquires VotingForum {
|
|
950
|
-
test_voting_passed_generic(aptos_framework, governance, false, true);
|
|
951
|
-
}
|
|
952
|
-
|
|
953
|
-
#[test_only]
|
|
954
|
-
public entry fun test_cannot_resolve_twice_generic(
|
|
955
|
-
aptos_framework: &signer,
|
|
956
|
-
governance: &signer,
|
|
957
|
-
is_multi_step: bool
|
|
958
|
-
) acquires VotingForum {
|
|
959
|
-
account::create_account_for_test(@aptos_framework);
|
|
960
|
-
timestamp::set_time_has_started_for_testing(aptos_framework);
|
|
961
|
-
|
|
962
|
-
// Register voting forum and create a proposal.
|
|
963
|
-
let governance_address = signer::address_of(governance);
|
|
964
|
-
account::create_account_for_test(governance_address);
|
|
965
|
-
let proposal_id = create_test_proposal_generic(governance, option::none<u128>(), is_multi_step);
|
|
966
|
-
assert!(get_proposal_state<TestProposal>(governance_address, proposal_id) == PROPOSAL_STATE_PENDING, 0);
|
|
967
|
-
|
|
968
|
-
// Vote.
|
|
969
|
-
let proof = TestProposal {};
|
|
970
|
-
vote<TestProposal>(&proof, governance_address, proposal_id, 10, true);
|
|
971
|
-
let TestProposal {} = proof;
|
|
972
|
-
|
|
973
|
-
// Resolve.
|
|
974
|
-
timestamp::fast_forward_seconds(VOTING_DURATION_SECS + 1);
|
|
975
|
-
assert!(get_proposal_state<TestProposal>(governance_address, proposal_id) == PROPOSAL_STATE_SUCCEEDED, 1);
|
|
976
|
-
resolve_proposal_for_test<TestProposal>(governance_address, proposal_id, is_multi_step, true);
|
|
977
|
-
resolve_proposal_for_test<TestProposal>(governance_address, proposal_id, is_multi_step, true);
|
|
978
|
-
}
|
|
979
|
-
|
|
980
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
981
|
-
#[expected_failure(abort_code = 0x30003, location = Self)]
|
|
982
|
-
public entry fun test_cannot_resolve_twice(aptos_framework: &signer, governance: &signer) acquires VotingForum {
|
|
983
|
-
test_cannot_resolve_twice_generic(aptos_framework, governance, false);
|
|
984
|
-
}
|
|
985
|
-
|
|
986
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
987
|
-
#[expected_failure(abort_code = 0x30003, location = Self)]
|
|
988
|
-
public entry fun test_cannot_resolve_twice_multi_step(
|
|
989
|
-
aptos_framework: &signer,
|
|
990
|
-
governance: &signer
|
|
991
|
-
) acquires VotingForum {
|
|
992
|
-
test_cannot_resolve_twice_generic(aptos_framework, governance, true);
|
|
993
|
-
}
|
|
994
|
-
|
|
995
|
-
#[test_only]
|
|
996
|
-
public entry fun test_voting_passed_early_generic(
|
|
997
|
-
aptos_framework: &signer,
|
|
998
|
-
governance: &signer,
|
|
999
|
-
is_multi_step: bool
|
|
1000
|
-
) acquires VotingForum {
|
|
1001
|
-
account::create_account_for_test(@aptos_framework);
|
|
1002
|
-
timestamp::set_time_has_started_for_testing(aptos_framework);
|
|
1003
|
-
|
|
1004
|
-
// Register voting forum and create a proposal.
|
|
1005
|
-
let governance_address = signer::address_of(governance);
|
|
1006
|
-
account::create_account_for_test(governance_address);
|
|
1007
|
-
let proposal_id = create_test_proposal_generic(governance, option::some(100), is_multi_step);
|
|
1008
|
-
assert!(get_proposal_state<TestProposal>(governance_address, proposal_id) == PROPOSAL_STATE_PENDING, 0);
|
|
1009
|
-
|
|
1010
|
-
// Assert that IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY has value `false` in proposal.metadata.
|
|
1011
|
-
if (is_multi_step) {
|
|
1012
|
-
assert!(!is_multi_step_proposal_in_execution<TestProposal>(governance_address, 0), 1);
|
|
1013
|
-
};
|
|
1014
|
-
|
|
1015
|
-
// Vote.
|
|
1016
|
-
let proof = TestProposal {};
|
|
1017
|
-
vote<TestProposal>(&proof, governance_address, proposal_id, 100, true);
|
|
1018
|
-
vote<TestProposal>(&proof, governance_address, proposal_id, 10, false);
|
|
1019
|
-
let TestProposal {} = proof;
|
|
1020
|
-
|
|
1021
|
-
// Resolve early. Need to increase timestamp as resolution cannot happen in the same tx.
|
|
1022
|
-
timestamp::fast_forward_seconds(1);
|
|
1023
|
-
assert!(get_proposal_state<TestProposal>(governance_address, proposal_id) == PROPOSAL_STATE_SUCCEEDED, 2);
|
|
1024
|
-
|
|
1025
|
-
if (is_multi_step) {
|
|
1026
|
-
// Assert that IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY still has value `false` in proposal.metadata before execution.
|
|
1027
|
-
assert!(!is_multi_step_proposal_in_execution<TestProposal>(governance_address, 0), 3);
|
|
1028
|
-
resolve_proposal_for_test<TestProposal>(governance_address, proposal_id, is_multi_step, false);
|
|
1029
|
-
|
|
1030
|
-
// Assert that the multi-step proposal is in execution but not resolved yet.
|
|
1031
|
-
assert!(is_multi_step_proposal_in_execution<TestProposal>(governance_address, 0), 4);
|
|
1032
|
-
let voting_forum = borrow_global_mut<VotingForum<TestProposal>>(governance_address);
|
|
1033
|
-
let proposal = table::borrow_mut(&mut voting_forum.proposals, proposal_id);
|
|
1034
|
-
assert!(!proposal.is_resolved, 5);
|
|
1035
|
-
};
|
|
1036
|
-
|
|
1037
|
-
resolve_proposal_for_test<TestProposal>(governance_address, proposal_id, is_multi_step, true);
|
|
1038
|
-
let voting_forum = borrow_global_mut<VotingForum<TestProposal>>(governance_address);
|
|
1039
|
-
assert!(table::borrow(&voting_forum.proposals, proposal_id).is_resolved, 6);
|
|
1040
|
-
|
|
1041
|
-
// Assert that the IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY value is set back to `false` upon successful resolution of this multi-step proposal.
|
|
1042
|
-
if (is_multi_step) {
|
|
1043
|
-
assert!(!is_multi_step_proposal_in_execution<TestProposal>(governance_address, 0), 7);
|
|
1044
|
-
};
|
|
1045
|
-
}
|
|
1046
|
-
|
|
1047
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
1048
|
-
public entry fun test_voting_passed_early(aptos_framework: &signer, governance: &signer) acquires VotingForum {
|
|
1049
|
-
test_voting_passed_early_generic(aptos_framework, governance, false);
|
|
1050
|
-
}
|
|
1051
|
-
|
|
1052
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
1053
|
-
public entry fun test_voting_passed_early_multi_step(
|
|
1054
|
-
aptos_framework: &signer,
|
|
1055
|
-
governance: &signer
|
|
1056
|
-
) acquires VotingForum {
|
|
1057
|
-
test_voting_passed_early_generic(aptos_framework, governance, true);
|
|
1058
|
-
}
|
|
1059
|
-
|
|
1060
|
-
#[test_only]
|
|
1061
|
-
public entry fun test_voting_passed_early_in_same_tx_should_fail_generic(
|
|
1062
|
-
aptos_framework: &signer,
|
|
1063
|
-
governance: &signer,
|
|
1064
|
-
is_multi_step: bool
|
|
1065
|
-
) acquires VotingForum {
|
|
1066
|
-
account::create_account_for_test(@aptos_framework);
|
|
1067
|
-
timestamp::set_time_has_started_for_testing(aptos_framework);
|
|
1068
|
-
let governance_address = signer::address_of(governance);
|
|
1069
|
-
account::create_account_for_test(governance_address);
|
|
1070
|
-
let proposal_id = create_test_proposal_generic(governance, option::some(100), is_multi_step);
|
|
1071
|
-
let proof = TestProposal {};
|
|
1072
|
-
vote<TestProposal>(&proof, governance_address, proposal_id, 40, true);
|
|
1073
|
-
vote<TestProposal>(&proof, governance_address, proposal_id, 60, true);
|
|
1074
|
-
let TestProposal {} = proof;
|
|
1075
|
-
|
|
1076
|
-
// Resolving early should fail since timestamp hasn't changed since the last vote.
|
|
1077
|
-
resolve_proposal_for_test<TestProposal>(governance_address, proposal_id, is_multi_step, true);
|
|
1078
|
-
}
|
|
1079
|
-
|
|
1080
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
1081
|
-
#[expected_failure(abort_code = 0x30008, location = Self)]
|
|
1082
|
-
public entry fun test_voting_passed_early_in_same_tx_should_fail(
|
|
1083
|
-
aptos_framework: &signer,
|
|
1084
|
-
governance: &signer
|
|
1085
|
-
) acquires VotingForum {
|
|
1086
|
-
test_voting_passed_early_in_same_tx_should_fail_generic(aptos_framework, governance, false);
|
|
1087
|
-
}
|
|
1088
|
-
|
|
1089
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
1090
|
-
#[expected_failure(abort_code = 0x30008, location = Self)]
|
|
1091
|
-
public entry fun test_voting_passed_early_in_same_tx_should_fail_multi_step(
|
|
1092
|
-
aptos_framework: &signer,
|
|
1093
|
-
governance: &signer
|
|
1094
|
-
) acquires VotingForum {
|
|
1095
|
-
test_voting_passed_early_in_same_tx_should_fail_generic(aptos_framework, governance, true);
|
|
1096
|
-
}
|
|
1097
|
-
|
|
1098
|
-
#[test_only]
|
|
1099
|
-
public entry fun test_voting_failed_generic(
|
|
1100
|
-
aptos_framework: &signer,
|
|
1101
|
-
governance: &signer,
|
|
1102
|
-
is_multi_step: bool
|
|
1103
|
-
) acquires VotingForum {
|
|
1104
|
-
account::create_account_for_test(@aptos_framework);
|
|
1105
|
-
timestamp::set_time_has_started_for_testing(aptos_framework);
|
|
1106
|
-
|
|
1107
|
-
// Register voting forum and create a proposal.
|
|
1108
|
-
let governance_address = signer::address_of(governance);
|
|
1109
|
-
account::create_account_for_test(governance_address);
|
|
1110
|
-
let proposal_id = create_test_proposal_generic(governance, option::none<u128>(), is_multi_step);
|
|
1111
|
-
|
|
1112
|
-
// Vote.
|
|
1113
|
-
let proof = TestProposal {};
|
|
1114
|
-
vote<TestProposal>(&proof, governance_address, proposal_id, 10, true);
|
|
1115
|
-
vote<TestProposal>(&proof, governance_address, proposal_id, 100, false);
|
|
1116
|
-
let TestProposal {} = proof;
|
|
1117
|
-
|
|
1118
|
-
// Resolve.
|
|
1119
|
-
timestamp::fast_forward_seconds(VOTING_DURATION_SECS + 1);
|
|
1120
|
-
assert!(get_proposal_state<TestProposal>(governance_address, proposal_id) == PROPOSAL_STATE_FAILED, 1);
|
|
1121
|
-
resolve_proposal_for_test<TestProposal>(governance_address, proposal_id, is_multi_step, true);
|
|
1122
|
-
}
|
|
1123
|
-
|
|
1124
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
1125
|
-
#[expected_failure(abort_code = 0x30002, location = Self)]
|
|
1126
|
-
public entry fun test_voting_failed(aptos_framework: &signer, governance: &signer) acquires VotingForum {
|
|
1127
|
-
test_voting_failed_generic(aptos_framework, governance, false);
|
|
1128
|
-
}
|
|
1129
|
-
|
|
1130
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
1131
|
-
#[expected_failure(abort_code = 0x30002, location = Self)]
|
|
1132
|
-
public entry fun test_voting_failed_multi_step(aptos_framework: &signer, governance: &signer) acquires VotingForum {
|
|
1133
|
-
test_voting_failed_generic(aptos_framework, governance, true);
|
|
1134
|
-
}
|
|
1135
|
-
|
|
1136
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
1137
|
-
#[expected_failure(abort_code = 0x30005, location = Self)]
|
|
1138
|
-
public entry fun test_cannot_vote_after_voting_period_is_over(
|
|
1139
|
-
aptos_framework: signer,
|
|
1140
|
-
governance: signer
|
|
1141
|
-
) acquires VotingForum {
|
|
1142
|
-
account::create_account_for_test(@aptos_framework);
|
|
1143
|
-
timestamp::set_time_has_started_for_testing(&aptos_framework);
|
|
1144
|
-
let governance_address = signer::address_of(&governance);
|
|
1145
|
-
account::create_account_for_test(governance_address);
|
|
1146
|
-
let proposal_id = create_test_proposal(&governance, option::none<u128>());
|
|
1147
|
-
// Voting period is over. Voting should now fail.
|
|
1148
|
-
timestamp::fast_forward_seconds(VOTING_DURATION_SECS + 1);
|
|
1149
|
-
let proof = TestProposal {};
|
|
1150
|
-
vote<TestProposal>(&proof, governance_address, proposal_id, 10, true);
|
|
1151
|
-
let TestProposal {} = proof;
|
|
1152
|
-
}
|
|
1153
|
-
|
|
1154
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
1155
|
-
#[expected_failure(abort_code = 0x30009, location = Self)]
|
|
1156
|
-
public entry fun test_cannot_vote_after_multi_step_proposal_starts_executing(
|
|
1157
|
-
aptos_framework: signer,
|
|
1158
|
-
governance: signer
|
|
1159
|
-
) acquires VotingForum {
|
|
1160
|
-
account::create_account_for_test(@aptos_framework);
|
|
1161
|
-
timestamp::set_time_has_started_for_testing(&aptos_framework);
|
|
1162
|
-
|
|
1163
|
-
// Register voting forum and create a proposal.
|
|
1164
|
-
let governance_address = signer::address_of(&governance);
|
|
1165
|
-
account::create_account_for_test(governance_address);
|
|
1166
|
-
let proposal_id = create_test_proposal_generic(&governance, option::some(100), true);
|
|
1167
|
-
assert!(get_proposal_state<TestProposal>(governance_address, proposal_id) == PROPOSAL_STATE_PENDING, 0);
|
|
1168
|
-
|
|
1169
|
-
// Vote.
|
|
1170
|
-
let proof = TestProposal {};
|
|
1171
|
-
vote<TestProposal>(&proof, governance_address, proposal_id, 100, true);
|
|
1172
|
-
|
|
1173
|
-
// Resolve early.
|
|
1174
|
-
timestamp::fast_forward_seconds(1);
|
|
1175
|
-
assert!(get_proposal_state<TestProposal>(governance_address, proposal_id) == PROPOSAL_STATE_SUCCEEDED, 1);
|
|
1176
|
-
resolve_proposal_for_test<TestProposal>(governance_address, proposal_id, true, false);
|
|
1177
|
-
vote<TestProposal>(&proof, governance_address, proposal_id, 100, false);
|
|
1178
|
-
let TestProposal {} = proof;
|
|
1179
|
-
}
|
|
1180
|
-
|
|
1181
|
-
#[test_only]
|
|
1182
|
-
public entry fun test_voting_failed_early_generic(
|
|
1183
|
-
aptos_framework: &signer,
|
|
1184
|
-
governance: &signer,
|
|
1185
|
-
is_multi_step: bool
|
|
1186
|
-
) acquires VotingForum {
|
|
1187
|
-
account::create_account_for_test(@aptos_framework);
|
|
1188
|
-
timestamp::set_time_has_started_for_testing(aptos_framework);
|
|
1189
|
-
|
|
1190
|
-
// Register voting forum and create a proposal.
|
|
1191
|
-
let governance_address = signer::address_of(governance);
|
|
1192
|
-
account::create_account_for_test(governance_address);
|
|
1193
|
-
let proposal_id = create_test_proposal_generic(governance, option::some(100), is_multi_step);
|
|
1194
|
-
|
|
1195
|
-
// Vote.
|
|
1196
|
-
let proof = TestProposal {};
|
|
1197
|
-
vote<TestProposal>(&proof, governance_address, proposal_id, 100, true);
|
|
1198
|
-
vote<TestProposal>(&proof, governance_address, proposal_id, 100, false);
|
|
1199
|
-
let TestProposal {} = proof;
|
|
1200
|
-
|
|
1201
|
-
// Resolve.
|
|
1202
|
-
timestamp::fast_forward_seconds(VOTING_DURATION_SECS + 1);
|
|
1203
|
-
assert!(get_proposal_state<TestProposal>(governance_address, proposal_id) == PROPOSAL_STATE_FAILED, 1);
|
|
1204
|
-
resolve_proposal_for_test<TestProposal>(governance_address, proposal_id, is_multi_step, true);
|
|
1205
|
-
}
|
|
1206
|
-
|
|
1207
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
1208
|
-
#[expected_failure(abort_code = 0x30002, location = Self)]
|
|
1209
|
-
public entry fun test_voting_failed_early(aptos_framework: &signer, governance: &signer) acquires VotingForum {
|
|
1210
|
-
test_voting_failed_early_generic(aptos_framework, governance, true);
|
|
1211
|
-
}
|
|
1212
|
-
|
|
1213
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
1214
|
-
#[expected_failure(abort_code = 0x30002, location = Self)]
|
|
1215
|
-
public entry fun test_voting_failed_early_multi_step(
|
|
1216
|
-
aptos_framework: &signer,
|
|
1217
|
-
governance: &signer
|
|
1218
|
-
) acquires VotingForum {
|
|
1219
|
-
test_voting_failed_early_generic(aptos_framework, governance, false);
|
|
1220
|
-
}
|
|
1221
|
-
|
|
1222
|
-
#[test_only]
|
|
1223
|
-
public entry fun test_cannot_set_min_threshold_higher_than_early_resolution_generic(
|
|
1224
|
-
aptos_framework: &signer,
|
|
1225
|
-
governance: &signer,
|
|
1226
|
-
is_multi_step: bool,
|
|
1227
|
-
) acquires VotingForum {
|
|
1228
|
-
account::create_account_for_test(@aptos_framework);
|
|
1229
|
-
timestamp::set_time_has_started_for_testing(aptos_framework);
|
|
1230
|
-
account::create_account_for_test(signer::address_of(governance));
|
|
1231
|
-
// This should fail.
|
|
1232
|
-
create_test_proposal_generic(governance, option::some(5), is_multi_step);
|
|
1233
|
-
}
|
|
1234
|
-
|
|
1235
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
1236
|
-
#[expected_failure(abort_code = 0x10007, location = Self)]
|
|
1237
|
-
public entry fun test_cannot_set_min_threshold_higher_than_early_resolution(
|
|
1238
|
-
aptos_framework: &signer,
|
|
1239
|
-
governance: &signer,
|
|
1240
|
-
) acquires VotingForum {
|
|
1241
|
-
test_cannot_set_min_threshold_higher_than_early_resolution_generic(aptos_framework, governance, false);
|
|
1242
|
-
}
|
|
1243
|
-
|
|
1244
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
1245
|
-
#[expected_failure(abort_code = 0x10007, location = Self)]
|
|
1246
|
-
public entry fun test_cannot_set_min_threshold_higher_than_early_resolution_multi_step(
|
|
1247
|
-
aptos_framework: &signer,
|
|
1248
|
-
governance: &signer,
|
|
1249
|
-
) acquires VotingForum {
|
|
1250
|
-
test_cannot_set_min_threshold_higher_than_early_resolution_generic(aptos_framework, governance, true);
|
|
1251
|
-
}
|
|
1252
|
-
|
|
1253
|
-
#[test(aptos_framework = @aptos_framework, governance = @0x123)]
|
|
1254
|
-
public entry fun test_replace_execution_hash(aptos_framework: &signer, governance: &signer) acquires VotingForum {
|
|
1255
|
-
account::create_account_for_test(@aptos_framework);
|
|
1256
|
-
timestamp::set_time_has_started_for_testing(aptos_framework);
|
|
1257
|
-
|
|
1258
|
-
// Register voting forum and create a proposal.
|
|
1259
|
-
let governance_address = signer::address_of(governance);
|
|
1260
|
-
account::create_account_for_test(governance_address);
|
|
1261
|
-
let proposal_id = create_test_proposal_generic(governance, option::none<u128>(), true);
|
|
1262
|
-
assert!(get_proposal_state<TestProposal>(governance_address, proposal_id) == PROPOSAL_STATE_PENDING, 0);
|
|
1263
|
-
|
|
1264
|
-
// Vote.
|
|
1265
|
-
let proof = TestProposal {};
|
|
1266
|
-
vote<TestProposal>(&proof, governance_address, proposal_id, 10, true);
|
|
1267
|
-
let TestProposal {} = proof;
|
|
1268
|
-
|
|
1269
|
-
// Resolve.
|
|
1270
|
-
timestamp::fast_forward_seconds(VOTING_DURATION_SECS + 1);
|
|
1271
|
-
assert!(get_proposal_state<TestProposal>(governance_address, proposal_id) == PROPOSAL_STATE_SUCCEEDED, 1);
|
|
1272
|
-
|
|
1273
|
-
resolve_proposal_v2<TestProposal>(governance_address, proposal_id, vector[10u8]);
|
|
1274
|
-
let voting_forum = borrow_global<VotingForum<TestProposal>>(governance_address);
|
|
1275
|
-
let proposal = table::borrow(&voting_forum.proposals, 0);
|
|
1276
|
-
assert!(proposal.execution_hash == vector[10u8], 2);
|
|
1277
|
-
assert!(!table::borrow(&voting_forum.proposals, proposal_id).is_resolved, 3);
|
|
1278
|
-
}
|
|
1279
|
-
}
|