@swapkit/toolboxes 4.2.1 → 4.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/cardano/index.cjs +2 -2
- package/dist/src/cardano/index.cjs.map +3 -3
- package/dist/src/cardano/index.js +2 -2
- package/dist/src/cardano/index.js.map +3 -3
- package/dist/src/evm/index.cjs +2 -2
- package/dist/src/evm/index.cjs.map +8 -8
- package/dist/src/evm/index.js +2 -2
- package/dist/src/evm/index.js.map +8 -8
- package/dist/src/index.cjs +3 -3
- package/dist/src/index.cjs.map +15 -15
- package/dist/src/index.js +3 -3
- package/dist/src/index.js.map +15 -15
- package/dist/src/substrate/index.cjs +2 -2
- package/dist/src/substrate/index.cjs.map +3 -3
- package/dist/src/substrate/index.js +2 -2
- package/dist/src/substrate/index.js.map +3 -3
- package/dist/src/tron/index.cjs +2 -2
- package/dist/src/tron/index.cjs.map +3 -3
- package/dist/src/tron/index.js +2 -2
- package/dist/src/tron/index.js.map +3 -3
- package/dist/src/utxo/index.cjs +3 -3
- package/dist/src/utxo/index.cjs.map +6 -6
- package/dist/src/utxo/index.js +3 -3
- package/dist/src/utxo/index.js.map +6 -6
- package/dist/types/cardano/toolbox.d.ts +1 -1
- package/dist/types/cardano/toolbox.d.ts.map +1 -1
- package/dist/types/evm/api.d.ts +1 -1
- package/dist/types/evm/api.d.ts.map +1 -1
- package/dist/types/evm/helpers.d.ts.map +1 -1
- package/dist/types/evm/toolbox/baseEVMToolbox.d.ts +1 -1
- package/dist/types/evm/toolbox/baseEVMToolbox.d.ts.map +1 -1
- package/dist/types/evm/toolbox/evm.d.ts +97 -17
- package/dist/types/evm/toolbox/evm.d.ts.map +1 -1
- package/dist/types/evm/toolbox/index.d.ts.map +1 -1
- package/dist/types/evm/toolbox/op.d.ts +1 -1
- package/dist/types/evm/toolbox/op.d.ts.map +1 -1
- package/dist/types/evm/types.d.ts +4 -2
- package/dist/types/evm/types.d.ts.map +1 -1
- package/dist/types/substrate/balance.d.ts.map +1 -1
- package/dist/types/tron/toolbox.d.ts.map +1 -1
- package/dist/types/utxo/helpers/api.d.ts +2 -34
- package/dist/types/utxo/helpers/api.d.ts.map +1 -1
- package/dist/types/utxo/toolbox/bitcoinCash.d.ts +1 -1
- package/dist/types/utxo/toolbox/bitcoinCash.d.ts.map +1 -1
- package/dist/types/utxo/toolbox/index.d.ts +3 -27
- package/dist/types/utxo/toolbox/index.d.ts.map +1 -1
- package/dist/types/utxo/toolbox/params.d.ts +32 -0
- package/dist/types/utxo/toolbox/params.d.ts.map +1 -0
- package/dist/types/utxo/toolbox/utxo.d.ts +1 -1
- package/dist/types/utxo/toolbox/utxo.d.ts.map +1 -1
- package/dist/types/utxo/toolbox/zcash.d.ts.map +1 -1
- package/package.json +86 -58
- package/src/__tests__/address-validation-all-chains.test.ts +162 -0
- package/src/__tests__/addressValidator.test.ts +162 -0
- package/src/cardano/__tests__/toolbox.test.ts +48 -0
- package/src/cardano/index.ts +2 -0
- package/src/cardano/toolbox.ts +168 -0
- package/src/cardano/types.ts +10 -0
- package/src/cosmos/__tests__/toolbox.test.ts +91 -0
- package/src/cosmos/index.ts +4 -0
- package/src/cosmos/thorchainUtils/addressFormat.ts +22 -0
- package/src/cosmos/thorchainUtils/index.ts +4 -0
- package/src/cosmos/thorchainUtils/messages.ts +212 -0
- package/src/cosmos/thorchainUtils/registry.ts +43 -0
- package/src/cosmos/thorchainUtils/types/MsgCompiled.ts +2800 -0
- package/src/cosmos/thorchainUtils/types/client-types.ts +54 -0
- package/src/cosmos/thorchainUtils/types/index.ts +1 -0
- package/src/cosmos/toolbox/cosmos.ts +345 -0
- package/src/cosmos/toolbox/index.ts +35 -0
- package/src/cosmos/toolbox/thorchain.ts +249 -0
- package/src/cosmos/types.ts +48 -0
- package/src/cosmos/util.ts +214 -0
- package/src/evm/__tests__/address-validation.test.ts +84 -0
- package/src/evm/__tests__/ethereum.test.ts +137 -0
- package/src/evm/__tests__/signMessage.test.ts +60 -0
- package/src/evm/api.ts +10 -0
- package/src/evm/contracts/eth/multicall.ts +165 -0
- package/src/evm/contracts/op/gasOracle.ts +145 -0
- package/src/evm/helpers.ts +73 -0
- package/src/evm/index.ts +4 -0
- package/src/evm/toolbox/baseEVMToolbox.ts +695 -0
- package/src/evm/toolbox/evm.ts +67 -0
- package/src/evm/toolbox/index.ts +44 -0
- package/src/evm/toolbox/op.ts +163 -0
- package/src/evm/types.ts +146 -0
- package/src/index.ts +260 -0
- package/src/near/__tests__/core.test.ts +70 -0
- package/src/near/helpers/core.ts +85 -0
- package/src/near/helpers/gasEstimation.ts +96 -0
- package/src/near/helpers/nep141.ts +50 -0
- package/src/near/index.ts +21 -0
- package/src/near/toolbox.ts +421 -0
- package/src/near/types/contract.ts +32 -0
- package/src/near/types/nep141.ts +34 -0
- package/src/near/types/toolbox.ts +55 -0
- package/src/near/types.ts +44 -0
- package/src/radix/index.ts +132 -0
- package/src/ripple/index.ts +179 -0
- package/src/solana/index.ts +36 -0
- package/src/solana/toolbox.ts +415 -0
- package/src/substrate/balance.ts +88 -0
- package/src/substrate/index.ts +2 -0
- package/src/substrate/substrate.ts +281 -0
- package/src/substrate/types.ts +115 -0
- package/src/sui/__tests__/toolbox.test.ts +82 -0
- package/src/sui/index.ts +2 -0
- package/src/sui/toolbox.ts +165 -0
- package/src/sui/types.ts +11 -0
- package/src/ton/__tests__/toolbox.test.ts +63 -0
- package/src/ton/index.ts +2 -0
- package/src/ton/toolbox.ts +136 -0
- package/src/ton/types.ts +13 -0
- package/src/tron/__tests__/toolbox.test.ts +221 -0
- package/src/tron/helpers/trc20.abi.ts +107 -0
- package/src/tron/helpers/trongrid.ts +53 -0
- package/src/tron/index.ts +21 -0
- package/src/tron/toolbox.ts +585 -0
- package/src/tron/types.ts +83 -0
- package/src/types.ts +28 -0
- package/src/utils.ts +27 -0
- package/src/utxo/__tests__/zcash-integration.test.ts +97 -0
- package/src/utxo/helpers/api.ts +471 -0
- package/src/utxo/helpers/bchaddrjs.ts +166 -0
- package/src/utxo/helpers/coinselect.ts +92 -0
- package/src/utxo/helpers/index.ts +4 -0
- package/src/utxo/helpers/txSize.ts +137 -0
- package/src/utxo/index.ts +6 -0
- package/src/utxo/toolbox/bitcoinCash.ts +243 -0
- package/src/utxo/toolbox/index.ts +59 -0
- package/src/utxo/toolbox/params.ts +18 -0
- package/src/utxo/toolbox/utxo.ts +439 -0
- package/src/utxo/toolbox/validators.ts +36 -0
- package/src/utxo/toolbox/zcash.ts +245 -0
- package/src/utxo/types.ts +39 -0
package/package.json
CHANGED
|
@@ -1,79 +1,91 @@
|
|
|
1
1
|
{
|
|
2
2
|
"dependencies": {
|
|
3
3
|
"@bitcoinerlab/secp256k1": "~1.2.0",
|
|
4
|
-
"@bitgo/utxo-lib": "~11.
|
|
5
|
-
"@cosmjs/amino": "~0.
|
|
6
|
-
"@cosmjs/crypto": "
|
|
7
|
-
"@cosmjs/proto-signing": "~0.
|
|
8
|
-
"@cosmjs/stargate": "~0.
|
|
9
|
-
"@meshsdk/core": "1.9.0-beta.
|
|
10
|
-
"@mysten/bcs": "~1.
|
|
11
|
-
"@mysten/sui": "~1.
|
|
12
|
-
"@
|
|
13
|
-
"@
|
|
14
|
-
"@
|
|
15
|
-
"@
|
|
16
|
-
"@
|
|
4
|
+
"@bitgo/utxo-lib": "~11.13.1",
|
|
5
|
+
"@cosmjs/amino": "~0.37.0",
|
|
6
|
+
"@cosmjs/crypto": "0.37.0",
|
|
7
|
+
"@cosmjs/proto-signing": "~0.37.0",
|
|
8
|
+
"@cosmjs/stargate": "~0.37.0",
|
|
9
|
+
"@meshsdk/core": "1.9.0-beta.86",
|
|
10
|
+
"@mysten/bcs": "~1.9.2",
|
|
11
|
+
"@mysten/sui": "~1.44.0",
|
|
12
|
+
"@near-js/accounts": "~2.5.0",
|
|
13
|
+
"@near-js/crypto": "~2.5.0",
|
|
14
|
+
"@near-js/providers": "~2.5.0",
|
|
15
|
+
"@near-js/signers": "~2.5.0",
|
|
16
|
+
"@near-js/transactions": "~2.5.0",
|
|
17
|
+
"@near-js/utils": "~2.5.0",
|
|
18
|
+
"@noble/hashes": "2.0.1",
|
|
19
|
+
"@polkadot/api": "15.10.2",
|
|
20
|
+
"@polkadot/keyring": "~13.5.7",
|
|
21
|
+
"@polkadot/rpc-provider": "~15.10.2",
|
|
22
|
+
"@polkadot/util": "~13.5.7",
|
|
23
|
+
"@polkadot/util-crypto": "~13.5.7",
|
|
17
24
|
"@psf/bitcoincashjs-lib": "~4.0.3",
|
|
18
25
|
"@radixdlt/babylon-gateway-api-sdk": "~1.10.0",
|
|
19
26
|
"@radixdlt/radix-dapp-toolkit": "~2.2.0",
|
|
20
|
-
"@scure/base": "~
|
|
21
|
-
"@scure/bip32": "~
|
|
22
|
-
"@scure/bip39": "~
|
|
27
|
+
"@scure/base": "~2.0.0",
|
|
28
|
+
"@scure/bip32": "~2.0.1",
|
|
29
|
+
"@scure/bip39": "~2.0.1",
|
|
23
30
|
"@solana/spl-memo": "~0.2.5",
|
|
24
|
-
"@solana/spl-token": "~0.4.
|
|
31
|
+
"@solana/spl-token": "~0.4.14",
|
|
25
32
|
"@solana/web3.js": "~1.98.0",
|
|
26
|
-
"@swapkit/helpers": "4.
|
|
33
|
+
"@swapkit/helpers": "4.5.3",
|
|
27
34
|
"@ton/crypto": "~3.3.0",
|
|
28
|
-
"@ton/ton": "~15.
|
|
35
|
+
"@ton/ton": "~15.4.0",
|
|
29
36
|
"base64-js": "~1.5.1",
|
|
30
37
|
"bitcoinjs-lib": "~6.1.0",
|
|
31
38
|
"bs58check": "~4.0.0",
|
|
32
39
|
"cashaddrjs": "~0.4.4",
|
|
33
40
|
"coininfo": "~5.2.1",
|
|
34
|
-
"cosmjs-types": "~0.
|
|
41
|
+
"cosmjs-types": "~0.10.1",
|
|
35
42
|
"ecpair": "~2.1.0",
|
|
36
43
|
"ethers": "^6.14.0",
|
|
37
|
-
"micro-key-producer": "~0.
|
|
38
|
-
"near-api-js": "~6.3.0",
|
|
44
|
+
"micro-key-producer": "~0.8.2",
|
|
39
45
|
"near-sdk-js": "~2.0.0",
|
|
40
46
|
"near-seed-phrase": "~0.2.1",
|
|
41
47
|
"protobufjs": "~7.5.4",
|
|
42
|
-
"tronweb": "
|
|
43
|
-
"ts-pattern": "^5.
|
|
44
|
-
"xrpl": "~4.
|
|
48
|
+
"tronweb": "6.1.0",
|
|
49
|
+
"ts-pattern": "^5.9.0",
|
|
50
|
+
"xrpl": "~4.4.2"
|
|
45
51
|
},
|
|
46
52
|
"description": "SwapKit - Toolboxes",
|
|
47
53
|
"devDependencies": {
|
|
48
54
|
"@bitcoinerlab/secp256k1": "1.2.0",
|
|
49
|
-
"@bitgo/utxo-lib": "11.
|
|
50
|
-
"@cosmjs/amino": "0.
|
|
51
|
-
"@cosmjs/crypto": "0.
|
|
52
|
-
"@cosmjs/proto-signing": "0.
|
|
53
|
-
"@cosmjs/stargate": "0.
|
|
54
|
-
"@meshsdk/core": "1.9.0-beta.
|
|
55
|
-
"@mysten/bcs": "1.
|
|
56
|
-
"@mysten/sui": "1.
|
|
57
|
-
"@
|
|
58
|
-
"@
|
|
59
|
-
"@
|
|
60
|
-
"@
|
|
61
|
-
"@
|
|
62
|
-
"@
|
|
63
|
-
"@
|
|
64
|
-
"@
|
|
55
|
+
"@bitgo/utxo-lib": "11.13.1",
|
|
56
|
+
"@cosmjs/amino": "0.37.0",
|
|
57
|
+
"@cosmjs/crypto": "0.37.0",
|
|
58
|
+
"@cosmjs/proto-signing": "0.37.0",
|
|
59
|
+
"@cosmjs/stargate": "0.37.0",
|
|
60
|
+
"@meshsdk/core": "1.9.0-beta.86",
|
|
61
|
+
"@mysten/bcs": "1.9.2",
|
|
62
|
+
"@mysten/sui": "1.44.0",
|
|
63
|
+
"@near-js/accounts": "2.5.0",
|
|
64
|
+
"@near-js/crypto": "2.5.0",
|
|
65
|
+
"@near-js/providers": "2.5.0",
|
|
66
|
+
"@near-js/signers": "2.5.0",
|
|
67
|
+
"@near-js/transactions": "2.5.0",
|
|
68
|
+
"@near-js/utils": "2.5.0",
|
|
69
|
+
"@noble/hashes": "2.0.1",
|
|
70
|
+
"@nomicfoundation/hardhat-ethers": "4.0.3",
|
|
71
|
+
"@nomicfoundation/hardhat-network-helpers": "3.0.2",
|
|
72
|
+
"@nomicfoundation/hardhat-toolbox": "6.1.0",
|
|
73
|
+
"@polkadot/api": "15.10.2",
|
|
74
|
+
"@polkadot/keyring": "13.5.7",
|
|
75
|
+
"@polkadot/types": "15.10.2",
|
|
76
|
+
"@polkadot/util": "13.5.7",
|
|
77
|
+
"@polkadot/util-crypto": "13.5.7",
|
|
65
78
|
"@psf/bitcoincashjs-lib": "4.0.3",
|
|
66
79
|
"@radixdlt/babylon-gateway-api-sdk": "1.10.1",
|
|
67
80
|
"@radixdlt/radix-dapp-toolkit": "2.2.1",
|
|
68
|
-
"@scure/base": "
|
|
69
|
-
"@scure/bip32": "
|
|
70
|
-
"@scure/bip39": "
|
|
81
|
+
"@scure/base": "2.0.0",
|
|
82
|
+
"@scure/bip32": "2.0.1",
|
|
83
|
+
"@scure/bip39": "2.0.1",
|
|
71
84
|
"@solana/spl-memo": "0.2.5",
|
|
72
|
-
"@solana/spl-token": "0.4.
|
|
85
|
+
"@solana/spl-token": "0.4.14",
|
|
73
86
|
"@solana/web3.js": "1.98.4",
|
|
74
|
-
"@swapkit/helpers": "4.4.5",
|
|
75
87
|
"@ton/crypto": "3.3.0",
|
|
76
|
-
"@ton/ton": "15.
|
|
88
|
+
"@ton/ton": "15.4.0",
|
|
77
89
|
"@types/bn.js": "5.2.0",
|
|
78
90
|
"@types/crypto-js": "4.2.2",
|
|
79
91
|
"@types/elliptic": "6.4.18",
|
|
@@ -82,83 +94,99 @@
|
|
|
82
94
|
"bs58check": "4.0.0",
|
|
83
95
|
"cashaddrjs": "0.4.4",
|
|
84
96
|
"coininfo": "5.2.1",
|
|
85
|
-
"cosmjs-types": "0.
|
|
97
|
+
"cosmjs-types": "0.10.1",
|
|
86
98
|
"ecpair": "2.1.0",
|
|
87
99
|
"ethers": "6.15.0",
|
|
88
|
-
"hardhat": "
|
|
89
|
-
"micro-key-producer": "0.
|
|
90
|
-
"near-api-js": "6.3.0",
|
|
100
|
+
"hardhat": "3.0.11",
|
|
101
|
+
"micro-key-producer": "0.8.2",
|
|
91
102
|
"near-sdk-js": "2.0.0",
|
|
92
103
|
"near-seed-phrase": "0.2.1",
|
|
93
104
|
"protobufjs": "7.5.4",
|
|
94
|
-
"tronweb": "6.0
|
|
95
|
-
"ts-pattern": "5.
|
|
96
|
-
"xrpl": "4.
|
|
105
|
+
"tronweb": "6.1.0",
|
|
106
|
+
"ts-pattern": "5.9.0",
|
|
107
|
+
"xrpl": "4.4.2"
|
|
97
108
|
},
|
|
98
109
|
"exports": {
|
|
99
|
-
".": {
|
|
110
|
+
".": {
|
|
111
|
+
"bun": "./src/index.ts",
|
|
112
|
+
"default": "./dist/src/index.js",
|
|
113
|
+
"require": "./dist/src/index.cjs",
|
|
114
|
+
"types": "./dist/types/index.d.ts"
|
|
115
|
+
},
|
|
100
116
|
"./cardano": {
|
|
117
|
+
"bun": "./src/cardano/index.ts",
|
|
101
118
|
"default": "./dist/src/cardano/index.js",
|
|
102
119
|
"require": "./dist/src/cardano/index.cjs",
|
|
103
120
|
"types": "./dist/types/cardano/index.d.ts"
|
|
104
121
|
},
|
|
105
122
|
"./cosmos": {
|
|
123
|
+
"bun": "./src/cosmos/index.ts",
|
|
106
124
|
"default": "./dist/src/cosmos/index.js",
|
|
107
125
|
"require": "./dist/src/cosmos/index.cjs",
|
|
108
126
|
"types": "./dist/types/cosmos/index.d.ts"
|
|
109
127
|
},
|
|
110
128
|
"./evm": {
|
|
129
|
+
"bun": "./src/evm/index.ts",
|
|
111
130
|
"default": "./dist/src/evm/index.js",
|
|
112
131
|
"require": "./dist/src/evm/index.cjs",
|
|
113
132
|
"types": "./dist/types/evm/index.d.ts"
|
|
114
133
|
},
|
|
115
134
|
"./near": {
|
|
135
|
+
"bun": "./src/near/index.ts",
|
|
116
136
|
"default": "./dist/src/near/index.js",
|
|
117
137
|
"require": "./dist/src/near/index.cjs",
|
|
118
138
|
"types": "./dist/types/near/index.d.ts"
|
|
119
139
|
},
|
|
120
140
|
"./radix": {
|
|
141
|
+
"bun": "./src/radix/index.ts",
|
|
121
142
|
"default": "./dist/src/radix/index.js",
|
|
122
143
|
"require": "./dist/src/radix/index.cjs",
|
|
123
144
|
"types": "./dist/types/radix/index.d.ts"
|
|
124
145
|
},
|
|
125
146
|
"./ripple": {
|
|
147
|
+
"bun": "./src/ripple/index.ts",
|
|
126
148
|
"default": "./dist/src/ripple/index.js",
|
|
127
149
|
"require": "./dist/src/ripple/index.cjs",
|
|
128
150
|
"types": "./dist/types/ripple/index.d.ts"
|
|
129
151
|
},
|
|
130
152
|
"./solana": {
|
|
153
|
+
"bun": "./src/solana/index.ts",
|
|
131
154
|
"default": "./dist/src/solana/index.js",
|
|
132
155
|
"require": "./dist/src/solana/index.cjs",
|
|
133
156
|
"types": "./dist/types/solana/index.d.ts"
|
|
134
157
|
},
|
|
135
158
|
"./substrate": {
|
|
159
|
+
"bun": "./src/substrate/index.ts",
|
|
136
160
|
"default": "./dist/src/substrate/index.js",
|
|
137
161
|
"require": "./dist/src/substrate/index.cjs",
|
|
138
162
|
"types": "./dist/types/substrate/index.d.ts"
|
|
139
163
|
},
|
|
140
164
|
"./sui": {
|
|
165
|
+
"bun": "./src/sui/index.ts",
|
|
141
166
|
"default": "./dist/src/sui/index.js",
|
|
142
167
|
"require": "./dist/src/sui/index.cjs",
|
|
143
168
|
"types": "./dist/types/sui/index.d.ts"
|
|
144
169
|
},
|
|
145
170
|
"./ton": {
|
|
171
|
+
"bun": "./src/ton/index.ts",
|
|
146
172
|
"default": "./dist/src/ton/index.js",
|
|
147
173
|
"require": "./dist/src/ton/index.cjs",
|
|
148
174
|
"types": "./dist/types/ton/index.d.ts"
|
|
149
175
|
},
|
|
150
176
|
"./tron": {
|
|
177
|
+
"bun": "./src/tron/index.ts",
|
|
151
178
|
"default": "./dist/src/tron/index.js",
|
|
152
179
|
"require": "./dist/src/tron/index.cjs",
|
|
153
180
|
"types": "./dist/types/tron/index.d.ts"
|
|
154
181
|
},
|
|
155
182
|
"./utxo": {
|
|
183
|
+
"bun": "./src/utxo/index.ts",
|
|
156
184
|
"default": "./dist/src/utxo/index.js",
|
|
157
185
|
"require": "./dist/src/utxo/index.cjs",
|
|
158
186
|
"types": "./dist/types/utxo/index.d.ts"
|
|
159
187
|
}
|
|
160
188
|
},
|
|
161
|
-
"files": ["dist/"],
|
|
189
|
+
"files": ["dist/", "src/"],
|
|
162
190
|
"homepage": "https://github.com/swapkit/SwapKit",
|
|
163
191
|
"license": "Apache-2.0",
|
|
164
192
|
"name": "@swapkit/toolboxes",
|
|
@@ -166,12 +194,12 @@
|
|
|
166
194
|
"scripts": {
|
|
167
195
|
"build": "bun run ./build.ts",
|
|
168
196
|
"build:clean": "rm -rf dist && bun run ./build.ts",
|
|
169
|
-
"clean": "rm -rf dist node_modules *.tsbuildinfo",
|
|
197
|
+
"clean": "rm -rf cache dist node_modules *.tsbuildinfo",
|
|
170
198
|
"test": "bun test",
|
|
171
199
|
"test:ci": "bun test --coverage",
|
|
172
200
|
"type-check": "bun tsc --noEmit",
|
|
173
201
|
"type-check:go": "tsgo"
|
|
174
202
|
},
|
|
175
203
|
"type": "module",
|
|
176
|
-
"version": "4.
|
|
204
|
+
"version": "4.3.3"
|
|
177
205
|
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { beforeAll, describe, expect, test } from "bun:test";
|
|
2
|
+
import { Chain } from "@swapkit/helpers";
|
|
3
|
+
import { getAddressValidator } from "../index";
|
|
4
|
+
|
|
5
|
+
const context: { validateAddress: (params: { address: string; chain: Chain }) => boolean } = {} as any;
|
|
6
|
+
|
|
7
|
+
beforeAll(async () => {
|
|
8
|
+
context.validateAddress = await getAddressValidator();
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
describe("Address Validation - All Chains", () => {
|
|
12
|
+
describe("Valid addresses for each chain", () => {
|
|
13
|
+
const validAddresses = {
|
|
14
|
+
[Chain.Ethereum]: ["0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0"],
|
|
15
|
+
[Chain.Avalanche]: ["0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0"],
|
|
16
|
+
[Chain.Arbitrum]: ["0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0"],
|
|
17
|
+
[Chain.BinanceSmartChain]: ["0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0"],
|
|
18
|
+
[Chain.Optimism]: ["0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0"],
|
|
19
|
+
[Chain.Polygon]: ["0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0"],
|
|
20
|
+
[Chain.Base]: ["0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0"],
|
|
21
|
+
[Chain.Bitcoin]: ["bc1qjpmp8xvg9k4ysa7nvev3lw7qcclvxzt2ex75kr", "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"],
|
|
22
|
+
[Chain.BitcoinCash]: ["qzhcfqxrnhcw88c433tq0fjlw0uut8c0e5d3cf8566"],
|
|
23
|
+
[Chain.Dogecoin]: ["DPrKsuhVibyfMMYRmKP49US5PBQR8zq6v4"],
|
|
24
|
+
[Chain.Litecoin]: ["ltc1qs4h7p8x0kfhs88wazmq2d40t59dwdlxd6rlpjz"],
|
|
25
|
+
[Chain.Dash]: ["XoBBveBZv32rq9MMBt88QSVsUtdj9cMCLy"],
|
|
26
|
+
[Chain.Zcash]: ["t1Mh7QW9g1gK94CSRxniD49aLAJ67s6UerX"],
|
|
27
|
+
[Chain.Cosmos]: ["cosmos12d7d2rlxp7urkp8z0p8sft2fm07ewyjrfvul3f"],
|
|
28
|
+
[Chain.Kujira]: ["kujira12d7d2rlxp7urkp8z0p8sft2fm07ewyjrcy78ur"],
|
|
29
|
+
[Chain.Maya]: ["maya1hm0sdz9v2h5jwjuu0ssp8x98upvlc6py2t7e6j"],
|
|
30
|
+
[Chain.Noble]: ["noble12d7d2rlxp7urkp8z0p8sft2fm07ewyjrp0fhf8"],
|
|
31
|
+
[Chain.THORChain]: ["thor1hm0sdz9v2h5jwjuu0ssp8x98upvlc6py2uq4vz"],
|
|
32
|
+
[Chain.Polkadot]: ["16kQVedQo7yYoFSp2MnQ78zP39xWnFGePnZps2APEyt9K9KZ"],
|
|
33
|
+
[Chain.Chainflip]: ["cFPctKfXisvnrhss2eMV2VdiUNRm1F5pX4WfqkcT3ZrLKJXrS"],
|
|
34
|
+
[Chain.Cardano]: [
|
|
35
|
+
"addr1qxk2md7wufs2cas0dfxch0uu59079s7yc5k9pw8s49wpm25s8ynu4svqm7m4hd04d4jvm6e5vvyw7dm4gvpqyfklgn8qetu85s",
|
|
36
|
+
],
|
|
37
|
+
[Chain.Near]: ["a03fafdf5f97d3c6be6bff9e55f057dda76fefbb7e149f5469248f41e812cb6e"],
|
|
38
|
+
[Chain.Ripple]: ["rhDQXdwWR2RstC7sLjLMbjCeWT3PuSAZVu"],
|
|
39
|
+
[Chain.Solana]: ["4UHWuPwyV3XCcnwrpEdWAEW3WLUP1RDMaK3ANNsRUjfM"],
|
|
40
|
+
[Chain.Sui]: ["0x57b861db681d8e47b586e6e9a92f6ed210dbbb440670b8122420848cf0e844fb"],
|
|
41
|
+
[Chain.Ton]: ["EQCC1GV4iL5EkQqICYshf3AF7ESbceCYhVK-go1SkOMOBTNE"],
|
|
42
|
+
[Chain.Radix]: [] as string[],
|
|
43
|
+
[Chain.Harbor]: [] as string[],
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
for (const [chain, addresses] of Object.entries(validAddresses)) {
|
|
47
|
+
if (addresses.length === 0) continue;
|
|
48
|
+
|
|
49
|
+
test(`should validate valid ${chain} addresses`, () => {
|
|
50
|
+
for (const address of addresses) {
|
|
51
|
+
const result = context.validateAddress({ address, chain: chain as Chain });
|
|
52
|
+
expect(result).toBe(true);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
describe("Invalid addresses should be rejected", () => {
|
|
59
|
+
const invalidTestCases: Array<{ chain: Chain; addresses: string[] }> = [
|
|
60
|
+
{
|
|
61
|
+
addresses: [
|
|
62
|
+
"",
|
|
63
|
+
"invalid",
|
|
64
|
+
"0x123",
|
|
65
|
+
"0xG051176f5F0B7ccC8fA0376F08aaa28F316A38a2a0",
|
|
66
|
+
"THr473cZqHwBLEmTWUUR1WTotxijWWbRGD",
|
|
67
|
+
"bc1qjpmp8xvg9k4ysa7nvev3lw7qcclvxzt2ex75kr",
|
|
68
|
+
"cosmos12d7d2rlxp7urkp8z0p8sft2fm07ewyjrfvul3f",
|
|
69
|
+
],
|
|
70
|
+
chain: Chain.Ethereum,
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
addresses: [
|
|
74
|
+
"",
|
|
75
|
+
"invalid",
|
|
76
|
+
"0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0",
|
|
77
|
+
"THr473cZqHwBLEmTWUUR1WTotxijWWbRGD",
|
|
78
|
+
"cosmos12d7d2rlxp7urkp8z0p8sft2fm07ewyjrfvul3f",
|
|
79
|
+
"qzhcfqxrnhcw88c433tq0fjlw0uut8c0e5d3cf8566",
|
|
80
|
+
],
|
|
81
|
+
chain: Chain.Bitcoin,
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
addresses: [
|
|
85
|
+
"",
|
|
86
|
+
"invalid",
|
|
87
|
+
"0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0",
|
|
88
|
+
"bc1qjpmp8xvg9k4ysa7nvev3lw7qcclvxzt2ex75kr",
|
|
89
|
+
"thor1hm0sdz9v2h5jwjuu0ssp8x98upvlc6py2uq4vz",
|
|
90
|
+
"maya1hm0sdz9v2h5jwjuu0ssp8x98upvlc6py2t7e6j",
|
|
91
|
+
],
|
|
92
|
+
chain: Chain.Cosmos,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
addresses: [
|
|
96
|
+
"",
|
|
97
|
+
"invalid",
|
|
98
|
+
"0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0",
|
|
99
|
+
"4UHWuPwyV3XCcnwrpEdWAEW3WLUP1RDMaK3ANNsRUjfM123",
|
|
100
|
+
"123",
|
|
101
|
+
],
|
|
102
|
+
chain: Chain.Solana,
|
|
103
|
+
},
|
|
104
|
+
{ addresses: ["", "invalid!"], chain: Chain.Near },
|
|
105
|
+
{
|
|
106
|
+
addresses: [
|
|
107
|
+
"",
|
|
108
|
+
"invalid",
|
|
109
|
+
"0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0",
|
|
110
|
+
"bc1qjpmp8xvg9k4ysa7nvev3lw7qcclvxzt2ex75kr",
|
|
111
|
+
],
|
|
112
|
+
chain: Chain.Cardano,
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
addresses: [
|
|
116
|
+
"",
|
|
117
|
+
"invalid",
|
|
118
|
+
"0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0",
|
|
119
|
+
"bc1qjpmp8xvg9k4ysa7nvev3lw7qcclvxzt2ex75kr",
|
|
120
|
+
],
|
|
121
|
+
chain: Chain.Ripple,
|
|
122
|
+
},
|
|
123
|
+
];
|
|
124
|
+
|
|
125
|
+
for (const { chain, addresses } of invalidTestCases) {
|
|
126
|
+
test(`should reject invalid ${chain} addresses`, () => {
|
|
127
|
+
for (const address of addresses) {
|
|
128
|
+
const result = context.validateAddress({ address, chain });
|
|
129
|
+
expect(result).toBe(false);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
describe("Edge cases and type safety", () => {
|
|
136
|
+
test("should handle non-string inputs safely", () => {
|
|
137
|
+
const edgeCases = [null, undefined, 123, {}, [], true, false];
|
|
138
|
+
|
|
139
|
+
for (const testCase of edgeCases) {
|
|
140
|
+
expect(context.validateAddress({ address: testCase as any, chain: Chain.Ethereum })).toBe(false);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
test("should reject cross-chain address usage", () => {
|
|
145
|
+
expect(
|
|
146
|
+
context.validateAddress({ address: "0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0", chain: Chain.Bitcoin }),
|
|
147
|
+
).toBe(false);
|
|
148
|
+
|
|
149
|
+
expect(
|
|
150
|
+
context.validateAddress({ address: "bc1qjpmp8xvg9k4ysa7nvev3lw7qcclvxzt2ex75kr", chain: Chain.Ethereum }),
|
|
151
|
+
).toBe(false);
|
|
152
|
+
|
|
153
|
+
expect(
|
|
154
|
+
context.validateAddress({ address: "cosmos12d7d2rlxp7urkp8z0p8sft2fm07ewyjrfvul3f", chain: Chain.Maya }),
|
|
155
|
+
).toBe(false);
|
|
156
|
+
|
|
157
|
+
expect(context.validateAddress({ address: "THr473cZqHwBLEmTWUUR1WTotxijWWbRGD", chain: Chain.Ethereum })).toBe(
|
|
158
|
+
false,
|
|
159
|
+
);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
});
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { beforeAll, describe, expect, test } from "bun:test";
|
|
2
|
+
import { Chain } from "@swapkit/helpers";
|
|
3
|
+
import { getAddressValidator } from "../index";
|
|
4
|
+
|
|
5
|
+
const context: { validateAddress: (params: { address: string; chain: Chain }) => boolean } = {} as any;
|
|
6
|
+
|
|
7
|
+
beforeAll(async () => {
|
|
8
|
+
context.validateAddress = await getAddressValidator();
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
describe("Address Validation - All Chains", () => {
|
|
12
|
+
describe("Valid addresses for each chain", () => {
|
|
13
|
+
const validAddresses = {
|
|
14
|
+
[Chain.Ethereum]: ["0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0"],
|
|
15
|
+
[Chain.Avalanche]: ["0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0"],
|
|
16
|
+
[Chain.Arbitrum]: ["0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0"],
|
|
17
|
+
[Chain.BinanceSmartChain]: ["0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0"],
|
|
18
|
+
[Chain.Optimism]: ["0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0"],
|
|
19
|
+
[Chain.Polygon]: ["0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0"],
|
|
20
|
+
[Chain.Base]: ["0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0"],
|
|
21
|
+
[Chain.Bitcoin]: ["bc1qjpmp8xvg9k4ysa7nvev3lw7qcclvxzt2ex75kr", "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"],
|
|
22
|
+
[Chain.BitcoinCash]: ["qzhcfqxrnhcw88c433tq0fjlw0uut8c0e5d3cf8566"],
|
|
23
|
+
[Chain.Dogecoin]: ["DPrKsuhVibyfMMYRmKP49US5PBQR8zq6v4"],
|
|
24
|
+
[Chain.Litecoin]: ["ltc1qs4h7p8x0kfhs88wazmq2d40t59dwdlxd6rlpjz"],
|
|
25
|
+
[Chain.Dash]: ["XoBBveBZv32rq9MMBt88QSVsUtdj9cMCLy"],
|
|
26
|
+
[Chain.Zcash]: ["t1Mh7QW9g1gK94CSRxniD49aLAJ67s6UerX"],
|
|
27
|
+
[Chain.Cosmos]: ["cosmos12d7d2rlxp7urkp8z0p8sft2fm07ewyjrfvul3f"],
|
|
28
|
+
[Chain.Kujira]: ["kujira12d7d2rlxp7urkp8z0p8sft2fm07ewyjrcy78ur"],
|
|
29
|
+
[Chain.Maya]: ["maya1hm0sdz9v2h5jwjuu0ssp8x98upvlc6py2t7e6j"],
|
|
30
|
+
[Chain.Noble]: ["noble12d7d2rlxp7urkp8z0p8sft2fm07ewyjrp0fhf8"],
|
|
31
|
+
[Chain.THORChain]: ["thor1hm0sdz9v2h5jwjuu0ssp8x98upvlc6py2uq4vz"],
|
|
32
|
+
[Chain.Polkadot]: ["16kQVedQo7yYoFSp2MnQ78zP39xWnFGePnZps2APEyt9K9KZ"],
|
|
33
|
+
[Chain.Chainflip]: ["cFPctKfXisvnrhss2eMV2VdiUNRm1F5pX4WfqkcT3ZrLKJXrS"],
|
|
34
|
+
[Chain.Cardano]: [
|
|
35
|
+
"addr1qxk2md7wufs2cas0dfxch0uu59079s7yc5k9pw8s49wpm25s8ynu4svqm7m4hd04d4jvm6e5vvyw7dm4gvpqyfklgn8qetu85s",
|
|
36
|
+
],
|
|
37
|
+
[Chain.Near]: ["a03fafdf5f97d3c6be6bff9e55f057dda76fefbb7e149f5469248f41e812cb6e"],
|
|
38
|
+
[Chain.Ripple]: ["rhDQXdwWR2RstC7sLjLMbjCeWT3PuSAZVu"],
|
|
39
|
+
[Chain.Solana]: ["4UHWuPwyV3XCcnwrpEdWAEW3WLUP1RDMaK3ANNsRUjfM"],
|
|
40
|
+
[Chain.Sui]: ["0x57b861db681d8e47b586e6e9a92f6ed210dbbb440670b8122420848cf0e844fb"],
|
|
41
|
+
[Chain.Ton]: ["EQCC1GV4iL5EkQqICYshf3AF7ESbceCYhVK-go1SkOMOBTNE"],
|
|
42
|
+
[Chain.Radix]: [] as string[],
|
|
43
|
+
[Chain.Harbor]: [] as string[],
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
for (const [chain, addresses] of Object.entries(validAddresses)) {
|
|
47
|
+
if (addresses.length === 0) continue;
|
|
48
|
+
|
|
49
|
+
test(`should validate valid ${chain} addresses`, () => {
|
|
50
|
+
for (const address of addresses) {
|
|
51
|
+
const result = context.validateAddress({ address, chain: chain as Chain });
|
|
52
|
+
expect(result).toBe(true);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
describe("Invalid addresses should be rejected", () => {
|
|
59
|
+
const invalidTestCases: Array<{ chain: Chain; addresses: string[] }> = [
|
|
60
|
+
{
|
|
61
|
+
addresses: [
|
|
62
|
+
"",
|
|
63
|
+
"invalid",
|
|
64
|
+
"0x123",
|
|
65
|
+
"0xG051176f5F0B7ccC8fA0376F08aaa28F316A38a2a0",
|
|
66
|
+
"THr473cZqHwBLEmTWUUR1WTotxijWWbRGD",
|
|
67
|
+
"bc1qjpmp8xvg9k4ysa7nvev3lw7qcclvxzt2ex75kr",
|
|
68
|
+
"cosmos12d7d2rlxp7urkp8z0p8sft2fm07ewyjrfvul3f",
|
|
69
|
+
],
|
|
70
|
+
chain: Chain.Ethereum,
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
addresses: [
|
|
74
|
+
"",
|
|
75
|
+
"invalid",
|
|
76
|
+
"0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0",
|
|
77
|
+
"THr473cZqHwBLEmTWUUR1WTotxijWWbRGD",
|
|
78
|
+
"cosmos12d7d2rlxp7urkp8z0p8sft2fm07ewyjrfvul3f",
|
|
79
|
+
"qzhcfqxrnhcw88c433tq0fjlw0uut8c0e5d3cf8566",
|
|
80
|
+
],
|
|
81
|
+
chain: Chain.Bitcoin,
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
addresses: [
|
|
85
|
+
"",
|
|
86
|
+
"invalid",
|
|
87
|
+
"0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0",
|
|
88
|
+
"bc1qjpmp8xvg9k4ysa7nvev3lw7qcclvxzt2ex75kr",
|
|
89
|
+
"thor1hm0sdz9v2h5jwjuu0ssp8x98upvlc6py2uq4vz",
|
|
90
|
+
"maya1hm0sdz9v2h5jwjuu0ssp8x98upvlc6py2t7e6j",
|
|
91
|
+
],
|
|
92
|
+
chain: Chain.Cosmos,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
addresses: [
|
|
96
|
+
"",
|
|
97
|
+
"invalid",
|
|
98
|
+
"0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0",
|
|
99
|
+
"4UHWuPwyV3XCcnwrpEdWAEW3WLUP1RDMaK3ANNsRUjfM123",
|
|
100
|
+
"123",
|
|
101
|
+
],
|
|
102
|
+
chain: Chain.Solana,
|
|
103
|
+
},
|
|
104
|
+
{ addresses: ["", "invalid!"], chain: Chain.Near },
|
|
105
|
+
{
|
|
106
|
+
addresses: [
|
|
107
|
+
"",
|
|
108
|
+
"invalid",
|
|
109
|
+
"0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0",
|
|
110
|
+
"bc1qjpmp8xvg9k4ysa7nvev3lw7qcclvxzt2ex75kr",
|
|
111
|
+
],
|
|
112
|
+
chain: Chain.Cardano,
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
addresses: [
|
|
116
|
+
"",
|
|
117
|
+
"invalid",
|
|
118
|
+
"0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0",
|
|
119
|
+
"bc1qjpmp8xvg9k4ysa7nvev3lw7qcclvxzt2ex75kr",
|
|
120
|
+
],
|
|
121
|
+
chain: Chain.Ripple,
|
|
122
|
+
},
|
|
123
|
+
];
|
|
124
|
+
|
|
125
|
+
for (const { chain, addresses } of invalidTestCases) {
|
|
126
|
+
test(`should reject invalid ${chain} addresses`, () => {
|
|
127
|
+
for (const address of addresses) {
|
|
128
|
+
const result = context.validateAddress({ address, chain });
|
|
129
|
+
expect(result).toBe(false);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
describe("Edge cases and type safety", () => {
|
|
136
|
+
test("should handle non-string inputs safely", () => {
|
|
137
|
+
const edgeCases = [null, undefined, 123, {}, [], true, false];
|
|
138
|
+
|
|
139
|
+
for (const testCase of edgeCases) {
|
|
140
|
+
expect(context.validateAddress({ address: testCase as any, chain: Chain.Ethereum })).toBe(false);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
test("should reject cross-chain address usage", () => {
|
|
145
|
+
expect(
|
|
146
|
+
context.validateAddress({ address: "0x51176f5F0B7ccC8fA0376F08aaa28F316A38a2a0", chain: Chain.Bitcoin }),
|
|
147
|
+
).toBe(false);
|
|
148
|
+
|
|
149
|
+
expect(
|
|
150
|
+
context.validateAddress({ address: "bc1qjpmp8xvg9k4ysa7nvev3lw7qcclvxzt2ex75kr", chain: Chain.Ethereum }),
|
|
151
|
+
).toBe(false);
|
|
152
|
+
|
|
153
|
+
expect(
|
|
154
|
+
context.validateAddress({ address: "cosmos12d7d2rlxp7urkp8z0p8sft2fm07ewyjrfvul3f", chain: Chain.Maya }),
|
|
155
|
+
).toBe(false);
|
|
156
|
+
|
|
157
|
+
expect(context.validateAddress({ address: "THr473cZqHwBLEmTWUUR1WTotxijWWbRGD", chain: Chain.Ethereum })).toBe(
|
|
158
|
+
false,
|
|
159
|
+
);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { beforeAll, describe, expect, test } from "bun:test";
|
|
2
|
+
import { Chain } from "@swapkit/helpers";
|
|
3
|
+
import { getCardanoToolbox } from "../toolbox";
|
|
4
|
+
|
|
5
|
+
const TEST_PHRASE = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about";
|
|
6
|
+
|
|
7
|
+
const context: { toolbox: Awaited<ReturnType<typeof getCardanoToolbox>> } = {} as any;
|
|
8
|
+
|
|
9
|
+
beforeAll(async () => {
|
|
10
|
+
context.toolbox = await getCardanoToolbox({ phrase: TEST_PHRASE });
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
describe("Cardano Toolbox", () => {
|
|
14
|
+
test("should validate valid Cardano addresses", () => {
|
|
15
|
+
const validAddresses = [
|
|
16
|
+
"addr_test1qz2fxv2umyhttkxyxp8x0dlpdt3k6cwng5pxj3jhsydzer3n0d3vllmyqwsx5wktcd8cc3sq835lu7drv2xwl2wywfgs68faae",
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
for (const address of validAddresses) {
|
|
20
|
+
expect(context.toolbox.validateAddress(address)).toBe(true);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test("should reject invalid Cardano addresses", () => {
|
|
25
|
+
const invalidAddresses = [
|
|
26
|
+
"",
|
|
27
|
+
"invalid",
|
|
28
|
+
"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
|
|
29
|
+
"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
|
|
30
|
+
"1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
for (const address of invalidAddresses) {
|
|
34
|
+
expect(context.toolbox.validateAddress(address)).toBe(false);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test("should generate valid Cardano address from phrase", () => {
|
|
39
|
+
const address = context.toolbox.getAddress();
|
|
40
|
+
expect(address.startsWith("addr")).toBe(true);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test("should estimate transaction fee", async () => {
|
|
44
|
+
const fee = await context.toolbox.estimateTransactionFee();
|
|
45
|
+
expect(fee.chain).toBe(Chain.Cardano);
|
|
46
|
+
expect(fee.getValue("number")).toBeGreaterThan(0);
|
|
47
|
+
});
|
|
48
|
+
});
|