@iota/isc-sdk 0.0.0-dev-20251015065834
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/.prettierignore +2 -0
- package/.turbo/turbo-build.log +4 -0
- package/CHANGELOG.md +81 -0
- package/LICENSE +201 -0
- package/README.md +88 -0
- package/dist/cjs/api/EvmRpcClient.d.ts +7 -0
- package/dist/cjs/api/EvmRpcClient.js +57 -0
- package/dist/cjs/api/EvmRpcClient.js.map +7 -0
- package/dist/cjs/api/index.d.ts +1 -0
- package/dist/cjs/api/index.js +19 -0
- package/dist/cjs/api/index.js.map +7 -0
- package/dist/cjs/bcs.d.ts +944 -0
- package/dist/cjs/bcs.js +260 -0
- package/dist/cjs/bcs.js.map +7 -0
- package/dist/cjs/constants.d.ts +2 -0
- package/dist/cjs/constants.js +27 -0
- package/dist/cjs/constants.js.map +7 -0
- package/dist/cjs/enums/contracts.enums.d.ts +76 -0
- package/dist/cjs/enums/contracts.enums.js +113 -0
- package/dist/cjs/enums/contracts.enums.js.map +7 -0
- package/dist/cjs/enums/index.d.ts +1 -0
- package/dist/cjs/enums/index.js +19 -0
- package/dist/cjs/enums/index.js.map +7 -0
- package/dist/cjs/index.d.ts +9 -0
- package/dist/cjs/index.js +27 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/isc.d.ts +26 -0
- package/dist/cjs/isc.js +220 -0
- package/dist/cjs/isc.js.map +7 -0
- package/dist/cjs/move_bcs.d.ts +124 -0
- package/dist/cjs/move_bcs.js +70 -0
- package/dist/cjs/move_bcs.js.map +7 -0
- package/dist/cjs/package.json +4 -0
- package/dist/cjs/transaction.d.ts +168 -0
- package/dist/cjs/transaction.js +328 -0
- package/dist/cjs/transaction.js.map +7 -0
- package/dist/cjs/types/assetsResponse.d.ts +37 -0
- package/dist/cjs/types/assetsResponse.js +34 -0
- package/dist/cjs/types/assetsResponse.js.map +7 -0
- package/dist/cjs/types/chainData.d.ts +12 -0
- package/dist/cjs/types/chainData.js +29 -0
- package/dist/cjs/types/chainData.js.map +7 -0
- package/dist/cjs/types/index.d.ts +2 -0
- package/dist/cjs/types/index.js +20 -0
- package/dist/cjs/types/index.js.map +7 -0
- package/dist/cjs/utils/getHname.d.ts +1 -0
- package/dist/cjs/utils/getHname.js +30 -0
- package/dist/cjs/utils/getHname.js.map +7 -0
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.js +19 -0
- package/dist/cjs/utils/index.js.map +7 -0
- package/dist/cjs/vite-env.d.js +2 -0
- package/dist/cjs/vite-env.d.js.map +7 -0
- package/dist/esm/api/EvmRpcClient.d.ts +7 -0
- package/dist/esm/api/EvmRpcClient.js +37 -0
- package/dist/esm/api/EvmRpcClient.js.map +7 -0
- package/dist/esm/api/index.d.ts +1 -0
- package/dist/esm/api/index.js +2 -0
- package/dist/esm/api/index.js.map +7 -0
- package/dist/esm/bcs.d.ts +944 -0
- package/dist/esm/bcs.js +240 -0
- package/dist/esm/bcs.js.map +7 -0
- package/dist/esm/constants.d.ts +2 -0
- package/dist/esm/constants.js +7 -0
- package/dist/esm/constants.js.map +7 -0
- package/dist/esm/enums/contracts.enums.d.ts +76 -0
- package/dist/esm/enums/contracts.enums.js +93 -0
- package/dist/esm/enums/contracts.enums.js.map +7 -0
- package/dist/esm/enums/index.d.ts +1 -0
- package/dist/esm/enums/index.js +2 -0
- package/dist/esm/enums/index.js.map +7 -0
- package/dist/esm/index.d.ts +9 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +7 -0
- package/dist/esm/isc.d.ts +26 -0
- package/dist/esm/isc.js +200 -0
- package/dist/esm/isc.js.map +7 -0
- package/dist/esm/move_bcs.d.ts +124 -0
- package/dist/esm/move_bcs.js +50 -0
- package/dist/esm/move_bcs.js.map +7 -0
- package/dist/esm/package.json +4 -0
- package/dist/esm/transaction.d.ts +168 -0
- package/dist/esm/transaction.js +298 -0
- package/dist/esm/transaction.js.map +7 -0
- package/dist/esm/types/assetsResponse.d.ts +37 -0
- package/dist/esm/types/assetsResponse.js +14 -0
- package/dist/esm/types/assetsResponse.js.map +7 -0
- package/dist/esm/types/chainData.d.ts +12 -0
- package/dist/esm/types/chainData.js +9 -0
- package/dist/esm/types/chainData.js.map +7 -0
- package/dist/esm/types/index.d.ts +2 -0
- package/dist/esm/types/index.js +3 -0
- package/dist/esm/types/index.js.map +7 -0
- package/dist/esm/utils/getHname.d.ts +1 -0
- package/dist/esm/utils/getHname.js +10 -0
- package/dist/esm/utils/getHname.js.map +7 -0
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.js +2 -0
- package/dist/esm/utils/index.js.map +7 -0
- package/dist/esm/vite-env.d.js +10 -0
- package/dist/esm/vite-env.d.js.map +7 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/examples/L1AddressL2funds.ts +72 -0
- package/examples/anchor.ts +72 -0
- package/examples/assetsBag.ts +61 -0
- package/examples/config.ts +81 -0
- package/examples/tokens.ts +96 -0
- package/package.json +57 -0
- package/src/api/EvmRpcClient.ts +48 -0
- package/src/api/index.ts +1 -0
- package/src/bcs.ts +237 -0
- package/src/constants.ts +4 -0
- package/src/enums/contracts.enums.ts +82 -0
- package/src/enums/index.ts +1 -0
- package/src/index.ts +9 -0
- package/src/isc.ts +331 -0
- package/src/move_bcs.ts +47 -0
- package/src/transaction.ts +380 -0
- package/src/types/assetsResponse.ts +13 -0
- package/src/types/chainData.ts +8 -0
- package/src/types/index.ts +2 -0
- package/src/utils/getHname.ts +11 -0
- package/src/utils/index.ts +1 -0
- package/src/vite-env.d.ts +1 -0
- package/tests/L1ToL2Tokens.spec.ts +141 -0
- package/tests/config.ts +81 -0
- package/tests/getHname.spec.ts +78 -0
- package/tests/utils.ts +69 -0
- package/tsconfig.esm.json +7 -0
- package/tsconfig.json +11 -0
- package/vitest.config.ts +10 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { getHname } from '../src/utils/getHname';
|
|
3
|
+
import { AccountsContractMethod, CoreContract } from '../src/enums/contracts.enums';
|
|
4
|
+
|
|
5
|
+
describe('getHname function', () => {
|
|
6
|
+
it('should return a number for a string input', () => {
|
|
7
|
+
const result = getHname('test');
|
|
8
|
+
expect(typeof result).toBe('number');
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('should return consistent results for the same input', () => {
|
|
12
|
+
const input = 'transferAllowanceTo';
|
|
13
|
+
const result1 = getHname(input);
|
|
14
|
+
const result2 = getHname(input);
|
|
15
|
+
expect(result1).toBe(result2);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('should handle empty strings', () => {
|
|
19
|
+
const result = getHname('');
|
|
20
|
+
expect(typeof result).toBe('number');
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('should generate different hashes for different inputs', () => {
|
|
24
|
+
const result1 = getHname('deposit');
|
|
25
|
+
const result2 = getHname('withdraw');
|
|
26
|
+
expect(result1).not.toBe(result2);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('should generate valid hnames for AccountsContractMethod', () => {
|
|
30
|
+
const hnames = Object.values(AccountsContractMethod).map((method) => ({
|
|
31
|
+
method,
|
|
32
|
+
hname: getHname(method),
|
|
33
|
+
}));
|
|
34
|
+
|
|
35
|
+
// Check all hnames are unique
|
|
36
|
+
const uniqueHnames = new Set(hnames.map((item) => item.hname));
|
|
37
|
+
expect(uniqueHnames.size).toBe(hnames.length);
|
|
38
|
+
|
|
39
|
+
const accountsHname = hnames.find((h) => h.method === 'transferAllowanceTo')?.hname;
|
|
40
|
+
expect(accountsHname).toBe(603251617);
|
|
41
|
+
|
|
42
|
+
console.table(hnames);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('should generate valid hnames for CoreContract', () => {
|
|
46
|
+
const hnames = Object.values(CoreContract).map((contract) => ({
|
|
47
|
+
contract,
|
|
48
|
+
hname: getHname(contract),
|
|
49
|
+
}));
|
|
50
|
+
|
|
51
|
+
const accountsHname = hnames.find((h) => h.contract === 'accounts')?.hname;
|
|
52
|
+
expect(accountsHname).toBe(1011572226);
|
|
53
|
+
|
|
54
|
+
console.table(hnames);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('should generate hnames in the correct format', () => {
|
|
58
|
+
// The function returns a number, but it's derived from a hex string
|
|
59
|
+
// with 8 digits (32 bits)
|
|
60
|
+
const result = getHname('test');
|
|
61
|
+
const hexString = result.toString(16);
|
|
62
|
+
expect(hexString.length).toBeLessThanOrEqual(8);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it('should match known test vectors', () => {
|
|
66
|
+
const testVectors = [
|
|
67
|
+
{ input: 'accounts', expected: 1011572226 },
|
|
68
|
+
{ input: 'transferAllowanceTo', expected: 603251617 },
|
|
69
|
+
{ input: 'deposit', expected: 3184070701 },
|
|
70
|
+
{ input: 'withdraw', expected: 2647396161 },
|
|
71
|
+
{ input: 'balanceBaseToken', expected: 1284295951 },
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
for (const vector of testVectors) {
|
|
75
|
+
expect(getHname(vector.input)).toBe(vector.expected);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
});
|
package/tests/utils.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { IotaClient } from '@iota/iota-sdk/client';
|
|
2
|
+
import { requestIotaFromFaucetV0 } from '@iota/iota-sdk/faucet';
|
|
3
|
+
import { Ed25519Keypair } from '@iota/iota-sdk/keypairs/ed25519';
|
|
4
|
+
import { Transaction } from '@iota/iota-sdk/transactions';
|
|
5
|
+
import type { AssetsResponse } from '../src/index.js';
|
|
6
|
+
import { EvmRpcClient } from '../src/index.js';
|
|
7
|
+
import { CONFIG } from './config.js';
|
|
8
|
+
|
|
9
|
+
const { L2 } = CONFIG;
|
|
10
|
+
|
|
11
|
+
export async function requestFunds(
|
|
12
|
+
client: IotaClient,
|
|
13
|
+
faucetUrl: string,
|
|
14
|
+
recipientAddress: string,
|
|
15
|
+
) {
|
|
16
|
+
const keypair = new Ed25519Keypair();
|
|
17
|
+
const address = keypair.toIotaAddress();
|
|
18
|
+
|
|
19
|
+
await requestIotaFromFaucetV0({
|
|
20
|
+
host: faucetUrl,
|
|
21
|
+
recipient: address,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const transaction = new Transaction();
|
|
25
|
+
const [coin] = transaction.splitCoins(transaction.gas, [9]);
|
|
26
|
+
transaction.transferObjects([coin], recipientAddress);
|
|
27
|
+
transaction.setSender(address);
|
|
28
|
+
|
|
29
|
+
await transaction.build({ client });
|
|
30
|
+
|
|
31
|
+
await client.signAndExecuteTransaction({
|
|
32
|
+
signer: keypair,
|
|
33
|
+
transaction,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export async function checkL2BalanceWithRetries(
|
|
38
|
+
address: string,
|
|
39
|
+
coinType?: string,
|
|
40
|
+
maxRetries = 10,
|
|
41
|
+
delay = 2500,
|
|
42
|
+
): Promise<AssetsResponse | null> {
|
|
43
|
+
const evmClient = new EvmRpcClient(L2.evmRpcUrl);
|
|
44
|
+
let evmBalance: AssetsResponse | null = null;
|
|
45
|
+
|
|
46
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
47
|
+
try {
|
|
48
|
+
evmBalance = await evmClient.getBalanceBaseToken(address);
|
|
49
|
+
} catch (error) {
|
|
50
|
+
console.error('Error checking balance:', error);
|
|
51
|
+
} finally {
|
|
52
|
+
const nativeToken = evmBalance?.nativeTokens?.find((t) => t.coinType === coinType);
|
|
53
|
+
const nativeTokenBalance = nativeToken ? nativeToken.balance : '0';
|
|
54
|
+
|
|
55
|
+
if (
|
|
56
|
+
(evmBalance?.baseTokens.startsWith('0') ||
|
|
57
|
+
(coinType && nativeTokenBalance.startsWith('0'))) &&
|
|
58
|
+
attempt < maxRetries
|
|
59
|
+
) {
|
|
60
|
+
console.log(
|
|
61
|
+
`Fetching EVM balance attempt ${attempt + 1} out of ${maxRetries} in ${delay} ms`,
|
|
62
|
+
);
|
|
63
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return evmBalance;
|
|
69
|
+
}
|
package/tsconfig.json
ADDED