@automata-network/cctp-sdk
v1.0.32
Published
An SDK to integrate with Circle CCTP
Downloads
99
Keywords
Readme
cctp-sdk
An SDK to integrate with Circle CCTP
Install
npm i @automata-network/cctp-sdk -S
Usage
import { CCTPDomain, CCTPSdk } from "@automata-network/cctp-sdk";
const testnetSdk = CCTPSdk().testnet();
const result = await testnetSdk.transferUSDC({
signer, // your signer
sourceDomain: CCTPDomain.Ethereum
destinationDomain: CCTPDomain.Avalanche,
destinationAddress: "0xAbD1626FCc4b288aF31695b007Ca1268D7E9Fe19",
amount: ethers.utils
.parseUnits("0.0001", 6)
.toString(),
onApprove: () => {
// show your loading toast
},
onBurnUSDC: () => {
// show your loading toast
},
onGetMessageBytes: () => {
// show your loading toast
},
onFetchAttestation: () => {
// show your loading toast
},
onMintUSDC: () => {
// show your loading toast
},
beforeMintUSDC: async () => {
// switch chain here before sending redemption
},
destinationSigner, // another signer for sending redemption, if you use same signer as the source chain, can skip this settings
});
or you can do it step by step:
// step1: approve
await testnetSdk.approveUSDC();
// step2: burnUSDC
await testnetSdk.burnUSDC();
// step3: getMessageBytes
await testnetSdk.getMessageBytes();
// step4: waitForAttestation
await testnetSdk.waitForAttestation();
// or you can fetch attestation without result check and retry
await testnetSdk.fetchAttestation();
// step5: mintUSDC
await testnetSdk.mintUSDC();
see here for more details
if you need to add your configs:
import {
CCTPDomain,
CCTPSdk,
defaultConfigs,
} from "@automata-network/cctp-sdk";
const testnetSdk = CCTPSdk({
mainnet: {
irisApiHost: defaultConfigs.mainnet.irisApiHost,
networks: [
{
domain: CCTPDomain.Avalanche,
usdcContractAddress: "0x5425890298aed601595a70ab815c96711a31bc65",
cctpMessageTransmitterContractAddress:
"0xa9fb1b3009dcb79e2fe346c16a604b8fa8ae0a79",
cctpMessengerContractAddress:
"0xeb08f243e5d3fcff26a9e38ae5520a669f4019d0",
rpc: "https://rpc.ankr.com/avalanche_fuji",
},
],
},
testnet: {
irisApiHost: defaultConfigs.testnet.irisApiHost,
networks: [
{
domain: CCTPDomain.Avalanche,
usdcContractAddress: "0x5425890298aed601595a70ab815c96711a31bc65",
cctpMessageTransmitterContractAddress:
"0xa9fb1b3009dcb79e2fe346c16a604b8fa8ae0a79",
cctpMessengerContractAddress:
"0xeb08f243e5d3fcff26a9e38ae5520a669f4019d0",
rpc: "https://rpc.ankr.com/avalanche_fuji",
},
],
},
}).testnet();
check if the transfer is completed
const isTransferCompleted = await testnetSdk.isTransferCompleted({
messageBytes: result.messageBytes, // messageBytes is from testnetSdk.transferUSDC, or testnetSdk.getMessageBytes
});
LICENSE
MIT