@aptos-labs/ts-sdk 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (481) hide show
  1. package/dist/common/{accountAddress-D0xKX-UM.d.ts → accountAddress-AL8HRxQC.d.ts} +8 -0
  2. package/dist/common/chunk-ZMDE3DNL.js.map +1 -1
  3. package/dist/common/cli/index.d.ts +1 -1
  4. package/dist/common/cli/index.js.map +1 -1
  5. package/dist/common/index.d.ts +22 -3
  6. package/dist/common/index.js +30 -30
  7. package/dist/common/index.js.map +1 -1
  8. package/dist/esm/account/AbstractKeylessAccount.mjs +1 -1
  9. package/dist/esm/account/AbstractedAccount.mjs +1 -1
  10. package/dist/esm/account/Account.mjs +1 -1
  11. package/dist/esm/account/AccountUtils.mjs +1 -1
  12. package/dist/esm/account/DerivableAbstractedAccount.mjs +1 -1
  13. package/dist/esm/account/Ed25519Account.mjs +1 -1
  14. package/dist/esm/account/EphemeralKeyPair.mjs +1 -1
  15. package/dist/esm/account/FederatedKeylessAccount.mjs +1 -1
  16. package/dist/esm/account/KeylessAccount.mjs +1 -1
  17. package/dist/esm/account/MultiEd25519Account.mjs +1 -1
  18. package/dist/esm/account/MultiKeyAccount.mjs +1 -1
  19. package/dist/esm/account/SingleKeyAccount.mjs +1 -1
  20. package/dist/esm/account/index.mjs +1 -1
  21. package/dist/esm/account/utils.mjs +1 -1
  22. package/dist/esm/api/account/abstraction.mjs +1 -1
  23. package/dist/esm/api/account.mjs +1 -1
  24. package/dist/esm/api/ans.mjs +1 -1
  25. package/dist/esm/api/aptos.mjs +1 -1
  26. package/dist/esm/api/coin.d.mts +3 -3
  27. package/dist/esm/api/coin.mjs +1 -1
  28. package/dist/esm/api/digitalAsset.d.mts +1 -1
  29. package/dist/esm/api/digitalAsset.mjs +1 -1
  30. package/dist/esm/api/event.mjs +1 -1
  31. package/dist/esm/api/faucet.mjs +1 -1
  32. package/dist/esm/api/fungibleAsset.mjs +1 -1
  33. package/dist/esm/api/general.mjs +1 -1
  34. package/dist/esm/api/index.mjs +1 -1
  35. package/dist/esm/api/keyless.mjs +1 -1
  36. package/dist/esm/api/object.mjs +1 -1
  37. package/dist/esm/api/staking.mjs +1 -1
  38. package/dist/esm/api/table.mjs +1 -1
  39. package/dist/esm/api/transaction.mjs +1 -1
  40. package/dist/esm/api/transactionSubmission/build.mjs +1 -1
  41. package/dist/esm/api/transactionSubmission/management.mjs +1 -1
  42. package/dist/esm/api/transactionSubmission/sign.mjs +1 -1
  43. package/dist/esm/api/transactionSubmission/simulate.mjs +1 -1
  44. package/dist/esm/api/transactionSubmission/submit.mjs +1 -1
  45. package/dist/esm/api/utils.mjs +1 -1
  46. package/dist/esm/bcs/deserializer.d.mts +8 -0
  47. package/dist/esm/bcs/deserializer.mjs +1 -1
  48. package/dist/esm/bcs/index.mjs +1 -1
  49. package/dist/esm/bcs/serializable/moveStructs.mjs +1 -1
  50. package/dist/esm/{chunk-34R7FSQF.mjs → chunk-57J5YBMT.mjs} +2 -2
  51. package/dist/esm/{chunk-USB3LA6B.mjs → chunk-AMAPBD4D.mjs} +2 -2
  52. package/dist/esm/chunk-BK56GLTP.mjs +4 -0
  53. package/dist/esm/chunk-BK56GLTP.mjs.map +1 -0
  54. package/dist/esm/{chunk-G7WH6GQP.mjs → chunk-CFQFFP6N.mjs} +2 -2
  55. package/dist/esm/{chunk-4JT5AESZ.mjs → chunk-CO67Y6YE.mjs} +2 -2
  56. package/dist/esm/chunk-CW35YAMN.mjs +2 -0
  57. package/dist/esm/{chunk-HW7TSJI2.mjs → chunk-CZYH3G7E.mjs} +2 -2
  58. package/dist/esm/chunk-FLZPUYXQ.mjs +2 -0
  59. package/dist/esm/chunk-FLZPUYXQ.mjs.map +1 -0
  60. package/dist/esm/{chunk-ZNLOQO4Q.mjs → chunk-GBNAG7KK.mjs} +2 -2
  61. package/dist/esm/{chunk-6UZHMEK3.mjs → chunk-HETYL3WN.mjs} +2 -2
  62. package/dist/esm/{chunk-SE2VS7WM.mjs → chunk-KRBZ54CY.mjs} +2 -2
  63. package/dist/esm/{chunk-G6HENV5D.mjs → chunk-Q4W3WJ2U.mjs} +2 -2
  64. package/dist/esm/{chunk-EF4FA5I6.mjs → chunk-RQX6JOEN.mjs} +2 -2
  65. package/dist/esm/{chunk-MA4QUN6P.mjs → chunk-U7HD6PQV.mjs} +2 -2
  66. package/dist/esm/{chunk-TDGLYA35.mjs → chunk-UOP7GBXB.mjs} +2 -2
  67. package/dist/esm/{chunk-K43K3YG7.mjs → chunk-UQWF24SS.mjs} +2 -2
  68. package/dist/esm/{chunk-2UBI3AZJ.mjs → chunk-V2QSMVJ5.mjs} +2 -2
  69. package/dist/esm/{chunk-TLFZOAAB.mjs → chunk-V74WPKSY.mjs} +2 -2
  70. package/dist/esm/chunk-VEGW6HP5.mjs +2 -0
  71. package/dist/esm/{chunk-HLF3U7IS.mjs.map → chunk-VEGW6HP5.mjs.map} +1 -1
  72. package/dist/esm/client/core.mjs +1 -1
  73. package/dist/esm/client/get.mjs +1 -1
  74. package/dist/esm/client/index.mjs +1 -1
  75. package/dist/esm/client/post.mjs +1 -1
  76. package/dist/esm/core/crypto/abstraction.mjs +1 -1
  77. package/dist/esm/core/crypto/deserializationUtils.d.mts +36 -0
  78. package/dist/esm/core/crypto/deserializationUtils.mjs +2 -0
  79. package/dist/esm/core/crypto/deserializationUtils.mjs.map +1 -0
  80. package/dist/esm/core/crypto/ed25519.mjs +1 -1
  81. package/dist/esm/core/crypto/ephemeral.mjs +1 -1
  82. package/dist/esm/core/crypto/federatedKeyless.mjs +1 -1
  83. package/dist/esm/core/crypto/index.d.mts +1 -0
  84. package/dist/esm/core/crypto/index.mjs +1 -1
  85. package/dist/esm/core/crypto/keyless.mjs +1 -1
  86. package/dist/esm/core/crypto/multiEd25519.mjs +1 -1
  87. package/dist/esm/core/crypto/multiKey.mjs +1 -1
  88. package/dist/esm/core/crypto/proof.mjs +1 -1
  89. package/dist/esm/core/crypto/publicKey.mjs +1 -1
  90. package/dist/esm/core/crypto/secp256k1.mjs +1 -1
  91. package/dist/esm/core/crypto/signature.mjs +1 -1
  92. package/dist/esm/core/crypto/singleKey.mjs +1 -1
  93. package/dist/esm/core/index.d.mts +1 -0
  94. package/dist/esm/core/index.mjs +1 -1
  95. package/dist/esm/errors/index.mjs +1 -1
  96. package/dist/esm/index.d.mts +1 -0
  97. package/dist/esm/index.mjs +1 -1
  98. package/dist/esm/internal/abstraction.mjs +1 -1
  99. package/dist/esm/internal/account.mjs +1 -1
  100. package/dist/esm/internal/ans.mjs +1 -1
  101. package/dist/esm/internal/coin.mjs +1 -1
  102. package/dist/esm/internal/digitalAsset.mjs +1 -1
  103. package/dist/esm/internal/event.mjs +1 -1
  104. package/dist/esm/internal/faucet.mjs +1 -1
  105. package/dist/esm/internal/fungibleAsset.mjs +1 -1
  106. package/dist/esm/internal/general.mjs +1 -1
  107. package/dist/esm/internal/keyless.mjs +1 -1
  108. package/dist/esm/internal/object.mjs +1 -1
  109. package/dist/esm/internal/staking.mjs +1 -1
  110. package/dist/esm/internal/table.mjs +1 -1
  111. package/dist/esm/internal/transaction.mjs +1 -1
  112. package/dist/esm/internal/transactionSubmission.mjs +1 -1
  113. package/dist/esm/internal/utils/index.mjs +1 -1
  114. package/dist/esm/internal/utils/utils.mjs +1 -1
  115. package/dist/esm/internal/view.mjs +1 -1
  116. package/dist/esm/transactions/authenticator/account.mjs +1 -1
  117. package/dist/esm/transactions/authenticator/index.mjs +1 -1
  118. package/dist/esm/transactions/authenticator/transaction.mjs +1 -1
  119. package/dist/esm/transactions/index.mjs +1 -1
  120. package/dist/esm/transactions/instances/index.mjs +1 -1
  121. package/dist/esm/transactions/instances/moduleId.mjs +1 -1
  122. package/dist/esm/transactions/instances/multiAgentTransaction.mjs +1 -1
  123. package/dist/esm/transactions/instances/rawTransaction.mjs +1 -1
  124. package/dist/esm/transactions/instances/rotationProofChallenge.mjs +1 -1
  125. package/dist/esm/transactions/instances/signedTransaction.mjs +1 -1
  126. package/dist/esm/transactions/instances/simpleTransaction.mjs +1 -1
  127. package/dist/esm/transactions/instances/transactionPayload.mjs +1 -1
  128. package/dist/esm/transactions/management/accountSequenceNumber.mjs +1 -1
  129. package/dist/esm/transactions/management/index.mjs +1 -1
  130. package/dist/esm/transactions/management/transactionWorker.mjs +1 -1
  131. package/dist/esm/transactions/transactionBuilder/helpers.mjs +1 -1
  132. package/dist/esm/transactions/transactionBuilder/index.mjs +1 -1
  133. package/dist/esm/transactions/transactionBuilder/remoteAbi.mjs +1 -1
  134. package/dist/esm/transactions/transactionBuilder/signingMessage.mjs +1 -1
  135. package/dist/esm/transactions/transactionBuilder/transactionBuilder.mjs +1 -1
  136. package/dist/esm/transactions/typeTag/index.mjs +1 -1
  137. package/dist/esm/transactions/typeTag/parser.mjs +1 -1
  138. package/dist/esm/utils/index.mjs +1 -1
  139. package/dist/esm/utils/normalizeBundle.mjs +1 -1
  140. package/dist/esm/version.d.mts +1 -1
  141. package/dist/esm/version.mjs +1 -1
  142. package/package.json +3 -3
  143. package/src/bcs/deserializer.ts +13 -0
  144. package/src/core/crypto/deserializationUtils.ts +106 -0
  145. package/src/core/crypto/index.ts +1 -0
  146. package/src/internal/move/jwks/build/jwk/BuildInfo.yaml +56 -0
  147. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/account.mv +0 -0
  148. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aggregator.mv +0 -0
  149. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aggregator_factory.mv +0 -0
  150. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aggregator_v2.mv +0 -0
  151. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aptos_account.mv +0 -0
  152. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aptos_coin.mv +0 -0
  153. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/aptos_governance.mv +0 -0
  154. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/block.mv +0 -0
  155. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/chain_id.mv +0 -0
  156. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/chain_status.mv +0 -0
  157. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/code.mv +0 -0
  158. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/coin.mv +0 -0
  159. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/config_buffer.mv +0 -0
  160. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/consensus_config.mv +0 -0
  161. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/create_signer.mv +0 -0
  162. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/delegation_pool.mv +0 -0
  163. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/dispatchable_fungible_asset.mv +0 -0
  164. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/dkg.mv +0 -0
  165. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/event.mv +0 -0
  166. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/execution_config.mv +0 -0
  167. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/function_info.mv +0 -0
  168. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/fungible_asset.mv +0 -0
  169. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/gas_schedule.mv +0 -0
  170. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/genesis.mv +0 -0
  171. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/governance_proposal.mv +0 -0
  172. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/guid.mv +0 -0
  173. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/jwk_consensus_config.mv +0 -0
  174. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/jwks.mv +0 -0
  175. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/keyless_account.mv +0 -0
  176. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/managed_coin.mv +0 -0
  177. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/multisig_account.mv +0 -0
  178. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/object.mv +0 -0
  179. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/object_code_deployment.mv +0 -0
  180. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/optional_aggregator.mv +0 -0
  181. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/primary_fungible_store.mv +0 -0
  182. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/randomness.mv +0 -0
  183. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/randomness_api_v0_config.mv +0 -0
  184. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/randomness_config.mv +0 -0
  185. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/randomness_config_seqnum.mv +0 -0
  186. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/reconfiguration.mv +0 -0
  187. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/reconfiguration_state.mv +0 -0
  188. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/reconfiguration_with_dkg.mv +0 -0
  189. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/resource_account.mv +0 -0
  190. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/stake.mv +0 -0
  191. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/staking_config.mv +0 -0
  192. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/staking_contract.mv +0 -0
  193. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/staking_proxy.mv +0 -0
  194. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/state_storage.mv +0 -0
  195. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/storage_gas.mv +0 -0
  196. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/system_addresses.mv +0 -0
  197. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/timestamp.mv +0 -0
  198. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/transaction_context.mv +0 -0
  199. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/transaction_fee.mv +0 -0
  200. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/transaction_validation.mv +0 -0
  201. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/util.mv +0 -0
  202. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/validator_consensus_info.mv +0 -0
  203. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/version.mv +0 -0
  204. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/vesting.mv +0 -0
  205. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosFramework/voting.mv +0 -0
  206. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/any.mv +0 -0
  207. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/aptos_hash.mv +0 -0
  208. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/big_vector.mv +0 -0
  209. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/bls12381.mv +0 -0
  210. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/bls12381_algebra.mv +0 -0
  211. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/bn254_algebra.mv +0 -0
  212. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/capability.mv +0 -0
  213. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/comparator.mv +0 -0
  214. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/copyable_any.mv +0 -0
  215. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/crypto_algebra.mv +0 -0
  216. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/debug.mv +0 -0
  217. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/ed25519.mv +0 -0
  218. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/fixed_point64.mv +0 -0
  219. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/from_bcs.mv +0 -0
  220. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/math128.mv +0 -0
  221. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/math64.mv +0 -0
  222. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/math_fixed.mv +0 -0
  223. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/math_fixed64.mv +0 -0
  224. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/multi_ed25519.mv +0 -0
  225. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/pool_u64.mv +0 -0
  226. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/pool_u64_unbound.mv +0 -0
  227. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/ristretto255.mv +0 -0
  228. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/ristretto255_bulletproofs.mv +0 -0
  229. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/ristretto255_elgamal.mv +0 -0
  230. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/ristretto255_pedersen.mv +0 -0
  231. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/secp256k1.mv +0 -0
  232. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/simple_map.mv +0 -0
  233. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/smart_table.mv +0 -0
  234. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/smart_vector.mv +0 -0
  235. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/string_utils.mv +0 -0
  236. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/table.mv +0 -0
  237. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/table_with_length.mv +0 -0
  238. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/AptosStdlib/type_info.mv +0 -0
  239. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/acl.mv +0 -0
  240. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/bcs.mv +0 -0
  241. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/bit_vector.mv +0 -0
  242. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/error.mv +0 -0
  243. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/features.mv +0 -0
  244. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/fixed_point32.mv +0 -0
  245. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/hash.mv +0 -0
  246. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/option.mv +0 -0
  247. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/signer.mv +0 -0
  248. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/string.mv +0 -0
  249. package/src/internal/move/jwks/build/jwk/bytecode_modules/dependencies/MoveStdlib/vector.mv +0 -0
  250. package/src/internal/move/jwks/build/jwk/bytecode_scripts/main.mv +0 -0
  251. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/account.mvsm +0 -0
  252. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aggregator.mvsm +0 -0
  253. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aggregator_factory.mvsm +0 -0
  254. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aggregator_v2.mvsm +0 -0
  255. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aptos_account.mvsm +0 -0
  256. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aptos_coin.mvsm +0 -0
  257. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/aptos_governance.mvsm +0 -0
  258. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/block.mvsm +0 -0
  259. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/chain_id.mvsm +0 -0
  260. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/chain_status.mvsm +0 -0
  261. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/code.mvsm +0 -0
  262. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/coin.mvsm +0 -0
  263. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/config_buffer.mvsm +0 -0
  264. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/consensus_config.mvsm +0 -0
  265. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/create_signer.mvsm +0 -0
  266. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/delegation_pool.mvsm +0 -0
  267. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/dispatchable_fungible_asset.mvsm +0 -0
  268. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/dkg.mvsm +0 -0
  269. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/event.mvsm +0 -0
  270. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/execution_config.mvsm +0 -0
  271. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/function_info.mvsm +0 -0
  272. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/fungible_asset.mvsm +0 -0
  273. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/gas_schedule.mvsm +0 -0
  274. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/genesis.mvsm +0 -0
  275. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/governance_proposal.mvsm +0 -0
  276. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/guid.mvsm +0 -0
  277. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/jwk_consensus_config.mvsm +0 -0
  278. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/jwks.mvsm +0 -0
  279. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/keyless_account.mvsm +0 -0
  280. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/managed_coin.mvsm +0 -0
  281. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/multisig_account.mvsm +0 -0
  282. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/object.mvsm +0 -0
  283. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/object_code_deployment.mvsm +0 -0
  284. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/optional_aggregator.mvsm +0 -0
  285. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/primary_fungible_store.mvsm +0 -0
  286. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/randomness.mvsm +0 -0
  287. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/randomness_api_v0_config.mvsm +0 -0
  288. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/randomness_config.mvsm +0 -0
  289. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/randomness_config_seqnum.mvsm +0 -0
  290. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/reconfiguration.mvsm +0 -0
  291. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/reconfiguration_state.mvsm +0 -0
  292. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/reconfiguration_with_dkg.mvsm +0 -0
  293. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/resource_account.mvsm +0 -0
  294. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/stake.mvsm +0 -0
  295. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/staking_config.mvsm +0 -0
  296. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/staking_contract.mvsm +0 -0
  297. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/staking_proxy.mvsm +0 -0
  298. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/state_storage.mvsm +0 -0
  299. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/storage_gas.mvsm +0 -0
  300. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/system_addresses.mvsm +0 -0
  301. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/timestamp.mvsm +0 -0
  302. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/transaction_context.mvsm +0 -0
  303. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/transaction_fee.mvsm +0 -0
  304. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/transaction_validation.mvsm +0 -0
  305. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/util.mvsm +0 -0
  306. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/validator_consensus_info.mvsm +0 -0
  307. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/version.mvsm +0 -0
  308. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/vesting.mvsm +0 -0
  309. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosFramework/voting.mvsm +0 -0
  310. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/any.mvsm +0 -0
  311. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/aptos_hash.mvsm +0 -0
  312. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/big_vector.mvsm +0 -0
  313. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/bls12381.mvsm +0 -0
  314. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/bls12381_algebra.mvsm +0 -0
  315. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/bn254_algebra.mvsm +0 -0
  316. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/capability.mvsm +0 -0
  317. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/comparator.mvsm +0 -0
  318. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/copyable_any.mvsm +0 -0
  319. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/crypto_algebra.mvsm +0 -0
  320. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/debug.mvsm +0 -0
  321. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/ed25519.mvsm +0 -0
  322. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/fixed_point64.mvsm +0 -0
  323. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/from_bcs.mvsm +0 -0
  324. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/math128.mvsm +0 -0
  325. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/math64.mvsm +0 -0
  326. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/math_fixed.mvsm +0 -0
  327. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/math_fixed64.mvsm +0 -0
  328. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/multi_ed25519.mvsm +0 -0
  329. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/pool_u64.mvsm +0 -0
  330. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/pool_u64_unbound.mvsm +0 -0
  331. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/ristretto255.mvsm +0 -0
  332. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/ristretto255_bulletproofs.mvsm +0 -0
  333. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/ristretto255_elgamal.mvsm +0 -0
  334. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/ristretto255_pedersen.mvsm +0 -0
  335. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/secp256k1.mvsm +0 -0
  336. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/simple_map.mvsm +0 -0
  337. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/smart_table.mvsm +0 -0
  338. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/smart_vector.mvsm +0 -0
  339. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/string_utils.mvsm +0 -0
  340. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/table.mvsm +0 -0
  341. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/table_with_length.mvsm +0 -0
  342. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/AptosStdlib/type_info.mvsm +0 -0
  343. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/acl.mvsm +0 -0
  344. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/bcs.mvsm +0 -0
  345. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/bit_vector.mvsm +0 -0
  346. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/error.mvsm +0 -0
  347. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/features.mvsm +0 -0
  348. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/fixed_point32.mvsm +0 -0
  349. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/hash.mvsm +0 -0
  350. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/option.mvsm +0 -0
  351. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/signer.mvsm +0 -0
  352. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/string.mvsm +0 -0
  353. package/src/internal/move/jwks/build/jwk/source_maps/dependencies/MoveStdlib/vector.mvsm +0 -0
  354. package/src/internal/move/jwks/build/jwk/source_maps/main.mvsm +0 -0
  355. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/account.move +1533 -0
  356. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aggregator.move +48 -0
  357. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aggregator_factory.move +66 -0
  358. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aggregator_v2.move +280 -0
  359. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aptos_account.move +443 -0
  360. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aptos_coin.move +204 -0
  361. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/aptos_governance.move +1387 -0
  362. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/block.move +394 -0
  363. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/chain_id.move +41 -0
  364. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/chain_status.move +48 -0
  365. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/code.move +367 -0
  366. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/coin.move +2214 -0
  367. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/config_buffer.move +101 -0
  368. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/consensus_config.move +77 -0
  369. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/create_signer.move +21 -0
  370. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/delegation_pool.move +5568 -0
  371. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/dispatchable_fungible_asset.move +228 -0
  372. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/dkg.move +121 -0
  373. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/event.move +92 -0
  374. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/execution_config.move +66 -0
  375. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/function_info.move +100 -0
  376. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/fungible_asset.move +1566 -0
  377. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/gas_schedule.move +176 -0
  378. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/genesis.move +550 -0
  379. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/governance_proposal.move +23 -0
  380. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/guid.move +68 -0
  381. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/jwk_consensus_config.move +148 -0
  382. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/jwks.move +817 -0
  383. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/keyless_account.move +312 -0
  384. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/managed_coin.move +205 -0
  385. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/multisig_account.move +2477 -0
  386. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/object.move +1073 -0
  387. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/object_code_deployment.move +147 -0
  388. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/optional_aggregator.move +295 -0
  389. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/primary_fungible_store.move +405 -0
  390. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/randomness.move +574 -0
  391. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/randomness_api_v0_config.move +57 -0
  392. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/randomness_config.move +153 -0
  393. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/randomness_config_seqnum.move +49 -0
  394. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/reconfiguration.move +237 -0
  395. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/reconfiguration_state.move +132 -0
  396. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/reconfiguration_with_dkg.move +69 -0
  397. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/resource_account.move +267 -0
  398. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/stake.move +3286 -0
  399. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/staking_config.move +686 -0
  400. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/staking_contract.move +1618 -0
  401. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/staking_proxy.move +228 -0
  402. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/state_storage.move +90 -0
  403. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/storage_gas.move +622 -0
  404. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/system_addresses.move +82 -0
  405. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/timestamp.move +88 -0
  406. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/transaction_context.move +262 -0
  407. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/transaction_fee.move +457 -0
  408. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/transaction_validation.move +501 -0
  409. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/util.move +16 -0
  410. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/validator_consensus_info.move +42 -0
  411. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/version.move +115 -0
  412. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/vesting.move +2183 -0
  413. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosFramework/voting.move +1279 -0
  414. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/any.move +57 -0
  415. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/aptos_hash.move +253 -0
  416. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/big_vector.move +469 -0
  417. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/bls12381.move +985 -0
  418. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/bls12381_algebra.move +802 -0
  419. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/bn254_algebra.move +855 -0
  420. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/capability.move +193 -0
  421. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/comparator.move +173 -0
  422. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/copyable_any.move +45 -0
  423. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/crypto_algebra.move +351 -0
  424. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/debug.move +278 -0
  425. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ed25519.move +262 -0
  426. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/fixed_point64.move +447 -0
  427. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/from_bcs.move +91 -0
  428. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/math128.move +381 -0
  429. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/math64.move +336 -0
  430. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/math_fixed.move +139 -0
  431. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/math_fixed64.move +142 -0
  432. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/multi_ed25519.move +482 -0
  433. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/pool_u64.move +571 -0
  434. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/pool_u64_unbound.move +270 -0
  435. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ristretto255.move +1310 -0
  436. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ristretto255_bulletproofs.move +253 -0
  437. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ristretto255_elgamal.move +234 -0
  438. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/ristretto255_pedersen.move +158 -0
  439. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/secp256k1.move +114 -0
  440. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/simple_map.move +319 -0
  441. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/smart_table.move +769 -0
  442. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/smart_vector.move +766 -0
  443. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/string_utils.move +148 -0
  444. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/table.move +152 -0
  445. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/table_with_length.move +141 -0
  446. package/src/internal/move/jwks/build/jwk/sources/dependencies/AptosStdlib/type_info.move +351 -0
  447. package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/acl.move +46 -0
  448. package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/bcs.move +27 -0
  449. package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/bit_vector.move +239 -0
  450. package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/error.move +88 -0
  451. package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/features.move +780 -0
  452. package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/fixed_point32.move +295 -0
  453. package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/hash.move +8 -0
  454. package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/option.move +356 -0
  455. package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/signer.move +21 -0
  456. package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/string.move +93 -0
  457. package/src/internal/move/jwks/build/jwk/sources/dependencies/MoveStdlib/vector.move +669 -0
  458. package/src/internal/move/jwks/build/jwk/sources/main.move +20 -0
  459. package/src/version.ts +1 -1
  460. package/dist/esm/chunk-5YLNYSBT.mjs +0 -4
  461. package/dist/esm/chunk-5YLNYSBT.mjs.map +0 -1
  462. package/dist/esm/chunk-DLIBG6H7.mjs +0 -2
  463. package/dist/esm/chunk-DLIBG6H7.mjs.map +0 -1
  464. package/dist/esm/chunk-HLF3U7IS.mjs +0 -2
  465. package/dist/esm/chunk-RIRJNQ7B.mjs +0 -2
  466. /package/dist/esm/{chunk-34R7FSQF.mjs.map → chunk-57J5YBMT.mjs.map} +0 -0
  467. /package/dist/esm/{chunk-USB3LA6B.mjs.map → chunk-AMAPBD4D.mjs.map} +0 -0
  468. /package/dist/esm/{chunk-G7WH6GQP.mjs.map → chunk-CFQFFP6N.mjs.map} +0 -0
  469. /package/dist/esm/{chunk-4JT5AESZ.mjs.map → chunk-CO67Y6YE.mjs.map} +0 -0
  470. /package/dist/esm/{chunk-RIRJNQ7B.mjs.map → chunk-CW35YAMN.mjs.map} +0 -0
  471. /package/dist/esm/{chunk-HW7TSJI2.mjs.map → chunk-CZYH3G7E.mjs.map} +0 -0
  472. /package/dist/esm/{chunk-ZNLOQO4Q.mjs.map → chunk-GBNAG7KK.mjs.map} +0 -0
  473. /package/dist/esm/{chunk-6UZHMEK3.mjs.map → chunk-HETYL3WN.mjs.map} +0 -0
  474. /package/dist/esm/{chunk-SE2VS7WM.mjs.map → chunk-KRBZ54CY.mjs.map} +0 -0
  475. /package/dist/esm/{chunk-G6HENV5D.mjs.map → chunk-Q4W3WJ2U.mjs.map} +0 -0
  476. /package/dist/esm/{chunk-EF4FA5I6.mjs.map → chunk-RQX6JOEN.mjs.map} +0 -0
  477. /package/dist/esm/{chunk-MA4QUN6P.mjs.map → chunk-U7HD6PQV.mjs.map} +0 -0
  478. /package/dist/esm/{chunk-TDGLYA35.mjs.map → chunk-UOP7GBXB.mjs.map} +0 -0
  479. /package/dist/esm/{chunk-K43K3YG7.mjs.map → chunk-UQWF24SS.mjs.map} +0 -0
  480. /package/dist/esm/{chunk-2UBI3AZJ.mjs.map → chunk-V2QSMVJ5.mjs.map} +0 -0
  481. /package/dist/esm/{chunk-TLFZOAAB.mjs.map → chunk-V74WPKSY.mjs.map} +0 -0
