Skip to content

Commit 7fa9c71

Browse files
authored
Merge pull request #25 from smartcontractkit/feat/support-decimals
Feat/support decimals for Hedera - Fixes Support for Hedera with 8 decimals #22. Also updates the demo examples/nextjs app with Hedera configs. - Bumps ccip-js to v0.2.5 - Bumps ccip-react-components to v0.3.1 as its wagmi dependency is now hard-pinned to avoid the issue of updating from 2.12.x --> 2.15.x ( see commit sha c7a72f5) - Update @chainlink/contracts dependency version (to 1.6) and import paths - hard pins Viem and Wagmi dependency versions. - Update pnpm-lock as package.json is updated.
2 parents 1ec4ddb + 2b490da commit 7fa9c71

20 files changed

+4670
-2638
lines changed

README.md

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,23 @@
55

66
[![License](https://img.shields.io/badge/license-MIT-blue)](https://github.com/smartcontractkit/ccip-javascript-sdk/blob/main/LICENSE)
77
[![SDK Documentation](https://img.shields.io/static/v1?label=sdk-docs&message=latest&color=blue)](https://docs.chain.link/ccip/ccip-javascript-sdk/)
8+
89
</div>
910

1011
# CCIP JavaScript SDK
1112

12-
The CCIP JavaScript SDK includes two packages:
13-
- [`ccip-js`](/packages/ccip-js/README.md): A TypeScript library that provides a client for managing cross-chain token transfers that use Chainlink's [Cross-Chain Interoperability Protocol (CCIP)](https://docs.chain.link/ccip) routers.
14-
- [`ccip-react-components`](/packages/ccip-react-components/README.md): A set of prebuilt ready-to-use UI components built on top of `ccip-js`.
13+
### Start here
14+
15+
The CCIP JavaScript SDK is a monorepo for two packages:
16+
17+
- [`ccip-js`](/packages/ccip-js/README.md): A TypeScript library that provides a client for managing cross-chain token transfers that use Chainlink's [Cross-Chain Interoperability Protocol (CCIP)](https://docs.chain.link/ccip) routers.
18+
- [`ccip-react-components`](/packages/ccip-react-components/README.md): A set of prebuilt ready-to-use React UI components. This package depends on `ccip-js`.
1519

16-
Using both packages, you can add a fully featured CCIP bridge to your app that can be styled to match your app design.
17-
18-
To view more detailed documentation and more examples, visit the [Chainlink Javascript SDK Documentation](https://docs.chain.link/ccip/ccip-javascript-sdk/).
20+
Using both packages, you can add a fully featured CCIP bridge to your app that can be styled to match your app design.
21+
22+
To view more detailed documentation and more examples, visit the [Chainlink Javascript SDK Documentation](https://docs.chain.link/ccip/ccip-javascript-sdk/). Development specific information is also found in individual READMEs inside the `./packages/<<PACKAGE_NAME>>` directory.
23+
24+
There is also an example implementation of a front end NextJS app that uses these packages in `./examples/nextjs`. That has its own README as well.
1925

2026
### Prerequisites
2127

@@ -29,7 +35,6 @@ git clone https://github.com/smartcontractkit/ccip-javascript-sdk.git
2935

3036
3. Run `pnpm install`
3137

32-
3338
### Run the example app
3439

3540
```sh
@@ -42,9 +47,12 @@ pnpm dev-example
4247

4348
### Build packages
4449

45-
If you want to make changes to the package code, you need to rebuild the packages and make sure package.json file to point to the updated local versions.
50+
If you want to make changes to the package code, you need to rebuild the packages.
51+
Then:
4652

47-
Make sure to build the `ccip-js` package before you build the `ccip-react-components` package. The React components depend on the JS package.
53+
1. Make sure to build the `ccip-js` package before you build the `ccip-react-components` package. The React components depend on the JS package.
54+
55+
2. Make sure your client's package.json file to points to the updated local versions or use npm link or equivalent in your downstream client code. You can see examples of this in the steps below.
4856

4957
Follow these steps:
5058

@@ -73,9 +81,29 @@ pnpm build-components
7381
"@chainlink/ccip-react-components": "link:../../packages/ccip-react-components",
7482
```
7583

84+
## Contributing
85+
86+
Contributions to either repos are welcome! Please open an issue or submit a pull request using the process below.
87+
88+
1. Fork the repository.
89+
2. Clone your fork: `git clone https://github.com/YOUR_USERNAME/ccip-javascript-sdk.git`
90+
3. Navigate to directory: `cd ccip-javascript-sdk`
91+
4. Fetch all branches: `git fetch origin`
92+
5. Switch to develop branch: `git checkout develop`
93+
6. Install dependencies: `pnpm install`
94+
7. Create a feature branch: `git checkout -b feature/my-feature`
95+
8. Commit your changes
96+
9. Push to the branch (git push origin feature/my-feature).
97+
10. Open a pull request from your fork to the `develop` branch of this repo.
98+
99+
🚨 Always branch off from `develop` when creating your feature branch.
100+
76101
## Resources
77102

103+
- [ccip-js README](./packages/ccip-js/README.md)
104+
- [ccip-react-components README](./packages/ccip-react-components/README.md)
105+
- [examples/nextjs README](./examples/nextjs/README.md)
78106
- [Chainlink CCIP Javascript SDK Documentation](https://docs.chain.link/ccip/ccip-javascript-sdk/)
79107
- [Chainlink CCIP Documentation](https://docs.chain.link/ccip)
80108
- [Chainlink CCIP Directory](https://docs.chain.link/ccip/directory)
81-
- [Chainlink Documentation](https://docs.chain.link/)
109+
- [Chainlink Documentation](https://docs.chain.link/)

examples/nextjs/config/networkConfig.ts

Lines changed: 75 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
import {
2-
AddressMap,
3-
NetworkConfig,
4-
Token,
5-
} from '@chainlink/ccip-react-components';
1+
import { AddressMap, NetworkConfig, Token } from "@chainlink/ccip-react-components";
62
import {
73
arbitrumSepolia,
84
avalancheFuji,
@@ -11,137 +7,135 @@ import {
117
optimismSepolia,
128
polygonAmoy,
139
sepolia,
14-
} from 'viem/chains';
10+
hederaTestnet,
11+
} from "viem/chains";
1512

1613
const tokensList: Token[] = [
1714
{
18-
symbol: 'CCIP-BnM',
15+
symbol: "CCIP-BnM",
1916
address: {
20-
[arbitrumSepolia.id]: '0xA8C0c11bf64AF62CDCA6f93D3769B88BdD7cb93D',
21-
[avalancheFuji.id]: '0xD21341536c5cF5EB1bcb58f6723cE26e8D8E90e4',
22-
[baseSepolia.id]: '0x88A2d74F47a237a62e7A51cdDa67270CE381555e',
23-
[bscTestnet.id]: '0xbFA2ACd33ED6EEc0ed3Cc06bF1ac38d22b36B9e9',
24-
[optimismSepolia.id]: '0x8aF4204e30565DF93352fE8E1De78925F6664dA7',
25-
[polygonAmoy.id]: '0xcab0EF91Bee323d1A617c0a027eE753aFd6997E4',
26-
[sepolia.id]: '0xFd57b4ddBf88a4e07fF4e34C487b99af2Fe82a05',
17+
[arbitrumSepolia.id]: "0xA8C0c11bf64AF62CDCA6f93D3769B88BdD7cb93D",
18+
[avalancheFuji.id]: "0xD21341536c5cF5EB1bcb58f6723cE26e8D8E90e4",
19+
[baseSepolia.id]: "0x88A2d74F47a237a62e7A51cdDa67270CE381555e",
20+
[bscTestnet.id]: "0xbFA2ACd33ED6EEc0ed3Cc06bF1ac38d22b36B9e9",
21+
[optimismSepolia.id]: "0x8aF4204e30565DF93352fE8E1De78925F6664dA7",
22+
[polygonAmoy.id]: "0xcab0EF91Bee323d1A617c0a027eE753aFd6997E4",
23+
[sepolia.id]: "0xFd57b4ddBf88a4e07fF4e34C487b99af2Fe82a05",
24+
[hederaTestnet.id]: "0x01Ac06943d2B8327a7845235Ef034741eC1Da352",
2725
},
28-
logoURL:
29-
'https://smartcontract.imgix.net/tokens/ccip-bnm.webp?auto=compress%2Cformat',
30-
tags: ['chainlink', 'default'],
26+
logoURL: "https://smartcontract.imgix.net/tokens/ccip-bnm.webp?auto=compress%2Cformat",
27+
tags: ["chainlink", "default"],
3128
},
3229
{
33-
symbol: 'CCIP-LnM',
30+
symbol: "CCIP-LnM",
3431
address: {
35-
[arbitrumSepolia.id]: '0x139E99f0ab4084E14e6bb7DacA289a91a2d92927',
36-
[avalancheFuji.id]: '0x70F5c5C40b873EA597776DA2C21929A8282A3b35',
37-
[baseSepolia.id]: '0xA98FA8A008371b9408195e52734b1768c0d1Cb5c',
38-
[bscTestnet.id]: '0x79a4Fc27f69323660f5Bfc12dEe21c3cC14f5901',
39-
[optimismSepolia.id]: '0x044a6B4b561af69D2319A2f4be5Ec327a6975D0a',
40-
[polygonAmoy.id]: '0x3d357fb52253e86c8Ee0f80F5FfE438fD9503FF2',
41-
[sepolia.id]: '0x466D489b6d36E7E3b824ef491C225F5830E81cC1',
32+
[arbitrumSepolia.id]: "0x139E99f0ab4084E14e6bb7DacA289a91a2d92927",
33+
[avalancheFuji.id]: "0x70F5c5C40b873EA597776DA2C21929A8282A3b35",
34+
[baseSepolia.id]: "0xA98FA8A008371b9408195e52734b1768c0d1Cb5c",
35+
[bscTestnet.id]: "0x79a4Fc27f69323660f5Bfc12dEe21c3cC14f5901",
36+
[optimismSepolia.id]: "0x044a6B4b561af69D2319A2f4be5Ec327a6975D0a",
37+
[polygonAmoy.id]: "0x3d357fb52253e86c8Ee0f80F5FfE438fD9503FF2",
38+
[sepolia.id]: "0x466D489b6d36E7E3b824ef491C225F5830E81cC1",
4239
},
43-
logoURL:
44-
'https://smartcontract.imgix.net/tokens/ccip-lnm.webp?auto=compress%2Cformat',
45-
tags: ['chainlink', 'default'],
40+
logoURL: "https://smartcontract.imgix.net/tokens/ccip-lnm.webp?auto=compress%2Cformat",
41+
tags: ["chainlink", "default"],
4642
},
4743
{
48-
symbol: 'GHO',
44+
symbol: "GHO",
4945
address: {
50-
[arbitrumSepolia.id]: '0xb13Cfa6f8B2Eed2C37fB00fF0c1A59807C585810',
51-
[avalancheFuji.id]: '0x9c04928Cc678776eC1C1C0E46ecC03a5F47A7723',
52-
[baseSepolia.id]: '0x7CFa3f3d1cded0Da930881c609D4Dbf0012c14Bb',
46+
[arbitrumSepolia.id]: "0xb13Cfa6f8B2Eed2C37fB00fF0c1A59807C585810",
47+
[avalancheFuji.id]: "0x9c04928Cc678776eC1C1C0E46ecC03a5F47A7723",
48+
[baseSepolia.id]: "0x7CFa3f3d1cded0Da930881c609D4Dbf0012c14Bb",
5349
[bscTestnet.id]: undefined,
5450
[optimismSepolia.id]: undefined,
5551
[polygonAmoy.id]: undefined,
56-
[sepolia.id]: '0xc4bF5CbDaBE595361438F8c6a187bDc330539c60',
52+
[sepolia.id]: "0xc4bF5CbDaBE595361438F8c6a187bDc330539c60",
5753
},
58-
logoURL:
59-
'https://smartcontract.imgix.net/tokens/gho.webp?auto=compress%2Cformat',
60-
tags: ['stablecoin', 'default'],
54+
logoURL: "https://smartcontract.imgix.net/tokens/gho.webp?auto=compress%2Cformat",
55+
tags: ["stablecoin", "default"],
6156
},
6257
{
63-
symbol: 'USDC',
58+
symbol: "USDC",
6459
address: {
65-
[arbitrumSepolia.id]: '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d',
66-
[avalancheFuji.id]: '0x5425890298aed601595a70AB815c96711a31Bc65',
67-
[baseSepolia.id]: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',
60+
[arbitrumSepolia.id]: "0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d",
61+
[avalancheFuji.id]: "0x5425890298aed601595a70AB815c96711a31Bc65",
62+
[baseSepolia.id]: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
6863
[bscTestnet.id]: undefined,
69-
[optimismSepolia.id]: '0x5fd84259d66Cd46123540766Be93DFE6D43130D7',
70-
[polygonAmoy.id]: '0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582',
71-
[sepolia.id]: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',
64+
[optimismSepolia.id]: "0x5fd84259d66Cd46123540766Be93DFE6D43130D7",
65+
[polygonAmoy.id]: "0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582",
66+
[sepolia.id]: "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238",
7267
},
73-
logoURL:
74-
'https://smartcontract.imgix.net/tokens/usdc.webp?auto=compress%2Cformat',
75-
tags: ['stablecoin', 'default'],
68+
logoURL: "https://smartcontract.imgix.net/tokens/usdc.webp?auto=compress%2Cformat",
69+
tags: ["stablecoin", "default"],
7670
},
7771
];
7872

7973
const chains = [
74+
{
75+
chain: hederaTestnet,
76+
logoURL: "https://d2f70xi62kby8n.cloudfront.net/bridge/icons/networks/hedera.svg?auto=compress%2Cformat",
77+
},
8078
{
8179
chain: arbitrumSepolia,
82-
logoURL:
83-
'https://d2f70xi62kby8n.cloudfront.net/bridge/icons/networks/arbitrum.svg?auto=compress%2Cformat',
80+
logoURL: "https://d2f70xi62kby8n.cloudfront.net/bridge/icons/networks/arbitrum.svg?auto=compress%2Cformat",
8481
},
8582
{
8683
chain: avalancheFuji,
87-
logoURL:
88-
'https://d2f70xi62kby8n.cloudfront.net/bridge/icons/networks/avalanche.svg?auto=compress%2Cformat',
84+
logoURL: "https://d2f70xi62kby8n.cloudfront.net/bridge/icons/networks/avalanche.svg?auto=compress%2Cformat",
8985
},
9086
{
9187
chain: baseSepolia,
92-
logoURL:
93-
'https://d2f70xi62kby8n.cloudfront.net/bridge/icons/networks/base.svg?auto=compress%2Cformat',
88+
logoURL: "https://d2f70xi62kby8n.cloudfront.net/bridge/icons/networks/base.svg?auto=compress%2Cformat",
9489
},
9590
{
9691
chain: bscTestnet,
97-
logoURL:
98-
'https://d2f70xi62kby8n.cloudfront.net/bridge/icons/networks/bsc.svg?auto=compress%2Cformat',
92+
logoURL: "https://d2f70xi62kby8n.cloudfront.net/bridge/icons/networks/bsc.svg?auto=compress%2Cformat",
9993
},
10094
{
10195
chain: sepolia,
102-
logoURL:
103-
'https://d2f70xi62kby8n.cloudfront.net/bridge/icons/networks/ethereum.svg?auto=compress%2Cformat',
96+
logoURL: "https://d2f70xi62kby8n.cloudfront.net/bridge/icons/networks/ethereum.svg?auto=compress%2Cformat",
10497
},
10598
{
10699
chain: optimismSepolia,
107-
logoURL:
108-
'https://d2f70xi62kby8n.cloudfront.net/bridge/icons/networks/optimism.svg?auto=compress%2Cformat',
100+
logoURL: "https://d2f70xi62kby8n.cloudfront.net/bridge/icons/networks/optimism.svg?auto=compress%2Cformat",
109101
},
110102
{
111103
chain: polygonAmoy,
112-
logoURL:
113-
'https://d2f70xi62kby8n.cloudfront.net/bridge/icons/networks/polygon.svg?auto=compress%2Cformat',
104+
logoURL: "https://d2f70xi62kby8n.cloudfront.net/bridge/icons/networks/polygon.svg?auto=compress%2Cformat",
114105
},
115106
];
116107

117108
const linkContracts: AddressMap = {
118-
[arbitrumSepolia.id]: '0xb1D4538B4571d411F07960EF2838Ce337FE1E80E',
119-
[avalancheFuji.id]: '0x0b9d5D9136855f6FEc3c0993feE6E9CE8a297846',
120-
[baseSepolia.id]: '0xE4aB69C077896252FAFBD49EFD26B5D171A32410',
121-
[bscTestnet.id]: '0x84b9B910527Ad5C03A9Ca831909E21e236EA7b06',
122-
[sepolia.id]: '0x779877A7B0D9E8603169DdbD7836e478b4624789',
123-
[optimismSepolia.id]: '0xE4aB69C077896252FAFBD49EFD26B5D171A32410',
124-
[polygonAmoy.id]: '0x0Fd9e8d3aF1aaee056EB9e802c3A762a667b1904',
109+
[hederaTestnet.id]: "0x326C977E6efc84E512bB9C30f76E30c160eD06FB",
110+
[arbitrumSepolia.id]: "0xb1D4538B4571d411F07960EF2838Ce337FE1E80E",
111+
[avalancheFuji.id]: "0x0b9d5D9136855f6FEc3c0993feE6E9CE8a297846",
112+
[baseSepolia.id]: "0xE4aB69C077896252FAFBD49EFD26B5D171A32410",
113+
[bscTestnet.id]: "0x84b9B910527Ad5C03A9Ca831909E21e236EA7b06",
114+
[sepolia.id]: "0x779877A7B0D9E8603169DdbD7836e478b4624789",
115+
[optimismSepolia.id]: "0xE4aB69C077896252FAFBD49EFD26B5D171A32410",
116+
[polygonAmoy.id]: "0x0Fd9e8d3aF1aaee056EB9e802c3A762a667b1904",
125117
};
126118

127119
const routerAddresses: AddressMap = {
128-
[arbitrumSepolia.id]: '0x2a9C5afB0d0e4BAb2BCdaE109EC4b0c4Be15a165',
129-
[avalancheFuji.id]: '0xF694E193200268f9a4868e4Aa017A0118C9a8177',
130-
[baseSepolia.id]: '0xD3b06cEbF099CE7DA4AcCf578aaebFDBd6e88a93',
131-
[bscTestnet.id]: '0xE1053aE1857476f36A3C62580FF9b016E8EE8F6f',
132-
[sepolia.id]: '0x0BF3dE8c5D3e8A2B34D2BEeB17ABfCeBaf363A59',
133-
[optimismSepolia.id]: '0x114a20a10b43d4115e5aeef7345a1a71d2a60c57',
134-
[polygonAmoy.id]: '0x9C32fCB86BF0f4a1A8921a9Fe46de3198bb884B2',
120+
[hederaTestnet.id]: "0x802C5F84eAD128Ff36fD6a3f8a418e339f467Ce4",
121+
[arbitrumSepolia.id]: "0x2a9C5afB0d0e4BAb2BCdaE109EC4b0c4Be15a165",
122+
[avalancheFuji.id]: "0xF694E193200268f9a4868e4Aa017A0118C9a8177",
123+
[baseSepolia.id]: "0xD3b06cEbF099CE7DA4AcCf578aaebFDBd6e88a93",
124+
[bscTestnet.id]: "0xE1053aE1857476f36A3C62580FF9b016E8EE8F6f",
125+
[sepolia.id]: "0x0BF3dE8c5D3e8A2B34D2BEeB17ABfCeBaf363A59",
126+
[optimismSepolia.id]: "0x114a20a10b43d4115e5aeef7345a1a71d2a60c57",
127+
[polygonAmoy.id]: "0x9C32fCB86BF0f4a1A8921a9Fe46de3198bb884B2",
135128
};
136129

137130
const chainSelectors = {
138-
[arbitrumSepolia.id]: '3478487238524512106',
139-
[avalancheFuji.id]: '14767482510784806043',
140-
[baseSepolia.id]: '10344971235874465080',
141-
[bscTestnet.id]: '13264668187771770619',
142-
[sepolia.id]: '16015286601757825753',
143-
[optimismSepolia.id]: '5224473277236331295',
144-
[polygonAmoy.id]: '16281711391670634445',
131+
[hederaTestnet.id]: "222782988166878823",
132+
[arbitrumSepolia.id]: "3478487238524512106",
133+
[avalancheFuji.id]: "14767482510784806043",
134+
[baseSepolia.id]: "10344971235874465080",
135+
[bscTestnet.id]: "13264668187771770619",
136+
[sepolia.id]: "16015286601757825753",
137+
[optimismSepolia.id]: "5224473277236331295",
138+
[polygonAmoy.id]: "16281711391670634445",
145139
};
146140

147141
export const networkConfig: NetworkConfig = {

examples/nextjs/config/wagmiConfig.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { http, createConfig, Config } from 'wagmi';
1+
import { http, createConfig, Config } from "wagmi";
22
import {
33
arbitrumSepolia,
44
avalancheFuji,
@@ -7,11 +7,13 @@ import {
77
optimismSepolia,
88
polygonAmoy,
99
sepolia,
10-
} from 'viem/chains';
11-
import { injected } from 'wagmi/connectors';
10+
hederaTestnet,
11+
} from "viem/chains";
12+
import { injected } from "wagmi/connectors";
1213

1314
export const wagmiConfig: Config = createConfig({
1415
chains: [
16+
hederaTestnet,
1517
arbitrumSepolia,
1618
avalancheFuji,
1719
baseSepolia,
@@ -22,6 +24,7 @@ export const wagmiConfig: Config = createConfig({
2224
],
2325
connectors: [injected()],
2426
transports: {
27+
[hederaTestnet.id]: http(),
2528
[arbitrumSepolia.id]: http(),
2629
[avalancheFuji.id]: http(),
2730
[baseSepolia.id]: http(),

examples/nextjs/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "example-nextjs",
3-
"version": "0.1.0",
3+
"version": "0.1.1",
44
"type": "module",
55
"private": true,
66
"scripts": {
@@ -21,7 +21,7 @@
2121
"react-dom": "18",
2222
"typescript": "^5",
2323
"viem": "2.21.25",
24-
"wagmi": "^2.12.7"
24+
"wagmi": "2.12.7"
2525
},
2626
"devDependencies": {
2727
"@types/node": "^20",

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"build-components": "pnpm --filter ccip-react-components run build",
77
"dev-example": "pnpm --filter example-nextjs run dev",
88
"clean": "rm -rf node_modules packages/*/node_modules packages/*/dist examples/nextjs/node_modules examples/nextjs/.next",
9-
"test-ccip-js": "pnpm --filter ccip-js run test",
9+
"test-ccip-js": "pnpm --filter ccip-js run t:int",
1010
"test-components": "pnpm --filter ccip-react-components run test"
1111
},
1212
"devDependencies": {

packages/ccip-js/README.md

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -605,26 +605,17 @@ folder. From there, the relevant ABI arrays must be manually moved to `./src/abi
605605

606606
#### Running tests
607607

608-
1. cd into `packages/ccip-js` and then run `pnpm install` OR from the project root you can run `pnpm i -w`
608+
1. Integration tests against testnets are favored in the ccip-js package.
609609

610-
2. open a new terminal window and run `foundryup` followed by `anvil` - requires that you've [installed Foundry Anvil](https://book.getfoundry.sh/anvil/).
611-
<b?>Note:</b> that Anvil is only needed for the integrations tests inside `./test` which uses the [Chainlink Local](https://github.com/smartcontractkit/chainlink-local) simulator. Actual testnet and mainnet behavior may differ from time to time and passing these tests does not guarantee testnet or mainnet behavior.
610+
2. Start by cd into `packages/ccip-js` and then run `pnpm install` OR from the project root you can run `pnpm i -w`
612611

613-
3. Back in the first terminal, inside, `packages/ccip-js` run `export PRIVATE_KEY=xxxxxx` to set your private key and then run `pnpm t:int` or `pnpm t:uint`.
612+
3. Back in the first terminal, inside, `packages/ccip-js` run `export PRIVATE_KEY=0x.....` to set your private key and then run `pnpm t:int`. If you're in the entire repo's root you can run the workspace filtering command `pnpm test-ccip-js`
614613

615-
Note some tests are flaky - this is under investigation. You can choose to run just the mocked test or the testnet integration tests using `pnpm jest <<name of test file>>`.
616-
617-
Note further that we have set a 180000ms (3 mins) timeout on the jest config. This can cause the testnet integration test to "hang" for the entire duration.
614+
Note further that we have set a 180000ms (3 mins) timeout on the jest config. This can cause the testnet integration test to appear to "hang"until timeout completes.
618615

619616
### Contributing
620617

621-
Contributions are welcome! Please open an issue or submit a pull request on GitHub.
622-
623-
1. Fork the repository.
624-
1. Create your feature branch (git checkout -b feature/my-feature).
625-
1. Commit your changes (git commit -m 'Add some feature').
626-
1. Push to the branch (git push origin feature/my-feature).
627-
1. Open a pull request.
618+
Please see the main README.
628619

629620
## License
630621

0 commit comments

Comments
 (0)