tempo.ts 0.1.5 → 0.2.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 (297) hide show
  1. package/README.md +33 -2
  2. package/dist/chains.d.ts +509 -115
  3. package/dist/chains.d.ts.map +1 -1
  4. package/dist/chains.js +20 -9
  5. package/dist/chains.js.map +1 -1
  6. package/dist/ox/Order.d.ts +92 -0
  7. package/dist/ox/Order.d.ts.map +1 -0
  8. package/dist/ox/Order.js +88 -0
  9. package/dist/ox/Order.js.map +1 -0
  10. package/dist/ox/OrdersFilters.d.ts +72 -0
  11. package/dist/ox/OrdersFilters.d.ts.map +1 -0
  12. package/dist/ox/OrdersFilters.js +100 -0
  13. package/dist/ox/OrdersFilters.js.map +1 -0
  14. package/dist/ox/Pagination.d.ts +128 -0
  15. package/dist/ox/Pagination.d.ts.map +1 -0
  16. package/dist/ox/Pagination.js +78 -0
  17. package/dist/ox/Pagination.js.map +1 -0
  18. package/dist/ox/PoolId.d.ts +18 -0
  19. package/dist/ox/PoolId.d.ts.map +1 -0
  20. package/dist/ox/PoolId.js +13 -0
  21. package/dist/ox/PoolId.js.map +1 -0
  22. package/dist/ox/RpcSchema.d.ts +32 -0
  23. package/dist/ox/RpcSchema.d.ts.map +1 -0
  24. package/dist/ox/RpcSchema.js +2 -0
  25. package/dist/ox/RpcSchema.js.map +1 -0
  26. package/dist/ox/SignatureEnvelope.d.ts +1 -1
  27. package/dist/ox/SignatureEnvelope.d.ts.map +1 -1
  28. package/dist/ox/SignatureEnvelope.js.map +1 -1
  29. package/dist/{viem → ox}/Tick.d.ts +4 -0
  30. package/dist/ox/Tick.d.ts.map +1 -0
  31. package/dist/ox/Tick.js.map +1 -0
  32. package/dist/ox/Transaction.d.ts.map +1 -1
  33. package/dist/ox/Transaction.js +2 -1
  34. package/dist/ox/Transaction.js.map +1 -1
  35. package/dist/ox/TransactionEnvelopeAA.d.ts +6 -6
  36. package/dist/ox/TransactionEnvelopeAA.d.ts.map +1 -1
  37. package/dist/ox/TransactionEnvelopeAA.js +4 -2
  38. package/dist/ox/TransactionEnvelopeAA.js.map +1 -1
  39. package/dist/ox/TransactionRequest.d.ts +4 -0
  40. package/dist/ox/TransactionRequest.d.ts.map +1 -1
  41. package/dist/ox/TransactionRequest.js.map +1 -1
  42. package/dist/ox/index.d.ts +6 -0
  43. package/dist/ox/index.d.ts.map +1 -1
  44. package/dist/ox/index.js +6 -0
  45. package/dist/ox/index.js.map +1 -1
  46. package/dist/prool/Instance.d.ts.map +1 -1
  47. package/dist/prool/Instance.js +20 -4
  48. package/dist/prool/Instance.js.map +1 -1
  49. package/dist/viem/Abis.d.ts +1469 -1082
  50. package/dist/viem/Abis.d.ts.map +1 -1
  51. package/dist/viem/Abis.js +932 -671
  52. package/dist/viem/Abis.js.map +1 -1
  53. package/dist/viem/Account.d.ts +150 -0
  54. package/dist/viem/Account.d.ts.map +1 -0
  55. package/dist/viem/Account.js +221 -0
  56. package/dist/viem/Account.js.map +1 -0
  57. package/dist/viem/Actions/amm.d.ts +144 -161
  58. package/dist/viem/Actions/amm.d.ts.map +1 -1
  59. package/dist/viem/Actions/amm.js +109 -163
  60. package/dist/viem/Actions/amm.js.map +1 -1
  61. package/dist/viem/Actions/dex.d.ts +920 -664
  62. package/dist/viem/Actions/dex.d.ts.map +1 -1
  63. package/dist/viem/Actions/dex.js +129 -30
  64. package/dist/viem/Actions/dex.js.map +1 -1
  65. package/dist/viem/Actions/faucet.d.ts +34 -0
  66. package/dist/viem/Actions/faucet.d.ts.map +1 -0
  67. package/dist/viem/Actions/faucet.js +33 -0
  68. package/dist/viem/Actions/faucet.js.map +1 -0
  69. package/dist/viem/Actions/fee.d.ts +16 -30
  70. package/dist/viem/Actions/fee.d.ts.map +1 -1
  71. package/dist/viem/Actions/fee.js +13 -13
  72. package/dist/viem/Actions/fee.js.map +1 -1
  73. package/dist/viem/Actions/index.d.ts +2 -0
  74. package/dist/viem/Actions/index.d.ts.map +1 -1
  75. package/dist/viem/Actions/index.js +2 -0
  76. package/dist/viem/Actions/index.js.map +1 -1
  77. package/dist/viem/Actions/policy.d.ts +46 -46
  78. package/dist/viem/Actions/policy.js +46 -46
  79. package/dist/viem/Actions/reward.d.ts +3236 -0
  80. package/dist/viem/Actions/reward.d.ts.map +1 -0
  81. package/dist/viem/Actions/reward.js +725 -0
  82. package/dist/viem/Actions/reward.js.map +1 -0
  83. package/dist/viem/Actions/token.d.ts +4399 -2750
  84. package/dist/viem/Actions/token.d.ts.map +1 -1
  85. package/dist/viem/Actions/token.js +361 -482
  86. package/dist/viem/Actions/token.js.map +1 -1
  87. package/dist/viem/Addresses.d.ts +1 -2
  88. package/dist/viem/Addresses.d.ts.map +1 -1
  89. package/dist/viem/Addresses.js +1 -2
  90. package/dist/viem/Addresses.js.map +1 -1
  91. package/dist/viem/Chain.d.ts +38 -12
  92. package/dist/viem/Chain.d.ts.map +1 -1
  93. package/dist/viem/Chain.js +27 -18
  94. package/dist/viem/Chain.js.map +1 -1
  95. package/dist/viem/Decorator.d.ts +1009 -428
  96. package/dist/viem/Decorator.d.ts.map +1 -1
  97. package/dist/viem/Decorator.js +17 -5
  98. package/dist/viem/Decorator.js.map +1 -1
  99. package/dist/viem/Formatters.d.ts +8 -1
  100. package/dist/viem/Formatters.d.ts.map +1 -1
  101. package/dist/viem/Formatters.js +17 -0
  102. package/dist/viem/Formatters.js.map +1 -1
  103. package/dist/viem/P256.d.ts +2 -0
  104. package/dist/viem/P256.d.ts.map +1 -0
  105. package/dist/viem/P256.js +2 -0
  106. package/dist/viem/P256.js.map +1 -0
  107. package/dist/viem/Secp256k1.d.ts +2 -0
  108. package/dist/viem/Secp256k1.d.ts.map +1 -0
  109. package/dist/viem/Secp256k1.js +2 -0
  110. package/dist/viem/Secp256k1.js.map +1 -0
  111. package/dist/viem/TokenIds.d.ts +1 -2
  112. package/dist/viem/TokenIds.d.ts.map +1 -1
  113. package/dist/viem/TokenIds.js +1 -2
  114. package/dist/viem/TokenIds.js.map +1 -1
  115. package/dist/viem/Transaction.d.ts +1 -1
  116. package/dist/viem/Transaction.d.ts.map +1 -1
  117. package/dist/viem/Transaction.js +46 -5
  118. package/dist/viem/Transaction.js.map +1 -1
  119. package/dist/viem/WebAuthnP256.d.ts +79 -0
  120. package/dist/viem/WebAuthnP256.d.ts.map +1 -0
  121. package/dist/viem/WebAuthnP256.js +95 -0
  122. package/dist/viem/WebAuthnP256.js.map +1 -0
  123. package/dist/viem/WebCryptoP256.d.ts +2 -0
  124. package/dist/viem/WebCryptoP256.d.ts.map +1 -0
  125. package/dist/viem/WebCryptoP256.js +2 -0
  126. package/dist/viem/WebCryptoP256.js.map +1 -0
  127. package/dist/viem/index.d.ts +6 -3
  128. package/dist/viem/index.d.ts.map +1 -1
  129. package/dist/viem/index.js +6 -3
  130. package/dist/viem/index.js.map +1 -1
  131. package/dist/viem/internal/account.d.ts +24 -0
  132. package/dist/viem/internal/account.d.ts.map +1 -0
  133. package/dist/viem/internal/account.js +68 -0
  134. package/dist/viem/internal/account.js.map +1 -0
  135. package/dist/viem/internal/types.d.ts +10 -0
  136. package/dist/viem/internal/types.d.ts.map +1 -1
  137. package/dist/wagmi/Actions/amm.d.ts +428 -0
  138. package/dist/wagmi/Actions/amm.d.ts.map +1 -0
  139. package/dist/wagmi/Actions/amm.js +472 -0
  140. package/dist/wagmi/Actions/amm.js.map +1 -0
  141. package/dist/wagmi/Actions/dex.d.ts +908 -0
  142. package/dist/wagmi/Actions/dex.d.ts.map +1 -0
  143. package/dist/wagmi/Actions/dex.js +1023 -0
  144. package/dist/wagmi/Actions/dex.js.map +1 -0
  145. package/dist/wagmi/Actions/faucet.d.ts +35 -0
  146. package/dist/wagmi/Actions/faucet.d.ts.map +1 -0
  147. package/dist/wagmi/Actions/faucet.js +33 -0
  148. package/dist/wagmi/Actions/faucet.js.map +1 -0
  149. package/dist/wagmi/Actions/fee.d.ts +111 -0
  150. package/dist/wagmi/Actions/fee.d.ts.map +1 -0
  151. package/dist/wagmi/Actions/fee.js +126 -0
  152. package/dist/wagmi/Actions/fee.js.map +1 -0
  153. package/dist/wagmi/Actions/index.d.ts +7 -0
  154. package/dist/wagmi/Actions/index.d.ts.map +1 -0
  155. package/dist/wagmi/Actions/index.js +7 -0
  156. package/dist/wagmi/Actions/index.js.map +1 -0
  157. package/dist/wagmi/Actions/reward.d.ts +348 -0
  158. package/dist/wagmi/Actions/reward.d.ts.map +1 -0
  159. package/dist/wagmi/Actions/reward.js +388 -0
  160. package/dist/wagmi/Actions/reward.js.map +1 -0
  161. package/dist/wagmi/Actions/token.d.ts +1546 -0
  162. package/dist/wagmi/Actions/token.d.ts.map +1 -0
  163. package/dist/wagmi/Actions/token.js +1712 -0
  164. package/dist/wagmi/Actions/token.js.map +1 -0
  165. package/dist/wagmi/Connector.d.ts +81 -0
  166. package/dist/wagmi/Connector.d.ts.map +1 -0
  167. package/dist/wagmi/Connector.js +261 -0
  168. package/dist/wagmi/Connector.js.map +1 -0
  169. package/dist/wagmi/Hooks/amm.d.ts +421 -0
  170. package/dist/wagmi/Hooks/amm.d.ts.map +1 -0
  171. package/dist/wagmi/Hooks/amm.js +504 -0
  172. package/dist/wagmi/Hooks/amm.js.map +1 -0
  173. package/dist/wagmi/Hooks/dex.d.ts +816 -0
  174. package/dist/wagmi/Hooks/dex.d.ts.map +1 -0
  175. package/dist/wagmi/Hooks/dex.js +973 -0
  176. package/dist/wagmi/Hooks/dex.js.map +1 -0
  177. package/dist/wagmi/Hooks/faucet.d.ts +39 -0
  178. package/dist/wagmi/Hooks/faucet.d.ts.map +1 -0
  179. package/dist/wagmi/Hooks/faucet.js +40 -0
  180. package/dist/wagmi/Hooks/faucet.js.map +1 -0
  181. package/dist/wagmi/Hooks/fee.d.ts +97 -0
  182. package/dist/wagmi/Hooks/fee.d.ts.map +1 -0
  183. package/dist/wagmi/Hooks/fee.js +109 -0
  184. package/dist/wagmi/Hooks/fee.js.map +1 -0
  185. package/dist/wagmi/Hooks/index.d.ts +7 -0
  186. package/dist/wagmi/Hooks/index.d.ts.map +1 -0
  187. package/dist/wagmi/Hooks/index.js +7 -0
  188. package/dist/wagmi/Hooks/index.js.map +1 -0
  189. package/dist/wagmi/Hooks/reward.d.ts +307 -0
  190. package/dist/wagmi/Hooks/reward.d.ts.map +1 -0
  191. package/dist/wagmi/Hooks/reward.js +349 -0
  192. package/dist/wagmi/Hooks/reward.js.map +1 -0
  193. package/dist/wagmi/Hooks/token.d.ts +1388 -0
  194. package/dist/wagmi/Hooks/token.d.ts.map +1 -0
  195. package/dist/wagmi/Hooks/token.js +1657 -0
  196. package/dist/wagmi/Hooks/token.js.map +1 -0
  197. package/dist/wagmi/index.d.ts +4 -0
  198. package/dist/wagmi/index.d.ts.map +1 -0
  199. package/dist/wagmi/index.js +4 -0
  200. package/dist/wagmi/index.js.map +1 -0
  201. package/package.json +54 -10
  202. package/src/chains.ts +21 -9
  203. package/src/ox/Order.test.ts +78 -0
  204. package/src/ox/Order.ts +125 -0
  205. package/src/ox/OrdersFilters.test.ts +182 -0
  206. package/src/ox/OrdersFilters.ts +125 -0
  207. package/src/ox/Pagination.test.ts +162 -0
  208. package/src/ox/Pagination.ts +164 -0
  209. package/src/ox/PoolId.test.ts +33 -0
  210. package/src/ox/PoolId.ts +27 -0
  211. package/src/ox/RpcSchema.ts +35 -0
  212. package/src/ox/SignatureEnvelope.ts +3 -1
  213. package/src/{viem → ox}/Tick.test.ts +1 -1
  214. package/src/{viem → ox}/Tick.ts +5 -0
  215. package/src/ox/Transaction.test.ts +1 -1
  216. package/src/ox/Transaction.ts +2 -1
  217. package/src/ox/TransactionEnvelopeAA.test.ts +239 -96
  218. package/src/ox/TransactionEnvelopeAA.ts +9 -7
  219. package/src/ox/TransactionRequest.ts +4 -0
  220. package/src/ox/index.ts +6 -0
  221. package/src/prool/Instance.ts +51 -37
  222. package/src/prool/internal/chain.json +104 -52
  223. package/src/tsconfig.json +9 -0
  224. package/src/viem/Abis.ts +972 -710
  225. package/src/viem/Account.ts +279 -0
  226. package/src/viem/Actions/__snapshots__/dex.test.ts.snap +850 -0
  227. package/src/viem/Actions/amm.test.ts +173 -169
  228. package/src/viem/Actions/amm.ts +131 -203
  229. package/src/viem/Actions/dex.test.ts +563 -484
  230. package/src/viem/Actions/dex.ts +203 -30
  231. package/src/viem/Actions/faucet.ts +50 -0
  232. package/src/viem/Actions/fee.test.ts +23 -34
  233. package/src/viem/Actions/fee.ts +20 -13
  234. package/src/viem/Actions/index.ts +2 -0
  235. package/src/viem/Actions/policy.test.ts +19 -33
  236. package/src/viem/Actions/policy.ts +46 -46
  237. package/src/viem/Actions/reward.test.ts +457 -0
  238. package/src/viem/Actions/reward.ts +999 -0
  239. package/src/viem/Actions/token.test.ts +453 -287
  240. package/src/viem/Actions/token.ts +605 -693
  241. package/src/viem/Addresses.ts +1 -2
  242. package/src/viem/Chain.bench-d.ts +12 -0
  243. package/src/viem/Chain.ts +70 -20
  244. package/src/viem/Decorator.bench-d.ts +1 -1
  245. package/src/viem/Decorator.test.ts +3 -1
  246. package/src/viem/Decorator.ts +1049 -442
  247. package/src/viem/Formatters.ts +31 -5
  248. package/src/viem/P256.ts +1 -0
  249. package/src/viem/Secp256k1.ts +1 -0
  250. package/src/viem/TokenIds.ts +1 -2
  251. package/src/viem/Transaction.ts +53 -7
  252. package/src/viem/WebAuthnP256.ts +140 -0
  253. package/src/viem/WebCryptoP256.ts +1 -0
  254. package/src/viem/e2e.test.ts +1126 -297
  255. package/src/viem/index.ts +6 -3
  256. package/src/viem/internal/account.ts +107 -0
  257. package/src/viem/internal/types.ts +9 -0
  258. package/src/wagmi/Actions/__snapshots__/dex.test.ts.snap +310 -0
  259. package/src/wagmi/Actions/amm.test.ts +198 -0
  260. package/src/wagmi/Actions/amm.ts +691 -0
  261. package/src/wagmi/Actions/dex.test.ts +1507 -0
  262. package/src/wagmi/Actions/dex.ts +1640 -0
  263. package/src/wagmi/Actions/faucet.ts +46 -0
  264. package/src/wagmi/Actions/fee.test.ts +63 -0
  265. package/src/wagmi/Actions/fee.ts +208 -0
  266. package/src/wagmi/Actions/index.ts +6 -0
  267. package/src/wagmi/Actions/reward.test.ts +210 -0
  268. package/src/wagmi/Actions/reward.ts +632 -0
  269. package/src/wagmi/Actions/token.test.ts +1308 -0
  270. package/src/wagmi/Actions/token.ts +2613 -0
  271. package/src/wagmi/Connector.test.ts +53 -0
  272. package/src/wagmi/Connector.ts +390 -0
  273. package/src/wagmi/Hooks/__snapshots__/dex.test.ts.snap +457 -0
  274. package/src/wagmi/Hooks/amm.test.ts +424 -0
  275. package/src/wagmi/Hooks/amm.ts +806 -0
  276. package/src/wagmi/Hooks/dex.test.ts +1017 -0
  277. package/src/wagmi/Hooks/dex.ts +1685 -0
  278. package/src/wagmi/Hooks/faucet.ts +76 -0
  279. package/src/wagmi/Hooks/fee.test.ts +166 -0
  280. package/src/wagmi/Hooks/fee.ts +206 -0
  281. package/src/wagmi/Hooks/index.ts +6 -0
  282. package/src/wagmi/Hooks/reward.test.ts +219 -0
  283. package/src/wagmi/Hooks/reward.ts +672 -0
  284. package/src/wagmi/Hooks/token.test.ts +1670 -0
  285. package/src/wagmi/Hooks/token.ts +2906 -0
  286. package/src/wagmi/index.ts +3 -0
  287. package/src/wagmi/internal/types.ts +16 -0
  288. package/dist/viem/Client.d.ts +0 -27
  289. package/dist/viem/Client.d.ts.map +0 -1
  290. package/dist/viem/Client.js +0 -28
  291. package/dist/viem/Client.js.map +0 -1
  292. package/dist/viem/Tick.d.ts.map +0 -1
  293. package/dist/viem/Tick.js.map +0 -1
  294. package/src/viem/Client.bench-d.ts +0 -8
  295. package/src/viem/Client.test.ts +0 -178
  296. package/src/viem/Client.ts +0 -91
  297. /package/dist/{viem → ox}/Tick.js +0 -0