@@ -0,0 +1,1387 @@
1
+ ///
2
+ /// AptosGovernance represents the on-chain governance of the Aptos network. Voting power is calculated based on the
3
+ /// current epoch's voting power of the proposer or voter's backing stake pool. In addition, for it to count,
4
+ /// the stake pool's lockup needs to be at least as long as the proposal's duration.
5
+ ///
6
+ /// It provides the following flow:
7
+ /// 1. Proposers can create a proposal by calling AptosGovernance::create_proposal. The proposer's backing stake pool
8
+ /// needs to have the minimum proposer stake required. Off-chain components can subscribe to CreateProposalEvent to
9
+ /// track proposal creation and proposal ids.
10
+ /// 2. Voters can vote on a proposal. Their voting power is derived from the backing stake pool. A stake pool can vote
11
+ /// on a proposal multiple times as long as the total voting power of these votes doesn't exceed its total voting power.
12
+ module aptos_framework::aptos_governance {
13
+ use std::error;
14
+ use std::option;
15
+ use std::signer;
16
+ use std::string::{Self, String, utf8};
17
+ use std::vector;
18
+ use std::features;
19
+
20
+ use aptos_std::math64::min;
21
+ use aptos_std::simple_map::{Self, SimpleMap};
22
+ use aptos_std::smart_table::{Self, SmartTable};
23
+ use aptos_std::table::{Self, Table};
24
+
25
+ use aptos_framework::account::{Self, SignerCapability, create_signer_with_capability};
26
+ use aptos_framework::coin;
27
+ use aptos_framework::event::{Self, EventHandle};
28
+ use aptos_framework::governance_proposal::{Self, GovernanceProposal};
29
+ use aptos_framework::stake;
30
+ use aptos_framework::staking_config;
31
+ use aptos_framework::system_addresses;
32
+ use aptos_framework::aptos_coin::{Self, AptosCoin};
33
+ use aptos_framework::consensus_config;
34
+ use aptos_framework::randomness_config;
35
+ use aptos_framework::reconfiguration_with_dkg;
36
+ use aptos_framework::timestamp;
37
+ use aptos_framework::voting;
38
+
39
+ /// The specified stake pool does not have sufficient stake to create a proposal
40
+ const EINSUFFICIENT_PROPOSER_STAKE: u64 = 1;
41
+ /// This account is not the designated voter of the specified stake pool
42
+ const ENOT_DELEGATED_VOTER: u64 = 2;
43
+ /// The specified stake pool does not have long enough remaining lockup to create a proposal or vote
44
+ const EINSUFFICIENT_STAKE_LOCKUP: u64 = 3;
45
+ /// The specified stake pool has already been used to vote on the same proposal
46
+ const EALREADY_VOTED: u64 = 4;
47
+ /// The specified stake pool must be part of the validator set
48
+ const ENO_VOTING_POWER: u64 = 5;
49
+ /// Proposal is not ready to be resolved. Waiting on time or votes
50
+ const EPROPOSAL_NOT_RESOLVABLE_YET: u64 = 6;
51
+ /// The proposal has not been resolved yet
52
+ const EPROPOSAL_NOT_RESOLVED_YET: u64 = 8;
53
+ /// Metadata location cannot be longer than 256 chars
54
+ const EMETADATA_LOCATION_TOO_LONG: u64 = 9;
55
+ /// Metadata hash cannot be longer than 256 chars
56
+ const EMETADATA_HASH_TOO_LONG: u64 = 10;
57
+ /// Account is not authorized to call this function.
58
+ const EUNAUTHORIZED: u64 = 11;
59
+ /// The stake pool is using voting power more than it has.
60
+ const EVOTING_POWER_OVERFLOW: u64 = 12;
61
+ /// Partial voting feature hasn't been properly initialized.
62
+ const EPARTIAL_VOTING_NOT_INITIALIZED: u64 = 13;
63
+ /// The proposal in the argument is not a partial voting proposal.
64
+ const ENOT_PARTIAL_VOTING_PROPOSAL: u64 = 14;
65
+
66
+ /// This matches the same enum const in voting. We have to duplicate it as Move doesn't have support for enums yet.
67
+ const PROPOSAL_STATE_SUCCEEDED: u64 = 1;
68
+
69
+ const MAX_U64: u64 = 18446744073709551615;
70
+
71
+ /// Proposal metadata attribute keys.
72
+ const METADATA_LOCATION_KEY: vector<u8> = b"metadata_location";
73
+ const METADATA_HASH_KEY: vector<u8> = b"metadata_hash";
74
+
75
+ /// Store the SignerCapabilities of accounts under the on-chain governance's control.
76
+ struct GovernanceResponsbility has key {
77
+ signer_caps: SimpleMap<address, SignerCapability>,
78
+ }
79
+
80
+ /// Configurations of the AptosGovernance, set during Genesis and can be updated by the same process offered
81
+ /// by this AptosGovernance module.
82
+ struct GovernanceConfig has key {
83
+ min_voting_threshold: u128,
84
+ required_proposer_stake: u64,
85
+ voting_duration_secs: u64,
86
+ }
87
+
88
+ struct RecordKey has copy, drop, store {
89
+ stake_pool: address,
90
+ proposal_id: u64,
91
+ }
92
+
93
+ /// Records to track the proposals each stake pool has been used to vote on.
94
+ struct VotingRecords has key {
95
+ votes: Table<RecordKey, bool>
96
+ }
97
+
98
+ /// Records to track the voting power usage of each stake pool on each proposal.
99
+ struct VotingRecordsV2 has key {
100
+ votes: SmartTable<RecordKey, u64>
101
+ }
102
+
103
+ /// Used to track which execution script hashes have been approved by governance.
104
+ /// This is required to bypass cases where the execution scripts exceed the size limit imposed by mempool.
105
+ struct ApprovedExecutionHashes has key {
106
+ hashes: SimpleMap<u64, vector<u8>>,
107
+ }
108
+
109
+ /// Events generated by interactions with the AptosGovernance module.
110
+ struct GovernanceEvents has key {
111
+ create_proposal_events: EventHandle<CreateProposalEvent>,
112
+ update_config_events: EventHandle<UpdateConfigEvent>,
113
+ vote_events: EventHandle<VoteEvent>,
114
+ }
115
+
116
+ /// Event emitted when a proposal is created.
117
+ struct CreateProposalEvent has drop, store {
118
+ proposer: address,
119
+ stake_pool: address,
120
+ proposal_id: u64,
121
+ execution_hash: vector<u8>,
122
+ proposal_metadata: SimpleMap<String, vector<u8>>,
123
+ }
124
+
125
+ /// Event emitted when there's a vote on a proposa;
126
+ struct VoteEvent has drop, store {
127
+ proposal_id: u64,
128
+ voter: address,
129
+ stake_pool: address,
130
+ num_votes: u64,
131
+ should_pass: bool,
132
+ }
133
+
134
+ /// Event emitted when the governance configs are updated.
135
+ struct UpdateConfigEvent has drop, store {
136
+ min_voting_threshold: u128,
137
+ required_proposer_stake: u64,
138
+ voting_duration_secs: u64,
139
+ }
140
+
141
+ #[event]
142
+ /// Event emitted when a proposal is created.
143
+ struct CreateProposal has drop, store {
144
+ proposer: address,
145
+ stake_pool: address,
146
+ proposal_id: u64,
147
+ execution_hash: vector<u8>,
148
+ proposal_metadata: SimpleMap<String, vector<u8>>,
149
+ }
150
+
151
+ #[event]
152
+ /// Event emitted when there's a vote on a proposa;
153
+ struct Vote has drop, store {
154
+ proposal_id: u64,
155
+ voter: address,
156
+ stake_pool: address,
157
+ num_votes: u64,
158
+ should_pass: bool,
159
+ }
160
+
161
+ #[event]
162
+ /// Event emitted when the governance configs are updated.
163
+ struct UpdateConfig has drop, store {
164
+ min_voting_threshold: u128,
165
+ required_proposer_stake: u64,
166
+ voting_duration_secs: u64,
167
+ }
168
+
169
+ /// Can be called during genesis or by the governance itself.
170
+ /// Stores the signer capability for a given address.
171
+ public fun store_signer_cap(
172
+ aptos_framework: &signer,
173
+ signer_address: address,
174
+ signer_cap: SignerCapability,
175
+ ) acquires GovernanceResponsbility {
176
+ system_addresses::assert_aptos_framework(aptos_framework);
177
+ system_addresses::assert_framework_reserved(signer_address);
178
+
179
+ if (!exists<GovernanceResponsbility>(@aptos_framework)) {
180
+ move_to(
181
+ aptos_framework,
182
+ GovernanceResponsbility { signer_caps: simple_map::create<address, SignerCapability>() }
183
+ );
184
+ };
185
+
186
+ let signer_caps = &mut borrow_global_mut<GovernanceResponsbility>(@aptos_framework).signer_caps;
187
+ simple_map::add(signer_caps, signer_address, signer_cap);
188
+ }
189
+
190
+ /// Initializes the state for Aptos Governance. Can only be called during Genesis with a signer
191
+ /// for the aptos_framework (0x1) account.
192
+ /// This function is private because it's called directly from the vm.
193
+ fun initialize(
194
+ aptos_framework: &signer,
195
+ min_voting_threshold: u128,
196
+ required_proposer_stake: u64,
197
+ voting_duration_secs: u64,
198
+ ) {
199
+ system_addresses::assert_aptos_framework(aptos_framework);
200
+
201
+ voting::register<GovernanceProposal>(aptos_framework);
202
+ move_to(aptos_framework, GovernanceConfig {
203
+ voting_duration_secs,
204
+ min_voting_threshold,
205
+ required_proposer_stake,
206
+ });
207
+ move_to(aptos_framework, GovernanceEvents {
208
+ create_proposal_events: account::new_event_handle<CreateProposalEvent>(aptos_framework),
209
+ update_config_events: account::new_event_handle<UpdateConfigEvent>(aptos_framework),
210
+ vote_events: account::new_event_handle<VoteEvent>(aptos_framework),
211
+ });
212
+ move_to(aptos_framework, VotingRecords {
213
+ votes: table::new(),
214
+ });
215
+ move_to(aptos_framework, ApprovedExecutionHashes {
216
+ hashes: simple_map::create<u64, vector<u8>>(),
217
+ })
218
+ }
219
+
220
+ /// Update the governance configurations. This can only be called as part of resolving a proposal in this same
221
+ /// AptosGovernance.
222
+ public fun update_governance_config(
223
+ aptos_framework: &signer,
224
+ min_voting_threshold: u128,
225
+ required_proposer_stake: u64,
226
+ voting_duration_secs: u64,
227
+ ) acquires GovernanceConfig, GovernanceEvents {
228
+ system_addresses::assert_aptos_framework(aptos_framework);
229
+
230
+ let governance_config = borrow_global_mut<GovernanceConfig>(@aptos_framework);
231
+ governance_config.voting_duration_secs = voting_duration_secs;
232
+ governance_config.min_voting_threshold = min_voting_threshold;
233
+ governance_config.required_proposer_stake = required_proposer_stake;
234
+
235
+ if (std::features::module_event_migration_enabled()) {
236
+ event::emit(
237
+ UpdateConfig {
238
+ min_voting_threshold,
239
+ required_proposer_stake,
240
+ voting_duration_secs
241
+ },
242
+ )
243
+ };
244
+ let events = borrow_global_mut<GovernanceEvents>(@aptos_framework);
245
+ event::emit_event<UpdateConfigEvent>(
246
+ &mut events.update_config_events,
247
+ UpdateConfigEvent {
248
+ min_voting_threshold,
249
+ required_proposer_stake,
250
+ voting_duration_secs
251
+ },
252
+ );
253
+ }
254
+
255
+ /// Initializes the state for Aptos Governance partial voting. Can only be called through Aptos governance
256
+ /// proposals with a signer for the aptos_framework (0x1) account.
257
+ public fun initialize_partial_voting(
258
+ aptos_framework: &signer,
259
+ ) {
260
+ system_addresses::assert_aptos_framework(aptos_framework);
261
+
262
+ move_to(aptos_framework, VotingRecordsV2 {
263
+ votes: smart_table::new(),
264
+ });
265
+ }
266
+
267
+ #[view]
268
+ public fun get_voting_duration_secs(): u64 acquires GovernanceConfig {
269
+ borrow_global<GovernanceConfig>(@aptos_framework).voting_duration_secs
270
+ }
271
+
272
+ #[view]
273
+ public fun get_min_voting_threshold(): u128 acquires GovernanceConfig {
274
+ borrow_global<GovernanceConfig>(@aptos_framework).min_voting_threshold
275
+ }
276
+
277
+ #[view]
278
+ public fun get_required_proposer_stake(): u64 acquires GovernanceConfig {
279
+ borrow_global<GovernanceConfig>(@aptos_framework).required_proposer_stake
280
+ }
281
+
282
+ #[view]
283
+ /// Return true if a stake pool has already voted on a proposal before partial governance voting is enabled.
284
+ public fun has_entirely_voted(stake_pool: address, proposal_id: u64): bool acquires VotingRecords {
285
+ let record_key = RecordKey {
286
+ stake_pool,
287
+ proposal_id,
288
+ };
289
+ // If a stake pool has already voted on a proposal before partial governance voting is enabled,
290
+ // there is a record in VotingRecords.
291
+ let voting_records = borrow_global<VotingRecords>(@aptos_framework);
292
+ table::contains(&voting_records.votes, record_key)
293
+ }
294
+
295
+ #[view]
296
+ /// Return remaining voting power of a stake pool on a proposal.
297
+ /// Note: a stake pool's voting power on a proposal could increase over time(e.g. rewards/new stake).
298
+ public fun get_remaining_voting_power(
299
+ stake_pool: address,
300
+ proposal_id: u64
301
+ ): u64 acquires VotingRecords, VotingRecordsV2 {
302
+ assert_voting_initialization();
303
+
304
+ let proposal_expiration = voting::get_proposal_expiration_secs<GovernanceProposal>(
305
+ @aptos_framework,
306
+ proposal_id
307
+ );
308
+ let lockup_until = stake::get_lockup_secs(stake_pool);
309
+ // The voter's stake needs to be locked up at least as long as the proposal's expiration.
310
+ // Also no one can vote on a expired proposal.
311
+ if (proposal_expiration > lockup_until || timestamp::now_seconds() > proposal_expiration) {
312
+ return 0
313
+ };
314
+
315
+ // If a stake pool has already voted on a proposal before partial governance voting is enabled, the stake pool
316
+ // cannot vote on the proposal even after partial governance voting is enabled.
317
+ if (has_entirely_voted(stake_pool, proposal_id)) {
318
+ return 0
319
+ };
320
+ let record_key = RecordKey {
321
+ stake_pool,
322
+ proposal_id,
323
+ };
324
+ let used_voting_power = 0u64;
325
+ if (features::partial_governance_voting_enabled()) {
326
+ let voting_records_v2 = borrow_global<VotingRecordsV2>(@aptos_framework);
327
+ used_voting_power = *smart_table::borrow_with_default(&voting_records_v2.votes, record_key, &0);
328
+ };
329
+ get_voting_power(stake_pool) - used_voting_power
330
+ }
331
+
332
+ /// Create a single-step proposal with the backing `stake_pool`.
333
+ /// @param execution_hash Required. This is the hash of the resolution script. When the proposal is resolved,
334
+ /// only the exact script with matching hash can be successfully executed.
335
+ public entry fun create_proposal(
336
+ proposer: &signer,
337
+ stake_pool: address,
338
+ execution_hash: vector<u8>,
339
+ metadata_location: vector<u8>,
340
+ metadata_hash: vector<u8>,
341
+ ) acquires GovernanceConfig, GovernanceEvents {
342
+ create_proposal_v2(proposer, stake_pool, execution_hash, metadata_location, metadata_hash, false);
343
+ }
344
+
345
+ /// Create a single-step or multi-step proposal with the backing `stake_pool`.
346
+ /// @param execution_hash Required. This is the hash of the resolution script. When the proposal is resolved,
347
+ /// only the exact script with matching hash can be successfully executed.
348
+ public entry fun create_proposal_v2(
349
+ proposer: &signer,
350
+ stake_pool: address,
351
+ execution_hash: vector<u8>,
352
+ metadata_location: vector<u8>,
353
+ metadata_hash: vector<u8>,
354
+ is_multi_step_proposal: bool,
355
+ ) acquires GovernanceConfig, GovernanceEvents {
356
+ create_proposal_v2_impl(
357
+ proposer,
358
+ stake_pool,
359
+ execution_hash,
360
+ metadata_location,
361
+ metadata_hash,
362
+ is_multi_step_proposal
363
+ );
364
+ }
365
+
366
+ /// Create a single-step or multi-step proposal with the backing `stake_pool`.
367
+ /// @param execution_hash Required. This is the hash of the resolution script. When the proposal is resolved,
368
+ /// only the exact script with matching hash can be successfully executed.
369
+ /// Return proposal_id when a proposal is successfully created.
370
+ public fun create_proposal_v2_impl(
371
+ proposer: &signer,
372
+ stake_pool: address,
373
+ execution_hash: vector<u8>,
374
+ metadata_location: vector<u8>,
375
+ metadata_hash: vector<u8>,
376
+ is_multi_step_proposal: bool,
377
+ ): u64 acquires GovernanceConfig, GovernanceEvents {
378
+ let proposer_address = signer::address_of(proposer);
379
+ assert!(
380
+ stake::get_delegated_voter(stake_pool) == proposer_address,
381
+ error::invalid_argument(ENOT_DELEGATED_VOTER)
382
+ );
383
+
384
+ // The proposer's stake needs to be at least the required bond amount.
385
+ let governance_config = borrow_global<GovernanceConfig>(@aptos_framework);
386
+ let stake_balance = get_voting_power(stake_pool);
387
+ assert!(
388
+ stake_balance >= governance_config.required_proposer_stake,
389
+ error::invalid_argument(EINSUFFICIENT_PROPOSER_STAKE),
390
+ );
391
+
392
+ // The proposer's stake needs to be locked up at least as long as the proposal's voting period.
393
+ let current_time = timestamp::now_seconds();
394
+ let proposal_expiration = current_time + governance_config.voting_duration_secs;
395
+ assert!(
396
+ stake::get_lockup_secs(stake_pool) >= proposal_expiration,
397
+ error::invalid_argument(EINSUFFICIENT_STAKE_LOCKUP),
398
+ );
399
+
400
+ // Create and validate proposal metadata.
401
+ let proposal_metadata = create_proposal_metadata(metadata_location, metadata_hash);
402
+
403
+ // We want to allow early resolution of proposals if more than 50% of the total supply of the network coins
404
+ // has voted. This doesn't take into subsequent inflation/deflation (rewards are issued every epoch and gas fees
405
+ // are burnt after every transaction), but inflation/delation is very unlikely to have a major impact on total
406
+ // supply during the voting period.
407
+ let total_voting_token_supply = coin::supply<AptosCoin>();
408
+ let early_resolution_vote_threshold = option::none<u128>();
409
+ if (option::is_some(&total_voting_token_supply)) {
410
+ let total_supply = *option::borrow(&total_voting_token_supply);
411
+ // 50% + 1 to avoid rounding errors.
412
+ early_resolution_vote_threshold = option::some(total_supply / 2 + 1);
413
+ };
414
+
415
+ let proposal_id = voting::create_proposal_v2(
416
+ proposer_address,
417
+ @aptos_framework,
418
+ governance_proposal::create_proposal(),
419
+ execution_hash,
420
+ governance_config.min_voting_threshold,
421
+ proposal_expiration,
422
+ early_resolution_vote_threshold,
423
+ proposal_metadata,
424
+ is_multi_step_proposal,
425
+ );
426
+
427
+ if (std::features::module_event_migration_enabled()) {
428
+ event::emit(
429
+ CreateProposal {
430
+ proposal_id,
431
+ proposer: proposer_address,
432
+ stake_pool,
433
+ execution_hash,
434
+ proposal_metadata,
435
+ },
436
+ );
437
+ };
438
+ let events = borrow_global_mut<GovernanceEvents>(@aptos_framework);
439
+ event::emit_event<CreateProposalEvent>(
440
+ &mut events.create_proposal_events,
441
+ CreateProposalEvent {
442
+ proposal_id,
443
+ proposer: proposer_address,
444
+ stake_pool,
445
+ execution_hash,
446
+ proposal_metadata,
447
+ },
448
+ );
449
+ proposal_id
450
+ }
451
+
452
+ /// Vote on proposal with proposal_id and all voting power from multiple stake_pools.
453
+ public entry fun batch_vote(
454
+ voter: &signer,
455
+ stake_pools: vector<address>,
456
+ proposal_id: u64,
457
+ should_pass: bool,
458
+ ) acquires ApprovedExecutionHashes, VotingRecords, VotingRecordsV2, GovernanceEvents {
459
+ vector::for_each(stake_pools, |stake_pool| {
460
+ vote_internal(voter, stake_pool, proposal_id, MAX_U64, should_pass);
461
+ });
462
+ }
463
+
464
+ /// Batch vote on proposal with proposal_id and specified voting power from multiple stake_pools.
465
+ public entry fun batch_partial_vote(
466
+ voter: &signer,
467
+ stake_pools: vector<address>,
468
+ proposal_id: u64,
469
+ voting_power: u64,
470
+ should_pass: bool,
471
+ ) acquires ApprovedExecutionHashes, VotingRecords, VotingRecordsV2, GovernanceEvents {
472
+ vector::for_each(stake_pools, |stake_pool| {
473
+ vote_internal(voter, stake_pool, proposal_id, voting_power, should_pass);
474
+ });
475
+ }
476
+
477
+ /// Vote on proposal with `proposal_id` and all voting power from `stake_pool`.
478
+ public entry fun vote(
479
+ voter: &signer,
480
+ stake_pool: address,
481
+ proposal_id: u64,
482
+ should_pass: bool,
483
+ ) acquires ApprovedExecutionHashes, VotingRecords, VotingRecordsV2, GovernanceEvents {
484
+ vote_internal(voter, stake_pool, proposal_id, MAX_U64, should_pass);
485
+ }
486
+
487
+ /// Vote on proposal with `proposal_id` and specified voting power from `stake_pool`.
488
+ public entry fun partial_vote(
489
+ voter: &signer,
490
+ stake_pool: address,
491
+ proposal_id: u64,
492
+ voting_power: u64,
493
+ should_pass: bool,
494
+ ) acquires ApprovedExecutionHashes, VotingRecords, VotingRecordsV2, GovernanceEvents {
495
+ vote_internal(voter, stake_pool, proposal_id, voting_power, should_pass);
496
+ }
497
+
498
+ /// Vote on proposal with `proposal_id` and specified voting_power from `stake_pool`.
499
+ /// If voting_power is more than all the left voting power of `stake_pool`, use all the left voting power.
500
+ /// If a stake pool has already voted on a proposal before partial governance voting is enabled, the stake pool
501
+ /// cannot vote on the proposal even after partial governance voting is enabled.
502
+ fun vote_internal(
503
+ voter: &signer,
504
+ stake_pool: address,
505
+ proposal_id: u64,
506
+ voting_power: u64,
507
+ should_pass: bool,
508
+ ) acquires ApprovedExecutionHashes, VotingRecords, VotingRecordsV2, GovernanceEvents {
509
+ let voter_address = signer::address_of(voter);
510
+ assert!(stake::get_delegated_voter(stake_pool) == voter_address, error::invalid_argument(ENOT_DELEGATED_VOTER));
511
+
512
+ // The voter's stake needs to be locked up at least as long as the proposal's expiration.
513
+ let proposal_expiration = voting::get_proposal_expiration_secs<GovernanceProposal>(
514
+ @aptos_framework,
515
+ proposal_id
516
+ );
517
+ assert!(
518
+ stake::get_lockup_secs(stake_pool) >= proposal_expiration,
519
+ error::invalid_argument(EINSUFFICIENT_STAKE_LOCKUP),
520
+ );
521
+
522
+ // If a stake pool has already voted on a proposal before partial governance voting is enabled,
523
+ // `get_remaining_voting_power` returns 0.
524
+ let staking_pool_voting_power = get_remaining_voting_power(stake_pool, proposal_id);
525
+ voting_power = min(voting_power, staking_pool_voting_power);
526
+
527
+ // Short-circuit if the voter has no voting power.
528
+ assert!(voting_power > 0, error::invalid_argument(ENO_VOTING_POWER));
529
+
530
+ voting::vote<GovernanceProposal>(
531
+ &governance_proposal::create_empty_proposal(),
532
+ @aptos_framework,
533
+ proposal_id,
534
+ voting_power,
535
+ should_pass,
536
+ );
537
+
538
+ let record_key = RecordKey {
539
+ stake_pool,
540
+ proposal_id,
541
+ };
542
+ if (features::partial_governance_voting_enabled()) {
543
+ let voting_records_v2 = borrow_global_mut<VotingRecordsV2>(@aptos_framework);
544
+ let used_voting_power = smart_table::borrow_mut_with_default(&mut voting_records_v2.votes, record_key, 0);
545
+ // This calculation should never overflow because the used voting cannot exceed the total voting power of this stake pool.
546
+ *used_voting_power = *used_voting_power + voting_power;
547
+ } else {
548
+ let voting_records = borrow_global_mut<VotingRecords>(@aptos_framework);
549
+ assert!(
550
+ !table::contains(&voting_records.votes, record_key),
551
+ error::invalid_argument(EALREADY_VOTED));
552
+ table::add(&mut voting_records.votes, record_key, true);
553
+ };
554
+
555
+ if (std::features::module_event_migration_enabled()) {
556
+ event::emit(
557
+ Vote {
558
+ proposal_id,
559
+ voter: voter_address,
560
+ stake_pool,
561
+ num_votes: voting_power,
562
+ should_pass,
563
+ },
564
+ );
565
+ };
566
+ let events = borrow_global_mut<GovernanceEvents>(@aptos_framework);
567
+ event::emit_event<VoteEvent>(
568
+ &mut events.vote_events,
569
+ VoteEvent {
570
+ proposal_id,
571
+ voter: voter_address,
572
+ stake_pool,
573
+ num_votes: voting_power,
574
+ should_pass,
575
+ },
576
+ );
577
+
578
+ let proposal_state = voting::get_proposal_state<GovernanceProposal>(@aptos_framework, proposal_id);
579
+ if (proposal_state == PROPOSAL_STATE_SUCCEEDED) {
580
+ add_approved_script_hash(proposal_id);
581
+ }
582
+ }
583
+
584
+ public entry fun add_approved_script_hash_script(proposal_id: u64) acquires ApprovedExecutionHashes {
585
+ add_approved_script_hash(proposal_id)
586
+ }
587
+
588
+ /// Add the execution script hash of a successful governance proposal to the approved list.
589
+ /// This is needed to bypass the mempool transaction size limit for approved governance proposal transactions that
590
+ /// are too large (e.g. module upgrades).
591
+ public fun add_approved_script_hash(proposal_id: u64) acquires ApprovedExecutionHashes {
592
+ let approved_hashes = borrow_global_mut<ApprovedExecutionHashes>(@aptos_framework);
593
+
594
+ // Ensure the proposal can be resolved.
595
+ let proposal_state = voting::get_proposal_state<GovernanceProposal>(@aptos_framework, proposal_id);
596
+ assert!(proposal_state == PROPOSAL_STATE_SUCCEEDED, error::invalid_argument(EPROPOSAL_NOT_RESOLVABLE_YET));
597
+
598
+ let execution_hash = voting::get_execution_hash<GovernanceProposal>(@aptos_framework, proposal_id);
599
+
600
+ // If this is a multi-step proposal, the proposal id will already exist in the ApprovedExecutionHashes map.
601
+ // We will update execution hash in ApprovedExecutionHashes to be the next_execution_hash.
602
+ if (simple_map::contains_key(&approved_hashes.hashes, &proposal_id)) {
603
+ let current_execution_hash = simple_map::borrow_mut(&mut approved_hashes.hashes, &proposal_id);
604
+ *current_execution_hash = execution_hash;
605
+ } else {
606
+ simple_map::add(&mut approved_hashes.hashes, proposal_id, execution_hash);
607
+ }
608
+ }
609
+
610
+ /// Resolve a successful single-step proposal. This would fail if the proposal is not successful (not enough votes or more no
611
+ /// than yes).
612
+ public fun resolve(
613
+ proposal_id: u64,
614
+ signer_address: address
615
+ ): signer acquires ApprovedExecutionHashes, GovernanceResponsbility {
616
+ voting::resolve<GovernanceProposal>(@aptos_framework, proposal_id);
617
+ remove_approved_hash(proposal_id);
618
+ get_signer(signer_address)
619
+ }
620
+
621
+ /// Resolve a successful multi-step proposal. This would fail if the proposal is not successful.
622
+ public fun resolve_multi_step_proposal(
623
+ proposal_id: u64,
624
+ signer_address: address,
625
+ next_execution_hash: vector<u8>
626
+ ): signer acquires GovernanceResponsbility, ApprovedExecutionHashes {
627
+ voting::resolve_proposal_v2<GovernanceProposal>(@aptos_framework, proposal_id, next_execution_hash);
628
+ // If the current step is the last step of this multi-step proposal,
629
+ // we will remove the execution hash from the ApprovedExecutionHashes map.
630
+ if (vector::length(&next_execution_hash) == 0) {
631
+ remove_approved_hash(proposal_id);
632
+ } else {
633
+ // If the current step is not the last step of this proposal,
634
+ // we replace the current execution hash with the next execution hash
635
+ // in the ApprovedExecutionHashes map.
636
+ add_approved_script_hash(proposal_id)
637
+ };
638
+ get_signer(signer_address)
639
+ }
640
+
641
+ /// Remove an approved proposal's execution script hash.
642
+ public fun remove_approved_hash(proposal_id: u64) acquires ApprovedExecutionHashes {
643
+ assert!(
644
+ voting::is_resolved<GovernanceProposal>(@aptos_framework, proposal_id),
645
+ error::invalid_argument(EPROPOSAL_NOT_RESOLVED_YET),
646
+ );
647
+
648
+ let approved_hashes = &mut borrow_global_mut<ApprovedExecutionHashes>(@aptos_framework).hashes;
649
+ if (simple_map::contains_key(approved_hashes, &proposal_id)) {
650
+ simple_map::remove(approved_hashes, &proposal_id);
651
+ };
652
+ }
653
+
654
+ /// Manually reconfigure. Called at the end of a governance txn that alters on-chain configs.
655
+ ///
656
+ /// WARNING: this function always ensures a reconfiguration starts, but when the reconfiguration finishes depends.
657
+ /// - If feature `RECONFIGURE_WITH_DKG` is disabled, it finishes immediately.
658
+ /// - At the end of the calling transaction, we will be in a new epoch.
659
+ /// - If feature `RECONFIGURE_WITH_DKG` is enabled, it starts DKG, and the new epoch will start in a block prologue after DKG finishes.
660
+ ///
661
+ /// This behavior affects when an update of an on-chain config (e.g. `ConsensusConfig`, `Features`) takes effect,
662
+ /// since such updates are applied whenever we enter an new epoch.
663
+ public entry fun reconfigure(aptos_framework: &signer) {
664
+ system_addresses::assert_aptos_framework(aptos_framework);
665
+ if (consensus_config::validator_txn_enabled() && randomness_config::enabled()) {
666
+ reconfiguration_with_dkg::try_start();
667
+ } else {
668
+ reconfiguration_with_dkg::finish(aptos_framework);
669
+ }
670
+ }
671
+
672
+ /// Change epoch immediately.
673
+ /// If `RECONFIGURE_WITH_DKG` is enabled and we are in the middle of a DKG,
674
+ /// stop waiting for DKG and enter the new epoch without randomness.
675
+ ///
676
+ /// WARNING: currently only used by tests. In most cases you should use `reconfigure()` instead.
677
+ /// TODO: migrate these tests to be aware of async reconfiguration.
678
+ public entry fun force_end_epoch(aptos_framework: &signer) {
679
+ system_addresses::assert_aptos_framework(aptos_framework);
680
+ reconfiguration_with_dkg::finish(aptos_framework);
681
+ }
682
+
683
+ /// `force_end_epoch()` equivalent but only called in testnet,
684
+ /// where the core resources account exists and has been granted power to mint Aptos coins.
685
+ public entry fun force_end_epoch_test_only(aptos_framework: &signer) acquires GovernanceResponsbility {
686
+ let core_signer = get_signer_testnet_only(aptos_framework, @0x1);
687
+ system_addresses::assert_aptos_framework(&core_signer);
688
+ reconfiguration_with_dkg::finish(&core_signer);
689
+ }
690
+
691
+ /// Update feature flags and also trigger reconfiguration.
692
+ public fun toggle_features(aptos_framework: &signer, enable: vector<u64>, disable: vector<u64>) {
693
+ system_addresses::assert_aptos_framework(aptos_framework);
694
+ features::change_feature_flags_for_next_epoch(aptos_framework, enable, disable);
695
+ reconfigure(aptos_framework);
696
+ }
697
+
698
+ /// Only called in testnet where the core resources account exists and has been granted power to mint Aptos coins.
699
+ public fun get_signer_testnet_only(
700
+ core_resources: &signer, signer_address: address): signer acquires GovernanceResponsbility {
701
+ system_addresses::assert_core_resource(core_resources);
702
+ // Core resources account only has mint capability in tests/testnets.
703
+ assert!(aptos_coin::has_mint_capability(core_resources), error::unauthenticated(EUNAUTHORIZED));
704
+ get_signer(signer_address)
705
+ }
706
+
707
+ #[view]
708
+ /// Return the voting power a stake pool has with respect to governance proposals.
709
+ public fun get_voting_power(pool_address: address): u64 {
710
+ let allow_validator_set_change = staking_config::get_allow_validator_set_change(&staking_config::get());
711
+ if (allow_validator_set_change) {
712
+ let (active, _, pending_active, pending_inactive) = stake::get_stake(pool_address);
713
+ // We calculate the voting power as total non-inactive stakes of the pool. Even if the validator is not in the
714
+ // active validator set, as long as they have a lockup (separately checked in create_proposal and voting), their
715
+ // stake would still count in their voting power for governance proposals.
716
+ active + pending_active + pending_inactive
717
+ } else {
718
+ stake::get_current_epoch_voting_power(pool_address)
719
+ }
720
+ }
721
+
722
+ /// Return a signer for making changes to 0x1 as part of on-chain governance proposal process.
723
+ fun get_signer(signer_address: address): signer acquires GovernanceResponsbility {
724
+ let governance_responsibility = borrow_global<GovernanceResponsbility>(@aptos_framework);
725
+ let signer_cap = simple_map::borrow(&governance_responsibility.signer_caps, &signer_address);
726
+ create_signer_with_capability(signer_cap)
727
+ }
728
+
729
+ fun create_proposal_metadata(
730
+ metadata_location: vector<u8>,
731
+ metadata_hash: vector<u8>
732
+ ): SimpleMap<String, vector<u8>> {
733
+ assert!(string::length(&utf8(metadata_location)) <= 256, error::invalid_argument(EMETADATA_LOCATION_TOO_LONG));
734
+ assert!(string::length(&utf8(metadata_hash)) <= 256, error::invalid_argument(EMETADATA_HASH_TOO_LONG));
735
+
736
+ let metadata = simple_map::create<String, vector<u8>>();
737
+ simple_map::add(&mut metadata, utf8(METADATA_LOCATION_KEY), metadata_location);
738
+ simple_map::add(&mut metadata, utf8(METADATA_HASH_KEY), metadata_hash);
739
+ metadata
740
+ }
741
+
742
+ fun assert_voting_initialization() {
743
+ if (features::partial_governance_voting_enabled()) {
744
+ assert!(exists<VotingRecordsV2>(@aptos_framework), error::invalid_state(EPARTIAL_VOTING_NOT_INITIALIZED));
745
+ };
746
+ }
747
+
748
+ #[test_only]
749
+ public entry fun create_proposal_for_test(
750
+ proposer: &signer,
751
+ multi_step: bool,
752
+ ) acquires GovernanceConfig, GovernanceEvents {
753
+ let execution_hash = vector::empty<u8>();
754
+ vector::push_back(&mut execution_hash, 1);
755
+ if (multi_step) {
756
+ create_proposal_v2(
757
+ proposer,
758
+ signer::address_of(proposer),
759
+ execution_hash,
760
+ b"",
761
+ b"",
762
+ true,
763
+ );
764
+ } else {
765
+ create_proposal(
766
+ proposer,
767
+ signer::address_of(proposer),
768
+ execution_hash,
769
+ b"",
770
+ b"",
771
+ );
772
+ };
773
+ }
774
+
775
+ #[test_only]
776
+ public fun resolve_proposal_for_test(
777
+ proposal_id: u64,
778
+ signer_address: address,
779
+ multi_step: bool,
780
+ finish_multi_step_execution: bool
781
+ ): signer acquires ApprovedExecutionHashes, GovernanceResponsbility {
782
+ if (multi_step) {
783
+ let execution_hash = vector::empty<u8>();
784
+ vector::push_back(&mut execution_hash, 1);
785
+
786
+ if (finish_multi_step_execution) {
787
+ resolve_multi_step_proposal(proposal_id, signer_address, vector::empty<u8>())
788
+ } else {
789
+ resolve_multi_step_proposal(proposal_id, signer_address, execution_hash)
790
+ }
791
+ } else {
792
+ resolve(proposal_id, signer_address)
793
+ }
794
+ }
795
+
796
+ #[test_only]
797
+ /// Force reconfigure. To be called at the end of a proposal that alters on-chain configs.
798
+ public fun toggle_features_for_test(enable: vector<u64>, disable: vector<u64>) {
799
+ toggle_features(&account::create_signer_for_test(@0x1), enable, disable);
800
+ }
801
+
802
+ #[test_only]
803
+ public entry fun test_voting_generic(
804
+ aptos_framework: signer,
805
+ proposer: signer,
806
+ yes_voter: signer,
807
+ no_voter: signer,
808
+ multi_step: bool,
809
+ use_generic_resolve_function: bool,
810
+ ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
811
+ setup_voting(&aptos_framework, &proposer, &yes_voter, &no_voter);
812
+
813
+ let execution_hash = vector::empty<u8>();
814
+ vector::push_back(&mut execution_hash, 1);
815
+
816
+ create_proposal_for_test(&proposer, multi_step);
817
+
818
+ vote(&yes_voter, signer::address_of(&yes_voter), 0, true);
819
+ vote(&no_voter, signer::address_of(&no_voter), 0, false);
820
+
821
+ test_resolving_proposal_generic(aptos_framework, use_generic_resolve_function, execution_hash);
822
+ }
823
+
824
+ #[test_only]
825
+ public entry fun test_resolving_proposal_generic(
826
+ aptos_framework: signer,
827
+ use_generic_resolve_function: bool,
828
+ execution_hash: vector<u8>,
829
+ ) acquires ApprovedExecutionHashes, GovernanceResponsbility {
830
+ // Once expiration time has passed, the proposal should be considered resolve now as there are more yes votes
831
+ // than no.
832
+ timestamp::update_global_time_for_test(100001000000);
833
+ let proposal_state = voting::get_proposal_state<GovernanceProposal>(signer::address_of(&aptos_framework), 0);
834
+ assert!(proposal_state == PROPOSAL_STATE_SUCCEEDED, proposal_state);
835
+
836
+ // Add approved script hash.
837
+ add_approved_script_hash(0);
838
+ let approved_hashes = borrow_global<ApprovedExecutionHashes>(@aptos_framework).hashes;
839
+ assert!(*simple_map::borrow(&approved_hashes, &0) == execution_hash, 0);
840
+
841
+ // Resolve the proposal.
842
+ let account = resolve_proposal_for_test(0, @aptos_framework, use_generic_resolve_function, true);
843
+ assert!(signer::address_of(&account) == @aptos_framework, 1);
844
+ assert!(voting::is_resolved<GovernanceProposal>(@aptos_framework, 0), 2);
845
+ let approved_hashes = borrow_global<ApprovedExecutionHashes>(@aptos_framework).hashes;
846
+ assert!(!simple_map::contains_key(&approved_hashes, &0), 3);
847
+ }
848
+
849
+ #[test(aptos_framework = @aptos_framework, proposer = @0x123, yes_voter = @0x234, no_voter = @345)]
850
+ public entry fun test_voting(
851
+ aptos_framework: signer,
852
+ proposer: signer,
853
+ yes_voter: signer,
854
+ no_voter: signer,
855
+ ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
856
+ test_voting_generic(aptos_framework, proposer, yes_voter, no_voter, false, false);
857
+ }
858
+
859
+ #[test(aptos_framework = @aptos_framework, proposer = @0x123, yes_voter = @0x234, no_voter = @345)]
860
+ public entry fun test_voting_multi_step(
861
+ aptos_framework: signer,
862
+ proposer: signer,
863
+ yes_voter: signer,
864
+ no_voter: signer,
865
+ ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
866
+ test_voting_generic(aptos_framework, proposer, yes_voter, no_voter, true, true);
867
+ }
868
+
869
+ #[test(aptos_framework = @aptos_framework, proposer = @0x123, yes_voter = @0x234, no_voter = @345)]
870
+ #[expected_failure(abort_code = 0x5000a, location = aptos_framework::voting)]
871
+ public entry fun test_voting_multi_step_cannot_use_single_step_resolve(
872
+ aptos_framework: signer,
873
+ proposer: signer,
874
+ yes_voter: signer,
875
+ no_voter: signer,
876
+ ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
877
+ test_voting_generic(aptos_framework, proposer, yes_voter, no_voter, true, false);
878
+ }
879
+
880
+ #[test(aptos_framework = @aptos_framework, proposer = @0x123, yes_voter = @0x234, no_voter = @345)]
881
+ public entry fun test_voting_single_step_can_use_generic_resolve_function(
882
+ aptos_framework: signer,
883
+ proposer: signer,
884
+ yes_voter: signer,
885
+ no_voter: signer,
886
+ ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
887
+ test_voting_generic(aptos_framework, proposer, yes_voter, no_voter, false, true);
888
+ }
889
+
890
+ #[test_only]
891
+ public entry fun test_can_remove_approved_hash_if_executed_directly_via_voting_generic(
892
+ aptos_framework: signer,
893
+ proposer: signer,
894
+ yes_voter: signer,
895
+ no_voter: signer,
896
+ multi_step: bool,
897
+ ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
898
+ setup_voting(&aptos_framework, &proposer, &yes_voter, &no_voter);
899
+
900
+ create_proposal_for_test(&proposer, multi_step);
901
+ vote(&yes_voter, signer::address_of(&yes_voter), 0, true);
902
+ vote(&no_voter, signer::address_of(&no_voter), 0, false);
903
+
904
+ // Add approved script hash.
905
+ timestamp::update_global_time_for_test(100001000000);
906
+ add_approved_script_hash(0);
907
+
908
+ // Resolve the proposal.
909
+ if (multi_step) {
910
+ let execution_hash = vector::empty<u8>();
911
+ let next_execution_hash = vector::empty<u8>();
912
+ vector::push_back(&mut execution_hash, 1);
913
+ voting::resolve_proposal_v2<GovernanceProposal>(@aptos_framework, 0, next_execution_hash);
914
+ assert!(voting::is_resolved<GovernanceProposal>(@aptos_framework, 0), 0);
915
+ if (vector::length(&next_execution_hash) == 0) {
916
+ remove_approved_hash(0);
917
+ } else {
918
+ add_approved_script_hash(0)
919
+ };
920
+ } else {
921
+ voting::resolve<GovernanceProposal>(@aptos_framework, 0);
922
+ assert!(voting::is_resolved<GovernanceProposal>(@aptos_framework, 0), 0);
923
+ remove_approved_hash(0);
924
+ };
925
+ let approved_hashes = borrow_global<ApprovedExecutionHashes>(@aptos_framework).hashes;
926
+ assert!(!simple_map::contains_key(&approved_hashes, &0), 1);
927
+ }
928
+
929
+ #[test(aptos_framework = @aptos_framework, proposer = @0x123, yes_voter = @0x234, no_voter = @345)]
930
+ public entry fun test_can_remove_approved_hash_if_executed_directly_via_voting(
931
+ aptos_framework: signer,
932
+ proposer: signer,
933
+ yes_voter: signer,
934
+ no_voter: signer,
935
+ ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
936
+ test_can_remove_approved_hash_if_executed_directly_via_voting_generic(
937
+ aptos_framework,
938
+ proposer,
939
+ yes_voter,
940
+ no_voter,
941
+ false
942
+ );
943
+ }
944
+
945
+ #[test(aptos_framework = @aptos_framework, proposer = @0x123, yes_voter = @0x234, no_voter = @345)]
946
+ public entry fun test_can_remove_approved_hash_if_executed_directly_via_voting_multi_step(
947
+ aptos_framework: signer,
948
+ proposer: signer,
949
+ yes_voter: signer,
950
+ no_voter: signer,
951
+ ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
952
+ test_can_remove_approved_hash_if_executed_directly_via_voting_generic(
953
+ aptos_framework,
954
+ proposer,
955
+ yes_voter,
956
+ no_voter,
957
+ true
958
+ );
959
+ }
960
+
961
+ #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)]
962
+ #[expected_failure(abort_code = 0x10004, location = aptos_framework::voting)]
963
+ public entry fun test_cannot_double_vote(
964
+ aptos_framework: signer,
965
+ proposer: signer,
966
+ voter_1: signer,
967
+ voter_2: signer,
968
+ ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
969
+ setup_voting(&aptos_framework, &proposer, &voter_1, &voter_2);
970
+
971
+ create_proposal(
972
+ &proposer,
973
+ signer::address_of(&proposer),
974
+ b"",
975
+ b"",
976
+ b"",
977
+ );
978
+
979
+ // Double voting should throw an error.
980
+ vote(&voter_1, signer::address_of(&voter_1), 0, true);
981
+ vote(&voter_1, signer::address_of(&voter_1), 0, true);
982
+ }
983
+
984
+ #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)]
985
+ #[expected_failure(abort_code = 0x10004, location = aptos_framework::voting)]
986
+ public entry fun test_cannot_double_vote_with_different_voter_addresses(
987
+ aptos_framework: signer,
988
+ proposer: signer,
989
+ voter_1: signer,
990
+ voter_2: signer,
991
+ ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
992
+ setup_voting(&aptos_framework, &proposer, &voter_1, &voter_2);
993
+
994
+ create_proposal(
995
+ &proposer,
996
+ signer::address_of(&proposer),
997
+ b"",
998
+ b"",
999
+ b"",
1000
+ );
1001
+
1002
+ // Double voting should throw an error for 2 different voters if they still use the same stake pool.
1003
+ vote(&voter_1, signer::address_of(&voter_1), 0, true);
1004
+ stake::set_delegated_voter(&voter_1, signer::address_of(&voter_2));
1005
+ vote(&voter_2, signer::address_of(&voter_1), 0, true);
1006
+ }
1007
+
1008
+ #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)]
1009
+ public entry fun test_stake_pool_can_vote_on_partial_voting_proposal_many_times(
1010
+ aptos_framework: signer,
1011
+ proposer: signer,
1012
+ voter_1: signer,
1013
+ voter_2: signer,
1014
+ ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
1015
+ setup_partial_voting(&aptos_framework, &proposer, &voter_1, &voter_2);
1016
+ let execution_hash = vector::empty<u8>();
1017
+ vector::push_back(&mut execution_hash, 1);
1018
+ let proposer_addr = signer::address_of(&proposer);
1019
+ let voter_1_addr = signer::address_of(&voter_1);
1020
+ let voter_2_addr = signer::address_of(&voter_2);
1021
+
1022
+ create_proposal_for_test(&proposer, true);
1023
+
1024
+ partial_vote(&voter_1, voter_1_addr, 0, 5, true);
1025
+ partial_vote(&voter_1, voter_1_addr, 0, 3, true);
1026
+ partial_vote(&voter_1, voter_1_addr, 0, 2, true);
1027
+
1028
+ assert!(get_remaining_voting_power(proposer_addr, 0) == 100, 0);
1029
+ assert!(get_remaining_voting_power(voter_1_addr, 0) == 10, 1);
1030
+ assert!(get_remaining_voting_power(voter_2_addr, 0) == 10, 2);
1031
+
1032
+ test_resolving_proposal_generic(aptos_framework, true, execution_hash);
1033
+ }
1034
+
1035
+ #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)]
1036
+ #[expected_failure(abort_code = 0x3, location = Self)]
1037
+ public entry fun test_stake_pool_can_vote_with_partial_voting_power(
1038
+ aptos_framework: signer,
1039
+ proposer: signer,
1040
+ voter_1: signer,
1041
+ voter_2: signer,
1042
+ ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
1043
+ setup_partial_voting(&aptos_framework, &proposer, &voter_1, &voter_2);
1044
+ let execution_hash = vector::empty<u8>();
1045
+ vector::push_back(&mut execution_hash, 1);
1046
+ let proposer_addr = signer::address_of(&proposer);
1047
+ let voter_1_addr = signer::address_of(&voter_1);
1048
+ let voter_2_addr = signer::address_of(&voter_2);
1049
+
1050
+ create_proposal_for_test(&proposer, true);
1051
+
1052
+ partial_vote(&voter_1, voter_1_addr, 0, 9, true);
1053
+
1054
+ assert!(get_remaining_voting_power(proposer_addr, 0) == 100, 0);
1055
+ assert!(get_remaining_voting_power(voter_1_addr, 0) == 11, 1);
1056
+ assert!(get_remaining_voting_power(voter_2_addr, 0) == 10, 2);
1057
+
1058
+ // No enough Yes. The proposal cannot be resolved.
1059
+ test_resolving_proposal_generic(aptos_framework, true, execution_hash);
1060
+ }
1061
+
1062
+ #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)]
1063
+ public entry fun test_batch_vote(
1064
+ aptos_framework: signer,
1065
+ proposer: signer,
1066
+ voter_1: signer,
1067
+ voter_2: signer,
1068
+ ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
1069
+ features::change_feature_flags_for_testing(&aptos_framework, vector[features::get_coin_to_fungible_asset_migration_feature()], vector[]);
1070
+ setup_partial_voting(&aptos_framework, &proposer, &voter_1, &voter_2);
1071
+ let execution_hash = vector::empty<u8>();
1072
+ vector::push_back(&mut execution_hash, 1);
1073
+ let voter_1_addr = signer::address_of(&voter_1);
1074
+ let voter_2_addr = signer::address_of(&voter_2);
1075
+ stake::set_delegated_voter(&voter_2, voter_1_addr);
1076
+ create_proposal_for_test(&proposer, true);
1077
+ batch_vote(&voter_1, vector[voter_1_addr, voter_2_addr], 0, true);
1078
+ test_resolving_proposal_generic(aptos_framework, true, execution_hash);
1079
+ }
1080
+
1081
+ #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)]
1082
+ public entry fun test_batch_partial_vote(
1083
+ aptos_framework: signer,
1084
+ proposer: signer,
1085
+ voter_1: signer,
1086
+ voter_2: signer,
1087
+ ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
1088
+ features::change_feature_flags_for_testing(&aptos_framework, vector[features::get_coin_to_fungible_asset_migration_feature()], vector[]);
1089
+ setup_partial_voting(&aptos_framework, &proposer, &voter_1, &voter_2);
1090
+ let execution_hash = vector::empty<u8>();
1091
+ vector::push_back(&mut execution_hash, 1);
1092
+ let voter_1_addr = signer::address_of(&voter_1);
1093
+ let voter_2_addr = signer::address_of(&voter_2);
1094
+ stake::set_delegated_voter(&voter_2, voter_1_addr);
1095
+ create_proposal_for_test(&proposer, true);
1096
+ batch_partial_vote(&voter_1, vector[voter_1_addr, voter_2_addr], 0, 9, true);
1097
+ test_resolving_proposal_generic(aptos_framework, true, execution_hash);
1098
+ }
1099
+
1100
+ #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)]
1101
+ public entry fun test_stake_pool_can_vote_only_with_its_own_voting_power(
1102
+ aptos_framework: signer,
1103
+ proposer: signer,
1104
+ voter_1: signer,
1105
+ voter_2: signer,
1106
+ ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
1107
+ setup_partial_voting(&aptos_framework, &proposer, &voter_1, &voter_2);
1108
+ let execution_hash = vector::empty<u8>();
1109
+ vector::push_back(&mut execution_hash, 1);
1110
+ let proposer_addr = signer::address_of(&proposer);
1111
+ let voter_1_addr = signer::address_of(&voter_1);
1112
+ let voter_2_addr = signer::address_of(&voter_2);
1113
+
1114
+ create_proposal_for_test(&proposer, true);
1115
+
1116
+ partial_vote(&voter_1, voter_1_addr, 0, 9, true);
1117
+ // The total voting power of voter_1 is 20. It can only vote with 20 voting power even we pass 30 as the argument.
1118
+ partial_vote(&voter_1, voter_1_addr, 0, 30, true);
1119
+
1120
+ assert!(get_remaining_voting_power(proposer_addr, 0) == 100, 0);
1121
+ assert!(get_remaining_voting_power(voter_1_addr, 0) == 0, 1);
1122
+ assert!(get_remaining_voting_power(voter_2_addr, 0) == 10, 2);
1123
+
1124
+ test_resolving_proposal_generic(aptos_framework, true, execution_hash);
1125
+ }
1126
+
1127
+ #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)]
1128
+ public entry fun test_stake_pool_can_vote_before_and_after_partial_governance_voting_enabled(
1129
+ aptos_framework: signer,
1130
+ proposer: signer,
1131
+ voter_1: signer,
1132
+ voter_2: signer,
1133
+ ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
1134
+ setup_voting(&aptos_framework, &proposer, &voter_1, &voter_2);
1135
+ let execution_hash = vector::empty<u8>();
1136
+ vector::push_back(&mut execution_hash, 1);
1137
+ let proposer_addr = signer::address_of(&proposer);
1138
+ let voter_1_addr = signer::address_of(&voter_1);
1139
+ let voter_2_addr = signer::address_of(&voter_2);
1140
+
1141
+ create_proposal_for_test(&proposer, true);
1142
+ vote(&voter_1, voter_1_addr, 0, true);
1143
+ assert!(get_remaining_voting_power(proposer_addr, 0) == 100, 0);
1144
+ assert!(get_remaining_voting_power(voter_1_addr, 0) == 0, 1);
1145
+ assert!(get_remaining_voting_power(voter_2_addr, 0) == 10, 2);
1146
+
1147
+ initialize_partial_voting(&aptos_framework);
1148
+ features::change_feature_flags_for_testing(&aptos_framework, vector[features::get_partial_governance_voting()], vector[]);
1149
+
1150
+ coin::register<AptosCoin>(&voter_1);
1151
+ coin::register<AptosCoin>(&voter_2);
1152
+ stake::add_stake(&voter_1, 20);
1153
+ stake::add_stake(&voter_2, 5);
1154
+
1155
+ // voter1 has already voted before partial governance voting is enalbed. So it cannot vote even after adding stake.
1156
+ // voter2's voting poewr increase after adding stake.
1157
+ assert!(get_remaining_voting_power(proposer_addr, 0) == 100, 0);
1158
+ assert!(get_remaining_voting_power(voter_1_addr, 0) == 0, 1);
1159
+ assert!(get_remaining_voting_power(voter_2_addr, 0) == 15, 2);
1160
+
1161
+ test_resolving_proposal_generic(aptos_framework, true, execution_hash);
1162
+ }
1163
+
1164
+ #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)]
1165
+ public entry fun test_no_remaining_voting_power_about_proposal_expiration_time(
1166
+ aptos_framework: signer,
1167
+ proposer: signer,
1168
+ voter_1: signer,
1169
+ voter_2: signer,
1170
+ ) acquires GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents {
1171
+ setup_voting_with_initialized_stake(&aptos_framework, &proposer, &voter_1, &voter_2);
1172
+ let execution_hash = vector::empty<u8>();
1173
+ vector::push_back(&mut execution_hash, 1);
1174
+ let proposer_addr = signer::address_of(&proposer);
1175
+ let voter_1_addr = signer::address_of(&voter_1);
1176
+ let voter_2_addr = signer::address_of(&voter_2);
1177
+
1178
+ create_proposal_for_test(&proposer, true);
1179
+ assert!(get_remaining_voting_power(proposer_addr, 0) == 100, 0);
1180
+ assert!(get_remaining_voting_power(voter_1_addr, 0) == 0, 1);
1181
+ assert!(get_remaining_voting_power(voter_2_addr, 0) == 0, 2);
1182
+
1183
+ // 500 seconds later, lockup period of voter_1 and voter_2 is reset.
1184
+ timestamp::fast_forward_seconds(440);
1185
+ stake::end_epoch();
1186
+ assert!(get_remaining_voting_power(proposer_addr, 0) == 100, 0);
1187
+ assert!(get_remaining_voting_power(voter_1_addr, 0) == 20, 1);
1188
+ assert!(get_remaining_voting_power(voter_2_addr, 0) == 10, 2);
1189
+
1190
+ // 501 seconds later, the proposal expires.
1191
+ timestamp::fast_forward_seconds(441);
1192
+ stake::end_epoch();
1193
+ assert!(get_remaining_voting_power(proposer_addr, 0) == 0, 0);
1194
+ assert!(get_remaining_voting_power(voter_1_addr, 0) == 0, 1);
1195
+ assert!(get_remaining_voting_power(voter_2_addr, 0) == 0, 2);
1196
+ }
1197
+
1198
+ #[test_only]
1199
+ public fun setup_voting(
1200
+ aptos_framework: &signer,
1201
+ proposer: &signer,
1202
+ yes_voter: &signer,
1203
+ no_voter: &signer,
1204
+ ) acquires GovernanceResponsbility {
1205
+ use std::vector;
1206
+ use aptos_framework::account;
1207
+ use aptos_framework::coin;
1208
+ use aptos_framework::aptos_coin::{Self, AptosCoin};
1209
+
1210
+ timestamp::set_time_has_started_for_testing(aptos_framework);
1211
+ account::create_account_for_test(signer::address_of(aptos_framework));
1212
+ account::create_account_for_test(signer::address_of(proposer));
1213
+ account::create_account_for_test(signer::address_of(yes_voter));
1214
+ account::create_account_for_test(signer::address_of(no_voter));
1215
+
1216
+ // Initialize the governance.
1217
+ staking_config::initialize_for_test(aptos_framework, 0, 1000, 2000, true, 0, 1, 100);
1218
+ initialize(aptos_framework, 10, 100, 1000);
1219
+ store_signer_cap(
1220
+ aptos_framework,
1221
+ @aptos_framework,
1222
+ account::create_test_signer_cap(@aptos_framework),
1223
+ );
1224
+
1225
+ // Initialize the stake pools for proposer and voters.
1226
+ let active_validators = vector::empty<address>();
1227
+ vector::push_back(&mut active_validators, signer::address_of(proposer));
1228
+ vector::push_back(&mut active_validators, signer::address_of(yes_voter));
1229
+ vector::push_back(&mut active_validators, signer::address_of(no_voter));
1230
+ let (_sk_1, pk_1, _pop_1) = stake::generate_identity();
1231
+ let (_sk_2, pk_2, _pop_2) = stake::generate_identity();
1232
+ let (_sk_3, pk_3, _pop_3) = stake::generate_identity();
1233
+ let pks = vector[pk_1, pk_2, pk_3];
1234
+ stake::create_validator_set(aptos_framework, active_validators, pks);
1235
+
1236
+ let (burn_cap, mint_cap) = aptos_coin::initialize_for_test(aptos_framework);
1237
+ // Spread stake among active and pending_inactive because both need to be accounted for when computing voting
1238
+ // power.
1239
+ coin::register<AptosCoin>(proposer);
1240
+ coin::deposit(signer::address_of(proposer), coin::mint(100, &mint_cap));
1241
+ coin::register<AptosCoin>(yes_voter);
1242
+ coin::deposit(signer::address_of(yes_voter), coin::mint(20, &mint_cap));
1243
+ coin::register<AptosCoin>(no_voter);
1244
+ coin::deposit(signer::address_of(no_voter), coin::mint(10, &mint_cap));
1245
+ stake::create_stake_pool(proposer, coin::mint(50, &mint_cap), coin::mint(50, &mint_cap), 10000);
1246
+ stake::create_stake_pool(yes_voter, coin::mint(10, &mint_cap), coin::mint(10, &mint_cap), 10000);
1247
+ stake::create_stake_pool(no_voter, coin::mint(5, &mint_cap), coin::mint(5, &mint_cap), 10000);
1248
+ coin::destroy_mint_cap<AptosCoin>(mint_cap);
1249
+ coin::destroy_burn_cap<AptosCoin>(burn_cap);
1250
+ }
1251
+
1252
+ #[test_only]
1253
+ public fun setup_voting_with_initialized_stake(
1254
+ aptos_framework: &signer,
1255
+ proposer: &signer,
1256
+ yes_voter: &signer,
1257
+ no_voter: &signer,
1258
+ ) acquires GovernanceResponsbility {
1259
+ use aptos_framework::account;
1260
+ use aptos_framework::coin;
1261
+ use aptos_framework::aptos_coin::AptosCoin;
1262
+
1263
+ timestamp::set_time_has_started_for_testing(aptos_framework);
1264
+ account::create_account_for_test(signer::address_of(aptos_framework));
1265
+ account::create_account_for_test(signer::address_of(proposer));
1266
+ account::create_account_for_test(signer::address_of(yes_voter));
1267
+ account::create_account_for_test(signer::address_of(no_voter));
1268
+
1269
+ // Initialize the governance.
1270
+ stake::initialize_for_test_custom(aptos_framework, 0, 1000, 2000, true, 0, 1, 1000);
1271
+ initialize(aptos_framework, 10, 100, 1000);
1272
+ store_signer_cap(
1273
+ aptos_framework,
1274
+ @aptos_framework,
1275
+ account::create_test_signer_cap(@aptos_framework),
1276
+ );
1277
+
1278
+ // Initialize the stake pools for proposer and voters.
1279
+ // Spread stake among active and pending_inactive because both need to be accounted for when computing voting
1280
+ // power.
1281
+ coin::register<AptosCoin>(proposer);
1282
+ coin::deposit(signer::address_of(proposer), stake::mint_coins(100));
1283
+ coin::register<AptosCoin>(yes_voter);
1284
+ coin::deposit(signer::address_of(yes_voter), stake::mint_coins(20));
1285
+ coin::register<AptosCoin>(no_voter);
1286
+ coin::deposit(signer::address_of(no_voter), stake::mint_coins(10));
1287
+
1288
+ let (_sk_1, pk_1, pop_1) = stake::generate_identity();
1289
+ let (_sk_2, pk_2, pop_2) = stake::generate_identity();
1290
+ let (_sk_3, pk_3, pop_3) = stake::generate_identity();
1291
+ stake::initialize_test_validator(&pk_2, &pop_2, yes_voter, 20, true, false);
1292
+ stake::initialize_test_validator(&pk_3, &pop_3, no_voter, 10, true, false);
1293
+ stake::end_epoch();
1294
+ timestamp::fast_forward_seconds(1440);
1295
+ stake::initialize_test_validator(&pk_1, &pop_1, proposer, 100, true, false);
1296
+ stake::end_epoch();
1297
+ }
1298
+
1299
+ #[test_only]
1300
+ public fun setup_partial_voting(
1301
+ aptos_framework: &signer,
1302
+ proposer: &signer,
1303
+ voter_1: &signer,
1304
+ voter_2: &signer,
1305
+ ) acquires GovernanceResponsbility {
1306
+ initialize_partial_voting(aptos_framework);
1307
+ features::change_feature_flags_for_testing(aptos_framework, vector[features::get_partial_governance_voting()], vector[]);
1308
+ setup_voting(aptos_framework, proposer, voter_1, voter_2);
1309
+ }
1310
+
1311
+ #[test(aptos_framework = @aptos_framework)]
1312
+ public entry fun test_update_governance_config(
1313
+ aptos_framework: signer,
1314
+ ) acquires GovernanceConfig, GovernanceEvents {
1315
+ account::create_account_for_test(signer::address_of(&aptos_framework));
1316
+ initialize(&aptos_framework, 1, 2, 3);
1317
+ update_governance_config(&aptos_framework, 10, 20, 30);
1318
+
1319
+ let config = borrow_global<GovernanceConfig>(@aptos_framework);
1320
+ assert!(config.min_voting_threshold == 10, 0);
1321
+ assert!(config.required_proposer_stake == 20, 1);
1322
+ assert!(config.voting_duration_secs == 30, 3);
1323
+ }
1324
+
1325
+ #[test(account = @0x123)]
1326
+ #[expected_failure(abort_code = 0x50003, location = aptos_framework::system_addresses)]
1327
+ public entry fun test_update_governance_config_unauthorized_should_fail(
1328
+ account: signer) acquires GovernanceConfig, GovernanceEvents {
1329
+ initialize(&account, 1, 2, 3);
1330
+ update_governance_config(&account, 10, 20, 30);
1331
+ }
1332
+
1333
+ #[test(aptos_framework = @aptos_framework, proposer = @0x123, yes_voter = @0x234, no_voter = @345)]
1334
+ public entry fun test_replace_execution_hash(
1335
+ aptos_framework: signer,
1336
+ proposer: signer,
1337
+ yes_voter: signer,
1338
+ no_voter: signer,
1339
+ ) acquires GovernanceResponsbility, GovernanceConfig, ApprovedExecutionHashes, VotingRecords, VotingRecordsV2, GovernanceEvents {
1340
+ setup_voting(&aptos_framework, &proposer, &yes_voter, &no_voter);
1341
+
1342
+ create_proposal_for_test(&proposer, true);
1343
+ vote(&yes_voter, signer::address_of(&yes_voter), 0, true);
1344
+ vote(&no_voter, signer::address_of(&no_voter), 0, false);
1345
+
1346
+ // Add approved script hash.
1347
+ timestamp::update_global_time_for_test(100001000000);
1348
+ add_approved_script_hash(0);
1349
+
1350
+ // Resolve the proposal.
1351
+ let execution_hash = vector::empty<u8>();
1352
+ let next_execution_hash = vector::empty<u8>();
1353
+ vector::push_back(&mut execution_hash, 1);
1354
+ vector::push_back(&mut next_execution_hash, 10);
1355
+
1356
+ voting::resolve_proposal_v2<GovernanceProposal>(@aptos_framework, 0, next_execution_hash);
1357
+
1358
+ if (vector::length(&next_execution_hash) == 0) {
1359
+ remove_approved_hash(0);
1360
+ } else {
1361
+ add_approved_script_hash(0)
1362
+ };
1363
+
1364
+ let approved_hashes = borrow_global<ApprovedExecutionHashes>(@aptos_framework).hashes;
1365
+ assert!(*simple_map::borrow(&approved_hashes, &0) == vector[10u8, ], 1);
1366
+ }
1367
+
1368
+ #[test_only]
1369
+ public fun initialize_for_test(
1370
+ aptos_framework: &signer,
1371
+ min_voting_threshold: u128,
1372
+ required_proposer_stake: u64,
1373
+ voting_duration_secs: u64,
1374
+ ) {
1375
+ initialize(aptos_framework, min_voting_threshold, required_proposer_stake, voting_duration_secs);
1376
+ }
1377
+
1378
+ #[verify_only]
1379
+ public fun initialize_for_verification(
1380
+ aptos_framework: &signer,
1381
+ min_voting_threshold: u128,
1382
+ required_proposer_stake: u64,
1383
+ voting_duration_secs: u64,
1384
+ ) {
1385
+ initialize(aptos_framework, min_voting_threshold, required_proposer_stake, voting_duration_secs);
1386
+ }
1387
+ }