wowok 2.1.9 → 2.1.12

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 (887) hide show
  1. package/NOTICE +46 -0
  2. package/dist/cjs/bcs/bcs.d.ts +199 -199
  3. package/dist/cjs/bcs/bcs.js +273 -318
  4. package/dist/cjs/bcs/bcs.js.map +1 -0
  5. package/dist/cjs/bcs/effects.d.ts +109 -109
  6. package/dist/cjs/bcs/effects.js +205 -230
  7. package/dist/cjs/bcs/effects.js.map +1 -0
  8. package/dist/cjs/bcs/index.d.ts +1 -2584
  9. package/dist/cjs/bcs/index.js +61 -76
  10. package/dist/cjs/bcs/index.js.map +1 -0
  11. package/dist/cjs/bcs/pure.js +38 -58
  12. package/dist/cjs/bcs/pure.js.map +1 -0
  13. package/dist/cjs/bcs/type-tag-serializer.js +102 -114
  14. package/dist/cjs/bcs/type-tag-serializer.js.map +1 -0
  15. package/dist/cjs/bcs/types.js +6 -23
  16. package/dist/cjs/bcs/types.js.map +1 -0
  17. package/dist/cjs/client/index.js +17 -33
  18. package/dist/cjs/client/index.js.map +1 -0
  19. package/dist/cjs/client/network.js +25 -40
  20. package/dist/cjs/client/network.js.map +1 -0
  21. package/dist/cjs/cryptography/index.js +29 -45
  22. package/dist/cjs/cryptography/index.js.map +1 -0
  23. package/dist/cjs/cryptography/intent.d.ts +1 -1
  24. package/dist/cjs/cryptography/intent.js +20 -31
  25. package/dist/cjs/cryptography/intent.js.map +1 -0
  26. package/dist/cjs/cryptography/keypair.js +102 -116
  27. package/dist/cjs/cryptography/keypair.js.map +1 -0
  28. package/dist/cjs/cryptography/mnemonics.js +43 -41
  29. package/dist/cjs/cryptography/mnemonics.js.map +1 -0
  30. package/dist/cjs/cryptography/publickey.js +112 -134
  31. package/dist/cjs/cryptography/publickey.js.map +1 -0
  32. package/dist/cjs/cryptography/signature-scheme.js +24 -43
  33. package/dist/cjs/cryptography/signature-scheme.js.map +1 -0
  34. package/dist/cjs/cryptography/signature.d.ts +2 -24
  35. package/dist/cjs/cryptography/signature.js +50 -67
  36. package/dist/cjs/cryptography/signature.js.map +1 -0
  37. package/dist/cjs/experimental/cache.js +65 -0
  38. package/dist/cjs/experimental/cache.js.map +1 -0
  39. package/dist/cjs/experimental/client.js +27 -0
  40. package/dist/cjs/experimental/client.js.map +1 -0
  41. package/dist/cjs/experimental/core.js +89 -0
  42. package/dist/cjs/experimental/core.js.map +1 -0
  43. package/dist/cjs/experimental/errors.js +32 -0
  44. package/dist/cjs/experimental/errors.js.map +1 -0
  45. package/dist/cjs/experimental/index.js +15 -0
  46. package/dist/cjs/experimental/index.js.map +1 -0
  47. package/dist/cjs/experimental/persistent-storage.js +343 -0
  48. package/dist/cjs/experimental/persistent-storage.js.map +1 -0
  49. package/dist/cjs/experimental/persistent-storage.test.js +200 -0
  50. package/dist/cjs/experimental/persistent-storage.test.js.map +1 -0
  51. package/dist/cjs/experimental/transports/utils.js +104 -0
  52. package/dist/cjs/experimental/transports/utils.js.map +1 -0
  53. package/dist/cjs/experimental/types.js +6 -0
  54. package/dist/cjs/experimental/types.js.map +1 -0
  55. package/dist/cjs/faucet/faucet.js +106 -124
  56. package/dist/cjs/faucet/faucet.js.map +1 -0
  57. package/dist/cjs/faucet/index.js +12 -28
  58. package/dist/cjs/faucet/index.js.map +1 -0
  59. package/dist/cjs/grpc/client.js +47 -62
  60. package/dist/cjs/grpc/client.js.map +1 -0
  61. package/dist/cjs/grpc/core.js +580 -617
  62. package/dist/cjs/grpc/core.js.map +1 -0
  63. package/dist/cjs/grpc/index.js +9 -25
  64. package/dist/cjs/grpc/index.js.map +1 -0
  65. package/dist/cjs/grpc/proto/google/protobuf/any.js +168 -135
  66. package/dist/cjs/grpc/proto/google/protobuf/any.js.map +1 -0
  67. package/dist/cjs/grpc/proto/google/protobuf/duration.js +105 -90
  68. package/dist/cjs/grpc/proto/google/protobuf/duration.js.map +1 -0
  69. package/dist/cjs/grpc/proto/google/protobuf/empty.js +50 -28
  70. package/dist/cjs/grpc/proto/google/protobuf/empty.js.map +1 -0
  71. package/dist/cjs/grpc/proto/google/protobuf/field_mask.js +96 -75
  72. package/dist/cjs/grpc/proto/google/protobuf/field_mask.js.map +1 -0
  73. package/dist/cjs/grpc/proto/google/protobuf/struct.js +266 -215
  74. package/dist/cjs/grpc/proto/google/protobuf/struct.js.map +1 -0
  75. package/dist/cjs/grpc/proto/google/protobuf/timestamp.js +150 -131
  76. package/dist/cjs/grpc/proto/google/protobuf/timestamp.js.map +1 -0
  77. package/dist/cjs/grpc/proto/google/rpc/error_details.js +331 -302
  78. package/dist/cjs/grpc/proto/google/rpc/error_details.js.map +1 -0
  79. package/dist/cjs/grpc/proto/google/rpc/status.js +50 -50
  80. package/dist/cjs/grpc/proto/google/rpc/status.js.map +1 -0
  81. package/dist/cjs/grpc/proto/sui/rpc/v2/argument.js +84 -68
  82. package/dist/cjs/grpc/proto/sui/rpc/v2/argument.js.map +1 -0
  83. package/dist/cjs/grpc/proto/sui/rpc/v2/balance_change.js +45 -50
  84. package/dist/cjs/grpc/proto/sui/rpc/v2/balance_change.js.map +1 -0
  85. package/dist/cjs/grpc/proto/sui/rpc/v2/bcs.js +38 -43
  86. package/dist/cjs/grpc/proto/sui/rpc/v2/bcs.js.map +1 -0
  87. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint.js +70 -75
  88. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint.js.map +1 -0
  89. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_contents.js +79 -81
  90. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_contents.js.map +1 -0
  91. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_summary.js +183 -166
  92. package/dist/cjs/grpc/proto/sui/rpc/v2/checkpoint_summary.js.map +1 -0
  93. package/dist/cjs/grpc/proto/sui/rpc/v2/effects.js +369 -296
  94. package/dist/cjs/grpc/proto/sui/rpc/v2/effects.js.map +1 -0
  95. package/dist/cjs/grpc/proto/sui/rpc/v2/epoch.js +80 -85
  96. package/dist/cjs/grpc/proto/sui/rpc/v2/epoch.js.map +1 -0
  97. package/dist/cjs/grpc/proto/sui/rpc/v2/error_reason.js +31 -28
  98. package/dist/cjs/grpc/proto/sui/rpc/v2/error_reason.js.map +1 -0
  99. package/dist/cjs/grpc/proto/sui/rpc/v2/event.js +81 -83
  100. package/dist/cjs/grpc/proto/sui/rpc/v2/event.js.map +1 -0
  101. package/dist/cjs/grpc/proto/sui/rpc/v2/executed_transaction.js +80 -85
  102. package/dist/cjs/grpc/proto/sui/rpc/v2/executed_transaction.js.map +1 -0
  103. package/dist/cjs/grpc/proto/sui/rpc/v2/execution_status.js +876 -506
  104. package/dist/cjs/grpc/proto/sui/rpc/v2/execution_status.js.map +1 -0
  105. package/dist/cjs/grpc/proto/sui/rpc/v2/gas_cost_summary.js +56 -61
  106. package/dist/cjs/grpc/proto/sui/rpc/v2/gas_cost_summary.js.map +1 -0
  107. package/dist/cjs/grpc/proto/sui/rpc/v2/input.js +103 -83
  108. package/dist/cjs/grpc/proto/sui/rpc/v2/input.js.map +1 -0
  109. package/dist/cjs/grpc/proto/sui/rpc/v2/jwk.js +76 -78
  110. package/dist/cjs/grpc/proto/sui/rpc/v2/jwk.js.map +1 -0
  111. package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.client.js +69 -119
  112. package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.client.js.map +1 -0
  113. package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.js +392 -350
  114. package/dist/cjs/grpc/proto/sui/rpc/v2/ledger_service.js.map +1 -0
  115. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package.js +599 -473
  116. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package.js.map +1 -0
  117. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.client.js +46 -78
  118. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.client.js.map +1 -0
  119. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.js +242 -224
  120. package/dist/cjs/grpc/proto/sui/rpc/v2/move_package_service.js.map +1 -0
  121. package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.client.js +32 -52
  122. package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.client.js.map +1 -0
  123. package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.js +139 -134
  124. package/dist/cjs/grpc/proto/sui/rpc/v2/name_service.js.map +1 -0
  125. package/dist/cjs/grpc/proto/sui/rpc/v2/object.js +109 -111
  126. package/dist/cjs/grpc/proto/sui/rpc/v2/object.js.map +1 -0
  127. package/dist/cjs/grpc/proto/sui/rpc/v2/object_reference.js +46 -51
  128. package/dist/cjs/grpc/proto/sui/rpc/v2/object_reference.js.map +1 -0
  129. package/dist/cjs/grpc/proto/sui/rpc/v2/owner.js +76 -61
  130. package/dist/cjs/grpc/proto/sui/rpc/v2/owner.js.map +1 -0
  131. package/dist/cjs/grpc/proto/sui/rpc/v2/protocol_config.js +46 -59
  132. package/dist/cjs/grpc/proto/sui/rpc/v2/protocol_config.js.map +1 -0
  133. package/dist/cjs/grpc/proto/sui/rpc/v2/signature.js +568 -522
  134. package/dist/cjs/grpc/proto/sui/rpc/v2/signature.js.map +1 -0
  135. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_scheme.js +54 -32
  136. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_scheme.js.map +1 -0
  137. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.client.js +27 -47
  138. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.client.js.map +1 -0
  139. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.js +83 -86
  140. package/dist/cjs/grpc/proto/sui/rpc/v2/signature_verification_service.js.map +1 -0
  141. package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.client.js +53 -85
  142. package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.client.js.map +1 -0
  143. package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.js +645 -529
  144. package/dist/cjs/grpc/proto/sui/rpc/v2/state_service.js.map +1 -0
  145. package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.client.js +37 -51
  146. package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.client.js.map +1 -0
  147. package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.js +58 -61
  148. package/dist/cjs/grpc/proto/sui/rpc/v2/subscription_service.js.map +1 -0
  149. package/dist/cjs/grpc/proto/sui/rpc/v2/system_state.js +749 -730
  150. package/dist/cjs/grpc/proto/sui/rpc/v2/system_state.js.map +1 -0
  151. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction.js +1218 -975
  152. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction.js.map +1 -0
  153. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.client.js +32 -46
  154. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.client.js.map +1 -0
  155. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.js +186 -167
  156. package/dist/cjs/grpc/proto/sui/rpc/v2/transaction_execution_service.js.map +1 -0
  157. package/dist/cjs/index.js +96 -91
  158. package/dist/cjs/index.js.map +1 -0
  159. package/dist/cjs/jsonRpc/client.js +654 -743
  160. package/dist/cjs/jsonRpc/client.js.map +1 -0
  161. package/dist/cjs/jsonRpc/core.d.ts +7 -7
  162. package/dist/cjs/jsonRpc/core.js +562 -606
  163. package/dist/cjs/jsonRpc/core.js.map +1 -0
  164. package/dist/cjs/jsonRpc/errors.js +38 -56
  165. package/dist/cjs/jsonRpc/errors.js.map +1 -0
  166. package/dist/cjs/jsonRpc/http-transport.js +70 -114
  167. package/dist/cjs/jsonRpc/http-transport.js.map +1 -0
  168. package/dist/cjs/jsonRpc/index.js +14 -30
  169. package/dist/cjs/jsonRpc/index.js.map +1 -0
  170. package/dist/cjs/jsonRpc/json-rpc-resolver.js +286 -290
  171. package/dist/cjs/jsonRpc/json-rpc-resolver.js.map +1 -0
  172. package/dist/cjs/jsonRpc/rpc-websocket-client.js +150 -207
  173. package/dist/cjs/jsonRpc/rpc-websocket-client.js.map +1 -0
  174. package/dist/cjs/jsonRpc/types/chain.js +4 -15
  175. package/dist/cjs/jsonRpc/types/chain.js.map +1 -0
  176. package/dist/cjs/jsonRpc/types/changes.js +4 -15
  177. package/dist/cjs/jsonRpc/types/changes.js.map +1 -0
  178. package/dist/cjs/jsonRpc/types/coins.js +4 -15
  179. package/dist/cjs/jsonRpc/types/coins.js.map +1 -0
  180. package/dist/cjs/jsonRpc/types/common.js +4 -15
  181. package/dist/cjs/jsonRpc/types/common.js.map +1 -0
  182. package/dist/cjs/jsonRpc/types/generated.d.ts +1 -1
  183. package/dist/cjs/jsonRpc/types/generated.js +4 -15
  184. package/dist/cjs/jsonRpc/types/generated.js.map +1 -0
  185. package/dist/cjs/jsonRpc/types/index.js +4 -15
  186. package/dist/cjs/jsonRpc/types/index.js.map +1 -0
  187. package/dist/cjs/jsonRpc/types/params.js +4 -15
  188. package/dist/cjs/jsonRpc/types/params.js.map +1 -0
  189. package/dist/cjs/keypairs/ed25519/ed25519-hd-key.js +54 -69
  190. package/dist/cjs/keypairs/ed25519/ed25519-hd-key.js.map +1 -0
  191. package/dist/cjs/keypairs/ed25519/index.js +10 -26
  192. package/dist/cjs/keypairs/ed25519/index.js.map +1 -0
  193. package/dist/cjs/keypairs/ed25519/keypair.js +134 -159
  194. package/dist/cjs/keypairs/ed25519/keypair.js.map +1 -0
  195. package/dist/cjs/keypairs/ed25519/publickey.js +70 -84
  196. package/dist/cjs/keypairs/ed25519/publickey.js.map +1 -0
  197. package/dist/cjs/keypairs/index.js +21 -19
  198. package/dist/cjs/keypairs/index.js.map +1 -0
  199. package/dist/cjs/keypairs/passkey/index.js +11 -27
  200. package/dist/cjs/keypairs/passkey/index.js.map +1 -0
  201. package/dist/cjs/keypairs/passkey/keypair.js +245 -256
  202. package/dist/cjs/keypairs/passkey/keypair.js.map +1 -0
  203. package/dist/cjs/keypairs/passkey/publickey.js +163 -162
  204. package/dist/cjs/keypairs/passkey/publickey.js.map +1 -0
  205. package/dist/cjs/keypairs/passkey/types.js +4 -15
  206. package/dist/cjs/keypairs/passkey/types.js.map +1 -0
  207. package/dist/cjs/keypairs/secp256k1/index.js +10 -26
  208. package/dist/cjs/keypairs/secp256k1/index.js.map +1 -0
  209. package/dist/cjs/keypairs/secp256k1/keypair.js +129 -151
  210. package/dist/cjs/keypairs/secp256k1/keypair.js.map +1 -0
  211. package/dist/cjs/keypairs/secp256k1/publickey.js +71 -89
  212. package/dist/cjs/keypairs/secp256k1/publickey.js.map +1 -0
  213. package/dist/cjs/keypairs/secp256r1/index.js +10 -26
  214. package/dist/cjs/keypairs/secp256r1/index.js.map +1 -0
  215. package/dist/cjs/keypairs/secp256r1/keypair.js +127 -148
  216. package/dist/cjs/keypairs/secp256r1/keypair.js.map +1 -0
  217. package/dist/cjs/keypairs/secp256r1/publickey.js +72 -90
  218. package/dist/cjs/keypairs/secp256r1/publickey.js.map +1 -0
  219. package/dist/cjs/multisig/index.js +10 -26
  220. package/dist/cjs/multisig/index.js.map +1 -0
  221. package/dist/cjs/multisig/publickey.d.ts +1 -1
  222. package/dist/cjs/multisig/publickey.js +228 -276
  223. package/dist/cjs/multisig/publickey.js.map +1 -0
  224. package/dist/cjs/multisig/signer.js +62 -110
  225. package/dist/cjs/multisig/signer.js.map +1 -0
  226. package/dist/cjs/transactions/Arguments.d.ts +4 -4
  227. package/dist/cjs/transactions/Arguments.js +13 -34
  228. package/dist/cjs/transactions/Arguments.js.map +1 -0
  229. package/dist/cjs/transactions/Commands.js +111 -141
  230. package/dist/cjs/transactions/Commands.js.map +1 -0
  231. package/dist/cjs/transactions/Inputs.js +53 -82
  232. package/dist/cjs/transactions/Inputs.js.map +1 -0
  233. package/dist/cjs/transactions/ObjectCache.d.ts +8 -8
  234. package/dist/cjs/transactions/ObjectCache.js +204 -241
  235. package/dist/cjs/transactions/ObjectCache.js.map +1 -0
  236. package/dist/cjs/transactions/Transaction.d.ts +31 -31
  237. package/dist/cjs/transactions/Transaction.js +628 -719
  238. package/dist/cjs/transactions/Transaction.js.map +1 -0
  239. package/dist/cjs/transactions/TransactionData.d.ts +9 -9
  240. package/dist/cjs/transactions/TransactionData.js +396 -440
  241. package/dist/cjs/transactions/TransactionData.js.map +1 -0
  242. package/dist/cjs/transactions/__tests__/Transaction.test.js +169 -0
  243. package/dist/cjs/transactions/__tests__/Transaction.test.js.map +1 -0
  244. package/dist/cjs/transactions/__tests__/bcs.test.js +202 -0
  245. package/dist/cjs/transactions/__tests__/bcs.test.js.map +1 -0
  246. package/dist/cjs/transactions/data/internal.js +166 -207
  247. package/dist/cjs/transactions/data/internal.js.map +1 -0
  248. package/dist/cjs/transactions/data/v1.js +436 -495
  249. package/dist/cjs/transactions/data/v1.js.map +1 -0
  250. package/dist/cjs/transactions/data/v2.d.ts +5 -5
  251. package/dist/cjs/transactions/data/v2.js +94 -107
  252. package/dist/cjs/transactions/data/v2.js.map +1 -0
  253. package/dist/cjs/transactions/executor/caching.js +71 -113
  254. package/dist/cjs/transactions/executor/caching.js.map +1 -0
  255. package/dist/cjs/transactions/executor/parallel.js +339 -378
  256. package/dist/cjs/transactions/executor/parallel.js.map +1 -0
  257. package/dist/cjs/transactions/executor/queue.js +60 -80
  258. package/dist/cjs/transactions/executor/queue.js.map +1 -0
  259. package/dist/cjs/transactions/executor/serial.d.ts +4 -4
  260. package/dist/cjs/transactions/executor/serial.js +102 -131
  261. package/dist/cjs/transactions/executor/serial.js.map +1 -0
  262. package/dist/cjs/transactions/hash.js +17 -28
  263. package/dist/cjs/transactions/hash.js.map +1 -0
  264. package/dist/cjs/transactions/index.js +33 -49
  265. package/dist/cjs/transactions/index.js.map +1 -0
  266. package/dist/cjs/transactions/intents/CoinWithBalance.js +137 -191
  267. package/dist/cjs/transactions/intents/CoinWithBalance.js.map +1 -0
  268. package/dist/cjs/transactions/object.js +88 -111
  269. package/dist/cjs/transactions/object.js.map +1 -0
  270. package/dist/cjs/transactions/plugins/NamedPackagesPlugin.js +20 -32
  271. package/dist/cjs/transactions/plugins/NamedPackagesPlugin.js.map +1 -0
  272. package/dist/cjs/transactions/pure.js +38 -60
  273. package/dist/cjs/transactions/pure.js.map +1 -0
  274. package/dist/cjs/transactions/resolve.js +62 -88
  275. package/dist/cjs/transactions/resolve.js.map +1 -0
  276. package/dist/cjs/transactions/serializer.js +150 -163
  277. package/dist/cjs/transactions/serializer.js.map +1 -0
  278. package/dist/cjs/transactions/utils.d.ts +1 -1
  279. package/dist/cjs/transactions/utils.js +114 -125
  280. package/dist/cjs/transactions/utils.js.map +1 -0
  281. package/dist/cjs/utils/constants.js +29 -56
  282. package/dist/cjs/utils/constants.js.map +1 -0
  283. package/dist/cjs/utils/derived-objects.js +14 -30
  284. package/dist/cjs/utils/derived-objects.js.map +1 -0
  285. package/dist/cjs/utils/dynamic-fields.js +20 -37
  286. package/dist/cjs/utils/dynamic-fields.js.map +1 -0
  287. package/dist/cjs/utils/format.js +14 -30
  288. package/dist/cjs/utils/format.js.map +1 -0
  289. package/dist/cjs/utils/index.js +50 -64
  290. package/dist/cjs/utils/index.js.map +1 -0
  291. package/dist/cjs/utils/move-registry.js +37 -35
  292. package/dist/cjs/utils/move-registry.js.map +1 -0
  293. package/dist/cjs/utils/sui-types.js +74 -68
  294. package/dist/cjs/utils/sui-types.js.map +1 -0
  295. package/dist/cjs/utils/suins.js +30 -46
  296. package/dist/cjs/utils/suins.js.map +1 -0
  297. package/dist/cjs/verify/index.js +12 -27
  298. package/dist/cjs/verify/index.js.map +1 -0
  299. package/dist/cjs/verify/verify.js +83 -110
  300. package/dist/cjs/verify/verify.js.map +1 -0
  301. package/dist/cjs/version.js +8 -25
  302. package/dist/cjs/version.js.map +1 -0
  303. package/dist/cjs/w/call/allocation.js +323 -413
  304. package/dist/cjs/w/call/allocation.js.map +1 -0
  305. package/dist/cjs/w/call/arb.js +105 -136
  306. package/dist/cjs/w/call/arb.js.map +1 -0
  307. package/dist/cjs/w/call/arbitration.js +1206 -1581
  308. package/dist/cjs/w/call/arbitration.js.map +1 -0
  309. package/dist/cjs/w/call/base.js +303 -333
  310. package/dist/cjs/w/call/base.js.map +1 -0
  311. package/dist/cjs/w/call/contact.js +335 -452
  312. package/dist/cjs/w/call/contact.js.map +1 -0
  313. package/dist/cjs/w/call/demand.js +690 -844
  314. package/dist/cjs/w/call/demand.js.map +1 -0
  315. package/dist/cjs/w/call/entity.js +167 -201
  316. package/dist/cjs/w/call/entity.js.map +1 -0
  317. package/dist/cjs/w/call/guard-ins.d.ts +1 -0
  318. package/dist/cjs/w/call/guard-ins.js +4376 -4384
  319. package/dist/cjs/w/call/guard-ins.js.map +1 -0
  320. package/dist/cjs/w/call/guard.d.ts +10 -0
  321. package/dist/cjs/w/call/guard.js +1078 -1119
  322. package/dist/cjs/w/call/guard.js.map +1 -0
  323. package/dist/cjs/w/call/index.d.ts +1 -1
  324. package/dist/cjs/w/call/index.js +69 -69
  325. package/dist/cjs/w/call/index.js.map +1 -0
  326. package/dist/cjs/w/call/machine.js +1105 -1419
  327. package/dist/cjs/w/call/machine.js.map +1 -0
  328. package/dist/cjs/w/call/order.js +314 -454
  329. package/dist/cjs/w/call/order.js.map +1 -0
  330. package/dist/cjs/w/call/passport.js +214 -253
  331. package/dist/cjs/w/call/passport.js.map +1 -0
  332. package/dist/cjs/w/call/payment.js +187 -224
  333. package/dist/cjs/w/call/payment.js.map +1 -0
  334. package/dist/cjs/w/call/permission.js +1183 -1294
  335. package/dist/cjs/w/call/permission.js.map +1 -0
  336. package/dist/cjs/w/call/personal.js +132 -170
  337. package/dist/cjs/w/call/personal.js.map +1 -0
  338. package/dist/cjs/w/call/progress.js +634 -794
  339. package/dist/cjs/w/call/progress.js.map +1 -0
  340. package/dist/cjs/w/call/proof.js +67 -116
  341. package/dist/cjs/w/call/proof.js.map +1 -0
  342. package/dist/cjs/w/call/repository.js +1037 -1251
  343. package/dist/cjs/w/call/repository.js.map +1 -0
  344. package/dist/cjs/w/call/resource.js +111 -131
  345. package/dist/cjs/w/call/resource.js.map +1 -0
  346. package/dist/cjs/w/call/reward.js +675 -853
  347. package/dist/cjs/w/call/reward.js.map +1 -0
  348. package/dist/cjs/w/call/service.js +1879 -2385
  349. package/dist/cjs/w/call/service.js.map +1 -0
  350. package/dist/cjs/w/call/treasury.js +841 -1138
  351. package/dist/cjs/w/call/treasury.js.map +1 -0
  352. package/dist/cjs/w/call/util.js +593 -624
  353. package/dist/cjs/w/call/util.js.map +1 -0
  354. package/dist/cjs/w/common.d.ts +1 -1
  355. package/dist/cjs/w/common.js +548 -518
  356. package/dist/cjs/w/common.js.map +1 -0
  357. package/dist/cjs/w/exception.js +574 -584
  358. package/dist/cjs/w/exception.js.map +1 -0
  359. package/dist/cjs/w/index.js +26 -23
  360. package/dist/cjs/w/index.js.map +1 -0
  361. package/dist/cjs/w/local/account.js +664 -741
  362. package/dist/cjs/w/local/account.js.map +1 -0
  363. package/dist/cjs/w/local/cache.js +180 -166
  364. package/dist/cjs/w/local/cache.js.map +1 -0
  365. package/dist/cjs/w/local/config.js +51 -80
  366. package/dist/cjs/w/local/config.js.map +1 -0
  367. package/dist/cjs/w/local/index.js +225 -290
  368. package/dist/cjs/w/local/index.js.map +1 -0
  369. package/dist/cjs/w/local/local.d.ts +2 -2
  370. package/dist/cjs/w/local/local.js +638 -646
  371. package/dist/cjs/w/local/local.js.map +1 -0
  372. package/dist/cjs/w/local/storage.js +210 -164
  373. package/dist/cjs/w/local/storage.js.map +1 -0
  374. package/dist/cjs/w/local/token.js +158 -175
  375. package/dist/cjs/w/local/token.js.map +1 -0
  376. package/dist/cjs/w/local/util.js +80 -51
  377. package/dist/cjs/w/local/util.js.map +1 -0
  378. package/dist/cjs/w/local/wip.js +1078 -802
  379. package/dist/cjs/w/local/wip.js.map +1 -0
  380. package/dist/cjs/w/messenger/crypto.js +496 -389
  381. package/dist/cjs/w/messenger/crypto.js.map +1 -0
  382. package/dist/cjs/w/messenger/index.js +53 -35
  383. package/dist/cjs/w/messenger/index.js.map +1 -0
  384. package/dist/cjs/w/messenger/messenger-api.js +1159 -1035
  385. package/dist/cjs/w/messenger/messenger-api.js.map +1 -0
  386. package/dist/cjs/w/messenger/messenger-manager.js +954 -1083
  387. package/dist/cjs/w/messenger/messenger-manager.js.map +1 -0
  388. package/dist/cjs/w/messenger/messenger.d.ts +1 -1
  389. package/dist/cjs/w/messenger/messenger.js +1304 -1450
  390. package/dist/cjs/w/messenger/messenger.js.map +1 -0
  391. package/dist/cjs/w/messenger/server.js +390 -512
  392. package/dist/cjs/w/messenger/server.js.map +1 -0
  393. package/dist/cjs/w/messenger/session.js +399 -403
  394. package/dist/cjs/w/messenger/session.js.map +1 -0
  395. package/dist/cjs/w/messenger/storage.js +881 -777
  396. package/dist/cjs/w/messenger/storage.js.map +1 -0
  397. package/dist/cjs/w/messenger/types.d.ts +2 -2
  398. package/dist/cjs/w/messenger/types.js +83 -103
  399. package/dist/cjs/w/messenger/types.js.map +1 -0
  400. package/dist/cjs/w/messenger/utils.js +29 -34
  401. package/dist/cjs/w/messenger/utils.js.map +1 -0
  402. package/dist/cjs/w/query/bult-in.js +101 -110
  403. package/dist/cjs/w/query/bult-in.js.map +1 -0
  404. package/dist/cjs/w/query/event.js +134 -146
  405. package/dist/cjs/w/query/event.js.map +1 -0
  406. package/dist/cjs/w/query/index.js +22 -20
  407. package/dist/cjs/w/query/index.js.map +1 -0
  408. package/dist/cjs/w/query/object.js +1576 -1576
  409. package/dist/cjs/w/query/object.js.map +1 -0
  410. package/dist/cjs/w/query/received.js +66 -88
  411. package/dist/cjs/w/query/received.js.map +1 -0
  412. package/dist/cjs/w/query/util.js +53 -77
  413. package/dist/cjs/w/query/util.js.map +1 -0
  414. package/dist/cjs/w/util.js +589 -675
  415. package/dist/cjs/w/util.js.map +1 -0
  416. package/dist/esm/bcs/bcs.d.ts +199 -199
  417. package/dist/esm/bcs/bcs.js +269 -310
  418. package/dist/esm/bcs/bcs.js.map +1 -0
  419. package/dist/esm/bcs/effects.d.ts +109 -109
  420. package/dist/esm/bcs/effects.js +171 -179
  421. package/dist/esm/bcs/effects.js.map +1 -0
  422. package/dist/esm/bcs/index.d.ts +1 -2584
  423. package/dist/esm/bcs/index.js +51 -94
  424. package/dist/esm/bcs/index.js.map +1 -0
  425. package/dist/esm/bcs/pure.js +35 -38
  426. package/dist/esm/bcs/pure.js.map +1 -0
  427. package/dist/esm/bcs/type-tag-serializer.js +98 -95
  428. package/dist/esm/bcs/type-tag-serializer.js.map +1 -0
  429. package/dist/esm/bcs/types.js +5 -5
  430. package/dist/esm/bcs/types.js.map +1 -0
  431. package/dist/esm/client/index.js +7 -23
  432. package/dist/esm/client/index.js.map +1 -0
  433. package/dist/esm/client/network.js +23 -22
  434. package/dist/esm/client/network.js.map +1 -0
  435. package/dist/esm/cryptography/index.js +9 -46
  436. package/dist/esm/cryptography/index.js.map +1 -0
  437. package/dist/esm/cryptography/intent.d.ts +1 -1
  438. package/dist/esm/cryptography/intent.js +18 -12
  439. package/dist/esm/cryptography/intent.js.map +1 -0
  440. package/dist/esm/cryptography/keypair.js +95 -99
  441. package/dist/esm/cryptography/keypair.js.map +1 -0
  442. package/dist/esm/cryptography/mnemonics.js +40 -24
  443. package/dist/esm/cryptography/mnemonics.js.map +1 -0
  444. package/dist/esm/cryptography/publickey.js +104 -115
  445. package/dist/esm/cryptography/publickey.js.map +1 -0
  446. package/dist/esm/cryptography/signature-scheme.js +22 -24
  447. package/dist/esm/cryptography/signature-scheme.js.map +1 -0
  448. package/dist/esm/cryptography/signature.d.ts +2 -24
  449. package/dist/esm/cryptography/signature.js +44 -48
  450. package/dist/esm/cryptography/signature.js.map +1 -0
  451. package/dist/esm/experimental/cache.js +61 -0
  452. package/dist/esm/experimental/cache.js.map +1 -0
  453. package/dist/esm/experimental/client.js +23 -0
  454. package/dist/esm/experimental/client.js.map +1 -0
  455. package/dist/esm/experimental/core.js +85 -0
  456. package/dist/esm/experimental/core.js.map +1 -0
  457. package/dist/esm/experimental/errors.js +27 -0
  458. package/dist/esm/experimental/errors.js.map +1 -0
  459. package/dist/esm/experimental/index.js +8 -0
  460. package/dist/esm/experimental/index.js.map +1 -0
  461. package/dist/esm/experimental/persistent-storage.js +337 -0
  462. package/dist/esm/experimental/persistent-storage.js.map +1 -0
  463. package/dist/esm/experimental/persistent-storage.test.js +198 -0
  464. package/dist/esm/experimental/persistent-storage.test.js.map +1 -0
  465. package/dist/esm/experimental/transports/utils.js +100 -0
  466. package/dist/esm/experimental/transports/utils.js.map +1 -0
  467. package/dist/esm/experimental/types.js +5 -0
  468. package/dist/esm/experimental/types.js.map +1 -0
  469. package/dist/esm/faucet/faucet.js +104 -111
  470. package/dist/esm/faucet/faucet.js.map +1 -0
  471. package/dist/esm/faucet/index.js +4 -16
  472. package/dist/esm/faucet/index.js.map +1 -0
  473. package/dist/esm/grpc/client.js +34 -34
  474. package/dist/esm/grpc/client.js.map +1 -0
  475. package/dist/esm/grpc/core.js +570 -601
  476. package/dist/esm/grpc/core.js.map +1 -0
  477. package/dist/esm/grpc/index.js +5 -6
  478. package/dist/esm/grpc/index.js.map +1 -0
  479. package/dist/esm/grpc/proto/google/protobuf/any.js +161 -111
  480. package/dist/esm/grpc/proto/google/protobuf/any.js.map +1 -0
  481. package/dist/esm/grpc/proto/google/protobuf/duration.js +99 -67
  482. package/dist/esm/grpc/proto/google/protobuf/duration.js.map +1 -0
  483. package/dist/esm/grpc/proto/google/protobuf/empty.js +46 -7
  484. package/dist/esm/grpc/proto/google/protobuf/empty.js.map +1 -0
  485. package/dist/esm/grpc/proto/google/protobuf/field_mask.js +90 -52
  486. package/dist/esm/grpc/proto/google/protobuf/field_mask.js.map +1 -0
  487. package/dist/esm/grpc/proto/google/protobuf/struct.js +258 -190
  488. package/dist/esm/grpc/proto/google/protobuf/struct.js.map +1 -0
  489. package/dist/esm/grpc/proto/google/protobuf/timestamp.js +144 -108
  490. package/dist/esm/grpc/proto/google/protobuf/timestamp.js.map +1 -0
  491. package/dist/esm/grpc/proto/google/rpc/error_details.js +313 -267
  492. package/dist/esm/grpc/proto/google/rpc/error_details.js.map +1 -0
  493. package/dist/esm/grpc/proto/google/rpc/status.js +45 -28
  494. package/dist/esm/grpc/proto/google/rpc/status.js.map +1 -0
  495. package/dist/esm/grpc/proto/sui/rpc/v2/argument.js +80 -47
  496. package/dist/esm/grpc/proto/sui/rpc/v2/argument.js.map +1 -0
  497. package/dist/esm/grpc/proto/sui/rpc/v2/balance_change.js +41 -29
  498. package/dist/esm/grpc/proto/sui/rpc/v2/balance_change.js.map +1 -0
  499. package/dist/esm/grpc/proto/sui/rpc/v2/bcs.js +34 -22
  500. package/dist/esm/grpc/proto/sui/rpc/v2/bcs.js.map +1 -0
  501. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint.js +61 -49
  502. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint.js.map +1 -0
  503. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_contents.js +72 -57
  504. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_contents.js.map +1 -0
  505. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_summary.js +173 -139
  506. package/dist/esm/grpc/proto/sui/rpc/v2/checkpoint_summary.js.map +1 -0
  507. package/dist/esm/grpc/proto/sui/rpc/v2/effects.js +358 -268
  508. package/dist/esm/grpc/proto/sui/rpc/v2/effects.js.map +1 -0
  509. package/dist/esm/grpc/proto/sui/rpc/v2/epoch.js +72 -60
  510. package/dist/esm/grpc/proto/sui/rpc/v2/epoch.js.map +1 -0
  511. package/dist/esm/grpc/proto/sui/rpc/v2/error_reason.js +29 -9
  512. package/dist/esm/grpc/proto/sui/rpc/v2/error_reason.js.map +1 -0
  513. package/dist/esm/grpc/proto/sui/rpc/v2/event.js +74 -59
  514. package/dist/esm/grpc/proto/sui/rpc/v2/event.js.map +1 -0
  515. package/dist/esm/grpc/proto/sui/rpc/v2/executed_transaction.js +69 -57
  516. package/dist/esm/grpc/proto/sui/rpc/v2/executed_transaction.js.map +1 -0
  517. package/dist/esm/grpc/proto/sui/rpc/v2/execution_status.js +861 -474
  518. package/dist/esm/grpc/proto/sui/rpc/v2/execution_status.js.map +1 -0
  519. package/dist/esm/grpc/proto/sui/rpc/v2/gas_cost_summary.js +52 -40
  520. package/dist/esm/grpc/proto/sui/rpc/v2/gas_cost_summary.js.map +1 -0
  521. package/dist/esm/grpc/proto/sui/rpc/v2/input.js +98 -61
  522. package/dist/esm/grpc/proto/sui/rpc/v2/input.js.map +1 -0
  523. package/dist/esm/grpc/proto/sui/rpc/v2/jwk.js +71 -56
  524. package/dist/esm/grpc/proto/sui/rpc/v2/jwk.js.map +1 -0
  525. package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.client.js +65 -100
  526. package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.client.js.map +1 -0
  527. package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.js +365 -306
  528. package/dist/esm/grpc/proto/sui/rpc/v2/ledger_service.js.map +1 -0
  529. package/dist/esm/grpc/proto/sui/rpc/v2/move_package.js +585 -442
  530. package/dist/esm/grpc/proto/sui/rpc/v2/move_package.js.map +1 -0
  531. package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.client.js +42 -59
  532. package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.client.js.map +1 -0
  533. package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.js +226 -191
  534. package/dist/esm/grpc/proto/sui/rpc/v2/move_package_service.js.map +1 -0
  535. package/dist/esm/grpc/proto/sui/rpc/v2/name_service.client.js +28 -33
  536. package/dist/esm/grpc/proto/sui/rpc/v2/name_service.client.js.map +1 -0
  537. package/dist/esm/grpc/proto/sui/rpc/v2/name_service.js +129 -107
  538. package/dist/esm/grpc/proto/sui/rpc/v2/name_service.js.map +1 -0
  539. package/dist/esm/grpc/proto/sui/rpc/v2/object.js +100 -85
  540. package/dist/esm/grpc/proto/sui/rpc/v2/object.js.map +1 -0
  541. package/dist/esm/grpc/proto/sui/rpc/v2/object_reference.js +42 -30
  542. package/dist/esm/grpc/proto/sui/rpc/v2/object_reference.js.map +1 -0
  543. package/dist/esm/grpc/proto/sui/rpc/v2/owner.js +72 -40
  544. package/dist/esm/grpc/proto/sui/rpc/v2/owner.js.map +1 -0
  545. package/dist/esm/grpc/proto/sui/rpc/v2/protocol_config.js +42 -38
  546. package/dist/esm/grpc/proto/sui/rpc/v2/protocol_config.js.map +1 -0
  547. package/dist/esm/grpc/proto/sui/rpc/v2/signature.js +544 -481
  548. package/dist/esm/grpc/proto/sui/rpc/v2/signature.js.map +1 -0
  549. package/dist/esm/grpc/proto/sui/rpc/v2/signature_scheme.js +52 -13
  550. package/dist/esm/grpc/proto/sui/rpc/v2/signature_scheme.js.map +1 -0
  551. package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.client.js +23 -28
  552. package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.client.js.map +1 -0
  553. package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.js +74 -60
  554. package/dist/esm/grpc/proto/sui/rpc/v2/signature_verification_service.js.map +1 -0
  555. package/dist/esm/grpc/proto/sui/rpc/v2/state_service.client.js +49 -66
  556. package/dist/esm/grpc/proto/sui/rpc/v2/state_service.client.js.map +1 -0
  557. package/dist/esm/grpc/proto/sui/rpc/v2/state_service.js +623 -490
  558. package/dist/esm/grpc/proto/sui/rpc/v2/state_service.js.map +1 -0
  559. package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.client.js +33 -32
  560. package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.client.js.map +1 -0
  561. package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.js +50 -36
  562. package/dist/esm/grpc/proto/sui/rpc/v2/subscription_service.js.map +1 -0
  563. package/dist/esm/grpc/proto/sui/rpc/v2/system_state.js +737 -701
  564. package/dist/esm/grpc/proto/sui/rpc/v2/system_state.js.map +1 -0
  565. package/dist/esm/grpc/proto/sui/rpc/v2/transaction.js +1177 -917
  566. package/dist/esm/grpc/proto/sui/rpc/v2/transaction.js.map +1 -0
  567. package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.client.js +28 -27
  568. package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.client.js.map +1 -0
  569. package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.js +169 -133
  570. package/dist/esm/grpc/proto/sui/rpc/v2/transaction_execution_service.js.map +1 -0
  571. package/dist/esm/index.js +21 -107
  572. package/dist/esm/index.js.map +1 -0
  573. package/dist/esm/jsonRpc/client.js +646 -727
  574. package/dist/esm/jsonRpc/client.js.map +1 -0
  575. package/dist/esm/jsonRpc/core.d.ts +7 -7
  576. package/dist/esm/jsonRpc/core.js +550 -581
  577. package/dist/esm/jsonRpc/core.js.map +1 -0
  578. package/dist/esm/jsonRpc/errors.js +36 -41
  579. package/dist/esm/jsonRpc/errors.js.map +1 -0
  580. package/dist/esm/jsonRpc/http-transport.js +65 -93
  581. package/dist/esm/jsonRpc/http-transport.js.map +1 -0
  582. package/dist/esm/jsonRpc/index.js +6 -20
  583. package/dist/esm/jsonRpc/index.js.map +1 -0
  584. package/dist/esm/jsonRpc/json-rpc-resolver.js +281 -276
  585. package/dist/esm/jsonRpc/json-rpc-resolver.js.map +1 -0
  586. package/dist/esm/jsonRpc/rpc-websocket-client.js +147 -189
  587. package/dist/esm/jsonRpc/rpc-websocket-client.js.map +1 -0
  588. package/dist/esm/jsonRpc/types/chain.js +4 -0
  589. package/dist/esm/jsonRpc/types/chain.js.map +1 -0
  590. package/dist/esm/jsonRpc/types/changes.js +4 -0
  591. package/dist/esm/jsonRpc/types/changes.js.map +1 -0
  592. package/dist/esm/jsonRpc/types/coins.js +4 -0
  593. package/dist/esm/jsonRpc/types/coins.js.map +1 -0
  594. package/dist/esm/jsonRpc/types/common.js +4 -0
  595. package/dist/esm/jsonRpc/types/common.js.map +1 -0
  596. package/dist/esm/jsonRpc/types/generated.d.ts +1 -1
  597. package/dist/esm/jsonRpc/types/generated.js +4 -0
  598. package/dist/esm/jsonRpc/types/generated.js.map +1 -0
  599. package/dist/esm/jsonRpc/types/index.js +4 -0
  600. package/dist/esm/jsonRpc/types/index.js.map +1 -0
  601. package/dist/esm/jsonRpc/types/params.js +4 -0
  602. package/dist/esm/jsonRpc/types/params.js.map +1 -0
  603. package/dist/esm/keypairs/ed25519/ed25519-hd-key.js +49 -48
  604. package/dist/esm/keypairs/ed25519/ed25519-hd-key.js.map +1 -0
  605. package/dist/esm/keypairs/ed25519/index.js +5 -10
  606. package/dist/esm/keypairs/ed25519/index.js.map +1 -0
  607. package/dist/esm/keypairs/ed25519/keypair.js +128 -146
  608. package/dist/esm/keypairs/ed25519/keypair.js.map +1 -0
  609. package/dist/esm/keypairs/ed25519/publickey.js +64 -67
  610. package/dist/esm/keypairs/ed25519/publickey.js.map +1 -0
  611. package/dist/esm/keypairs/index.js +3 -0
  612. package/dist/esm/keypairs/index.js.map +1 -0
  613. package/dist/esm/keypairs/passkey/index.js +5 -12
  614. package/dist/esm/keypairs/passkey/index.js.map +1 -0
  615. package/dist/esm/keypairs/passkey/keypair.js +236 -243
  616. package/dist/esm/keypairs/passkey/keypair.js.map +1 -0
  617. package/dist/esm/keypairs/passkey/publickey.js +154 -140
  618. package/dist/esm/keypairs/passkey/publickey.js.map +1 -0
  619. package/dist/esm/keypairs/passkey/types.js +4 -0
  620. package/dist/esm/keypairs/passkey/types.js.map +1 -0
  621. package/dist/esm/keypairs/secp256k1/index.js +5 -10
  622. package/dist/esm/keypairs/secp256k1/index.js.map +1 -0
  623. package/dist/esm/keypairs/secp256k1/keypair.js +120 -134
  624. package/dist/esm/keypairs/secp256k1/keypair.js.map +1 -0
  625. package/dist/esm/keypairs/secp256k1/publickey.js +64 -71
  626. package/dist/esm/keypairs/secp256k1/publickey.js.map +1 -0
  627. package/dist/esm/keypairs/secp256r1/index.js +5 -10
  628. package/dist/esm/keypairs/secp256r1/index.js.map +1 -0
  629. package/dist/esm/keypairs/secp256r1/keypair.js +118 -131
  630. package/dist/esm/keypairs/secp256r1/keypair.js.map +1 -0
  631. package/dist/esm/keypairs/secp256r1/publickey.js +63 -66
  632. package/dist/esm/keypairs/secp256r1/publickey.js.map +1 -0
  633. package/dist/esm/multisig/index.js +5 -10
  634. package/dist/esm/multisig/index.js.map +1 -0
  635. package/dist/esm/multisig/publickey.d.ts +1 -1
  636. package/dist/esm/multisig/publickey.js +216 -253
  637. package/dist/esm/multisig/publickey.js.map +1 -0
  638. package/dist/esm/multisig/signer.js +57 -89
  639. package/dist/esm/multisig/signer.js.map +1 -0
  640. package/dist/esm/transactions/Arguments.d.ts +4 -4
  641. package/dist/esm/transactions/Arguments.js +9 -13
  642. package/dist/esm/transactions/Arguments.js.map +1 -0
  643. package/dist/esm/transactions/Commands.js +105 -118
  644. package/dist/esm/transactions/Commands.js.map +1 -0
  645. package/dist/esm/transactions/Inputs.js +49 -61
  646. package/dist/esm/transactions/Inputs.js.map +1 -0
  647. package/dist/esm/transactions/ObjectCache.d.ts +8 -8
  648. package/dist/esm/transactions/ObjectCache.js +200 -223
  649. package/dist/esm/transactions/ObjectCache.js.map +1 -0
  650. package/dist/esm/transactions/Transaction.d.ts +32 -32
  651. package/dist/esm/transactions/Transaction.js +611 -696
  652. package/dist/esm/transactions/Transaction.js.map +1 -0
  653. package/dist/esm/transactions/TransactionData.d.ts +9 -9
  654. package/dist/esm/transactions/TransactionData.js +386 -415
  655. package/dist/esm/transactions/TransactionData.js.map +1 -0
  656. package/dist/esm/transactions/__tests__/Transaction.test.js +167 -0
  657. package/dist/esm/transactions/__tests__/Transaction.test.js.map +1 -0
  658. package/dist/esm/transactions/__tests__/bcs.test.js +200 -0
  659. package/dist/esm/transactions/__tests__/bcs.test.js.map +1 -0
  660. package/dist/esm/transactions/data/internal.js +158 -205
  661. package/dist/esm/transactions/data/internal.js.map +1 -0
  662. package/dist/esm/transactions/data/v1.js +419 -487
  663. package/dist/esm/transactions/data/v1.js.map +1 -0
  664. package/dist/esm/transactions/data/v2.d.ts +5 -5
  665. package/dist/esm/transactions/data/v2.js +89 -107
  666. package/dist/esm/transactions/data/v2.js.map +1 -0
  667. package/dist/esm/transactions/executor/caching.d.ts +2 -2
  668. package/dist/esm/transactions/executor/caching.js +66 -93
  669. package/dist/esm/transactions/executor/caching.js.map +1 -0
  670. package/dist/esm/transactions/executor/parallel.js +329 -352
  671. package/dist/esm/transactions/executor/parallel.js.map +1 -0
  672. package/dist/esm/transactions/executor/queue.js +58 -64
  673. package/dist/esm/transactions/executor/queue.js.map +1 -0
  674. package/dist/esm/transactions/executor/serial.d.ts +5 -5
  675. package/dist/esm/transactions/executor/serial.js +96 -110
  676. package/dist/esm/transactions/executor/serial.js.map +1 -0
  677. package/dist/esm/transactions/hash.js +15 -9
  678. package/dist/esm/transactions/hash.js.map +1 -0
  679. package/dist/esm/transactions/index.js +15 -41
  680. package/dist/esm/transactions/index.js.map +1 -0
  681. package/dist/esm/transactions/intents/CoinWithBalance.js +127 -165
  682. package/dist/esm/transactions/intents/CoinWithBalance.js.map +1 -0
  683. package/dist/esm/transactions/object.js +86 -92
  684. package/dist/esm/transactions/object.js.map +1 -0
  685. package/dist/esm/transactions/plugins/NamedPackagesPlugin.js +18 -15
  686. package/dist/esm/transactions/plugins/NamedPackagesPlugin.js.map +1 -0
  687. package/dist/esm/transactions/pure.js +34 -39
  688. package/dist/esm/transactions/pure.js.map +1 -0
  689. package/dist/esm/transactions/resolve.js +58 -69
  690. package/dist/esm/transactions/resolve.js.map +1 -0
  691. package/dist/esm/transactions/serializer.js +145 -144
  692. package/dist/esm/transactions/serializer.js.map +1 -0
  693. package/dist/esm/transactions/utils.d.ts +1 -1
  694. package/dist/esm/transactions/utils.js +110 -109
  695. package/dist/esm/transactions/utils.js.map +1 -0
  696. package/dist/esm/utils/constants.js +26 -36
  697. package/dist/esm/utils/constants.js.map +1 -0
  698. package/dist/esm/utils/derived-objects.js +11 -10
  699. package/dist/esm/utils/derived-objects.js.map +1 -0
  700. package/dist/esm/utils/dynamic-fields.js +16 -16
  701. package/dist/esm/utils/dynamic-fields.js.map +1 -0
  702. package/dist/esm/utils/format.js +13 -13
  703. package/dist/esm/utils/format.js.map +1 -0
  704. package/dist/esm/utils/index.js +15 -76
  705. package/dist/esm/utils/index.js.map +1 -0
  706. package/dist/esm/utils/move-registry.js +34 -17
  707. package/dist/esm/utils/move-registry.js.map +1 -0
  708. package/dist/esm/utils/sui-types.js +70 -54
  709. package/dist/esm/utils/sui-types.js.map +1 -0
  710. package/dist/esm/utils/suins.js +29 -29
  711. package/dist/esm/utils/suins.js.map +1 -0
  712. package/dist/esm/verify/index.js +5 -14
  713. package/dist/esm/verify/index.js.map +1 -0
  714. package/dist/esm/verify/verify.js +76 -93
  715. package/dist/esm/verify/verify.js.map +1 -0
  716. package/dist/esm/version.js +6 -6
  717. package/dist/esm/version.js.map +1 -0
  718. package/dist/esm/w/call/allocation.js +307 -402
  719. package/dist/esm/w/call/allocation.js.map +1 -0
  720. package/dist/esm/w/call/arb.js +100 -129
  721. package/dist/esm/w/call/arb.js.map +1 -0
  722. package/dist/esm/w/call/arbitration.js +1170 -1568
  723. package/dist/esm/w/call/arbitration.js.map +1 -0
  724. package/dist/esm/w/call/base.js +288 -315
  725. package/dist/esm/w/call/base.js.map +1 -0
  726. package/dist/esm/w/call/contact.js +318 -442
  727. package/dist/esm/w/call/contact.js.map +1 -0
  728. package/dist/esm/w/call/demand.js +673 -841
  729. package/dist/esm/w/call/demand.js.map +1 -0
  730. package/dist/esm/w/call/entity.js +162 -203
  731. package/dist/esm/w/call/entity.js.map +1 -0
  732. package/dist/esm/w/call/guard-ins.d.ts +1 -0
  733. package/dist/esm/w/call/guard-ins.js +4373 -4366
  734. package/dist/esm/w/call/guard-ins.js.map +1 -0
  735. package/dist/esm/w/call/guard.d.ts +10 -0
  736. package/dist/esm/w/call/guard.js +1061 -1115
  737. package/dist/esm/w/call/guard.js.map +1 -0
  738. package/dist/esm/w/call/index.d.ts +1 -1
  739. package/dist/esm/w/call/index.js +24 -54
  740. package/dist/esm/w/call/index.js.map +1 -0
  741. package/dist/esm/w/call/machine.js +1086 -1433
  742. package/dist/esm/w/call/machine.js.map +1 -0
  743. package/dist/esm/w/call/order.js +301 -448
  744. package/dist/esm/w/call/order.js.map +1 -0
  745. package/dist/esm/w/call/passport.js +204 -240
  746. package/dist/esm/w/call/passport.js.map +1 -0
  747. package/dist/esm/w/call/payment.js +177 -215
  748. package/dist/esm/w/call/payment.js.map +1 -0
  749. package/dist/esm/w/call/permission.js +1172 -1320
  750. package/dist/esm/w/call/permission.js.map +1 -0
  751. package/dist/esm/w/call/personal.js +121 -156
  752. package/dist/esm/w/call/personal.js.map +1 -0
  753. package/dist/esm/w/call/progress.js +625 -797
  754. package/dist/esm/w/call/progress.js.map +1 -0
  755. package/dist/esm/w/call/proof.js +61 -103
  756. package/dist/esm/w/call/proof.js.map +1 -0
  757. package/dist/esm/w/call/repository.js +1017 -1251
  758. package/dist/esm/w/call/repository.js.map +1 -0
  759. package/dist/esm/w/call/resource.js +108 -124
  760. package/dist/esm/w/call/resource.js.map +1 -0
  761. package/dist/esm/w/call/reward.js +660 -847
  762. package/dist/esm/w/call/reward.js.map +1 -0
  763. package/dist/esm/w/call/service.js +1849 -2400
  764. package/dist/esm/w/call/service.js.map +1 -0
  765. package/dist/esm/w/call/treasury.js +815 -1125
  766. package/dist/esm/w/call/treasury.js.map +1 -0
  767. package/dist/esm/w/call/util.js +553 -576
  768. package/dist/esm/w/call/util.js.map +1 -0
  769. package/dist/esm/w/common.d.ts +1 -1
  770. package/dist/esm/w/common.js +579 -580
  771. package/dist/esm/w/common.js.map +1 -0
  772. package/dist/esm/w/exception.js +570 -573
  773. package/dist/esm/w/exception.js.map +1 -0
  774. package/dist/esm/w/index.js +4 -0
  775. package/dist/esm/w/index.js.map +1 -0
  776. package/dist/esm/w/local/account.js +652 -709
  777. package/dist/esm/w/local/account.js.map +1 -0
  778. package/dist/esm/w/local/cache.js +176 -147
  779. package/dist/esm/w/local/cache.js.map +1 -0
  780. package/dist/esm/w/local/config.js +46 -60
  781. package/dist/esm/w/local/config.js.map +1 -0
  782. package/dist/esm/w/local/index.js +196 -273
  783. package/dist/esm/w/local/index.js.map +1 -0
  784. package/dist/esm/w/local/local.d.ts +2 -2
  785. package/dist/esm/w/local/local.js +631 -626
  786. package/dist/esm/w/local/local.js.map +1 -0
  787. package/dist/esm/w/local/storage.js +168 -136
  788. package/dist/esm/w/local/storage.js.map +1 -0
  789. package/dist/esm/w/local/token.js +149 -151
  790. package/dist/esm/w/local/token.js.map +1 -0
  791. package/dist/esm/w/local/util.js +45 -22
  792. package/dist/esm/w/local/util.js.map +1 -0
  793. package/dist/esm/w/local/wip.js +1038 -781
  794. package/dist/esm/w/local/wip.js.map +1 -0
  795. package/dist/esm/w/messenger/crypto.js +491 -387
  796. package/dist/esm/w/messenger/crypto.js.map +1 -0
  797. package/dist/esm/w/messenger/index.js +27 -24
  798. package/dist/esm/w/messenger/index.js.map +1 -0
  799. package/dist/esm/w/messenger/messenger-api.js +1111 -1017
  800. package/dist/esm/w/messenger/messenger-api.js.map +1 -0
  801. package/dist/esm/w/messenger/messenger-manager.js +944 -1052
  802. package/dist/esm/w/messenger/messenger-manager.js.map +1 -0
  803. package/dist/esm/w/messenger/messenger.d.ts +1 -1
  804. package/dist/esm/w/messenger/messenger.js +1258 -1421
  805. package/dist/esm/w/messenger/messenger.js.map +1 -0
  806. package/dist/esm/w/messenger/server.js +388 -499
  807. package/dist/esm/w/messenger/server.js.map +1 -0
  808. package/dist/esm/w/messenger/session.js +394 -399
  809. package/dist/esm/w/messenger/session.js.map +1 -0
  810. package/dist/esm/w/messenger/storage.js +840 -751
  811. package/dist/esm/w/messenger/storage.js.map +1 -0
  812. package/dist/esm/w/messenger/types.d.ts +2 -2
  813. package/dist/esm/w/messenger/types.js +80 -85
  814. package/dist/esm/w/messenger/types.js.map +1 -0
  815. package/dist/esm/w/messenger/utils.js +28 -16
  816. package/dist/esm/w/messenger/utils.js.map +1 -0
  817. package/dist/esm/w/query/bult-in.js +95 -100
  818. package/dist/esm/w/query/bult-in.js.map +1 -0
  819. package/dist/esm/w/query/event.js +128 -125
  820. package/dist/esm/w/query/event.js.map +1 -0
  821. package/dist/esm/w/query/index.js +3 -0
  822. package/dist/esm/w/query/index.js.map +1 -0
  823. package/dist/esm/w/query/object.js +1560 -1574
  824. package/dist/esm/w/query/object.js.map +1 -0
  825. package/dist/esm/w/query/received.js +57 -63
  826. package/dist/esm/w/query/received.js.map +1 -0
  827. package/dist/esm/w/query/util.js +48 -56
  828. package/dist/esm/w/query/util.js.map +1 -0
  829. package/dist/esm/w/util.js +578 -673
  830. package/dist/esm/w/util.js.map +1 -0
  831. package/package.json +14 -9
  832. package/dist/cjs/graphql/client.js +0 -98
  833. package/dist/cjs/graphql/core.js +0 -506
  834. package/dist/cjs/graphql/generated/2024.1/tada-env.js +0 -13141
  835. package/dist/cjs/graphql/generated/2024.1/tsconfig.tada.js +0 -11
  836. package/dist/cjs/graphql/generated/2024.4/tada-env.js +0 -13287
  837. package/dist/cjs/graphql/generated/2024.4/tsconfig.tada.js +0 -11
  838. package/dist/cjs/graphql/generated/latest/tada-env.js +0 -12925
  839. package/dist/cjs/graphql/generated/latest/tsconfig.tada.js +0 -11
  840. package/dist/cjs/graphql/generated/queries.js +0 -807
  841. package/dist/cjs/graphql/index.js +0 -25
  842. package/dist/cjs/graphql/schemas/2024.1/index.js +0 -28
  843. package/dist/cjs/graphql/schemas/2024.4/index.js +0 -28
  844. package/dist/cjs/graphql/schemas/latest/index.js +0 -28
  845. package/dist/cjs/graphql/types.js +0 -16
  846. package/dist/cjs/package.json +0 -5
  847. package/dist/cjs/w/local/.eslintrc.js +0 -15
  848. package/dist/cjs/w/messenger/.eslintrc.js +0 -15
  849. package/dist/cjs/zklogin/address.js +0 -93
  850. package/dist/cjs/zklogin/bcs.js +0 -41
  851. package/dist/cjs/zklogin/index.js +0 -45
  852. package/dist/cjs/zklogin/jwt-decode.js +0 -88
  853. package/dist/cjs/zklogin/jwt-utils.js +0 -128
  854. package/dist/cjs/zklogin/nonce.js +0 -60
  855. package/dist/cjs/zklogin/poseidon.js +0 -64
  856. package/dist/cjs/zklogin/publickey.js +0 -281
  857. package/dist/cjs/zklogin/signature.js +0 -57
  858. package/dist/cjs/zklogin/utils.js +0 -98
  859. package/dist/esm/graphql/client.js +0 -79
  860. package/dist/esm/graphql/core.js +0 -505
  861. package/dist/esm/graphql/generated/2024.1/tada-env.js +0 -13121
  862. package/dist/esm/graphql/generated/2024.1/tsconfig.tada.js +0 -16
  863. package/dist/esm/graphql/generated/2024.4/tada-env.js +0 -13267
  864. package/dist/esm/graphql/generated/2024.4/tsconfig.tada.js +0 -16
  865. package/dist/esm/graphql/generated/latest/tada-env.js +0 -12905
  866. package/dist/esm/graphql/generated/latest/tsconfig.tada.js +0 -16
  867. package/dist/esm/graphql/generated/queries.js +0 -788
  868. package/dist/esm/graphql/index.js +0 -8
  869. package/dist/esm/graphql/schemas/2024.1/index.js +0 -8
  870. package/dist/esm/graphql/schemas/2024.4/index.js +0 -8
  871. package/dist/esm/graphql/schemas/latest/index.js +0 -8
  872. package/dist/esm/graphql/types.js +0 -0
  873. package/dist/esm/package.json +0 -5
  874. package/dist/esm/w/local/.eslintrc.js +0 -23
  875. package/dist/esm/w/messenger/.eslintrc.js +0 -23
  876. package/dist/esm/zklogin/address.js +0 -78
  877. package/dist/esm/zklogin/bcs.js +0 -21
  878. package/dist/esm/zklogin/index.js +0 -38
  879. package/dist/esm/zklogin/jwt-decode.js +0 -68
  880. package/dist/esm/zklogin/jwt-utils.js +0 -108
  881. package/dist/esm/zklogin/nonce.js +0 -40
  882. package/dist/esm/zklogin/poseidon.js +0 -61
  883. package/dist/esm/zklogin/publickey.js +0 -265
  884. package/dist/esm/zklogin/signature.js +0 -37
  885. package/dist/esm/zklogin/utils.js +0 -78
  886. package/dist/tsconfig.esm.tsbuildinfo +0 -1
  887. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,428 +1,532 @@
