UNPKG

@stable-io/cctp-sdk-definitions

Version:

Definitions for the CCTP SDK

184 lines 7.93 kB
// Copyright (c) 2025 Stable Technologies Inc // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. import { constMap, deepReadonly, zip } from "@stable-io/map-utils"; //TODO all the same for now - should we dedup? export const contractEntries = [[ "Mainnet", [[ "Ethereum", [ ["messageTransmitter", "0x81D40F21F12A8F0E3252Bccb954D722d4c464B64"], ["tokenMessenger", "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d"], ] ], [ "Avalanche", [ ["messageTransmitter", "0x81D40F21F12A8F0E3252Bccb954D722d4c464B64"], ["tokenMessenger", "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d"], ] ], [ "Arbitrum", [ ["messageTransmitter", "0x81D40F21F12A8F0E3252Bccb954D722d4c464B64"], ["tokenMessenger", "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d"], ] ], [ "Optimism", [ ["messageTransmitter", "0x81D40F21F12A8F0E3252Bccb954D722d4c464B64"], ["tokenMessenger", "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d"], ] ], [ "Polygon", [ ["messageTransmitter", "0x81D40F21F12A8F0E3252Bccb954D722d4c464B64"], ["tokenMessenger", "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d"], ] ], [ "Unichain", [ ["messageTransmitter", "0x81D40F21F12A8F0E3252Bccb954D722d4c464B64"], ["tokenMessenger", "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d"], ] ], [ "Base", [ ["messageTransmitter", "0x81D40F21F12A8F0E3252Bccb954D722d4c464B64"], ["tokenMessenger", "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d"], ] ], [ "Linea", [ ["messageTransmitter", "0x81D40F21F12A8F0E3252Bccb954D722d4c464B64"], ["tokenMessenger", "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d"], ] ], [ "Sonic", [ ["messageTransmitter", "0x81D40F21F12A8F0E3252Bccb954D722d4c464B64"], ["tokenMessenger", "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d"], ] ], [ "Codex", [ ["messageTransmitter", "0x81D40F21F12A8F0E3252Bccb954D722d4c464B64"], ["tokenMessenger", "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d"], ] ], [ "Worldchain", [ ["messageTransmitter", "0x81D40F21F12A8F0E3252Bccb954D722d4c464B64"], ["tokenMessenger", "0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d"], ] ], ] ], [ "Testnet", [[ "Ethereum", [ ["messageTransmitter", "0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275"], ["tokenMessenger", "0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA"], ] ], [ "Avalanche", [ ["messageTransmitter", "0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275"], ["tokenMessenger", "0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA"], ] ], [ "Arbitrum", [ ["messageTransmitter", "0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275"], ["tokenMessenger", "0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA"], ] ], [ "Optimism", [ ["messageTransmitter", "0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275"], ["tokenMessenger", "0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA"], ] ], [ "Polygon", [ ["messageTransmitter", "0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275"], ["tokenMessenger", "0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA"], ] ], [ "Unichain", [ ["messageTransmitter", "0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275"], ["tokenMessenger", "0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA"], ] ], [ "Base", [ ["messageTransmitter", "0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275"], ["tokenMessenger", "0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA"], ] ], [ "Linea", [ ["messageTransmitter", "0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275"], ["tokenMessenger", "0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA"], ] ], [ "Sonic", [ ["messageTransmitter", "0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275"], ["tokenMessenger", "0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA"], ] ], [ "Codex", [ ["messageTransmitter", "0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275"], ["tokenMessenger", "0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA"], ] ], [ "Worldchain", [ ["messageTransmitter", "0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275"], ["tokenMessenger", "0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA"], ] ], ] ], ]; export const contractAddressOf = constMap(contractEntries); export const supportedDomains = constMap(contractEntries, [0, 1]); export const isSupportedDomain = (network) => (domain) => supportedDomains(network).includes(domain); export const fastDomains = ["Avalanche"]; export const isFastDomain = (domain) => fastDomains.includes(domain); // See https://developers.circle.com/stablecoins/required-block-confirmations // TODO: review numbers and add slow transfer numbers export const attestationTimeEstimates = { Mainnet: { Ethereum: 13.25, Avalanche: 100, // v2 is not used in avalanche. Arbitrum: 4.71, Base: 4.99, Linea: 1.85, // TODO Optimism: 3.29, Unichain: 3.75, Polygon: 31.59, Worldchain: 2.22, Sonic: 3.32, Codex: 10, // TODO Sei: 10, // TODO }, Testnet: { Ethereum: 16.76, Avalanche: 8.19, Arbitrum: 3.18, Base: 1.43, Linea: 8, // TODO Optimism: 0.85, Unichain: 8, // TODO Polygon: 9.04, }, }; export const finalityThresholdEntries = [ [500, "TokenMessengerMin"], [1000, "Confirmed"], [2000, "Finalized"], ]; const [finalityThresholdVals, finalityThresholdNames] = deepReadonly(zip(finalityThresholdEntries)); //return the name of the finality threshold which is >= the given threshold // i.e. 500 -> "TokenMessengerMin", 501 -> "Confirmed", 1001+ -> "Finalized" export const finalityThresholdNameOf = (finalityThreshold) => { for (let i = finalityThresholdEntries.length - 2; i >= 0; --i) if (finalityThreshold > finalityThresholdEntries[i][0]) return finalityThresholdNames[i + 1]; return finalityThresholdNames[0]; }; export const init = (network) => ({ contractAddressOf: contractAddressOf.subMap(network), supportedDomains, isSupportedDomain: isSupportedDomain(network), fastDomains, isFastDomain, attestationTimeEstimates: attestationTimeEstimates[network], finalityThresholdEntries, finalityThresholdVals, finalityThresholdNames, finalityThresholdNameOf, }); //# sourceMappingURL=constants.js.map