@@ -1,31 +1,21 @@
1
1
  import { setTimeout } from 'node:timers/promises'
2
2
  import { Hex } from 'ox'
3
+ import { TokenRole } from 'tempo.ts/ox'
3
4
  import { Abis, Addresses, TokenIds } from 'tempo.ts/viem'
4
- import { parseEther, publicActions } from 'viem'
5
- import { mnemonicToAccount } from 'viem/accounts'
5
+ import { parseUnits } from 'viem'
6
6
  import { getCode, writeContractSync } from 'viem/actions'
7
- import { describe, expect, test } from 'vitest'
8
- import { tempoTest } from '../../../test/viem/config.js'
9
- import { createTempoClient } from '../Client.js'
7
+ import { beforeAll, describe, expect, test } from 'vitest'
8
+ import {
9
+ accounts,
10
+ addresses,
11
+ client,
12
+ rpcUrl,
13
+ } from '../../../test/viem/config.js'
10
14
  import * as actions from './index.js'
11
15
 
12
- const account = mnemonicToAccount(
13
- 'test test test test test test test test test test test junk',
14
- )
15
- const account2 = mnemonicToAccount(
16
- 'test test test test test test test test test test test junk',
17
- { accountIndex: 1 },
18
- )
19
- const account3 = mnemonicToAccount(
20
- 'test test test test test test test test test test test junk',
21
- { accountIndex: 2 },
22
- )
23
-
24
- const client = createTempoClient({
25
- account,
26
- chain: tempoTest,
27
- pollingInterval: 100,
28
- }).extend(publicActions)
16
+ const account = accounts[0]
17
+ const account2 = accounts[1]
18
+ const account3 = accounts[2]
29
19
 