1
+ // Copyright (c) Wowok.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * Messenger 加密工具模块
5
+ *
6
+ * 基于 Signal Protocol (双棘轮算法) 的端到端加密实现
7
+ * 使用 XEd25519 进行密钥转换,兼容 Ed25519 签名
8
+ */
1
9
  import { ed25519, x25519 } from "@noble/curves/ed25519";
2
10
  import { sha256 } from "@noble/hashes/sha256";
3
11
  import { randomBytes } from "@noble/hashes/utils";
12
+ // ========== 签名与验证(内部函数) ==========
13
+ /**
14
+ * 使用 Ed25519 公钥验证签名(内部使用)
15
+ */
4
16
  function verifyEd25519(publicKey, message, signature) {
5
- try {
6
- return ed25519.verify(signature, message, publicKey);
7
- } catch {
8
- return false;
9
- }
17
+ try {
18
+ return ed25519.verify(signature, message, publicKey);
19
+ }
20
+ catch {
21
+ return false;
22
+ }
10
23
  }
11
- function recoverXed25519FromX25519PrivateKey(x25519PrivateKey) {
12
- const x25519PublicKey = x25519.getPublicKey(x25519PrivateKey);
13
- const ed25519PrivateKey = x25519PrivateKey;
14
- const ed25519PublicKey = ed25519.getPublicKey(ed25519PrivateKey);
15
- return {
16
- x25519PublicKey,
17
- x25519PrivateKey,
18
- ed25519PrivateKey,
19
- ed25519PublicKey
20
- };
24
+ // ========== 密钥生成 ==========
25
+ /**
26
+ * X25519 私钥恢复 XEd25519 密钥对
27
+ */
28
+ export function recoverXed25519FromX25519PrivateKey(x25519PrivateKey) {
29
+ const x25519PublicKey = x25519.getPublicKey(x25519PrivateKey);
30
+ const ed25519PrivateKey = x25519PrivateKey;
31
+ const ed25519PublicKey = ed25519.getPublicKey(ed25519PrivateKey);
32
+ return {
33
+ x25519PublicKey,
34
+ x25519PrivateKey,
35
+ ed25519PrivateKey,
36
+ ed25519PublicKey,
37
+ };
21
38
  }
22
- function hashSha256(data) {
23
- return sha256(data);
39
+ // ========== 哈希函数 ==========
40
+ /**
41
+ * 计算 SHA-256 哈希
42
+ */
43
+ export function hashSha256(data) {
44
+ return sha256(data);
24
45
  }
25
- function hashMessage(data) {
26
- const hash = sha256(new TextEncoder().encode(data));
27
- return bytesToHex(hash);
46
+ /**
47
+ * 计算消息哈希(用于 Merkle Tree 叶子节点)
48
+ */
49
+ export function hashMessage(data) {
50
+ const hash = sha256(new TextEncoder().encode(data));
51
+ return bytesToHex(hash);
28
52
  }
29
- function hashPlaintext(plaintext, clientTimestamp, guardAddress, passportAddress, lastReceivedLeafIndex) {
30
- let data = plaintext + clientTimestamp.toString();
31
- if (lastReceivedLeafIndex !== void 0 && lastReceivedLeafIndex >= 0) {
32
- data += lastReceivedLeafIndex.toString();
33
- }
34
- if (guardAddress) {
35
- data += guardAddress;
36
- }
37
- if (passportAddress) {
38
- data += passportAddress;
39
- }
40
- const hash = sha256(new TextEncoder().encode(data));
41
- return "0x" + bytesToHex(hash);
53
+ /**
54
+ * 计算明文哈希(用于 Merkle Tree 证明)
55
+ * plaintext_hash = SHA256(plaintext + client_timestamp + guardAddress + passportAddress)
56
+ */
57
+ export function hashPlaintext(plaintext, clientTimestamp, guardAddress, passportAddress, lastReceivedLeafIndex) {
58
+ let data = plaintext + clientTimestamp.toString();
59
+ // 【新增】包含 lastReceivedLeafIndex 在哈希计算中
60
+ if (lastReceivedLeafIndex !== undefined && lastReceivedLeafIndex >= 0) {
61
+ data += lastReceivedLeafIndex.toString();
62
+ }
63
+ if (guardAddress) {
64
+ data += guardAddress;
65
+ }
66
+ if (passportAddress) {
67
+ data += passportAddress;
68
+ }
69
+ const hash = sha256(new TextEncoder().encode(data));
70
+ return "0x" + bytesToHex(hash);
42
71
  }
43
- function generateNonce() {
44
- return bytesToHex(randomBytes(16));
72
+ // ========== 工具函数 ==========
73
+ /**
74
+ * 生成随机 nonce
75
+ */
76
+ export function generateNonce() {
77
+ return bytesToHex(randomBytes(16));
45
78
  }
46
- function bytesToBase64(bytes) {
47
- return Buffer.from(bytes).toString("base64");
79
+ /**
80
+ * Uint8Array 转 Base64
81
+ */
82
+ export function bytesToBase64(bytes) {
83
+ return Buffer.from(bytes).toString("base64");
48
84
  }
49
- function base64ToBytes(base64) {
50
- return new Uint8Array(Buffer.from(base64, "base64"));
85
+ /**
86
+ * Base64 转 Uint8Array
87
+ */
88
+ export function base64ToBytes(base64) {
89
+ return new Uint8Array(Buffer.from(base64, "base64"));
51
90
  }
52
- function bytesToHex(bytes) {
53
- return Buffer.from(bytes).toString("hex");
91
+ /**
92
+ * Uint8Array 转 Hex
93
+ */
94
+ export function bytesToHex(bytes) {
95
+ return Buffer.from(bytes).toString("hex");
54
96
  }
55
- function hexToBytes(hex) {
56
- return new Uint8Array(Buffer.from(hex, "hex"));
97
+ /**
98
+ * Hex 转 Uint8Array
99
+ */
100
+ export function hexToBytes(hex) {
101
+ return new Uint8Array(Buffer.from(hex, "hex"));
57
102
  }
58
- function arrayBufferToUint8Array(buf) {
59
- return new Uint8Array(buf);
103
+ /**
104
+ * ArrayBuffer 转 Uint8Array
105
+ */
106
+ export function arrayBufferToUint8Array(buf) {
107
+ return new Uint8Array(buf);
60
108
  }
61
- function uint8ArrayToArrayBuffer(arr) {
62
- const result = arr.buffer.slice(
63
- arr.byteOffset,
64
- arr.byteOffset + arr.byteLength
65
- );
66
- return result;
109
+ /**
110
+ * Uint8Array 转 ArrayBuffer
111
+ */
112
+ export function uint8ArrayToArrayBuffer(arr) {
113
+ const result = arr.buffer.slice(arr.byteOffset, arr.byteOffset + arr.byteLength);
114
+ return result;
67
115
  }
68
- function bufferEqual(a, b) {
69
- if (a.byteLength !== b.byteLength) return false;
70
- const va = new Uint8Array(a);
71
- const vb = new Uint8Array(b);
72
- for (let i = 0; i < va.length; i++) {
73
- if (va[i] !== vb[i]) return false;
74
- }
75
- return true;
116
+ /**
117
+ * 比较两个 ArrayBuffer 是否相等
118
+ */
119
+ export function bufferEqual(a, b) {
120
+ if (a.byteLength !== b.byteLength)
121
+ return false;
122
+ const va = new Uint8Array(a);
123
+ const vb = new Uint8Array(b);
124
+ for (let i = 0; i < va.length; i++) {
125
+ if (va[i] !== vb[i])
126
+ return false;
127
+ }
128
+ return true;
76
129
  }
77
- function calculateMerkleLeafHash(plaintextHash, serverTimestamp) {
78
- const plaintextHashBytes = new TextEncoder().encode(plaintextHash);
79
- const timestampBuffer = new ArrayBuffer(8);
80
- const timestampView = new DataView(timestampBuffer);
81
- timestampView.setBigUint64(0, BigInt(serverTimestamp), true);
82
- const timestampBytes = new Uint8Array(timestampBuffer);
83
- const combined = new Uint8Array(
84
- plaintextHashBytes.length + timestampBytes.length
85
- );
86
- combined.set(plaintextHashBytes);
87
- combined.set(timestampBytes, plaintextHashBytes.length);
88
- const hash = sha256(combined);
89
- return "0x" + bytesToHex(hash);
130
+ /**
131
+ * 计算 Merkle 叶子哈希(与服务器端 calculate_message_hash 一致)
132
+ * leaf_hash = SHA256(plaintext_hash.as_bytes() + server_timestamp.to_le_bytes())
133
+ */
134
+ export function calculateMerkleLeafHash(plaintextHash, serverTimestamp) {
135
+ const plaintextHashBytes = new TextEncoder().encode(plaintextHash);
136
+ const timestampBuffer = new ArrayBuffer(8);
137
+ const timestampView = new DataView(timestampBuffer);
138
+ timestampView.setBigUint64(0, BigInt(serverTimestamp), true);
139
+ const timestampBytes = new Uint8Array(timestampBuffer);
140
+ const combined = new Uint8Array(plaintextHashBytes.length + timestampBytes.length);
141
+ combined.set(plaintextHashBytes);
142
+ combined.set(timestampBytes, plaintextHashBytes.length);
143
+ const hash = sha256(combined);
144
+ return "0x" + bytesToHex(hash);
90
145
  }
91
- function merkleHash(left, right) {
92
- const leftBytes = hexToBytes(left.replace(/^0x/, ""));
93
- const rightBytes = hexToBytes(right.replace(/^0x/, ""));
94
- const combined = new Uint8Array(leftBytes.length + rightBytes.length);
95
- combined.set(leftBytes);
96
- combined.set(rightBytes, leftBytes.length);
97
- return "0x" + bytesToHex(sha256(combined));
146
+ // ========== Merkle Tree 工具 ==========
147
+ /**
148
+ * 计算两个哈希的父节点哈希
149
+ */
150
+ export function merkleHash(left, right) {
151
+ const leftBytes = hexToBytes(left.replace(/^0x/, ""));
152
+ const rightBytes = hexToBytes(right.replace(/^0x/, ""));
153
+ const combined = new Uint8Array(leftBytes.length + rightBytes.length);
154
+ combined.set(leftBytes);
155
+ combined.set(rightBytes, leftBytes.length);
156
+ return "0x" + bytesToHex(sha256(combined));
98
157
  }
99
- function computeNewRoot(prevRoot, leafHash, leafIndex) {
100
- const prevRootBytes = new TextEncoder().encode(prevRoot);
101
- const leafHashBytes = new TextEncoder().encode(leafHash);
102
- const leafIndexBuffer = new ArrayBuffer(4);
103
- const leafIndexView = new DataView(leafIndexBuffer);
104
- leafIndexView.setUint32(0, leafIndex, true);
105
- const leafIndexBytes = new Uint8Array(leafIndexBuffer);
106
- const combined = new Uint8Array(
107
- prevRootBytes.length + leafHashBytes.length + leafIndexBytes.length
108
- );
109
- combined.set(prevRootBytes);
110
- combined.set(leafHashBytes, prevRootBytes.length);
111
- combined.set(leafIndexBytes, prevRootBytes.length + leafHashBytes.length);
112
- return "0x" + bytesToHex(sha256(combined));
158
+ /**
159
+ * 计算新的 Merkle Root(与服务器保持一致)
160
+ *
161
+ * 服务器算法:
162
+ * new_root = SHA256(prev_root + leaf_hash + leaf_index_le_bytes)
163
+ *
164
+ * @param prevRoot 前一个 Root(hex 格式,带或不带 0x 前缀)
165
+ * @param leafHash 叶子节点哈希(hex 格式,带或不带 0x 前缀)
166
+ * @param leafIndex 叶子节点索引
167
+ * @returns 新的 Root(带 0x 前缀的 hex)
168
+ */
169
+ export function computeNewRoot(prevRoot, leafHash, leafIndex) {
170
+ // 与服务器端一致:直接对 hex 字符串编码(而不是解码 hex)
171
+ const prevRootBytes = new TextEncoder().encode(prevRoot);
172
+ const leafHashBytes = new TextEncoder().encode(leafHash);
173
+ // leaf_index 使用小端字节序 (u32)
174
+ const leafIndexBuffer = new ArrayBuffer(4);
175
+ const leafIndexView = new DataView(leafIndexBuffer);
176
+ leafIndexView.setUint32(0, leafIndex, true); // true = little endian
177
+ const leafIndexBytes = new Uint8Array(leafIndexBuffer);
178
+ // 组合:prev_root + leaf_hash + leaf_index
179
+ const combined = new Uint8Array(prevRootBytes.length + leafHashBytes.length + leafIndexBytes.length);
180
+ combined.set(prevRootBytes);
181
+ combined.set(leafHashBytes, prevRootBytes.length);
182
+ combined.set(leafIndexBytes, prevRootBytes.length + leafHashBytes.length);
183
+ return "0x" + bytesToHex(sha256(combined));
113
184
  }
114
- function verifyMerkleProof(leafHash, proof) {
115
- let current = leafHash;
116
- for (let i = 0; i < proof.siblings.length; i++) {
117
- if (proof.indices[i] === 0) {
118
- current = merkleHash(current, proof.siblings[i]);
119
- } else {
120
- current = merkleHash(proof.siblings[i], current);
185
+ /**
186
+ * 验证 Merkle Proof
187
+ */
188
+ export function verifyMerkleProof(leafHash, proof) {
189
+ let current = leafHash;
190
+ for (let i = 0; i < proof.siblings.length; i++) {
191
+ if (proof.indices[i] === 0) {
192
+ // 当前是左子节点
193
+ current = merkleHash(current, proof.siblings[i]);
194
+ }
195
+ else {
196
+ // 当前是右子节点
197
+ current = merkleHash(proof.siblings[i], current);
198
+ }
121
199
  }
122
- }
123
- return current === proof.root;
200
+ return current === proof.root;
124
201
  }
125
- function verifyMerkleChain(messages, initialRoot) {
126
- if (messages.length === 0) {
127
- return { valid: true };
128
- }
129
- const sortedMessages = [...messages].sort(
130
- (a, b) => a.leafIndex - b.leafIndex
131
- );
132
- const zeroRoot = initialRoot || "0x" + "0".repeat(64);
133
- let expectedPrevRoot = zeroRoot;
134
- for (const msg of sortedMessages) {
135
- if (msg.prevRoot.toLowerCase() !== expectedPrevRoot.toLowerCase()) {
136
- return {
137
- valid: false,
138
- error: `Root chain broken at leafIndex ${msg.leafIndex}: expected prevRoot ${expectedPrevRoot}, got ${msg.prevRoot}`,
139
- expectedRoot: expectedPrevRoot,
140
- actualRoot: msg.prevRoot
141
- };
202
+ /**
203
+ * 验证 Merkle Root 链的完整性和时序性
204
+ *
205
+ * 客户端使用此函数独立校验消息链的完整性,通过相同的算法核对 Merkle Tree root 的前后关系
206
+ *
207
+ * @param messages 按顺序排列的消息列表(按 leafIndex 排序)
208
+ * @param initialRoot 初始 Root(可选,默认为全0)
209
+ * @returns 验证结果
210
+ *
211
+ * @example
212
+ * ```typescript
213
+ * const messages = [
214
+ * { leafIndex: 0, prevRoot: "0x00...", newRoot: "0xabc...", plaintextHash: "0x123..." },
215
+ * { leafIndex: 1, prevRoot: "0xabc...", newRoot: "0xdef...", plaintextHash: "0x456..." },
216
+ * ];
217
+ * const result = verifyMerkleChain(messages);
218
+ * if (result.valid) {
219
+ * console.log("Merkle 链验证通过");
220
+ * } else {
221
+ * console.error("验证失败:", result.error);
222
+ * }
223
+ * ```
224
+ */
225
+ export function verifyMerkleChain(messages, initialRoot) {
226
+ if (messages.length === 0) {
227
+ return { valid: true };
142
228
  }
143
- const result = verifySingleMerkleRoot(
144
- msg.prevRoot,
145
- msg.newRoot,
146
- msg.plaintextHash,
147
- msg.serverTimestamp,
148
- msg.leafIndex
149
- );
150
- if (!result.valid) {
151
- return {
152
- valid: false,
153
- error: `${result.error} at leafIndex ${msg.leafIndex}`,
154
- expectedRoot: result.expectedRoot,
155
- actualRoot: result.actualRoot
156
- };
229
+ // leafIndex 排序
230
+ const sortedMessages = [...messages].sort((a, b) => a.leafIndex - b.leafIndex);
231
+ // 初始 Root
232
+ const zeroRoot = initialRoot || "0x" + "0".repeat(64);
233
+ let expectedPrevRoot = zeroRoot;
234
+ for (const msg of sortedMessages) {
235
+ // 1. 验证 prevRoot 是否匹配预期(链式连续性检查)
236
+ if (msg.prevRoot.toLowerCase() !== expectedPrevRoot.toLowerCase()) {
237
+ return {
238
+ valid: false,
239
+ error: `Root chain broken at leafIndex ${msg.leafIndex}: expected prevRoot ${expectedPrevRoot}, got ${msg.prevRoot}`,
240
+ expectedRoot: expectedPrevRoot,
241
+ actualRoot: msg.prevRoot,
242
+ };
243
+ }
244
+ // 2. 复用 verifySingleMerkleRoot 验证单个消息的 Root 计算
245
+ const result = verifySingleMerkleRoot(msg.prevRoot, msg.newRoot, msg.plaintextHash, msg.serverTimestamp, msg.leafIndex);
246
+ if (!result.valid) {
247
+ // 添加 leafIndex 上下文到错误信息
248
+ return {
249
+ valid: false,
250
+ error: `${result.error} at leafIndex ${msg.leafIndex}`,
251
+ expectedRoot: result.expectedRoot,
252
+ actualRoot: result.actualRoot,
253
+ };
254
+ }
255
+ // 3. 更新预期的 prevRoot 为当前的 newRoot
256
+ expectedPrevRoot = msg.newRoot;
157
257
  }
158
- expectedPrevRoot = msg.newRoot;
159
- }
160
- return { valid: true };
258
+ return { valid: true };
161
259
  }
162
- function verifySingleMerkleRoot(prevRoot, newRoot, plaintextHash, serverTimestamp, leafIndex) {
163
- const leafHash = calculateMerkleLeafHash(plaintextHash, serverTimestamp);
164
- const computedRoot = computeNewRoot(prevRoot, leafHash, leafIndex);
165
- if (computedRoot.toLowerCase() !== newRoot.toLowerCase()) {
166
- return {
167
- valid: false,
168
- error: `Root computation mismatch: expected ${computedRoot}, got ${newRoot}`,
169
- expectedRoot: computedRoot,
170
- actualRoot: newRoot
171
- };
172
- }
173
- return { valid: true };
260
+ /**
261
+ * 验证单个消息的 Merkle Root 计算
262
+ *
263
+ * 用于验证服务器返回的 Merkle 数据是否正确
264
+ *
265
+ * @param prevRoot 前一个 Root
266
+ * @param newRoot 新的 Root(服务器返回)
267
+ * @param plaintextHash 明文哈希
268
+ * @param serverTimestamp 服务器时间戳
269
+ * @param leafIndex 叶子索引
270
+ * @returns 验证结果
271
+ */
272
+ export function verifySingleMerkleRoot(prevRoot, newRoot, plaintextHash, serverTimestamp, leafIndex) {
273
+ // 计算正确的 leafHash
274
+ const leafHash = calculateMerkleLeafHash(plaintextHash, serverTimestamp);
275
+ const computedRoot = computeNewRoot(prevRoot, leafHash, leafIndex);
276
+ if (computedRoot.toLowerCase() !== newRoot.toLowerCase()) {
277
+ return {
278
+ valid: false,
279
+ error: `Root computation mismatch: expected ${computedRoot}, got ${newRoot}`,
280
+ expectedRoot: computedRoot,
281
+ actualRoot: newRoot,
282
+ };
283
+ }
284
+ return { valid: true };
174
285
  }
175
- function verifyMessage(params) {
176
- const {
177
- messageId,
178
- plaintext,
179
- plaintextHash,
180
- createdAt,
181
- guardAddress,
182
- passportAddress,
183
- lastReceivedLeafIndex,
184
- serverSignature,
185
- serverPublicKey,
186
- merkleMetadata
187
- } = params;
188
- const computedPlaintextHash = hashPlaintext(
189
- plaintext,
190
- createdAt,
191
- guardAddress,
192
- passportAddress,
193
- lastReceivedLeafIndex
194
- );
195
- const normalizeHash = (hash) => {
196
- return hash.toLowerCase().replace(/^0x/, "");
197
- };
198
- if (normalizeHash(computedPlaintextHash) !== normalizeHash(plaintextHash)) {
199
- return {
200
- valid: false,
201
- error: `Plaintext hash mismatch for message ${messageId}: expected ${plaintextHash}, got ${computedPlaintextHash}`,
202
- failedCheck: "plaintext"
286
+ /**
287
+ * 通用消息验证函数
288
+ *
289
+ * 基于 Message 结构中保存的数据验证消息的完整性和 Merkle 证明
290
+ *
291
+ * @param params 验证参数
292
+ * @returns 验证结果
293
+ *
294
+ * @example
295
+ * ```typescript
296
+ * const result = verifyMessage({
297
+ * messageId: "msg-123",
298
+ * plaintext: "Hello",
299
+ * plaintextHash: "0xabc...",
300
+ * createdAt: 1234567890,
301
+ * guardAddress: "0x...",
302
+ * passportAddress: "0x...",
303
+ * merkleMetadata: { ... }
304
+ * });
305
+ *
306
+ * if (!result.valid) {
307
+ * throw new Error(result.error);
308
+ * }
309
+ * ```
310
+ */
311
+ export function verifyMessage(params) {
312
+ const { messageId, plaintext, plaintextHash, createdAt, guardAddress, passportAddress, lastReceivedLeafIndex, serverSignature, serverPublicKey, merkleMetadata, } = params;
313
+ // 1. 验证 plaintextHash(本地验证)
314
+ // 【更新】包含 lastReceivedLeafIndex 在哈希计算中
315
+ const computedPlaintextHash = hashPlaintext(plaintext, createdAt, guardAddress, passportAddress, lastReceivedLeafIndex);
316
+ // 标准化哈希值(移除 0x 前缀,转小写)
317
+ const normalizeHash = (hash) => {
318
+ return hash.toLowerCase().replace(/^0x/, "");
203
319
  };
204
- }
205
- if (merkleMetadata) {
206
- if (merkleMetadata.proofSiblings && merkleMetadata.proofIndices) {
207
- const bodyB64 = bytesToBase64(new TextEncoder().encode(plaintext));
208
- const leafHash = hashMessage(bodyB64);
209
- const proofValid = verifyMerkleProof(leafHash, {
210
- root: merkleMetadata.newRoot,
211
- siblings: merkleMetadata.proofSiblings,
212
- indices: merkleMetadata.proofIndices
213
- });
214
- if (!proofValid) {
320
+ if (normalizeHash(computedPlaintextHash) !== normalizeHash(plaintextHash)) {
215
321
  return {
216
- valid: false,
217
- error: `Merkle proof verification failed for message ${messageId}`,
218
- failedCheck: "merkle"
322
+ valid: false,
323
+ error: `Plaintext hash mismatch for message ${messageId}: expected ${plaintextHash}, got ${computedPlaintextHash}`,
324
+ failedCheck: "plaintext",
219
325
  };
220
- }
221
- }
222
- const serverTimestamp = merkleMetadata.serverTimestamp;
223
- if (!serverTimestamp) {
224
- return {
225
- valid: false,
226
- error: `Missing server timestamp for Merkle root verification in message ${messageId}`,
227
- failedCheck: "merkle"
228
- };
229
- }
230
- if (!merkleMetadata.prevRoot) {
231
- return {
232
- valid: false,
233
- error: `Missing prevRoot for Merkle root verification in message ${messageId}`,
234
- failedCheck: "merkle"
235
- };
236
326
  }
237
- const rootValid = verifySingleMerkleRoot(
238
- merkleMetadata.prevRoot,
239
- merkleMetadata.newRoot,
240
- plaintextHash,
241
- serverTimestamp,
242
- merkleMetadata.leafIndex
243
- );
244
- if (!rootValid.valid) {
245
- return {
246
- valid: false,
247
- error: `Merkle root verification failed for message ${messageId}: ${rootValid.error}`,
248
- failedCheck: "merkle"
249
- };
327
+ // 2. 如果提供了 Merkle 元数据,验证 Merkle
328
+ if (merkleMetadata) {
329
+ // 2.1 验证 Merkle Proof(消息是否在树中)
330
+ // 注意:服务器拉取消息时不返回 proofSiblings 和 proofIndices
331
+ // 只有在发送消息时返回的 merkleMetadata 才包含这些字段
332
+ if (merkleMetadata.proofSiblings && merkleMetadata.proofIndices) {
333
+ const bodyB64 = bytesToBase64(new TextEncoder().encode(plaintext));
334
+ const leafHash = hashMessage(bodyB64);
335
+ const proofValid = verifyMerkleProof(leafHash, {
336
+ root: merkleMetadata.newRoot,
337
+ siblings: merkleMetadata.proofSiblings,
338
+ indices: merkleMetadata.proofIndices,
339
+ });
340
+ if (!proofValid) {
341
+ return {
342
+ valid: false,
343
+ error: `Merkle proof verification failed for message ${messageId}`,
344
+ failedCheck: "merkle",
345
+ };
346
+ }
347
+ }
348
+ // 2.2 验证 Root 计算是否正确
349
+ // 必须使用服务器时间戳进行验证
350
+ const serverTimestamp = merkleMetadata.serverTimestamp;
351
+ if (!serverTimestamp) {
352
+ return {
353
+ valid: false,
354
+ error: `Missing server timestamp for Merkle root verification in message ${messageId}`,
355
+ failedCheck: "merkle",
356
+ };
357
+ }
358
+ if (!merkleMetadata.prevRoot) {
359
+ return {
360
+ valid: false,
361
+ error: `Missing prevRoot for Merkle root verification in message ${messageId}`,
362
+ failedCheck: "merkle",
363
+ };
364
+ }
365
+ const rootValid = verifySingleMerkleRoot(merkleMetadata.prevRoot, merkleMetadata.newRoot, plaintextHash, serverTimestamp, merkleMetadata.leafIndex);
366
+ if (!rootValid.valid) {
367
+ return {
368
+ valid: false,
369
+ error: `Merkle root verification failed for message ${messageId}: ${rootValid.error}`,
370
+ failedCheck: "merkle",
371
+ };
372
+ }
250
373
  }
251
- }
252
- if (serverSignature && serverPublicKey) {
253
- const timestamp = merkleMetadata?.serverTimestamp;
254
- if (!timestamp) {
255
- return {
256
- valid: false,
257
- error: `Missing server timestamp for signature verification in message ${messageId}`,
258
- failedCheck: "merkle"
259
- };
374
+ // 3. 验证服务器签名(如果提供了签名和公钥)
375
+ if (serverSignature && serverPublicKey) {
376
+ // 必须使用服务器时间戳进行验证,不能使用客户端时间
377
+ const timestamp = merkleMetadata?.serverTimestamp;
378
+ if (!timestamp) {
379
+ return {
380
+ valid: false,
381
+ error: `Missing server timestamp for signature verification in message ${messageId}`,
382
+ failedCheck: "merkle",
383
+ };
384
+ }
385
+ // 验证必需的字段
386
+ if (!merkleMetadata?.newRoot) {
387
+ return {
388
+ valid: false,
389
+ error: `Missing newRoot for signature verification in message ${messageId}`,
390
+ failedCheck: "merkle",
391
+ };
392
+ }
393
+ if (!merkleMetadata?.prevRoot) {
394
+ return {
395
+ valid: false,
396
+ error: `Missing prevRoot for signature verification in message ${messageId}`,
397
+ failedCheck: "merkle",
398
+ };
399
+ }
400
+ const signData = `${merkleMetadata.prevRoot}:${merkleMetadata.newRoot}:${timestamp}:${serverPublicKey}`;
401
+ const signatureValid = verifyEd25519Signature(serverPublicKey, signData, serverSignature);
402
+ if (!signatureValid) {
403
+ return {
404
+ valid: false,
405
+ error: `Server signature verification failed for message ${messageId}`,
406
+ failedCheck: "merkle",
407
+ };
408
+ }
260
409
  }
261
- if (!merkleMetadata?.newRoot) {
262
- return {
263
- valid: false,
264
- error: `Missing newRoot for signature verification in message ${messageId}`,
265
- failedCheck: "merkle"
266
- };
267
- }
268
- if (!merkleMetadata?.prevRoot) {
269
- return {
270
- valid: false,
271
- error: `Missing prevRoot for signature verification in message ${messageId}`,
272
- failedCheck: "merkle"
273
- };
410
+ return { valid: true };
411
+ }
412
+ /**
413
+ * 验证 Ed25519 签名(十六进制格式)
414
+ *
415
+ * @param publicKeyHex 公钥(十六进制字符串)
416
+ * @param message 消息内容
417
+ * @param signatureHex 签名(十六进制字符串)
418
+ * @returns 验证结果
419
+ */
420
+ export function verifyEd25519Signature(publicKeyHex, message, signatureHex) {
421
+ try {
422
+ const publicKey = hexToBytes(publicKeyHex.replace("0x", ""));
423
+ const signature = hexToBytes(signatureHex.replace("0x", ""));
424
+ const messageBytes = new TextEncoder().encode(message);
425
+ return verifyEd25519(publicKey, messageBytes, signature);
274
426
  }
275
- const signData = `${merkleMetadata.prevRoot}:${merkleMetadata.newRoot}:${timestamp}:${serverPublicKey}`;
276
- const signatureValid = verifyEd25519Signature(
277
- serverPublicKey,
278
- signData,
279
- serverSignature
280
- );
281
- if (!signatureValid) {
282
- return {
283
- valid: false,
284
- error: `Server signature verification failed for message ${messageId}`,
285
- failedCheck: "merkle"
286
- };
427
+ catch {
428
+ return false;
287
429
  }
288
- }
289
- return { valid: true };
290
430
  }
291
- function verifyEd25519Signature(publicKeyHex, message, signatureHex) {
292
- try {
293
- const publicKey = hexToBytes(publicKeyHex.replace("0x", ""));
294
- const signature = hexToBytes(signatureHex.replace("0x", ""));
295
- const messageBytes = new TextEncoder().encode(message);
296
- return verifyEd25519(publicKey, messageBytes, signature);
297
- } catch {
298
- return false;
299
- }
300
- }
301
- function verifyWtsMessages(messages) {
302
- if (messages.length === 0) {
303
- return { valid: true };
304
- }
305
- const sortedMessages = [...messages].sort(
306
- (a, b) => a.leafIndex - b.leafIndex
307
- );
308
- for (let i = 0; i < sortedMessages.length; i++) {
309
- const msg = sortedMessages[i];
310
- if (msg.plaintext != null) {
311
- const computedHash = hashPlaintext(
312
- msg.plaintext || "",
313
- msg.clientTimestamp,
314
- msg.guardAddress,
315
- msg.passportAddress,
316
- msg.lastReceivedLeafIndex
317
- );
318
- if (computedHash.toLowerCase() !== msg.plaintextHash.toLowerCase()) {
319
- return {
320
- valid: false,
321
- error: `Plaintext hash mismatch for message ${msg.id} at index ${i}`,
322
- failedMessageIndex: i,
323
- failedCheck: "plaintext"
324
- };
325
- }
431
+ /**
432
+ * 验证 WTS 文件中的消息
433
+ *
434
+ * @param messages WTS 消息列表(按 leafIndex 排序)
435
+ * @returns 验证结果
436
+ */
437
+ export function verifyWtsMessages(messages) {
438
+ if (messages.length === 0) {
439
+ return { valid: true };
326
440
  }
327
- if (msg.merkleProof) {
328
- const bodyB64 = bytesToBase64(
329
- new TextEncoder().encode(msg.plaintext || "")
330
- );
331
- const leafHash = hashMessage(bodyB64);
332
- const proofValid = verifyMerkleProof(leafHash, {
333
- root: msg.merkleRoot,
334
- siblings: msg.merkleProof.siblings,
335
- indices: msg.merkleProof.indices
336
- });
337
- if (!proofValid) {
338
- return {
339
- valid: false,
340
- error: `Merkle proof verification failed for message ${msg.id} at index ${i}`,
341
- failedMessageIndex: i,
342
- failedCheck: "merkle"
343
- };
344
- }
441
+ // leafIndex 排序
442
+ const sortedMessages = [...messages].sort((a, b) => a.leafIndex - b.leafIndex);
443
+ // 验证每条消息
444
+ for (let i = 0; i < sortedMessages.length; i++) {
445
+ const msg = sortedMessages[i];
446
+ // 1. 如果提供了明文,验证 plaintextHash
447
+ if (msg.plaintext != null) {
448
+ const computedHash = hashPlaintext(msg.plaintext || "", msg.clientTimestamp, msg.guardAddress, msg.passportAddress, msg.lastReceivedLeafIndex);
449
+ if (computedHash.toLowerCase() !== msg.plaintextHash.toLowerCase()) {
450
+ return {
451
+ valid: false,
452
+ error: `Plaintext hash mismatch for message ${msg.id} at index ${i}`,
453
+ failedMessageIndex: i,
454
+ failedCheck: "plaintext",
455
+ };
456
+ }
457
+ }
458
+ // 2. 如果提供了 Merkle Proof,验证 Merkle
459
+ if (msg.merkleProof) {
460
+ const bodyB64 = bytesToBase64(new TextEncoder().encode(msg.plaintext || ""));
461
+ const leafHash = hashMessage(bodyB64);
462
+ const proofValid = verifyMerkleProof(leafHash, {
463
+ root: msg.merkleRoot,
464
+ siblings: msg.merkleProof.siblings,
465
+ indices: msg.merkleProof.indices,
466
+ });
467
+ if (!proofValid) {
468
+ return {
469
+ valid: false,
470
+ error: `Merkle proof verification failed for message ${msg.id} at index ${i}`,
471
+ failedMessageIndex: i,
472
+ failedCheck: "merkle",
473
+ };
474
+ }
475
+ }
476
+ // 3. 验证服务器签名(如果提供了签名和公钥)
477
+ if (msg.serverSignature && msg.serverPublicKey) {
478
+ // 验证必需的字段
479
+ if (!msg.merkleRoot) {
480
+ return {
481
+ valid: false,
482
+ error: `Missing merkleRoot for message ${msg.id} at index ${i}`,
483
+ failedMessageIndex: i,
484
+ failedCheck: "merkle",
485
+ };
486
+ }
487
+ if (!msg.timestamp) {
488
+ return {
489
+ valid: false,
490
+ error: `Missing timestamp for message ${msg.id} at index ${i}`,
491
+ failedMessageIndex: i,
492
+ failedCheck: "merkle",
493
+ };
494
+ }
495
+ if (!msg.prevRoot) {
496
+ return {
497
+ valid: false,
498
+ error: `Missing prevRoot for message ${msg.id} at index ${i}`,
499
+ failedMessageIndex: i,
500
+ failedCheck: "merkle",
501
+ };
502
+ }
503
+ const signData = `${msg.prevRoot}:${msg.merkleRoot}:${msg.timestamp}:${msg.serverPublicKey}`;
504
+ const signatureValid = verifyEd25519Signature(msg.serverPublicKey, signData, msg.serverSignature);
505
+ if (!signatureValid) {
506
+ return {
507
+ valid: false,
508
+ error: `Server signature verification failed for message ${msg.id} at index ${i}`,
509
+ failedMessageIndex: i,
510
+ failedCheck: "merkle",
511
+ };
512
+ }
513
+ }
345
514
  }
346
- if (msg.serverSignature && msg.serverPublicKey) {
347
- if (!msg.merkleRoot) {
515
+ // 4. 验证 Merkle 链的连续性
516
+ const chainResult = verifyMerkleChain(sortedMessages.map((msg) => ({
517
+ leafIndex: msg.leafIndex,
518
+ prevRoot: msg.merkleRoot, // WTS 中只保存了最终的 merkleRoot
519
+ newRoot: msg.merkleRoot,
520
+ plaintextHash: msg.plaintextHash,
521
+ serverTimestamp: msg.timestamp,
522
+ })));
523
+ if (!chainResult.valid) {
348
524
  return {
349
- valid: false,
350
- error: `Missing merkleRoot for message ${msg.id} at index ${i}`,
351
- failedMessageIndex: i,
352
- failedCheck: "merkle"
525
+ valid: false,
526
+ error: chainResult.error,
527
+ failedCheck: "chain",
353
528
  };
354
- }
355
- if (!msg.timestamp) {
356
- return {
357
- valid: false,
358
- error: `Missing timestamp for message ${msg.id} at index ${i}`,
359
- failedMessageIndex: i,
360
- failedCheck: "merkle"
361
- };
362
- }
363
- if (!msg.prevRoot) {
364
- return {
365
- valid: false,
366
- error: `Missing prevRoot for message ${msg.id} at index ${i}`,
367
- failedMessageIndex: i,
368
- failedCheck: "merkle"
369
- };
370
- }
371
- const signData = `${msg.prevRoot}:${msg.merkleRoot}:${msg.timestamp}:${msg.serverPublicKey}`;
372
- const signatureValid = verifyEd25519Signature(
373
- msg.serverPublicKey,
374
- signData,
375
- msg.serverSignature
376
- );
377
- if (!signatureValid) {
378
- return {
379
- valid: false,
380
- error: `Server signature verification failed for message ${msg.id} at index ${i}`,
381
- failedMessageIndex: i,
382
- failedCheck: "merkle"
383
- };
384
- }
385
529
  }
386
- }
387
- const chainResult = verifyMerkleChain(
388
- sortedMessages.map((msg) => ({
389
- leafIndex: msg.leafIndex,
390
- prevRoot: msg.merkleRoot,
391
- // WTS 中只保存了最终的 merkleRoot
392
- newRoot: msg.merkleRoot,
393
- plaintextHash: msg.plaintextHash,
394
- serverTimestamp: msg.timestamp
395
- }))
396
- );
397
- if (!chainResult.valid) {
398
- return {
399
- valid: false,
400
- error: chainResult.error,
401
- failedCheck: "chain"
402
- };
403
- }
404
- return { valid: true };
530
+ return { valid: true };
405
531
  }
406
- export {
407
- arrayBufferToUint8Array,
408
- base64ToBytes,
409
- bufferEqual,
410
- bytesToBase64,
411
- bytesToHex,
412
- calculateMerkleLeafHash,
413
- computeNewRoot,
414
- generateNonce,
415
- hashMessage,
416
- hashPlaintext,
417
- hashSha256,
418
- hexToBytes,
419
- merkleHash,
420
- recoverXed25519FromX25519PrivateKey,
421
- uint8ArrayToArrayBuffer,
422
- verifyEd25519Signature,
423
- verifyMerkleChain,
424
- verifyMerkleProof,
425
- verifyMessage,
426
- verifySingleMerkleRoot,
427
- verifyWtsMessages
428
- };
532
+ //# sourceMappingURL=crypto.js.map