CCTPv2 连接提供者
目录
概览
CCTPv2 搭桥提供商是Circle's Cross-Chain Transfer Protocol(CCTP)版本2的强型执行,该版本使得 本地USDC 连接 在49个支持的区块链网络之间.
虽然主要设计为电力 桥套,该提供者也可以使用 直接在应用程序中 需要精细控制 CCTP 传输过程或想要整合 CCTP 没有完整的 App Kits 框架.
为什么是CCTPv2供应商?
- QQ Circle 的官方协议: 使用 Circle 本地的 CCTP 基础设施以达到最大安全性
- 51个链式支持: 启用连接所有 CCTPv2 支持的网络
- 原产地 USDC: 桥梁 实际USDC 令牌,非包裹或合成版本
- * 类型安全操作: 建有 TypeScript 严格模式并全面验证
- * 直接融合: 使用独立或自定义的管弦逻辑
安装
npm install @circle-fin/provider-cctp-v2
# or
yarn add @circle-fin/provider-cctp-v2
说明: 默认情况下包含此提供者 桥套。如果需要进行自定义的 CCTP 集成,可以导入此提供者.
快速启动
备选案文1:带桥套(建议)
import { BridgeKit } from '@circle-fin/bridge-kit'
// Provider included by default
const kit = new BridgeKit()
const result = await kit.bridge({
from: { adapter: sourceAdapter, chain: 'Ethereum' },
to: { adapter: destAdapter, chain: 'Base' },
amount: '100.50',
})
备选案文2:直接提供者的使用
import { CCTPV2BridgingProvider } from '@circle-fin/provider-cctp-v2'
import { ViemAdapter } from '@circle-fin/adapter-viem-v2'
import { createPublicClient, createWalletClient, http } from 'viem'
import { mainnet, base } from 'viem/chains'
import { privateKeyToAccount } from 'viem/accounts'
const account = privateKeyToAccount(process.env.PRIVATE_KEY)
const provider = new CCTPV2BridgingProvider()
// Create adapters
const sourceAdapter = new ViemAdapter({
publicClient: createPublicClient({ chain: mainnet, transport: http() }),
walletClient: createWalletClient({
account,
chain: mainnet,
transport: http(),
}),
})
const destAdapter = new ViemAdapter({
publicClient: createPublicClient({ chain: base, transport: http() }),
walletClient: createWalletClient({ account, chain: base, transport: http() }),
})
// Check route support
const isSupported = provider.supportsRoute('Ethereum', 'Base', 'USDC')
// Get bridge estimate
const estimate = await provider.estimate({
from: { adapter: sourceAdapter, chain: 'Ethereum' },
to: { adapter: destAdapter, chain: 'Base' },
amount: '100.50',
config: { transferSpeed: 'FAST' },
})
// Execute bridge operation with custom logic
const result = await provider.bridge({
from: { adapter: sourceAdapter, chain: 'Ethereum' },
to: { adapter: destAdapter, chain: 'Base' },
amount: '100.50',
config: { transferSpeed: 'FAST' },
})
特征
- ✅ 原生的 USDC 桥接 - 在所支持的网络之间移动真正的USDC
- ✅ CCTP v2 集成 - 直接与 Circle 的 CCTP v2 协议合并
- ✅ 全面审定 - 路线验证和参数检查
- ✅ 多链支持 - 跨越所有52个CCTPv2支持链的工作
- ✅ 类型安全 - 包含详细错误处理的完整类型脚本支持
- ✅ 桥速 - 支持FAST和SLOW桥的配置
- ✅ 转发器集成 - 圆形轨道中继器自动处理验证和薄荷
- ✅ 仅转发目的地 - 不需要目的地适配器
支持的链路( R)
提供者支持 1300条桥梁路线总数 跨越这些链条:
主网链
坐标, (中文(简体) ), 弧形, (中文(简体) ), 雪崩, (中文(简体) ), 基础, (中文(简体) ), 代码, (中文(简体) ), 克罗诺斯, (中文(简体) ), 边缘, (中文(简体) ), 以利亚, (中文(简体) ), 超高频, (中文(简体) ), 注射, (中文(简体) ), 墨迹, (中文(简体) ), 线性a, (中文(简体) ), 修道院, (中文(简体) ), 墨菲语, (中文(简体) ), OP 主要网, (中文(简体) ), 法罗, (中文(简体) ), 等离子体, (中文(简体) ), 弹珠, (中文(简体) ), 多边形 PoS, (中文(简体) ), 谢, (中文(简体) ), 索拉纳, (中文(简体) ), 音响, (中文(简体) ), 单链, (中文(简体) ), 世界链, (中文(简体) ), XDC 数据交换中心, (中文(简体) ), X 层
测试网链
弧度测试网, (中文(简体) ), 塞波利亚角, (中文(简体) ), 富士雪崩, (中文(简体) ), 塞波利亚基地, (中文(简体) ), 代码测试网, (中文(简体) ), 克罗诺斯测试网, (中文(简体) ), 边缘测试网, (中文(简体) ), 伊特鲁姆·塞波利亚, (中文(简体) ), 超高频 测试网, (中文(简体) ), 注射测试网, (中文(简体) ), 墨子测试网, (中文(简体) ), 塞波利亚线, (中文(简体) ), 莫纳德测试网, (中文(简体) ), 墨菲测试网, (中文(简体) ), OP 塞波利亚, (中文(简体) ), 大西洋, (中文(简体) ), Plasma 测试网, (中文(简体) ), Plume 测试网, (中文(简体) ), 多边形 PoS 模拟, (中文(简体) ), 塞试网, (中文(简体) ), 索拉纳·德夫内, (中文(简体) ), 音效测试网, (中文(简体) ), 单链塞波利亚, (中文(简体) ), 世界链塞波利亚, (中文(简体) ), XDC 阿波瑟, (中文(简体) ), X 层测试网
处理错误
提供者对不同的情景进行深思熟虑的错误处理:
// Using the same kit and adapters from the examples above
const params = {
from: { adapter: sourceAdapter, chain: 'Ethereum' },
to: { adapter: destAdapter, chain: 'Base' },
amount: '100.50',
}
try {
const result = await provider.bridge(params)
if (result.state === 'success') {
console.log('Bridge completed successfully!')
// Display explorer URLs for each step
result.steps.forEach((step) => {
if (step.explorerUrl) {
console.log(`${step.name}: ${step.explorerUrl}`)
}
})
} else {
// Handle partial completion
const successfulSteps = result.steps.filter((s) => s.state === 'success')
const failedStep = result.steps.find((s) => s.state === 'error')
console.log('Successful steps:', successfulSteps)
console.log('Failed at:', failedStep)
}
} catch (error) {
// Handle validation or configuration errors
console.error('Bridge failed:', error.message)
}
桥梁进程
CCTPv2供应商处理完整的跨链接通流:
- 核准 - 核准USDC支出(如有需要)
- 燃烧 - 通过源链焚烧USDC
depositForBurn - 证明 - 把圆圈的证明拿来
- 薄荷 - 使用证明书制作目的地链上的薄荷USDC
每一步都经过跟踪,可以通过提供商的活动系统进行监测. 每个步骤的交易细节包括探索者URL,以方便区块探索者验证.
与转发器: 当
useForwarder: true,则目的地薄荷呈文由 Circle's Orbit中继器,而中继费则从薄荷金额中扣除.
转发器集成
CCTPv2供应商支持Circle的轨道中继器进行自动验证和薄荷处理. 启用后,中继器会自动获取证明并提交薄荷交易, 取消了用户管理目的地链交易的需要.
您可以明确检查转发器路由支持 :
const canForward = provider.supportsRoute(
'Ethereum,
'Base,
'USDC',
true,
)
有转发器的标准桥
使用 useForwarder: true 当您有两条链子的适配器, 但想要圆形处理薄荷时:
const result = await kit.bridge({
from: { adapter: sourceAdapter, chain: 'Ethereum' },
to: {
adapter: destAdapter,
chain: 'Base',
useForwarder: true, // Circle handles attestation + mint
},
amount: '100.50',
})
仅转发目标
当无法访问目的地链(没有钱包/适应器)时,只使用转发器模式. 这对服务器侧传输或用户在目的地链上没有钱包时有用:
const result = await kit.bridge({
from: { adapter: sourceAdapter, chain: 'Ethereum' },
to: {
recipientAddress: '0x...', // Where to receive USDC
chain: 'Base',
useForwarder: true, // Required for forwarder-only
},
amount: '100.50',
})
与标准连接的关键区别 :
- 不需要目标适配器
- 通过IRIS API确认薄荷(不是链上接收)
- 薄荷步骤
data字段将会是undefined
中继费处理
使用转发器时,在 maxFee 估计数:
- 中继费来自 Circle 的 API , 其来源/ 目的地链
- 在薄荷时间从薄荷USDC中扣除费用
- 收到净额=燃烧额 -- -- 中继费
费用估算会自动说明:
const estimate = await provider.estimate({
from: { adapter: sourceAdapter, chain: 'Ethereum' },
to: {
recipientAddress: '0x...',
chain: 'Base',
useForwarder: true,
},
amount: '100.50',
})
console.log(estimate.fees) // Includes both provider and forwarder fee entries
如果你提供
config.maxFee手动确保它已经包含任何预期 选定路线和速度的转发器费用。 对于索拉纳目的地 转发费还包括创建收款人USDC代币账户.
与桥基合并
此提供者是专门为 桥套数字 :
import { BridgeKit } from '@circle-fin/bridge-kit'
import { ViemAdapter } from '@circle-fin/adapter-viem-v2'
import { createPublicClient, createWalletClient, http } from 'viem'
import { mainnet, base } from 'viem/chains'
import { privateKeyToAccount } from 'viem/accounts'
const account = privateKeyToAccount(process.env.PRIVATE_KEY)
// Provider is included by default
const kit = new BridgeKit()
const sourceAdapter = new ViemAdapter({
publicClient: createPublicClient({ chain: mainnet, transport: http() }),
walletClient: createWalletClient({
account,
chain: mainnet,
transport: http(),
}),
})
const destAdapter = new ViemAdapter({
publicClient: createPublicClient({ chain: base, transport: http() }),
walletClient: createWalletClient({ account, chain: base, transport: http() }),
})
// Monitor transfer events
kit.on('*', (event) => console.log('Event:', event)) // subscribe to all events
kit.on('approve', (event) => console.log('Approval:', event.values.txHash))
kit.on('burn', (event) => console.log('Burn:', event.values.txHash))
kit.on('fetchAttestation', (event) =>
console.log('Attestation:', event.values.data),
)
kit.on('mint', (event) => console.log('Mint:', event.values.txHash))
// Execute transfer
const result = await kit.bridge({
from: { adapter: sourceAdapter, chain: 'Ethereum' },
to: { adapter: destAdapter, chain: 'Base' },
amount: '25.0',
})
发展
这个包是App Kits monorepo的一部分.
# Build
nx build @circle-fin/provider-cctp-v2
# Test
nx test @circle-fin/provider-cctp-v2
许可证
这个项目根据Apache 2.0许可证获得许可. 联系人 支助 详细情况.