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.
- package/README.md +33 -2
- package/dist/chains.d.ts +509 -115
- package/dist/chains.d.ts.map +1 -1
- package/dist/chains.js +20 -9
- package/dist/chains.js.map +1 -1
- package/dist/ox/Order.d.ts +92 -0
- package/dist/ox/Order.d.ts.map +1 -0
- package/dist/ox/Order.js +88 -0
- package/dist/ox/Order.js.map +1 -0
- package/dist/ox/OrdersFilters.d.ts +72 -0
- package/dist/ox/OrdersFilters.d.ts.map +1 -0
- package/dist/ox/OrdersFilters.js +100 -0
- package/dist/ox/OrdersFilters.js.map +1 -0
- package/dist/ox/Pagination.d.ts +128 -0
- package/dist/ox/Pagination.d.ts.map +1 -0
- package/dist/ox/Pagination.js +78 -0
- package/dist/ox/Pagination.js.map +1 -0
- package/dist/ox/PoolId.d.ts +18 -0
- package/dist/ox/PoolId.d.ts.map +1 -0
- package/dist/ox/PoolId.js +13 -0
- package/dist/ox/PoolId.js.map +1 -0
- package/dist/ox/RpcSchema.d.ts +32 -0
- package/dist/ox/RpcSchema.d.ts.map +1 -0
- package/dist/ox/RpcSchema.js +2 -0
- package/dist/ox/RpcSchema.js.map +1 -0
- package/dist/ox/SignatureEnvelope.d.ts +1 -1
- package/dist/ox/SignatureEnvelope.d.ts.map +1 -1
- package/dist/ox/SignatureEnvelope.js.map +1 -1
- package/dist/{viem → ox}/Tick.d.ts +4 -0
- package/dist/ox/Tick.d.ts.map +1 -0
- package/dist/ox/Tick.js.map +1 -0
- package/dist/ox/Transaction.d.ts.map +1 -1
- package/dist/ox/Transaction.js +2 -1
- package/dist/ox/Transaction.js.map +1 -1
- package/dist/ox/TransactionEnvelopeAA.d.ts +6 -6
- package/dist/ox/TransactionEnvelopeAA.d.ts.map +1 -1
- package/dist/ox/TransactionEnvelopeAA.js +4 -2
- package/dist/ox/TransactionEnvelopeAA.js.map +1 -1
- package/dist/ox/TransactionRequest.d.ts +4 -0
- package/dist/ox/TransactionRequest.d.ts.map +1 -1
- package/dist/ox/TransactionRequest.js.map +1 -1
- package/dist/ox/index.d.ts +6 -0
- package/dist/ox/index.d.ts.map +1 -1
- package/dist/ox/index.js +6 -0
- package/dist/ox/index.js.map +1 -1
- package/dist/prool/Instance.d.ts.map +1 -1
- package/dist/prool/Instance.js +20 -4
- package/dist/prool/Instance.js.map +1 -1
- package/dist/viem/Abis.d.ts +1469 -1082
- package/dist/viem/Abis.d.ts.map +1 -1
- package/dist/viem/Abis.js +932 -671
- package/dist/viem/Abis.js.map +1 -1
- package/dist/viem/Account.d.ts +150 -0
- package/dist/viem/Account.d.ts.map +1 -0
- package/dist/viem/Account.js +221 -0
- package/dist/viem/Account.js.map +1 -0
- package/dist/viem/Actions/amm.d.ts +144 -161
- package/dist/viem/Actions/amm.d.ts.map +1 -1
- package/dist/viem/Actions/amm.js +109 -163
- package/dist/viem/Actions/amm.js.map +1 -1
- package/dist/viem/Actions/dex.d.ts +920 -664
- package/dist/viem/Actions/dex.d.ts.map +1 -1
- package/dist/viem/Actions/dex.js +129 -30
- package/dist/viem/Actions/dex.js.map +1 -1
- package/dist/viem/Actions/faucet.d.ts +34 -0
- package/dist/viem/Actions/faucet.d.ts.map +1 -0
- package/dist/viem/Actions/faucet.js +33 -0
- package/dist/viem/Actions/faucet.js.map +1 -0
- package/dist/viem/Actions/fee.d.ts +16 -30
- package/dist/viem/Actions/fee.d.ts.map +1 -1
- package/dist/viem/Actions/fee.js +13 -13
- package/dist/viem/Actions/fee.js.map +1 -1
- package/dist/viem/Actions/index.d.ts +2 -0
- package/dist/viem/Actions/index.d.ts.map +1 -1
- package/dist/viem/Actions/index.js +2 -0
- package/dist/viem/Actions/index.js.map +1 -1
- package/dist/viem/Actions/policy.d.ts +46 -46
- package/dist/viem/Actions/policy.js +46 -46
- package/dist/viem/Actions/reward.d.ts +3236 -0
- package/dist/viem/Actions/reward.d.ts.map +1 -0
- package/dist/viem/Actions/reward.js +725 -0
- package/dist/viem/Actions/reward.js.map +1 -0
- package/dist/viem/Actions/token.d.ts +4399 -2750
- package/dist/viem/Actions/token.d.ts.map +1 -1
- package/dist/viem/Actions/token.js +361 -482
- package/dist/viem/Actions/token.js.map +1 -1
- package/dist/viem/Addresses.d.ts +1 -2
- package/dist/viem/Addresses.d.ts.map +1 -1
- package/dist/viem/Addresses.js +1 -2
- package/dist/viem/Addresses.js.map +1 -1
- package/dist/viem/Chain.d.ts +38 -12
- package/dist/viem/Chain.d.ts.map +1 -1
- package/dist/viem/Chain.js +27 -18
- package/dist/viem/Chain.js.map +1 -1
- package/dist/viem/Decorator.d.ts +1009 -428
- package/dist/viem/Decorator.d.ts.map +1 -1
- package/dist/viem/Decorator.js +17 -5
- package/dist/viem/Decorator.js.map +1 -1
- package/dist/viem/Formatters.d.ts +8 -1
- package/dist/viem/Formatters.d.ts.map +1 -1
- package/dist/viem/Formatters.js +17 -0
- package/dist/viem/Formatters.js.map +1 -1
- package/dist/viem/P256.d.ts +2 -0
- package/dist/viem/P256.d.ts.map +1 -0
- package/dist/viem/P256.js +2 -0
- package/dist/viem/P256.js.map +1 -0
- package/dist/viem/Secp256k1.d.ts +2 -0
- package/dist/viem/Secp256k1.d.ts.map +1 -0
- package/dist/viem/Secp256k1.js +2 -0
- package/dist/viem/Secp256k1.js.map +1 -0
- package/dist/viem/TokenIds.d.ts +1 -2
- package/dist/viem/TokenIds.d.ts.map +1 -1
- package/dist/viem/TokenIds.js +1 -2
- package/dist/viem/TokenIds.js.map +1 -1
- package/dist/viem/Transaction.d.ts +1 -1
- package/dist/viem/Transaction.d.ts.map +1 -1
- package/dist/viem/Transaction.js +46 -5
- package/dist/viem/Transaction.js.map +1 -1
- package/dist/viem/WebAuthnP256.d.ts +79 -0
- package/dist/viem/WebAuthnP256.d.ts.map +1 -0
- package/dist/viem/WebAuthnP256.js +95 -0
- package/dist/viem/WebAuthnP256.js.map +1 -0
- package/dist/viem/WebCryptoP256.d.ts +2 -0
- package/dist/viem/WebCryptoP256.d.ts.map +1 -0
- package/dist/viem/WebCryptoP256.js +2 -0
- package/dist/viem/WebCryptoP256.js.map +1 -0
- package/dist/viem/index.d.ts +6 -3
- package/dist/viem/index.d.ts.map +1 -1
- package/dist/viem/index.js +6 -3
- package/dist/viem/index.js.map +1 -1
- package/dist/viem/internal/account.d.ts +24 -0
- package/dist/viem/internal/account.d.ts.map +1 -0
- package/dist/viem/internal/account.js +68 -0
- package/dist/viem/internal/account.js.map +1 -0
- package/dist/viem/internal/types.d.ts +10 -0
- package/dist/viem/internal/types.d.ts.map +1 -1
- package/dist/wagmi/Actions/amm.d.ts +428 -0
- package/dist/wagmi/Actions/amm.d.ts.map +1 -0
- package/dist/wagmi/Actions/amm.js +472 -0
- package/dist/wagmi/Actions/amm.js.map +1 -0
- package/dist/wagmi/Actions/dex.d.ts +908 -0
- package/dist/wagmi/Actions/dex.d.ts.map +1 -0
- package/dist/wagmi/Actions/dex.js +1023 -0
- package/dist/wagmi/Actions/dex.js.map +1 -0
- package/dist/wagmi/Actions/faucet.d.ts +35 -0
- package/dist/wagmi/Actions/faucet.d.ts.map +1 -0
- package/dist/wagmi/Actions/faucet.js +33 -0
- package/dist/wagmi/Actions/faucet.js.map +1 -0
- package/dist/wagmi/Actions/fee.d.ts +111 -0
- package/dist/wagmi/Actions/fee.d.ts.map +1 -0
- package/dist/wagmi/Actions/fee.js +126 -0
- package/dist/wagmi/Actions/fee.js.map +1 -0
- package/dist/wagmi/Actions/index.d.ts +7 -0
- package/dist/wagmi/Actions/index.d.ts.map +1 -0
- package/dist/wagmi/Actions/index.js +7 -0
- package/dist/wagmi/Actions/index.js.map +1 -0
- package/dist/wagmi/Actions/reward.d.ts +348 -0
- package/dist/wagmi/Actions/reward.d.ts.map +1 -0
- package/dist/wagmi/Actions/reward.js +388 -0
- package/dist/wagmi/Actions/reward.js.map +1 -0
- package/dist/wagmi/Actions/token.d.ts +1546 -0
- package/dist/wagmi/Actions/token.d.ts.map +1 -0
- package/dist/wagmi/Actions/token.js +1712 -0
- package/dist/wagmi/Actions/token.js.map +1 -0
- package/dist/wagmi/Connector.d.ts +81 -0
- package/dist/wagmi/Connector.d.ts.map +1 -0
- package/dist/wagmi/Connector.js +261 -0
- package/dist/wagmi/Connector.js.map +1 -0
- package/dist/wagmi/Hooks/amm.d.ts +421 -0
- package/dist/wagmi/Hooks/amm.d.ts.map +1 -0
- package/dist/wagmi/Hooks/amm.js +504 -0
- package/dist/wagmi/Hooks/amm.js.map +1 -0
- package/dist/wagmi/Hooks/dex.d.ts +816 -0
- package/dist/wagmi/Hooks/dex.d.ts.map +1 -0
- package/dist/wagmi/Hooks/dex.js +973 -0
- package/dist/wagmi/Hooks/dex.js.map +1 -0
- package/dist/wagmi/Hooks/faucet.d.ts +39 -0
- package/dist/wagmi/Hooks/faucet.d.ts.map +1 -0
- package/dist/wagmi/Hooks/faucet.js +40 -0
- package/dist/wagmi/Hooks/faucet.js.map +1 -0
- package/dist/wagmi/Hooks/fee.d.ts +97 -0
- package/dist/wagmi/Hooks/fee.d.ts.map +1 -0
- package/dist/wagmi/Hooks/fee.js +109 -0
- package/dist/wagmi/Hooks/fee.js.map +1 -0
- package/dist/wagmi/Hooks/index.d.ts +7 -0
- package/dist/wagmi/Hooks/index.d.ts.map +1 -0
- package/dist/wagmi/Hooks/index.js +7 -0
- package/dist/wagmi/Hooks/index.js.map +1 -0
- package/dist/wagmi/Hooks/reward.d.ts +307 -0
- package/dist/wagmi/Hooks/reward.d.ts.map +1 -0
- package/dist/wagmi/Hooks/reward.js +349 -0
- package/dist/wagmi/Hooks/reward.js.map +1 -0
- package/dist/wagmi/Hooks/token.d.ts +1388 -0
- package/dist/wagmi/Hooks/token.d.ts.map +1 -0
- package/dist/wagmi/Hooks/token.js +1657 -0
- package/dist/wagmi/Hooks/token.js.map +1 -0
- package/dist/wagmi/index.d.ts +4 -0
- package/dist/wagmi/index.d.ts.map +1 -0
- package/dist/wagmi/index.js +4 -0
- package/dist/wagmi/index.js.map +1 -0
- package/package.json +54 -10
- package/src/chains.ts +21 -9
- package/src/ox/Order.test.ts +78 -0
- package/src/ox/Order.ts +125 -0
- package/src/ox/OrdersFilters.test.ts +182 -0
- package/src/ox/OrdersFilters.ts +125 -0
- package/src/ox/Pagination.test.ts +162 -0
- package/src/ox/Pagination.ts +164 -0
- package/src/ox/PoolId.test.ts +33 -0
- package/src/ox/PoolId.ts +27 -0
- package/src/ox/RpcSchema.ts +35 -0
- package/src/ox/SignatureEnvelope.ts +3 -1
- package/src/{viem → ox}/Tick.test.ts +1 -1
- package/src/{viem → ox}/Tick.ts +5 -0
- package/src/ox/Transaction.test.ts +1 -1
- package/src/ox/Transaction.ts +2 -1
- package/src/ox/TransactionEnvelopeAA.test.ts +239 -96
- package/src/ox/TransactionEnvelopeAA.ts +9 -7
- package/src/ox/TransactionRequest.ts +4 -0
- package/src/ox/index.ts +6 -0
- package/src/prool/Instance.ts +51 -37
- package/src/prool/internal/chain.json +104 -52
- package/src/tsconfig.json +9 -0
- package/src/viem/Abis.ts +972 -710
- package/src/viem/Account.ts +279 -0
- package/src/viem/Actions/__snapshots__/dex.test.ts.snap +850 -0
- package/src/viem/Actions/amm.test.ts +173 -169
- package/src/viem/Actions/amm.ts +131 -203
- package/src/viem/Actions/dex.test.ts +563 -484
- package/src/viem/Actions/dex.ts +203 -30
- package/src/viem/Actions/faucet.ts +50 -0
- package/src/viem/Actions/fee.test.ts +23 -34
- package/src/viem/Actions/fee.ts +20 -13
- package/src/viem/Actions/index.ts +2 -0
- package/src/viem/Actions/policy.test.ts +19 -33
- package/src/viem/Actions/policy.ts +46 -46
- package/src/viem/Actions/reward.test.ts +457 -0
- package/src/viem/Actions/reward.ts +999 -0
- package/src/viem/Actions/token.test.ts +453 -287
- package/src/viem/Actions/token.ts +605 -693
- package/src/viem/Addresses.ts +1 -2
- package/src/viem/Chain.bench-d.ts +12 -0
- package/src/viem/Chain.ts +70 -20
- package/src/viem/Decorator.bench-d.ts +1 -1
- package/src/viem/Decorator.test.ts +3 -1
- package/src/viem/Decorator.ts +1049 -442
- package/src/viem/Formatters.ts +31 -5
- package/src/viem/P256.ts +1 -0
- package/src/viem/Secp256k1.ts +1 -0
- package/src/viem/TokenIds.ts +1 -2
- package/src/viem/Transaction.ts +53 -7
- package/src/viem/WebAuthnP256.ts +140 -0
- package/src/viem/WebCryptoP256.ts +1 -0
- package/src/viem/e2e.test.ts +1126 -297
- package/src/viem/index.ts +6 -3
- package/src/viem/internal/account.ts +107 -0
- package/src/viem/internal/types.ts +9 -0
- package/src/wagmi/Actions/__snapshots__/dex.test.ts.snap +310 -0
- package/src/wagmi/Actions/amm.test.ts +198 -0
- package/src/wagmi/Actions/amm.ts +691 -0
- package/src/wagmi/Actions/dex.test.ts +1507 -0
- package/src/wagmi/Actions/dex.ts +1640 -0
- package/src/wagmi/Actions/faucet.ts +46 -0
- package/src/wagmi/Actions/fee.test.ts +63 -0
- package/src/wagmi/Actions/fee.ts +208 -0
- package/src/wagmi/Actions/index.ts +6 -0
- package/src/wagmi/Actions/reward.test.ts +210 -0
- package/src/wagmi/Actions/reward.ts +632 -0
- package/src/wagmi/Actions/token.test.ts +1308 -0
- package/src/wagmi/Actions/token.ts +2613 -0
- package/src/wagmi/Connector.test.ts +53 -0
- package/src/wagmi/Connector.ts +390 -0
- package/src/wagmi/Hooks/__snapshots__/dex.test.ts.snap +457 -0
- package/src/wagmi/Hooks/amm.test.ts +424 -0
- package/src/wagmi/Hooks/amm.ts +806 -0
- package/src/wagmi/Hooks/dex.test.ts +1017 -0
- package/src/wagmi/Hooks/dex.ts +1685 -0
- package/src/wagmi/Hooks/faucet.ts +76 -0
- package/src/wagmi/Hooks/fee.test.ts +166 -0
- package/src/wagmi/Hooks/fee.ts +206 -0
- package/src/wagmi/Hooks/index.ts +6 -0
- package/src/wagmi/Hooks/reward.test.ts +219 -0
- package/src/wagmi/Hooks/reward.ts +672 -0
- package/src/wagmi/Hooks/token.test.ts +1670 -0
- package/src/wagmi/Hooks/token.ts +2906 -0
- package/src/wagmi/index.ts +3 -0
- package/src/wagmi/internal/types.ts +16 -0
- package/dist/viem/Client.d.ts +0 -27
- package/dist/viem/Client.d.ts.map +0 -1
- package/dist/viem/Client.js +0 -28
- package/dist/viem/Client.js.map +0 -1
- package/dist/viem/Tick.d.ts.map +0 -1
- package/dist/viem/Tick.js.map +0 -1
- package/src/viem/Client.bench-d.ts +0 -8
- package/src/viem/Client.test.ts +0 -178
- package/src/viem/Client.ts +0 -91
- /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 {
|
|
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 {
|
|
9
|
-
|
|
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 =
|
|
13
|
-
|
|
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:
|
|
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":
|
|
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(
|
|
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:
|
|
51
|
+
address: addresses.alphaUsd,
|
|
60
52
|
functionName: 'transfer',
|
|
61
|
-
args: [account2.address,
|
|
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:
|
|
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(
|
|
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(
|
|
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:
|
|
92
|
-
token:
|
|
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":
|
|
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:
|
|
108
|
+
token: addresses.alphaUsd,
|
|
109
109
|
spender: account2.address,
|
|
110
110
|
})
|
|
111
|
-
expect(allowance).toBe(
|
|
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:
|
|
117
|
+
address: addresses.alphaUsd,
|
|
118
118
|
functionName: 'transfer',
|
|
119
|
-
args: [account2.address,
|
|
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:
|
|
124
|
+
amount: parseUnits('50', 6),
|
|
125
125
|
account: account2,
|
|
126
126
|
from: account.address,
|
|
127
127
|
to: '0x0000000000000000000000000000000000000001',
|
|
128
|
-
token:
|
|
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:
|
|
135
|
+
token: addresses.alphaUsd,
|
|
136
136
|
})
|
|
137
|
-
expect(allowance).toBe(
|
|
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:
|
|
143
|
+
token: addresses.alphaUsd,
|
|
144
144
|
})
|
|
145
|
-
expect(balance).toBe(
|
|
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:
|
|
153
|
-
token:
|
|
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":
|
|
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:
|
|
174
|
+
token: addresses.alphaUsd,
|
|
170
175
|
spender: account2.address,
|
|
171
176
|
})
|
|
172
|
-
expect(allowance).toBe(
|
|
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:
|
|
183
|
+
address: addresses.alphaUsd,
|
|
179
184
|
functionName: 'transfer',
|
|
180
|
-
args: [account2.address,
|
|
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:
|
|
190
|
+
amount: parseUnits('50', 6),
|
|
186
191
|
account: account2,
|
|
187
192
|
from: account.address,
|
|
188
193
|
to: '0x0000000000000000000000000000000000000001',
|
|
189
|
-
token:
|
|
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:
|
|
201
|
+
token: addresses.alphaUsd,
|
|
197
202
|
})
|
|
198
|
-
expect(allowance).toBe(
|
|
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:
|
|
209
|
+
token: addresses.alphaUsd,
|
|
205
210
|
})
|
|
206
|
-
expect(balance).toBe(
|
|
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 } =
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
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:
|
|
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:
|
|
249
|
+
address: addresses.alphaUsd,
|
|
243
250
|
functionName: 'approve',
|
|
244
|
-
args: [account2.address,
|
|
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(
|
|
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:
|
|
266
|
+
token: addresses.alphaUsd,
|
|
259
267
|
spender: account2.address,
|
|
260
268
|
})
|
|
261
269
|
|
|
262
|
-
expect(allowance).toBe(
|
|
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:
|
|
276
|
+
token: addresses.alphaUsd,
|
|
269
277
|
spender: account2.address,
|
|
270
278
|
})
|
|
271
279
|
|
|
272
|
-
expect(allowance).toBe(
|
|
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:
|
|
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:
|
|
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":
|
|
321
|
+
"supplyCap": 340282366920938463463374607431768211455n,
|
|
318
322
|
"symbol": "AlphaUSD",
|
|
319
|
-
"totalSupply":
|
|
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.
|
|
358
|
+
token: TokenIds.linkingUsd,
|
|
355
359
|
})
|
|
356
360
|
|
|
357
361
|
expect(metadata).toMatchInlineSnapshot(`
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
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.
|
|
374
|
+
token: Addresses.linkingUsd,
|
|
371
375
|
})
|
|
372
376
|
|
|
373
377
|
expect(metadata).toMatchInlineSnapshot(`
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
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:
|
|
444
|
+
amount: parseUnits('1000', 6),
|
|
441
445
|
})
|
|
442
446
|
expect(mintReceipt).toBeDefined()
|
|
443
447
|
expect(mintResult).toMatchInlineSnapshot(`
|
|
444
448
|
{
|
|
445
|
-
"amount":
|
|
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(
|
|
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(
|
|
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:
|
|
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(
|
|
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:
|
|
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":
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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(
|
|
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:
|
|
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":
|
|
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:
|
|
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:
|
|
624
|
+
address: addresses.alphaUsd,
|
|
614
625
|
functionName: 'transfer',
|
|
615
|
-
args: [account2.address,
|
|
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:
|
|
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(
|
|
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(
|
|
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:
|
|
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(
|
|
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(
|
|
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:
|
|
698
|
+
amount: parseUnits('100', 6),
|
|
684
699
|
})
|
|
685
700
|
expect(receipt).toBeDefined()
|
|
686
701
|
expect(result).toMatchInlineSnapshot(`
|
|
687
702
|
{
|
|
688
|
-
"amount":
|
|
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(
|
|
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(
|
|
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:
|
|
739
|
+
address: addresses.alphaUsd,
|
|
725
740
|
functionName: 'transfer',
|
|
726
|
-
args: [account2.address,
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
804
|
+
address: addresses.alphaUsd,
|
|
789
805
|
functionName: 'transfer',
|
|
790
|
-
args: [account2.address,
|
|
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:
|
|
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:
|
|
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:
|
|
871
|
+
address: addresses.alphaUsd,
|
|
856
872
|
functionName: 'transfer',
|
|
857
|
-
args: [account2.address,
|
|
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:
|
|
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:
|
|
973
|
+
address: addresses.alphaUsd,
|
|
957
974
|
functionName: 'transfer',
|
|
958
|
-
args: [account2.address,
|
|
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:
|
|
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:
|
|
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(
|
|
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:
|
|
1058
|
+
address: addresses.alphaUsd,
|
|
1042
1059
|
functionName: 'transfer',
|
|
1043
|
-
args: [account2.address,
|
|
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:
|
|
1102
|
+
address: addresses.alphaUsd,
|
|
1085
1103
|
functionName: 'transfer',
|
|
1086
|
-
args: [account2.address,
|
|
1104
|
+
args: [account2.address, parseUnits('1', 6)],
|
|
1087
1105
|
})
|
|
1088
1106
|
|
|
1089
1107
|
await writeContractSync(client, {
|
|
1090
1108
|
abi: Abis.tip20,
|
|
1091
|
-
address:
|
|
1109
|
+
address: addresses.alphaUsd,
|
|
1092
1110
|
functionName: 'transfer',
|
|
1093
|
-
args: [account3.address,
|
|
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('
|
|
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 {
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
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(
|
|
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:
|
|
1204
|
+
address: addresses.alphaUsd,
|
|
1183
1205
|
functionName: 'transfer',
|
|
1184
|
-
args: [account2.address,
|
|
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.
|
|
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 {
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
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
|
-
//
|
|
1247
|
-
await actions.token.
|
|
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 {
|
|
1254
|
-
|
|
1255
|
-
|
|
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(
|
|
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.
|
|
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:
|
|
1335
|
+
address: addresses.alphaUsd,
|
|
1304
1336
|
functionName: 'transfer',
|
|
1305
|
-
args: [account2.address,
|
|
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.
|
|
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.
|
|
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.
|
|
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).
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
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).
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
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).
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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":
|
|
1987
|
+
"amount": 100000000n,
|
|
1830
1988
|
"to": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
|
|
1831
1989
|
}
|
|
1832
1990
|
`)
|
|
1833
1991
|
expect(receivedMints.at(1)!.args).toMatchInlineSnapshot(`
|
|
1834
1992
|
{
|
|
1835
|
-
"amount":
|
|
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:
|
|
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:
|
|
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:
|
|
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":
|
|
2062
|
+
"amount": 100000000n,
|
|
1905
2063
|
"to": "0x8C8d35429F74ec245F8Ef2f4Fd1e551cFF97d650",
|
|
1906
2064
|
}
|
|
1907
2065
|
`)
|
|
1908
2066
|
expect(receivedMints.at(1)!.args).toMatchInlineSnapshot(`
|
|
1909
2067
|
{
|
|
1910
|
-
"amount":
|
|
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:
|
|
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:
|
|
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":
|
|
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":
|
|
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:
|
|
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:
|
|
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:
|
|
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":
|
|
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":
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
2278
|
+
address: addresses.alphaUsd,
|
|
2121
2279
|
functionName: 'transfer',
|
|
2122
|
-
args: [account2.address,
|
|
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:
|
|
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":
|
|
2296
|
+
"amount": 50000000n,
|
|
2139
2297
|
"from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
|
|
2140
2298
|
}
|
|
2141
2299
|
`)
|
|
2142
2300
|
expect(receivedBurns.at(1)!.args).toMatchInlineSnapshot(`
|
|
2143
2301
|
{
|
|
2144
|
-
"amount":
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
2372
|
+
address: addresses.alphaUsd,
|
|
2215
2373
|
functionName: 'transfer',
|
|
2216
|
-
args: [account2.address,
|
|
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:
|
|
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:
|
|
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":
|
|
2397
|
+
"amount": 50000000n,
|
|
2240
2398
|
"from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
|
|
2241
2399
|
}
|
|
2242
2400
|
`)
|
|
2243
2401
|
expect(receivedBurns.at(1)!.args).toMatchInlineSnapshot(`
|
|
2244
2402
|
{
|
|
2245
|
-
"amount":
|
|
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 {
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
2674
|
+
amount: parseUnits('50', 6),
|
|
2509
2675
|
})
|
|
2510
2676
|
|
|
2511
2677
|
await setTimeout(200)
|
|
2512
2678
|
|
|
2513
|
-
expect(receivedTransfers).
|
|
2679
|
+
expect(receivedTransfers.length).toBeGreaterThanOrEqual(2)
|
|
2514
2680
|
|
|
2515
2681
|
expect(receivedTransfers.at(0)!.args).toMatchInlineSnapshot(`
|
|
2516
2682
|
{
|
|
2517
|
-
"amount":
|
|
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":
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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":
|
|
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":
|
|
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:
|
|
2658
|
-
await actions.token.
|
|
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.
|
|
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.
|
|
2675
|
-
expect(receivedUpdates.at(0)!.args.
|
|
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.
|
|
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.
|
|
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.
|
|
2730
|
-
expect(receivedUpdates.at(0)!.args.
|
|
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
|
}
|