30
20
  describe('approve', () => {
31
21
  test('default', async () => {
@@ -33,12 +23,13 @@ describe('approve', () => {
33
23
  // approve
34
24
  const { receipt, ...result } = await actions.token.approveSync(client, {
35
25
  spender: account2.address,
36
- amount: parseEther('100'),
26
+ amount: parseUnits('100', 6),
27
+ token: addresses.alphaUsd,
37
28
  })
38
29
  expect(receipt).toBeDefined()
39
30
  expect(result).toMatchInlineSnapshot(`
40
31
  {
41
- "amount": 100000000000000000000n,
32
+ "amount": 100000000n,
42
33
  "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
43
34
  "spender": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
44
35
  }
@@ -49,53 +40,62 @@ describe('approve', () => {
49
40
  // check allowance
50
41
  const allowance = await actions.token.getAllowance(client, {
51
42
  spender: account2.address,
43
+ token: addresses.alphaUsd,
52
44
  })
53
- expect(allowance).toBe(parseEther('100'))
45
+ expect(allowance).toBe(parseUnits('100', 6))
54
46
  }
55
47
 
56
48
  // transfer tokens for gas
57
49
  await writeContractSync(client, {
58
50
  abi: Abis.tip20,
59
- address: Addresses.defaultFeeToken,
51
+ address: addresses.alphaUsd,
60
52
  functionName: 'transfer',
61
- args: [account2.address, parseEther('1')],
53
+ args: [account2.address, parseUnits('1', 6)],
62
54
  })
63
55
 
64
56
  // transfer tokens from approved account
65
57
  await actions.token.transferSync(client, {
66
- amount: parseEther('50'),
58
+ amount: parseUnits('50', 6),
67
59
  account: account2,
68
60
  from: account.address,
69
61
  to: '0x0000000000000000000000000000000000000001',
62
+ token: addresses.alphaUsd,
70
63
  })
71
64
 
72
65
  {
73
66
  // verify updated allowance
74
67
  const allowance = await actions.token.getAllowance(client, {
75
68
  spender: account2.address,
69
+ token: addresses.alphaUsd,
76
70
  })
77
- expect(allowance).toBe(parseEther('50'))
71
+ expect(allowance).toBe(parseUnits('50', 6))
78
72
  }
79
73
 
80
74
  // verify balance
81
75
  const balance = await actions.token.getBalance(client, {
82
76
  account: '0x0000000000000000000000000000000000000001',
77
+ token: addresses.alphaUsd,
83
78
  })
84
- expect(balance).toBe(parseEther('50'))
79
+ expect(balance).toBe(parseUnits('50', 6))
85
80
  })
86
81
 
87
82
  test('behavior: token address', async () => {
83
+ const balanceBefore = await actions.token.getBalance(client, {
84
+ account: '0x0000000000000000000000000000000000000001',
85
+ token: addresses.alphaUsd,
86
+ })
87
+
88
88
  {
89
89
  // approve
90
90
  const { receipt, ...result } = await actions.token.approveSync(client, {
91
- amount: parseEther('100'),
92
- token: Addresses.defaultFeeToken,
91
+ amount: parseUnits('100', 6),
92
+ token: addresses.alphaUsd,
93
93
  spender: account2.address,
94
94
  })
95
95
  expect(receipt).toBeDefined()
96
96
  expect(result).toMatchInlineSnapshot(`
97
97
  {
98
- "amount": 100000000000000000000n,
98
+ "amount": 100000000n,
99
99
  "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
100
100
  "spender": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
101
101
  }
@@ -105,58 +105,63 @@ describe('approve', () => {
105
105
  {
106
106
  // check allowance
107
107
  const allowance = await actions.token.getAllowance(client, {
108
- token: Addresses.defaultFeeToken,
108
+ token: addresses.alphaUsd,
109
109
  spender: account2.address,
110
110
  })
111
- expect(allowance).toBe(parseEther('100'))
111
+ expect(allowance).toBe(parseUnits('100', 6))
112
112
  }
113
113
 
114
114
  // transfer tokens for gas
115
115
  await writeContractSync(client, {
116
116
  abi: Abis.tip20,
117
- address: Addresses.defaultFeeToken,
117
+ address: addresses.alphaUsd,
118
118
  functionName: 'transfer',
119
- args: [account2.address, parseEther('1')],
119
+ args: [account2.address, parseUnits('1', 6)],
120
120
  })
121
121
 
122
122
  // transfer tokens from approved account
123
123
  await actions.token.transferSync(client, {
124
- amount: parseEther('50'),
124
+ amount: parseUnits('50', 6),
125
125
  account: account2,
126
126
  from: account.address,
127
127
  to: '0x0000000000000000000000000000000000000001',
128
- token: Addresses.defaultFeeToken,
128
+ token: addresses.alphaUsd,
129
129
  })
130
130
 
131
131
  {
132
132
  // verify updated allowance
133
133
  const allowance = await actions.token.getAllowance(client, {
134
134
  spender: account2.address,
135
- token: Addresses.defaultFeeToken,
135
+ token: addresses.alphaUsd,
136
136
  })
137
- expect(allowance).toBe(parseEther('50'))
137
+ expect(allowance).toBe(parseUnits('50', 6))
138
138
  }
139
139
 
140
140
  // verify balance
141
141
  const balance = await actions.token.getBalance(client, {
142
142
  account: '0x0000000000000000000000000000000000000001',
143
- token: Addresses.defaultFeeToken,
143
+ token: addresses.alphaUsd,
144
144
  })
145
- expect(balance).toBe(parseEther('50'))
145
+ expect(balance).toBe(balanceBefore + parseUnits('50', 6))
146
146
  })
147
147
 
148
148
  test('behavior: token address', async () => {
149
+ const balanceBefore = await actions.token.getBalance(client, {
150
+ account: '0x0000000000000000000000000000000000000001',
151
+ token: addresses.alphaUsd,
152
+ })
153
+
149
154
  {
150
155
  // approve
151
156
  const { receipt, ...result } = await actions.token.approveSync(client, {
152
- amount: parseEther('100'),
153
- token: TokenIds.defaultFeeToken,
157
+ amount: parseUnits('100', 6),
158
+ token: addresses.alphaUsd,
154
159
  spender: account2.address,
155
160
  })
156
161
  expect(receipt).toBeDefined()
157
162
  expect(result).toMatchInlineSnapshot(`
158
163
  {
159
- "amount": 100000000000000000000n,
164
+ "amount": 100000000n,
160
165
  "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
161
166
  "spender": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
162
167
  }
@@ -166,69 +171,71 @@ describe('approve', () => {
166
171
  {
167
172
  // check allowance
168
173
  const allowance = await actions.token.getAllowance(client, {
169
- token: TokenIds.defaultFeeToken,
174
+ token: addresses.alphaUsd,
170
175
  spender: account2.address,
171
176
  })
172
- expect(allowance).toBe(parseEther('100'))
177
+ expect(allowance).toBe(parseUnits('100', 6))
173
178
  }
174
179
 
175
180
  // transfer tokens for gas
176
181
  await writeContractSync(client, {
177
182
  abi: Abis.tip20,
178
- address: Addresses.defaultFeeToken,
183
+ address: addresses.alphaUsd,
179
184
  functionName: 'transfer',
180
- args: [account2.address, parseEther('1')],
185
+ args: [account2.address, parseUnits('1', 6)],
181
186
  })
182
187
 
183
188
  // transfer tokens from approved account
184
189
  await actions.token.transferSync(client, {
185
- amount: parseEther('50'),
190
+ amount: parseUnits('50', 6),
186
191
  account: account2,
187
192
  from: account.address,
188
193
  to: '0x0000000000000000000000000000000000000001',
189
- token: TokenIds.defaultFeeToken,
194
+ token: addresses.alphaUsd,
190
195
  })
191
196
 
192
197
  {
193
198
  // verify updated allowance
194
199
  const allowance = await actions.token.getAllowance(client, {
195
200
  spender: account2.address,
196
- token: TokenIds.defaultFeeToken,
201
+ token: addresses.alphaUsd,
197
202
  })
198
- expect(allowance).toBe(parseEther('50'))
203
+ expect(allowance).toBe(parseUnits('50', 6))
199
204
  }
200
205
 
201
206
  // verify balance
202
207
  const balance = await actions.token.getBalance(client, {
203
208
  account: '0x0000000000000000000000000000000000000001',
204
- token: TokenIds.defaultFeeToken,
209
+ token: addresses.alphaUsd,
205
210
  })
206
- expect(balance).toBe(parseEther('50'))
211
+ expect(balance).toBe(balanceBefore + parseUnits('50', 6))
207
212
  })
208
213
  })
209
214
 
210
215
  describe('create', () => {
211
216
  test('default', async () => {
212
- const { receipt, ...result } = await actions.token.createSync(client, {
213
- currency: 'USD',
214
- name: 'Test USD',
215
- symbol: 'TUSD',
216
- })
217
+ const { receipt, token, tokenId, ...result } =
218
+ await actions.token.createSync(client, {
219
+ currency: 'USD',
220
+ name: 'Test USD',
221
+ symbol: 'TUSD',
222
+ })
217
223
 
218
224
  expect(result).toMatchInlineSnapshot(`
219
225
  {
220
226
  "admin": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
221
227
  "currency": "USD",
222
228
  "name": "Test USD",
229
+ "quoteToken": "0x20C0000000000000000000000000000000000000",
223
230
  "symbol": "TUSD",
224
- "token": "0x20C0000000000000000000000000000000000004",
225
- "tokenId": 4n,
226
231
  }
227
232
  `)
233
+ expect(token).toBeDefined()
234
+ expect(tokenId).toBeDefined()
228
235
  expect(receipt).toBeDefined()
229
236
 
230
237
  const code = await getCode(client, {
231
- address: result.token,
238
+ address: token,
232
239
  })
233
240
  expect(code).toBe('0xef')
234
241
  })
@@ -239,53 +246,48 @@ describe('getAllowance', () => {
239
246
  // First, approve some allowance
240
247
  await writeContractSync(client, {
241
248
  abi: Abis.tip20,
242
- address: Addresses.defaultFeeToken,
249
+ address: addresses.alphaUsd,
243
250
  functionName: 'approve',
244
- args: [account2.address, parseEther('50')],
251
+ args: [account2.address, parseUnits('50', 6)],
245
252
  })
246
253
 
247
254
  {
248
255
  // Test with default token
249
256
  const allowance = await actions.token.getAllowance(client, {
250
257
  spender: account2.address,
258
+ token: addresses.alphaUsd,
251
259
  })
252
- expect(allowance).toBe(parseEther('50'))
260
+ expect(allowance).toBe(parseUnits('50', 6))
253
261
  }
254
262
 
255
263
  {
256
264
  // Test with token address
257
265
  const allowance = await actions.token.getAllowance(client, {
258
- token: Addresses.defaultFeeToken,
266
+ token: addresses.alphaUsd,
259
267
  spender: account2.address,
260
268
  })
261
269
 
262
- expect(allowance).toBe(parseEther('50'))
270
+ expect(allowance).toBe(parseUnits('50', 6))
263
271
  }
264
272
 
265
273
  {
266
274
  // Test with token ID
267
275
  const allowance = await actions.token.getAllowance(client, {
268
- token: TokenIds.defaultFeeToken,
276
+ token: addresses.alphaUsd,
269
277
  spender: account2.address,
270
278
  })
271
279
 
272
- expect(allowance).toBe(parseEther('50'))
280
+ expect(allowance).toBe(parseUnits('50', 6))
273
281
  }
274
282
  })
275
283
  })
276
284
 
277
285
  describe('getBalance', () => {
278
286
  test('default', async () => {
279
- {
280
- // Test with default token
281
- const balance = await actions.token.getBalance(client)
282
- expect(balance).toBeGreaterThan(0n)
283
- }
284
-
285
287
  {
286
288
  // Test with token address
287
289
  const balance = await actions.token.getBalance(client, {
288
- token: Addresses.defaultFeeToken,
290
+ token: addresses.alphaUsd,
289
291
  })
290
292
 
291
293
  expect(balance).toBeGreaterThan(0n)
@@ -294,7 +296,7 @@ describe('getBalance', () => {
294
296
  {
295
297
  // Test with token ID & different account
296
298
  const balance = await actions.token.getBalance(client, {
297
- token: TokenIds.defaultFeeToken,
299
+ token: addresses.alphaUsd,
298
300
  account: Hex.random(20),
299
301
  })
300
302
 
@@ -305,7 +307,9 @@ describe('getBalance', () => {
305
307
 
306
308
  describe('getMetadata', () => {
307
309
  test('default', async () => {
308
- const metadata = await actions.token.getMetadata(client)
310
+ const metadata = await actions.token.getMetadata(client, {
311
+ token: addresses.alphaUsd,
312
+ })
309
313
 
310
314
  expect(metadata).toMatchInlineSnapshot(`
311
315
  {
@@ -314,9 +318,9 @@ describe('getMetadata', () => {
314
318
  "name": "AlphaUSD",
315
319
  "paused": false,
316
320
  "quoteToken": "0x20C0000000000000000000000000000000000000",
317
- "supplyCap": 115792089237316195423570985008687907853269984665640564039457584007913129639935n,
321
+ "supplyCap": 340282366920938463463374607431768211455n,
318
322
  "symbol": "AlphaUSD",
319
- "totalSupply": 340282366920938463481821351505477763070n,
323
+ "totalSupply": 36893488147419103230n,
320
324
  "transferPolicyId": 1n,
321
325
  }
322
326
  `)
@@ -351,34 +355,34 @@ describe('getMetadata', () => {
351
355
  test('behavior: quote token', async () => {
352
356
  {
353
357
  const metadata = await actions.token.getMetadata(client, {
354
- token: TokenIds.defaultQuoteToken,
358
+ token: TokenIds.linkingUsd,
355
359
  })
356
360
 
357
361
  expect(metadata).toMatchInlineSnapshot(`
358
- {
359
- "currency": "USD",
360
- "decimals": 6,
361
- "name": "linkingUSD",
362
- "symbol": "linkingUSD",
363
- "totalSupply": 0n,
364
- }
365
- `)
362
+ {
363
+ "currency": "USD",
364
+ "decimals": 6,
365
+ "name": "linkingUSD",
366
+ "symbol": "linkingUSD",
367
+ "totalSupply": 18446744073709551615n,
368
+ }
369
+ `)
366
370
  }
367
371
 
368
372
  {
369
373
  const metadata = await actions.token.getMetadata(client, {
370
- token: Addresses.defaultQuoteToken,
374
+ token: Addresses.linkingUsd,
371
375
  })
372
376
 
373
377
  expect(metadata).toMatchInlineSnapshot(`
374
- {
375
- "currency": "USD",
376
- "decimals": 6,
377
- "name": "linkingUSD",
378
- "symbol": "linkingUSD",
379
- "totalSupply": 0n,
380
- }
381
- `)
378
+ {
379
+ "currency": "USD",
380
+ "decimals": 6,
381
+ "name": "linkingUSD",
382
+ "symbol": "linkingUSD",
383
+ "totalSupply": 18446744073709551615n,
384
+ }
385
+ `)
382
386
  }
383
387
  })
384
388
 
@@ -437,12 +441,12 @@ describe('mint', () => {
437
441
  await actions.token.mintSync(client, {
438
442
  token,
439
443
  to: account2.address,
440
- amount: parseEther('1000'),
444
+ amount: parseUnits('1000', 6),
441
445
  })
442
446
  expect(mintReceipt).toBeDefined()
443
447
  expect(mintResult).toMatchInlineSnapshot(`
444
448
  {
445
- "amount": 1000000000000000000000n,
449
+ "amount": 1000000000n,
446
450
  "to": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
447
451
  }
448
452
  `)
@@ -452,13 +456,13 @@ describe('mint', () => {
452
456
  token,
453
457
  account: account2.address,
454
458
  })
455
- expect(balanceAfter).toBe(parseEther('1000'))
459
+ expect(balanceAfter).toBe(parseUnits('1000', 6))
456
460
 
457
461
  // Check total supply
458
462
  const metadata = await actions.token.getMetadata(client, {
459
463
  token,
460
464
  })
461
- expect(metadata.totalSupply).toBe(parseEther('1000'))
465
+ expect(metadata.totalSupply).toBe(parseUnits('1000', 6))
462
466
  })
463
467
 
464
468
  // TODO: fix
@@ -483,7 +487,7 @@ describe('mint', () => {
483
487
  await actions.token.mintSync(client, {
484
488
  token,
485
489
  to: account2.address,
486
- amount: parseEther('500'),
490
+ amount: parseUnits('500', 6),
487
491
  memo: Hex.fromString('test'),
488
492
  })
489
493
  expect(mintMemoReceipt.status).toBe('success')
@@ -499,32 +503,33 @@ describe('mint', () => {
499
503
  token,
500
504
  account: account2.address,
501
505
  })
502
- expect(balance).toBe(parseEther('500'))
506
+ expect(balance).toBe(parseUnits('500', 6))
503
507
  })
504
508
  })
505
509
 
506
- describe.todo('permitToken')
507
-
508
510
  describe('transfer', () => {
509
511
  test('default', async () => {
510
512
  // Get initial balances
511
513
  const senderBalanceBefore = await actions.token.getBalance(client, {
512
514
  account: account.address,
515
+ token: addresses.alphaUsd,
513
516
  })
514
517
  const receiverBalanceBefore = await actions.token.getBalance(client, {
515
518
  account: account2.address,
519
+ token: addresses.alphaUsd,
516
520
  })
517
521
 
518
522
  // Transfer tokens
519
523
  const { receipt: transferReceipt, ...transferResult } =
520
524
  await actions.token.transferSync(client, {
521
525
  to: account2.address,
522
- amount: parseEther('10'),
526
+ amount: parseUnits('10', 6),
527
+ token: addresses.alphaUsd,
523
528
  })
524
529
  expect(transferReceipt).toBeDefined()
525
530
  expect(transferResult).toMatchInlineSnapshot(`
526
531
  {
527
- "amount": 10000000000000000000n,
532
+ "amount": 10000000n,
528
533
  "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
529
534
  "to": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
530
535
  }
@@ -533,15 +538,19 @@ describe('transfer', () => {
533
538
  // Verify balances
534
539
  const senderBalanceAfter = await actions.token.getBalance(client, {
535
540
  account: account.address,
541
+ token: addresses.alphaUsd,
536
542
  })
537
543
  const receiverBalanceAfter = await actions.token.getBalance(client, {
538
544
  account: account2.address,
545
+ token: addresses.alphaUsd,
539
546
  })
540
547
 
541
548
  expect(senderBalanceAfter - senderBalanceBefore).toBeLessThan(
542
- parseEther('10'),
549
+ parseUnits('10', 6),
550
+ )
551
+ expect(receiverBalanceAfter - receiverBalanceBefore).toBe(
552
+ parseUnits('10', 6),
543
553
  )
544
- expect(receiverBalanceAfter - receiverBalanceBefore).toBe(parseEther('10'))
545
554
  })
546
555
 
547
556
  test('behavior: with custom token', async () => {
@@ -562,14 +571,14 @@ describe('transfer', () => {
562
571
  await actions.token.mintSync(client, {
563
572
  token,
564
573
  to: client.account.address,
565
- amount: parseEther('1000'),
574
+ amount: parseUnits('1000', 6),
566
575
  })
567
576
 
568
577
  // Transfer custom tokens
569
578
  await actions.token.transferSync(client, {
570
579
  token,
571
580
  to: account2.address,
572
- amount: parseEther('100'),
581
+ amount: parseUnits('100', 6),
573
582
  })
574
583
 
575
584
  // Verify balance
@@ -577,7 +586,7 @@ describe('transfer', () => {
577
586
  token,
578
587
  account: account2.address,
579
588
  })
580
- expect(balance).toBe(parseEther('100'))
589
+ expect(balance).toBe(parseUnits('100', 6))
581
590
  })
582
591
 
583
592
  test('behavior: with memo', async () => {
@@ -586,14 +595,15 @@ describe('transfer', () => {
586
595
  const { receipt: transferMemoReceipt, ...transferMemoResult } =
587
596
  await actions.token.transferSync(client, {
588
597
  to: account2.address,
589
- amount: parseEther('5'),
598
+ amount: parseUnits('5', 6),
590
599
  memo,
600
+ token: addresses.alphaUsd,
591
601
  })
592
602
 
593
603
  expect(transferMemoReceipt.status).toBe('success')
594
604
  expect(transferMemoResult).toMatchInlineSnapshot(`
595
605
  {
596
- "amount": 5000000000000000000n,
606
+ "amount": 5000000n,
597
607
  "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
598
608
  "to": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
599
609
  }
@@ -604,20 +614,22 @@ describe('transfer', () => {
604
614
  // First approve account2 to spend tokens
605
615
  await actions.token.approveSync(client, {
606
616
  spender: account2.address,
607
- amount: parseEther('50'),
617
+ amount: parseUnits('50', 6),
618
+ token: addresses.alphaUsd,
608
619
  })
609
620
 
610
621
  // Transfer tokens for gas
611
622
  await writeContractSync(client, {
612
623
  abi: Abis.tip20,
613
- address: Addresses.defaultFeeToken,
624
+ address: addresses.alphaUsd,
614
625
  functionName: 'transfer',
615
- args: [account2.address, parseEther('1')],
626
+ args: [account2.address, parseUnits('1', 6)],
616
627
  })
617
628
 
618
629
  // Get initial balance
619
630
  const balanceBefore = await actions.token.getBalance(client, {
620
631
  account: account3.address,
632
+ token: addresses.alphaUsd,
621
633
  })
622
634
 
623
635
  // Account2 transfers from account to account3
@@ -625,20 +637,23 @@ describe('transfer', () => {
625
637
  account: account2,
626
638
  from: account.address,
627
639
  to: account3.address,
628
- amount: parseEther('25'),
640
+ amount: parseUnits('25', 6),
641
+ token: addresses.alphaUsd,
629
642
  })
630
643
 
631
644
  // Verify balance
632
645
  const balanceAfter = await actions.token.getBalance(client, {
633
646
  account: account3.address,
647
+ token: addresses.alphaUsd,
634
648
  })
635
- expect(balanceAfter - balanceBefore).toBe(parseEther('25'))
649
+ expect(balanceAfter - balanceBefore).toBe(parseUnits('25', 6))
636
650
 
637
651
  // Verify allowance was reduced
638
652
  const allowance = await actions.token.getAllowance(client, {
639
653
  spender: account2.address,
654
+ token: addresses.alphaUsd,
640
655
  })
641
- expect(allowance).toBe(parseEther('25'))
656
+ expect(allowance).toBe(parseUnits('25', 6))
642
657
  })
643
658
  })
644
659
 
@@ -662,30 +677,30 @@ describe('burn', () => {
662
677
  await actions.token.mintSync(client, {
663
678
  token,
664
679
  to: client.account.address,
665
- amount: parseEther('1000'),
680
+ amount: parseUnits('1000', 6),
666
681
  })
667
682
 
668
683
  // Check balance before burn
669
684
  const balanceBefore = await actions.token.getBalance(client, {
670
685
  token,
671
686
  })
672
- expect(balanceBefore).toBe(parseEther('1000'))
687
+ expect(balanceBefore).toBe(parseUnits('1000', 6))
673
688
 
674
689
  // Check total supply before
675
690
  const metadataBefore = await actions.token.getMetadata(client, {
676
691
  token,
677
692
  })
678
- expect(metadataBefore.totalSupply).toBe(parseEther('1000'))
693
+ expect(metadataBefore.totalSupply).toBe(parseUnits('1000', 6))
679
694
 
680
695
  // Burn tokens
681
696
  const { receipt, ...result } = await actions.token.burnSync(client, {
682
697
  token,
683
- amount: parseEther('100'),
698
+ amount: parseUnits('100', 6),
684
699
  })
685
700
  expect(receipt).toBeDefined()
686
701
  expect(result).toMatchInlineSnapshot(`
687
702
  {
688
- "amount": 100000000000000000000n,
703
+ "amount": 100000000n,
689
704
  "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
690
705
  }
691
706
  `)
@@ -694,13 +709,13 @@ describe('burn', () => {
694
709
  const balanceAfter = await actions.token.getBalance(client, {
695
710
  token,
696
711
  })
697
- expect(balanceAfter).toBe(parseEther('900'))
712
+ expect(balanceAfter).toBe(parseUnits('900', 6))
698
713
 
699
714
  // Check total supply after
700
715
  const metadataAfter = await actions.token.getMetadata(client, {
701
716
  token,
702
717
  })
703
- expect(metadataAfter.totalSupply).toBe(parseEther('900'))
718
+ expect(metadataAfter.totalSupply).toBe(parseUnits('900', 6))
704
719
  })
705
720
 
706
721
  test('behavior: requires issuer role', async () => {
@@ -721,23 +736,24 @@ describe('burn', () => {
721
736
  // Transfer gas to account2
722
737
  await writeContractSync(client, {
723
738
  abi: Abis.tip20,
724
- address: Addresses.defaultFeeToken,
739
+ address: addresses.alphaUsd,
725
740
  functionName: 'transfer',
726
- args: [account2.address, parseEther('1')],
741
+ args: [account2.address, parseUnits('1', 6)],
727
742
  })
728
743
 
729
744
  await actions.token.mintSync(client, {
730
745
  account: account2,
746
+ feeToken: addresses.alphaUsd,
731
747
  token,
732
748
  to: client.account.address,
733
- amount: parseEther('100'),
749
+ amount: parseUnits('100', 6),
734
750
  })
735
751
 
736
752
  // Try to burn without issuer role - should fail
737
753
  await expect(
738
754
  actions.token.burnSync(client, {
739
755
  token,
740
- amount: parseEther('10'),
756
+ amount: parseUnits('10', 6),
741
757
  }),
742
758
  ).rejects.toThrow()
743
759
  })
@@ -773,7 +789,7 @@ describe('pause', () => {
773
789
  await actions.token.mintSync(client, {
774
790
  token,
775
791
  to: account2.address,
776
- amount: parseEther('1000'),
792
+ amount: parseUnits('1000', 6),
777
793
  })
778
794
 
779
795
  // Verify token is not paused
@@ -785,16 +801,16 @@ describe('pause', () => {
785
801
  // Transfer gas
786
802
  await writeContractSync(client, {
787
803
  abi: Abis.tip20,
788
- address: Addresses.defaultFeeToken,
804
+ address: addresses.alphaUsd,
789
805
  functionName: 'transfer',
790
- args: [account2.address, parseEther('1')],
806
+ args: [account2.address, parseUnits('1', 6)],
791
807
  })
792
808
 
793
809
  await actions.token.transferSync(client, {
794
810
  account: account2,
795
811
  token,
796
812
  to: account3.address,
797
- amount: parseEther('100'),
813
+ amount: parseUnits('100', 6),
798
814
  })
799
815
 
800
816
  // Pause the token
@@ -822,7 +838,7 @@ describe('pause', () => {
822
838
  account: account2,
823
839
  token,
824
840
  to: account3.address,
825
- amount: parseEther('100'),
841
+ amount: parseUnits('100', 6),
826
842
  }),
827
843
  ).rejects.toThrow()
828
844
  })
@@ -852,13 +868,14 @@ describe('pause', () => {
852
868
  // Transfer gas to account2
853
869
  await writeContractSync(client, {
854
870
  abi: Abis.tip20,
855
- address: Addresses.defaultFeeToken,
871
+ address: addresses.alphaUsd,
856
872
  functionName: 'transfer',
857
- args: [account2.address, parseEther('1')],
873
+ args: [account2.address, parseUnits('1', 6)],
858
874
  })
859
875
 
860
876
  await actions.token.pauseSync(client, {
861
877
  account: account2,
878
+ feeToken: addresses.alphaUsd,
862
879
  token,
863
880
  })
864
881
 
@@ -936,7 +953,7 @@ describe('unpause', () => {
936
953
  await actions.token.mintSync(client, {
937
954
  token: address,
938
955
  to: account2.address,
939
- amount: parseEther('1000'),
956
+ amount: parseUnits('1000', 6),
940
957
  })
941
958
 
942
959
  // First pause the token
@@ -953,9 +970,9 @@ describe('unpause', () => {
953
970
  // Transfer gas to account2
954
971
  await writeContractSync(client, {
955
972
  abi: Abis.tip20,
956
- address: Addresses.defaultFeeToken,
973
+ address: addresses.alphaUsd,
957
974
  functionName: 'transfer',
958
- args: [account2.address, parseEther('1')],
975
+ args: [account2.address, parseUnits('1', 6)],
959
976
  })
960
977
 
961
978
  // Verify transfers fail when paused
@@ -964,7 +981,7 @@ describe('unpause', () => {
964
981
  account: account2,
965
982
  token: address,
966
983
  to: account3.address,
967
- amount: parseEther('100'),
984
+ amount: parseUnits('100', 6),
968
985
  }),
969
986
  ).rejects.toThrow()
970
987
 
@@ -992,14 +1009,14 @@ describe('unpause', () => {
992
1009
  account: account2,
993
1010
  token: address,
994
1011
  to: account3.address,
995
- amount: parseEther('100'),
1012
+ amount: parseUnits('100', 6),
996
1013
  })
997
1014
 
998
1015
  const balance = await actions.token.getBalance(client, {
999
1016
  token: address,
1000
1017
  account: account3.address,
1001
1018
  })
1002
- expect(balance).toBe(parseEther('100'))
1019
+ expect(balance).toBe(parseUnits('100', 6))
1003
1020
  })
1004
1021
 
1005
1022
  test('behavior: requires unpause role', async () => {
@@ -1038,14 +1055,15 @@ describe('unpause', () => {
1038
1055
  // Transfer gas to account2
1039
1056
  await writeContractSync(client, {
1040
1057
  abi: Abis.tip20,
1041
- address: Addresses.defaultFeeToken,
1058
+ address: addresses.alphaUsd,
1042
1059
  functionName: 'transfer',
1043
- args: [account2.address, parseEther('1')],
1060
+ args: [account2.address, parseUnits('1', 6)],
1044
1061
  })
1045
1062
 
1046
1063
  // Now account2 should be able to unpause
1047
1064
  await actions.token.unpauseSync(client, {
1048
1065
  account: account2,
1066
+ feeToken: addresses.alphaUsd,
1049
1067
  token: address,
1050
1068
  })
1051
1069
 
@@ -1081,21 +1099,22 @@ describe('unpause', () => {
1081
1099
  // Transfer gas to both accounts
1082
1100
  await writeContractSync(client, {
1083
1101
  abi: Abis.tip20,
1084
- address: Addresses.defaultFeeToken,
1102
+ address: addresses.alphaUsd,
1085
1103
  functionName: 'transfer',
1086
- args: [account2.address, parseEther('1')],
1104
+ args: [account2.address, parseUnits('1', 6)],
1087
1105
  })
1088
1106
 
1089
1107
  await writeContractSync(client, {
1090
1108
  abi: Abis.tip20,
1091
- address: Addresses.defaultFeeToken,
1109
+ address: addresses.alphaUsd,
1092
1110
  functionName: 'transfer',
1093
- args: [account3.address, parseEther('1')],
1111
+ args: [account3.address, parseUnits('1', 6)],
1094
1112
  })
1095
1113
 
1096
1114
  // Account2 can pause
1097
1115
  await actions.token.pauseSync(client, {
1098
1116
  account: account2,
1117
+ feeToken: addresses.alphaUsd,
1099
1118
  token: address,
1100
1119
  })
1101
1120
 
@@ -1110,6 +1129,7 @@ describe('unpause', () => {
1110
1129
  // Account3 can unpause
1111
1130
  await actions.token.unpauseSync(client, {
1112
1131
  account: account3,
1132
+ feeToken: addresses.alphaUsd,
1113
1133
  token: address,
1114
1134
  })
1115
1135
 
@@ -1121,7 +1141,7 @@ describe('unpause', () => {
1121
1141
  })
1122
1142
  })
1123
1143
 
1124
- describe('updateQuoteToken', () => {
1144
+ describe('prepareUpdateQuoteToken', () => {
1125
1145
  test('default', async () => {
1126
1146
  // Create two tokens - one to be the new quote token
1127
1147
  const { token: quoteTokenAddress } = await actions.token.createSync(
@@ -1140,22 +1160,24 @@ describe('updateQuoteToken', () => {
1140
1160
  })
1141
1161
 
1142
1162
  // Update quote token
1143
- const { receipt: updateReceipt, ...updateResult } =
1144
- await actions.token.updateQuoteTokenSync(client, {
1145
- token: address,
1146
- quoteToken: quoteTokenAddress,
1147
- })
1163
+ const {
1164
+ receipt: updateReceipt,
1165
+ nextQuoteToken,
1166
+ ...updateResult
1167
+ } = await actions.token.prepareUpdateQuoteTokenSync(client, {
1168
+ token: address,
1169
+ quoteToken: quoteTokenAddress,
1170
+ })
1148
1171
 
1149
1172
  expect(updateReceipt).toBeDefined()
1150
1173
  expect(updateResult).toMatchInlineSnapshot(`
1151
1174
  {
1152
- "newQuoteToken": "0x20C0000000000000000000000000000000000004",
1153
1175
  "updater": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
1154
1176
  }
1155
1177
  `)
1156
1178
 
1157
1179
  // Verify the event was emitted with correct quote token
1158
- expect(updateResult.newQuoteToken).toBe(quoteTokenAddress)
1180
+ expect(nextQuoteToken).toBe(quoteTokenAddress)
1159
1181
  })
1160
1182
 
1161
1183
  test('behavior: requires admin role', async () => {
@@ -1179,14 +1201,14 @@ describe('updateQuoteToken', () => {
1179
1201
  // Transfer gas to account2
1180
1202
  await writeContractSync(client, {
1181
1203
  abi: Abis.tip20,
1182
- address: Addresses.defaultFeeToken,
1204
+ address: addresses.alphaUsd,
1183
1205
  functionName: 'transfer',
1184
- args: [account2.address, parseEther('1')],
1206
+ args: [account2.address, parseUnits('1', 6)],
1185
1207
  })
1186
1208
 
1187
1209
  // Try to update quote token from account2 (not admin) - should fail
1188
1210
  await expect(
1189
- actions.token.updateQuoteTokenSync(client, {
1211
+ actions.token.prepareUpdateQuoteTokenSync(client, {
1190
1212
  account: account2,
1191
1213
  token: address,
1192
1214
  quoteToken: quoteTokenAddress,
@@ -1213,14 +1235,22 @@ describe('updateQuoteToken', () => {
1213
1235
  })
1214
1236
 
1215
1237
  // Update quote token using token ID for main token, address for quote token
1216
- const { receipt: updateReceipt, ...updateResult } =
1217
- await actions.token.updateQuoteTokenSync(client, {
1218
- token: mainTokenId,
1219
- quoteToken: quoteTokenAddress,
1220
- })
1238
+ const {
1239
+ receipt: updateReceipt,
1240
+ nextQuoteToken,
1241
+ ...updateResult
1242
+ } = await actions.token.prepareUpdateQuoteTokenSync(client, {
1243
+ token: mainTokenId,
1244
+ quoteToken: quoteTokenAddress,
1245
+ })
1221
1246
 
1247
+ expect(updateResult).toMatchInlineSnapshot(`
1248
+ {
1249
+ "updater": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
1250
+ }
1251
+ `)
1252
+ expect(nextQuoteToken).toBe(quoteTokenAddress)
1222
1253
  expect(updateReceipt.status).toBe('success')
1223
- expect(updateResult.updater).toBe(client.account.address)
1224
1254
  })
1225
1255
  })
1226
1256
 
@@ -1243,28 +1273,30 @@ describe('finalizeUpdateQuoteToken', () => {
1243
1273
  symbol: 'MAIN',
1244
1274
  })
1245
1275
 
1246
- // Update quote token (step 1)
1247
- await actions.token.updateQuoteTokenSync(client, {
1276
+ // Prepare update quote token (step 1)
1277
+ await actions.token.prepareUpdateQuoteTokenSync(client, {
1248
1278
  token: address,
1249
1279
  quoteToken: quoteTokenAddress,
1250
1280
  })
1251
1281
 
1252
1282
  // Finalize the update (step 2)
1253
- const { receipt: finalizeReceipt, ...finalizeResult } =
1254
- await actions.token.finalizeUpdateQuoteTokenSync(client, {
1255
- token: address,
1256
- })
1283
+ const {
1284
+ receipt: finalizeReceipt,
1285
+ newQuoteToken,
1286
+ ...finalizeResult
1287
+ } = await actions.token.updateQuoteTokenSync(client, {
1288
+ token: address,
1289
+ })
1257
1290
 
1258
1291
  expect(finalizeReceipt).toBeDefined()
1259
1292
  expect(finalizeResult).toMatchInlineSnapshot(`
1260
1293
  {
1261
- "newQuoteToken": "0x20C0000000000000000000000000000000000004",
1262
1294
  "updater": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
1263
1295
  }
1264
1296
  `)
1265
1297
 
1266
1298
  // Verify the quote token was updated
1267
- expect(finalizeResult.newQuoteToken).toBe(quoteTokenAddress)
1299
+ expect(newQuoteToken).toBe(quoteTokenAddress)
1268
1300
 
1269
1301
  // Verify it's reflected in metadata
1270
1302
  const metadata = await actions.token.getMetadata(client, {
@@ -1292,7 +1324,7 @@ describe('finalizeUpdateQuoteToken', () => {
1292
1324
  })
1293
1325
 
1294
1326
  // Update quote token as admin
1295
- await actions.token.updateQuoteTokenSync(client, {
1327
+ await actions.token.prepareUpdateQuoteTokenSync(client, {
1296
1328
  token: address,
1297
1329
  quoteToken: quoteTokenAddress,
1298
1330
  })
@@ -1300,14 +1332,14 @@ describe('finalizeUpdateQuoteToken', () => {
1300
1332
  // Transfer gas to account2
1301
1333
  await writeContractSync(client, {
1302
1334
  abi: Abis.tip20,
1303
- address: Addresses.defaultFeeToken,
1335
+ address: addresses.alphaUsd,
1304
1336
  functionName: 'transfer',
1305
- args: [account2.address, parseEther('1')],
1337
+ args: [account2.address, parseUnits('1', 6)],
1306
1338
  })
1307
1339
 
1308
1340
  // Try to finalize as non-admin - should fail
1309
1341
  await expect(
1310
- actions.token.finalizeUpdateQuoteTokenSync(client, {
1342
+ actions.token.updateQuoteTokenSync(client, {
1311
1343
  account: account2,
1312
1344
  token: address,
1313
1345
  }),
@@ -1331,14 +1363,14 @@ describe('finalizeUpdateQuoteToken', () => {
1331
1363
  })
1332
1364
 
1333
1365
  // Try to make token B link to token A (would create A -> B -> A loop)
1334
- await actions.token.updateQuoteTokenSync(client, {
1366
+ await actions.token.prepareUpdateQuoteTokenSync(client, {
1335
1367
  token: tokenBAddress,
1336
1368
  quoteToken: tokenAAddress,
1337
1369
  })
1338
1370
 
1339
1371
  // Finalize should fail due to circular reference detection
1340
1372
  await expect(
1341
- actions.token.finalizeUpdateQuoteTokenSync(client, {
1373
+ actions.token.updateQuoteTokenSync(client, {
1342
1374
  token: tokenBAddress,
1343
1375
  }),
1344
1376
  ).rejects.toThrow()
@@ -1537,6 +1569,119 @@ describe('hasRole', () => {
1537
1569
  })
1538
1570
  })
1539
1571
 
1572
+ describe('getRoleAdmin', () => {
1573
+ test('default', async () => {
1574
+ // Create a new token where we're the admin
1575
+ const { token: address } = await actions.token.createSync(client, {
1576
+ currency: 'USD',
1577
+ name: 'GetRoleAdmin Test Token',
1578
+ symbol: 'GRATEST',
1579
+ })
1580
+
1581
+ // Get admin role for issuer role (should be defaultAdmin)
1582
+ const issuerAdminRole = await actions.token.getRoleAdmin(client, {
1583
+ token: address,
1584
+ role: 'issuer',
1585
+ })
1586
+ expect(issuerAdminRole).toBe(
1587
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1588
+ )
1589
+
1590
+ // Get admin role for pause role (should be defaultAdmin)
1591
+ const pauseAdminRole = await actions.token.getRoleAdmin(client, {
1592
+ token: address,
1593
+ role: 'pause',
1594
+ })
1595
+ expect(pauseAdminRole).toBe(
1596
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1597
+ )
1598
+
1599
+ // Get admin role for unpause role (should be defaultAdmin)
1600
+ const unpauseAdminRole = await actions.token.getRoleAdmin(client, {
1601
+ token: address,
1602
+ role: 'unpause',
1603
+ })
1604
+ expect(unpauseAdminRole).toBe(
1605
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1606
+ )
1607
+ })
1608
+
1609
+ test('behavior: after setting role admin', async () => {
1610
+ // Create a new token
1611
+ const { token: address } = await actions.token.createSync(client, {
1612
+ currency: 'USD',
1613
+ name: 'GetRoleAdmin After Set',
1614
+ symbol: 'GRASET',
1615
+ })
1616
+
1617
+ // Get initial admin role for issuer
1618
+ const initialAdminRole = await actions.token.getRoleAdmin(client, {
1619
+ token: address,
1620
+ role: 'issuer',
1621
+ })
1622
+ expect(initialAdminRole).toBe(
1623
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1624
+ )
1625
+
1626
+ // Set pause as admin role for issuer
1627
+ await actions.token.setRoleAdminSync(client, {
1628
+ token: address,
1629
+ role: 'issuer',
1630
+ adminRole: 'pause',
1631
+ })
1632
+
1633
+ // Get updated admin role for issuer
1634
+ const updatedAdminRole = await actions.token.getRoleAdmin(client, {
1635
+ token: address,
1636
+ role: 'issuer',
1637
+ })
1638
+ expect(updatedAdminRole).toBe(TokenRole.serialize('pause'))
1639
+ })
1640
+
1641
+ test('behavior: with token ID', async () => {
1642
+ // Create a new token
1643
+ const { token: address, tokenId } = await actions.token.createSync(client, {
1644
+ currency: 'USD',
1645
+ name: 'GetRoleAdmin Token ID',
1646
+ symbol: 'GRATID',
1647
+ })
1648
+
1649
+ // Get admin role using token ID
1650
+ const adminRoleWithId = await actions.token.getRoleAdmin(client, {
1651
+ token: tokenId,
1652
+ role: 'issuer',
1653
+ })
1654
+ expect(adminRoleWithId).toBe(
1655
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1656
+ )
1657
+
1658
+ // Get admin role using address
1659
+ const adminRoleWithAddress = await actions.token.getRoleAdmin(client, {
1660
+ token: address,
1661
+ role: 'issuer',
1662
+ })
1663
+ expect(adminRoleWithAddress).toBe(adminRoleWithId)
1664
+ })
1665
+
1666
+ test('behavior: defaultAdmin role admin', async () => {
1667
+ // Create a new token
1668
+ const { token: address } = await actions.token.createSync(client, {
1669
+ currency: 'USD',
1670
+ name: 'GetRoleAdmin DefaultAdmin',
1671
+ symbol: 'GRADMIN',
1672
+ })
1673
+
1674
+ // Get admin role for defaultAdmin role (should be itself - 0x00)
1675
+ const defaultAdminAdminRole = await actions.token.getRoleAdmin(client, {
1676
+ token: address,
1677
+ role: 'defaultAdmin',
1678
+ })
1679
+ expect(defaultAdminAdminRole).toBe(
1680
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1681
+ )
1682
+ })
1683
+ })
1684
+
1540
1685
  describe('grantRoles', () => {
1541
1686
  test('default', async () => {
1542
1687
  // Create a new token where we're the admin
@@ -1556,16 +1701,16 @@ describe('grantRoles', () => {
1556
1701
  })
1557
1702
 
1558
1703
  expect(grantReceipt.status).toBe('success')
1559
- expect(grantValue).toMatchInlineSnapshot(`
1560
- [
1561
- {
1562
- "account": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
1563
- "hasRole": true,
1564
- "role": "0x114e74f6ea3bd819998f78687bfcb11b140da08e9b7d222fa9c1f1ba1f2aa122",
1565
- "sender": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
1566
- },
1567
- ]
1704
+ expect(grantValue).toHaveLength(1)
1705
+ const { role, ...restGrant } = grantValue[0]!
1706
+ expect(restGrant).toMatchInlineSnapshot(`
1707
+ {
1708
+ "account": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
1709
+ "hasRole": true,
1710
+ "sender": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
1711
+ }
1568
1712
  `)
1713
+ expect(role).toBeDefined()
1569
1714
  })
1570
1715
  })
1571
1716
 
@@ -1592,16 +1737,16 @@ describe('revokeTokenRole', async () => {
1592
1737
  })
1593
1738
 
1594
1739
  expect(revokeReceipt.status).toBe('success')
1595
- expect(revokeValue).toMatchInlineSnapshot(`
1596
- [
1597
- {
1598
- "account": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
1599
- "hasRole": false,
1600
- "role": "0x114e74f6ea3bd819998f78687bfcb11b140da08e9b7d222fa9c1f1ba1f2aa122",
1601
- "sender": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
1602
- },
1603
- ]
1740
+ expect(revokeValue).toHaveLength(1)
1741
+ const { role, ...restRevoke } = revokeValue[0]!
1742
+ expect(restRevoke).toMatchInlineSnapshot(`
1743
+ {
1744
+ "account": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
1745
+ "hasRole": false,
1746
+ "sender": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
1747
+ }
1604
1748
  `)
1749
+ expect(role).toBeDefined()
1605
1750
  })
1606
1751
  })
1607
1752
 
@@ -1631,16 +1776,16 @@ describe('renounceTokenRole', async () => {
1631
1776
  })
1632
1777
 
1633
1778
  expect(renounceReceipt.status).toBe('success')
1634
- expect(renounceValue).toMatchInlineSnapshot(`
1635
- [
1636
- {
1637
- "account": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
1638
- "hasRole": false,
1639
- "role": "0x114e74f6ea3bd819998f78687bfcb11b140da08e9b7d222fa9c1f1ba1f2aa122",
1640
- "sender": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
1641
- },
1642
- ]
1779
+ expect(renounceValue).toHaveLength(1)
1780
+ const { role, ...restRenounce } = renounceValue[0]!
1781
+ expect(restRenounce).toMatchInlineSnapshot(`
1782
+ {
1783
+ "account": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
1784
+ "hasRole": false,
1785
+ "sender": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
1786
+ }
1643
1787
  `)
1788
+ expect(role).toBeDefined()
1644
1789
  })
1645
1790
  })
1646
1791
 
@@ -1676,26 +1821,39 @@ describe('watchCreate', () => {
1676
1821
 
1677
1822
  expect(receivedTokens).toHaveLength(2)
1678
1823
 
1679
- expect(receivedTokens.at(0)!.args).toMatchInlineSnapshot(`
1824
+ const {
1825
+ token: token1,
1826
+ tokenId: tokenId1,
1827
+ ...rest1
1828
+ } = receivedTokens.at(0)!.args
1829
+ expect(rest1).toMatchInlineSnapshot(`
1680
1830
  {
1681
1831
  "admin": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
1682
1832
  "currency": "USD",
1683
1833
  "name": "Watch Test Token 1",
1834
+ "quoteToken": "0x20C0000000000000000000000000000000000000",
1684
1835
  "symbol": "WATCH1",
1685
- "token": "0x20C0000000000000000000000000000000000004",
1686
- "tokenId": 4n,
1687
1836
  }
1688
1837
  `)
1689
- expect(receivedTokens.at(1)!.args).toMatchInlineSnapshot(`
1838
+ expect(token1).toBeDefined()
1839
+ expect(tokenId1).toBeDefined()
1840
+
1841
+ const {
1842
+ token: token2,
1843
+ tokenId: tokenId2,
1844
+ ...rest2
1845
+ } = receivedTokens.at(1)!.args
1846
+ expect(rest2).toMatchInlineSnapshot(`
1690
1847
  {
1691
1848
  "admin": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
1692
1849
  "currency": "USD",
1693
1850
  "name": "Watch Test Token 2",
1851
+ "quoteToken": "0x20C0000000000000000000000000000000000000",
1694
1852
  "symbol": "WATCH2",
1695
- "token": "0x20c0000000000000000000000000000000000005",
1696
- "tokenId": 5n,
1697
1853
  }
1698
1854
  `)
1855
+ expect(token2).toBeDefined()
1856
+ expect(tokenId2).toBeDefined()
1699
1857
  } finally {
1700
1858
  // Clean up watcher
1701
1859
  if (unwatch) unwatch()
@@ -1757,19 +1915,19 @@ describe('watchCreate', () => {
1757
1915
 
1758
1916
  expect(receivedTokens.at(0)!.args.tokenId).toBe(targetTokenId)
1759
1917
  expect(receivedTokens.at(0)!.args.tokenId).toBe(id2)
1760
- expect(receivedTokens.at(0)!.args).toMatchInlineSnapshot(`
1918
+
1919
+ const { token, tokenId, ...rest } = receivedTokens.at(0)!.args
1920
+ expect(rest).toMatchInlineSnapshot(`
1761
1921
  {
1762
1922
  "admin": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
1763
1923
  "currency": "USD",
1764
1924
  "name": "Filtered Watch Token 2",
1925
+ "quoteToken": "0x20C0000000000000000000000000000000000000",
1765
1926
  "symbol": "FWATCH2",
1766
- "token": "0x20C0000000000000000000000000000000000006",
1767
- "tokenId": 6n,
1768
1927
  }
1769
1928
  `)
1770
-
1771
- // Verify the received token has the expected tokenId
1772
- expect(receivedTokens.at(0)!.args.tokenId).toBe(targetTokenId)
1929
+ expect(token).toBeDefined()
1930
+ expect(tokenId).toBe(targetTokenId)
1773
1931
  } finally {
1774
1932
  if (unwatch) unwatch()
1775
1933
  }
@@ -1810,14 +1968,14 @@ describe('watchMint', () => {
1810
1968
  await actions.token.mintSync(client, {
1811
1969
  token: address,
1812
1970
  to: account2.address,
1813
- amount: parseEther('100'),
1971
+ amount: parseUnits('100', 6),
1814
1972
  })
1815
1973
 
1816
1974
  // Mint second batch
1817
1975
  await actions.token.mintSync(client, {
1818
1976
  token: address,
1819
1977
  to: account3.address,
1820
- amount: parseEther('50'),
1978
+ amount: parseUnits('50', 6),
1821
1979
  })
1822
1980
 
1823
1981
  await setTimeout(100)
@@ -1826,13 +1984,13 @@ describe('watchMint', () => {
1826
1984
 
1827
1985
  expect(receivedMints.at(0)!.args).toMatchInlineSnapshot(`
1828
1986
  {
1829
- "amount": 100000000000000000000n,
1987
+ "amount": 100000000n,
1830
1988
  "to": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
1831
1989
  }
1832
1990
  `)
1833
1991
  expect(receivedMints.at(1)!.args).toMatchInlineSnapshot(`
1834
1992
  {
1835
- "amount": 50000000000000000000n,
1993
+ "amount": 50000000n,
1836
1994
  "to": "0x98e503f35D0a019cB0a251aD243a4cCFCF371F46",
1837
1995
  }
1838
1996
  `)
@@ -1877,21 +2035,21 @@ describe('watchMint', () => {
1877
2035
  await actions.token.mintSync(client, {
1878
2036
  token: address,
1879
2037
  to: account2.address,
1880
- amount: parseEther('100'),
2038
+ amount: parseUnits('100', 6),
1881
2039
  })
1882
2040
 
1883
2041
  // Mint to account3 (should NOT be captured)
1884
2042
  await actions.token.mintSync(client, {
1885
2043
  token: address,
1886
2044
  to: account3.address,
1887
- amount: parseEther('50'),
2045
+ amount: parseUnits('50', 6),
1888
2046
  })
1889
2047
 
1890
2048
  // Mint to account2 again (should be captured)
1891
2049
  await actions.token.mintSync(client, {
1892
2050
  token: address,
1893
2051
  to: account2.address,
1894
- amount: parseEther('75'),
2052
+ amount: parseUnits('75', 6),
1895
2053
  })
1896
2054
 
1897
2055
  await setTimeout(100)
@@ -1901,13 +2059,13 @@ describe('watchMint', () => {
1901
2059
 
1902
2060
  expect(receivedMints.at(0)!.args).toMatchInlineSnapshot(`
1903
2061
  {
1904
- "amount": 100000000000000000000n,
2062
+ "amount": 100000000n,
1905
2063
  "to": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
1906
2064
  }
1907
2065
  `)
1908
2066
  expect(receivedMints.at(1)!.args).toMatchInlineSnapshot(`
1909
2067
  {
1910
- "amount": 75000000000000000000n,
2068
+ "amount": 75000000n,
1911
2069
  "to": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
1912
2070
  }
1913
2071
  `)
@@ -1949,14 +2107,14 @@ describe('watchApprove', () => {
1949
2107
  await actions.token.approveSync(client, {
1950
2108
  token: address,
1951
2109
  spender: account2.address,
1952
- amount: parseEther('100'),
2110
+ amount: parseUnits('100', 6),
1953
2111
  })
1954
2112
 
1955
2113
  // Approve account3
1956
2114
  await actions.token.approveSync(client, {
1957
2115
  token: address,
1958
2116
  spender: account3.address,
1959
- amount: parseEther('50'),
2117
+ amount: parseUnits('50', 6),
1960
2118
  })
1961
2119
 
1962
2120
  await setTimeout(100)
@@ -1965,14 +2123,14 @@ describe('watchApprove', () => {
1965
2123
 
1966
2124
  expect(receivedApprovals.at(0)!.args).toMatchInlineSnapshot(`
1967
2125
  {
1968
- "amount": 100000000000000000000n,
2126
+ "amount": 100000000n,
1969
2127
  "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
1970
2128
  "spender": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
1971
2129
  }
1972
2130
  `)
1973
2131
  expect(receivedApprovals.at(1)!.args).toMatchInlineSnapshot(`
1974
2132
  {
1975
- "amount": 50000000000000000000n,
2133
+ "amount": 50000000n,
1976
2134
  "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
1977
2135
  "spender": "0x98e503f35D0a019cB0a251aD243a4cCFCF371F46",
1978
2136
  }
@@ -2011,21 +2169,21 @@ describe('watchApprove', () => {
2011
2169
  await actions.token.approveSync(client, {
2012
2170
  token: address,
2013
2171
  spender: account2.address,
2014
- amount: parseEther('100'),
2172
+ amount: parseUnits('100', 6),
2015
2173
  })
2016
2174
 
2017
2175
  // Approve account3 (should NOT be captured)
2018
2176
  await actions.token.approveSync(client, {
2019
2177
  token: address,
2020
2178
  spender: account3.address,
2021
- amount: parseEther('50'),
2179
+ amount: parseUnits('50', 6),
2022
2180
  })
2023
2181
 
2024
2182
  // Approve account2 again (should be captured)
2025
2183
  await actions.token.approveSync(client, {
2026
2184
  token: address,
2027
2185
  spender: account2.address,
2028
- amount: parseEther('75'),
2186
+ amount: parseUnits('75', 6),
2029
2187
  })
2030
2188
 
2031
2189
  await setTimeout(100)
@@ -2035,14 +2193,14 @@ describe('watchApprove', () => {
2035
2193
 
2036
2194
  expect(receivedApprovals.at(0)!.args).toMatchInlineSnapshot(`
2037
2195
  {
2038
- "amount": 100000000000000000000n,
2196
+ "amount": 100000000n,
2039
2197
  "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
2040
2198
  "spender": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
2041
2199
  }
2042
2200
  `)
2043
2201
  expect(receivedApprovals.at(1)!.args).toMatchInlineSnapshot(`
2044
2202
  {
2045
- "amount": 75000000000000000000n,
2203
+ "amount": 75000000n,
2046
2204
  "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
2047
2205
  "spender": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
2048
2206
  }
@@ -2085,13 +2243,13 @@ describe('watchBurn', () => {
2085
2243
  await actions.token.mintSync(client, {
2086
2244
  token: address,
2087
2245
  to: client.account.address,
2088
- amount: parseEther('200'),
2246
+ amount: parseUnits('200', 6),
2089
2247
  })
2090
2248
 
2091
2249
  await actions.token.mintSync(client, {
2092
2250
  token: address,
2093
2251
  to: account2.address,
2094
- amount: parseEther('100'),
2252
+ amount: parseUnits('100', 6),
2095
2253
  })
2096
2254
 
2097
2255
  const receivedBurns: Array<{
@@ -2111,22 +2269,22 @@ describe('watchBurn', () => {
2111
2269
  // Burn first batch
2112
2270
  await actions.token.burnSync(client, {
2113
2271
  token: address,
2114
- amount: parseEther('50'),
2272
+ amount: parseUnits('50', 6),
2115
2273
  })
2116
2274
 
2117
2275
  // Transfer gas to account2
2118
2276
  await writeContractSync(client, {
2119
2277
  abi: Abis.tip20,
2120
- address: Addresses.defaultFeeToken,
2278
+ address: addresses.alphaUsd,
2121
2279
  functionName: 'transfer',
2122
- args: [account2.address, parseEther('1')],
2280
+ args: [account2.address, parseUnits('1', 6)],
2123
2281
  })
2124
2282
 
2125
2283
  // Burn second batch from account2
2126
2284
  await actions.token.burnSync(client, {
2127
2285
  account: account2,
2128
2286
  token: address,
2129
- amount: parseEther('25'),
2287
+ amount: parseUnits('25', 6),
2130
2288
  })
2131
2289
 
2132
2290
  await setTimeout(100)
@@ -2135,13 +2293,13 @@ describe('watchBurn', () => {
2135
2293
 
2136
2294
  expect(receivedBurns.at(0)!.args).toMatchInlineSnapshot(`
2137
2295
  {
2138
- "amount": 50000000000000000000n,
2296
+ "amount": 50000000n,
2139
2297
  "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
2140
2298
  }
2141
2299
  `)
2142
2300
  expect(receivedBurns.at(1)!.args).toMatchInlineSnapshot(`
2143
2301
  {
2144
- "amount": 25000000000000000000n,
2302
+ "amount": 25000000n,
2145
2303
  "from": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
2146
2304
  }
2147
2305
  `)
@@ -2176,13 +2334,13 @@ describe('watchBurn', () => {
2176
2334
  await actions.token.mintSync(client, {
2177
2335
  token: address,
2178
2336
  to: client.account.address,
2179
- amount: parseEther('200'),
2337
+ amount: parseUnits('200', 6),
2180
2338
  })
2181
2339
 
2182
2340
  await actions.token.mintSync(client, {
2183
2341
  token: address,
2184
2342
  to: account2.address,
2185
- amount: parseEther('200'),
2343
+ amount: parseUnits('200', 6),
2186
2344
  })
2187
2345
 
2188
2346
  const receivedBurns: Array<{
@@ -2205,28 +2363,28 @@ describe('watchBurn', () => {
2205
2363
  // Burn from client.account (should be captured)
2206
2364
  await actions.token.burnSync(client, {
2207
2365
  token: address,
2208
- amount: parseEther('50'),
2366
+ amount: parseUnits('50', 6),
2209
2367
  })
2210
2368
 
2211
2369
  // Transfer gas to account2
2212
2370
  await writeContractSync(client, {
2213
2371
  abi: Abis.tip20,
2214
- address: Addresses.defaultFeeToken,
2372
+ address: addresses.alphaUsd,
2215
2373
  functionName: 'transfer',
2216
- args: [account2.address, parseEther('1')],
2374
+ args: [account2.address, parseUnits('1', 6)],
2217
2375
  })
2218
2376
 
2219
2377
  // Burn from account2 (should NOT be captured)
2220
2378
  await actions.token.burnSync(client, {
2221
2379
  account: account2,
2222
2380
  token: address,
2223
- amount: parseEther('25'),
2381
+ amount: parseUnits('25', 6),
2224
2382
  })
2225
2383
 
2226
2384
  // Burn from client.account again (should be captured)
2227
2385
  await actions.token.burnSync(client, {
2228
2386
  token: address,
2229
- amount: parseEther('75'),
2387
+ amount: parseUnits('75', 6),
2230
2388
  })
2231
2389
 
2232
2390
  await setTimeout(100)
@@ -2236,13 +2394,13 @@ describe('watchBurn', () => {
2236
2394
 
2237
2395
  expect(receivedBurns.at(0)!.args).toMatchInlineSnapshot(`
2238
2396
  {
2239
- "amount": 50000000000000000000n,
2397
+ "amount": 50000000n,
2240
2398
  "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
2241
2399
  }
2242
2400
  `)
2243
2401
  expect(receivedBurns.at(1)!.args).toMatchInlineSnapshot(`
2244
2402
  {
2245
- "amount": 75000000000000000000n,
2403
+ "amount": 75000000n,
2246
2404
  "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
2247
2405
  }
2248
2406
  `)
@@ -2281,20 +2439,24 @@ describe('watchAdminRole', () => {
2281
2439
 
2282
2440
  try {
2283
2441
  // Set role admin for issuer role
2284
- const { receipt: setRoleAdmin1Receipt, ...setRoleAdmin1Result } =
2285
- await actions.token.setRoleAdminSync(client, {
2286
- token: address,
2287
- role: 'issuer',
2288
- adminRole: 'pause',
2289
- })
2442
+ const {
2443
+ receipt: setRoleAdmin1Receipt,
2444
+ role,
2445
+ newAdminRole,
2446
+ ...setRoleAdmin1Result
2447
+ } = await actions.token.setRoleAdminSync(client, {
2448
+ token: address,
2449
+ role: 'issuer',
2450
+ adminRole: 'pause',
2451
+ })
2290
2452
  expect(setRoleAdmin1Receipt).toBeDefined()
2291
2453
  expect(setRoleAdmin1Result).toMatchInlineSnapshot(`
2292
2454
  {
2293
- "newAdminRole": "0x139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46d",
2294
- "role": "0x114e74f6ea3bd819998f78687bfcb11b140da08e9b7d222fa9c1f1ba1f2aa122",
2295
2455
  "sender": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
2296
2456
  }
2297
2457
  `)
2458
+ expect(role).toBeDefined()
2459
+ expect(newAdminRole).toBeDefined()
2298
2460
 
2299
2461
  // Set role admin for pause role
2300
2462
  await actions.token.setRoleAdminSync(client, {
@@ -2458,6 +2620,10 @@ describe('watchRole', () => {
2458
2620
  })
2459
2621
 
2460
2622
  describe('watchTransfer', () => {
2623
+ beforeAll(async () => {
2624
+ await fetch(`${rpcUrl}/restart`)
2625
+ })
2626
+
2461
2627
  test('default', async () => {
2462
2628
  // Create a new token for testing
2463
2629
  const { token: address } = await actions.token.createSync(client, {
@@ -2477,7 +2643,7 @@ describe('watchTransfer', () => {
2477
2643
  await actions.token.mintSync(client, {
2478
2644
  token: address,
2479
2645
  to: client.account.address,
2480
- amount: parseEther('500'),
2646
+ amount: parseUnits('500', 6),
2481
2647
  })
2482
2648
 
2483
2649
  const receivedTransfers: Array<{
@@ -2498,30 +2664,30 @@ describe('watchTransfer', () => {
2498
2664
  await actions.token.transferSync(client, {
2499
2665
  token: address,
2500
2666
  to: account2.address,
2501
- amount: parseEther('100'),
2667
+ amount: parseUnits('100', 6),
2502
2668
  })
2503
2669
 
2504
2670
  // Transfer to account3
2505
2671
  await actions.token.transferSync(client, {
2506
2672
  token: address,
2507
2673
  to: account3.address,
2508
- amount: parseEther('50'),
2674
+ amount: parseUnits('50', 6),
2509
2675
  })
2510
2676
 
2511
2677
  await setTimeout(200)
2512
2678
 
2513
- expect(receivedTransfers).toHaveLength(2)
2679
+ expect(receivedTransfers.length).toBeGreaterThanOrEqual(2)
2514
2680
 
2515
2681
  expect(receivedTransfers.at(0)!.args).toMatchInlineSnapshot(`
2516
2682
  {
2517
- "amount": 100000000000000000000n,
2683
+ "amount": 100000000n,
2518
2684
  "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
2519
2685
  "to": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
2520
2686
  }
2521
2687
  `)
2522
2688
  expect(receivedTransfers.at(1)!.args).toMatchInlineSnapshot(`
2523
2689
  {
2524
- "amount": 50000000000000000000n,
2690
+ "amount": 50000000n,
2525
2691
  "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
2526
2692
  "to": "0x98e503f35D0a019cB0a251aD243a4cCFCF371F46",
2527
2693
  }
@@ -2550,7 +2716,7 @@ describe('watchTransfer', () => {
2550
2716
  await actions.token.mintSync(client, {
2551
2717
  token: address,
2552
2718
  to: client.account.address,
2553
- amount: parseEther('500'),
2719
+ amount: parseUnits('500', 6),
2554
2720
  })
2555
2721
 
2556
2722
  const receivedTransfers: Array<{
@@ -2574,21 +2740,21 @@ describe('watchTransfer', () => {
2574
2740
  await actions.token.transferSync(client, {
2575
2741
  token: address,
2576
2742
  to: account2.address,
2577
- amount: parseEther('100'),
2743
+ amount: parseUnits('100', 6),
2578
2744
  })
2579
2745
 
2580
2746
  // Transfer to account3 (should NOT be captured)
2581
2747
  await actions.token.transferSync(client, {
2582
2748
  token: address,
2583
2749
  to: account3.address,
2584
- amount: parseEther('50'),
2750
+ amount: parseUnits('50', 6),
2585
2751
  })
2586
2752
 
2587
2753
  // Transfer to account2 again (should be captured)
2588
2754
  await actions.token.transferSync(client, {
2589
2755
  token: address,
2590
2756
  to: account2.address,
2591
- amount: parseEther('75'),
2757
+ amount: parseUnits('75', 6),
2592
2758
  })
2593
2759
 
2594
2760
  await setTimeout(100)
@@ -2598,14 +2764,14 @@ describe('watchTransfer', () => {
2598
2764
 
2599
2765
  expect(receivedTransfers.at(0)!.args).toMatchInlineSnapshot(`
2600
2766
  {
2601
- "amount": 100000000000000000000n,
2767
+ "amount": 100000000n,
2602
2768
  "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
2603
2769
  "to": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
2604
2770
  }
2605
2771
  `)
2606
2772
  expect(receivedTransfers.at(1)!.args).toMatchInlineSnapshot(`
2607
2773
  {
2608
- "amount": 75000000000000000000n,
2774
+ "amount": 75000000n,
2609
2775
  "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
2610
2776
  "to": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
2611
2777
  }
@@ -2654,14 +2820,14 @@ describe('watchUpdateQuoteToken', () => {
2654
2820
  })
2655
2821
 
2656
2822
  try {
2657
- // Step 1: Update quote token (should emit UpdateQuoteToken)
2658
- await actions.token.updateQuoteTokenSync(client, {
2823
+ // Step 1: Prepare update quote token (should emit NextQuoteTokenSet)
2824
+ await actions.token.prepareUpdateQuoteTokenSync(client, {
2659
2825
  token: address,
2660
2826
  quoteToken: quoteTokenAddress,
2661
2827
  })
2662
2828
 
2663
2829
  // Step 2: Finalize the update (should emit QuoteTokenUpdateFinalized)
2664
- await actions.token.finalizeUpdateQuoteTokenSync(client, {
2830
+ await actions.token.updateQuoteTokenSync(client, {
2665
2831
  token: address,
2666
2832
  })
2667
2833
 
@@ -2671,12 +2837,12 @@ describe('watchUpdateQuoteToken', () => {
2671
2837
  expect(receivedUpdates).toHaveLength(2)
2672
2838
 
2673
2839
  // First event: update proposed (not finalized)
2674
- expect(receivedUpdates.at(0)!.args.finalized).toBe(false)
2675
- expect(receivedUpdates.at(0)!.args.newQuoteToken).toBe(quoteTokenAddress)
2840
+ expect(receivedUpdates.at(0)!.args.completed).toBe(false)
2841
+ expect(receivedUpdates.at(0)!.args.nextQuoteToken).toBe(quoteTokenAddress)
2676
2842
  expect(receivedUpdates.at(0)!.args.updater).toBe(client.account.address)
2677
2843
 
2678
2844
  // Second event: update finalized
2679
- expect(receivedUpdates.at(1)!.args.finalized).toBe(true)
2845
+ expect(receivedUpdates.at(1)!.args.completed).toBe(true)
2680
2846
  expect(receivedUpdates.at(1)!.args.newQuoteToken).toBe(quoteTokenAddress)
2681
2847
  expect(receivedUpdates.at(1)!.args.updater).toBe(client.account.address)
2682
2848
  } finally {
@@ -2717,7 +2883,7 @@ describe('watchUpdateQuoteToken', () => {
2717
2883
 
2718
2884
  try {
2719
2885
  // Only update (don't finalize)
2720
- await actions.token.updateQuoteTokenSync(client, {
2886
+ await actions.token.prepareUpdateQuoteTokenSync(client, {
2721
2887
  token: address,
2722
2888
  quoteToken: quoteTokenAddress,
2723
2889
  })
@@ -2726,8 +2892,8 @@ describe('watchUpdateQuoteToken', () => {
2726
2892
 
2727
2893
  // Should only receive 1 event (not finalized)
2728
2894
  expect(receivedUpdates).toHaveLength(1)
2729
- expect(receivedUpdates.at(0)!.args.finalized).toBe(false)
2730
- expect(receivedUpdates.at(0)!.args.newQuoteToken).toBe(quoteTokenAddress)
2895
+ expect(receivedUpdates.at(0)!.args.completed).toBe(false)
2896
+ expect(receivedUpdates.at(0)!.args.nextQuoteToken).toBe(quoteTokenAddress)
2731
2897
  } finally {
2732
2898
  if (unwatch) unwatch()
2733
2899
  }