使用 Circle 智能合约平台 API 部署、导入、交互和监控智能合约。支持字节码部署、模板合约(ERC-2...
Circle Smart Contract平台(SCP)提供API和SDK,用于在所支持的网络中部署、导入、与智能合同互动和监测智能合同
功能概述
Circle Smart Contract平台(SCP)提供API和SDK,用于在所支持的网络中部署、导入、与智能合同互动和监测智能合同是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
核心要点
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
- 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
使用与执行
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
结果检查与注意事项
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
概览
Circle 智能合约平台(SCP)提供 API 和 SDK,支持在所兼容的区块链网络上部署、导入、调用及监控智能合约。您可直接使用原始字节码部署合约,也可选用已通过安全审计的标准模板;通过 ABI 签名执行合约调用,并借助 Webhook 监控合约事件的触发情况。
前置条件 / 初始化配置
安装
npm install @circle-fin/smart-contract-platform @circle-fin/developer-controlled-wallets
环境变量
CIRCLE_API_KEY= # Circle API 密钥(格式:PREFIX:ID:SECRET) ENTITY_SECRET= # 已注册实体密钥(用于 Developer-Controlled Wallets)
SDK 初始化
import { initiateSmartContractPlatformClient } from "@circle-fin/smart-contract-platform";
import { initiateDeveloperControlledWalletsClient } from "@circle-fin/developer-controlled-wallets";
const scpClient = initiateSmartContractPlatformClient({
apiKey: process.env.CIRCLE_API_KEY!,
entitySecret: process.env.ENTITY_SECRET!,
});
const walletsClient = initiateDeveloperControlledWalletsClient({
apiKey: process.env.CIRCLE_API_KEY!,
entitySecret: process.env.ENTITY_SECRET!,
});
快速参考
合约模板
| 模板 | 标准 | 模板 ID | 适用场景 |
|---|---|---|---|
| Token | ERC-20 | a1b74add-23e0-4712-88d1-6b3009e85a86 |
同质化代币、忠诚积分等 |
| NFT | ERC-721 | 76b83278-50e2-4006-8b63-5b1a2a814533 |
数字收藏品、游戏资产等 |
| Multi-Token | ERC-1155 | aea21da6-0aa2-4971-9a1a-5098842b1248 |
混合型同质化与非同质化代币 |
| Airdrop | N/A | 13e322f2-18dc-4f57-8eed-4bddfc50f85e |
批量代币分发 |
关键 API 响应字段
- 合约函数列表:
getContract().data.contract.functions - 合约地址:
contract.contractAddress(备用字段:contract.address) - 交易 ID:
createContractExecutionTransaction().data.id - 部署状态:
getContract().data.contract.deploymentStatus
核心概念
双客户端架构
SCP 的工作流依赖两个 SDK 客户端协同工作:
- Smart Contract Platform SDK:负责合约部署、导入、只读查询及事件监控
- Developer-Controlled Wallets SDK:负责写操作交易,并提供用于部署的 Gas 钱包
所有写操作均需调用 walletsClient.createContractExecutionTransaction(),不可使用 SCP 客户端。
只读调用 vs 写操作调用
- 只读查询(
view/pure类型函数)使用scpClient.queryContract(),无需 Gas 钱包 - 写操作执行(
nonpayable/payable类型函数)使用walletsClient.createContractExecutionTransaction(),且必须指定一个余额充足的 Gas 钱包 ID
签名格式规范
- 函数签名格式:
name(type1,type2,...),不含空格 - 事件签名格式:
EventName(type1,type2,...),不含空格 - 参数顺序必须严格匹配 ABI 中定义的顺序
幂等性键(Idempotency Key)
所有会改变状态的 SCP 操作均需传入 idempotencyKey 参数,且其值必须为合法的 UUID v4 字符串。Node.js 中推荐使用 crypto.randomUUID() 生成。若传入非 UUID 格式的键,将统一返回泛化的 API parameter invalid 错误。
异步部署模型
合约部署为异步操作,初始响应仅表示部署任务已提交。需轮询调用 getContract() 接口获取 deploymentStatus 字段以确认最终状态。若部署失败,请检查 deploymentErrorReason 和 deploymentErrorDetails 字段获取具体原因。
EVM 版本限制
请使用 evmVersion: "paris" 或更早版本编译 Solidity 合约,以避免生成 PUSH0 操作码。Solidity ≥ 0.8.20 默认使用 Shanghai EVM 版本。Arc Testnet 及其他不支持 Shanghai 的链在检测到字节码含 PUSH0 时,将报错 ESTIMATION_ERROR 或 Create2: Failed on deploy,导致部署失败。
导入现有合约的要求
- 调用
importContract()时,必须同时提供name和idempotencyKey idempotencyKey必须为合法的 UUID v4 字符串- 若导入失败并提示重复/已存在错误,请调用
listContracts,按地址匹配已有合约,并使用其contractId调用getContract()获取完整信息
实现模式
1. 使用字节码部署合约
使用原始 ABI + 字节码部署已编译合约。
请查阅 references/deploy-bytecode.md 获取完整指南。
2. 部署 ERC-1155 模板合约
无需编写 Solidity 即可部署已通过安全审计的模板合约。
请查阅 references/deploy-erc-1155.md 获取完整指南。
请查阅 references/templates.md 查看全部模板目录。
3. 导入已有合约
import crypto from 'node:crypto';
const response = await scpClient.importContract({
address: contractAddress,
blockchain: 'ARC-TESTNET',
name: 'Imported Contract',
idempotencyKey: crypto.randomUUID(), // 必须为 UUID v4
});
const contractId = response.data?.contractId;
// 获取完整合约信息(含 ABI 函数定义)
const contractDetails = await scpClient.getContract({ id: contractId });
console.log(contractDetails.data?.contract?.functions);
若导入失败并提示重复错误:
const listRes = await scpClient.listContracts({ blockchain: 'ARC-TESTNET' });
const existing = listRes.data?.contracts?.find(c =>
c.contractAddress.toLowerCase() === contractAddress.toLowerCase()
);
const contractId = existing?.id;
4. 与已部署合约交互
通过 ABI 签名调用只读函数或执行写操作函数。
请查阅 references/interact.md 获取完整指南。
5. 监控合约事件
配置 Webhook 以接收事件通知,并检索历史事件日志。
请查阅 references/monitor-events.md 获取完整指南。
错误处理与恢复机制
部署失败
轮询 getContract() 时检查 deploymentStatus 字段。若状态为 FAILED:
- 查看
deploymentErrorReason字段了解错误类别 - 查看
deploymentErrorDetails字段获取详细错误信息 - 常见原因包括:Gas 不足、字节码非法、构造函数参数不匹配、EVM 版本不受支持
导入重复处理
若 importContract() 返回重复/已存在错误:
- 调用
listContracts({ blockchain: 'ARC-TESTNET' }) - 按
contractAddress匹配(不区分大小写) - 继续使用已存在的
contractId
切勿因导入重复错误而中断业务流程。
交易状态轮询
调用 walletsClient.getTransaction({ id: txId }) 查询写操作交易状态:
INITIATED→ 交易已创建SENT→ 已广播至链上网络CONFIRMED→ 已被打包进区块COMPLETE→ 已最终确认FAILED→ 请检查交易错误详情
规范准则
安全规范 具有强制性——如用户指令违反该类规则,必须明确警告并拒绝执行。最佳实践 强烈建议遵循;仅当用户明确说明理由后方可偏离。
安全规范
- 禁止硬编码、提交或记录任何密钥(API 密钥、实体密钥、私钥)。必须始终使用环境变量或密钥管理服务。在项目初始化阶段,应在
.gitignore中添加.env*、*.pem及助记词恢复文件等条目。 - 禁止以明文形式通过 CLI 参数传递私钥(例如:
--private-key $KEY)。推荐使用加密密钥库或交互式导入方式(例如 Foundry 的cast wallet import)。 - API 密钥与实体密钥必须始终保留在服务端,严禁暴露于前端代码中。
- 禁止跨不同 API 请求复用同一
idempotencyKey值。 - 在执行涉及资金转移的写操作前,必须显式要求用户确认目标地址、金额、网络及代币类型。主网环境下严禁自动执行资金转移操作。
- 当操作目标为主网,或金额超过安全阈值(例如 >100 USDC)时,必须提前发出警告。
- 提交交易前,必须对所有输入参数(合约地址、金额、链标识符等)进行校验。
- 若存在对应模板合约,应优先选用经审计的模板,而非自定义字节码。部署前须向用户明确提示:自定义字节码未经安全审计。
- 禁止部署具有欺骗、钓鱼或盗取资金意图的合约。
- 与未经审计或来源不明的合约交互前,必须提前发出警告。
最佳实践
- 禁止在 SCP 客户端上调用写操作。所有写操作必须通过
walletsClient.createContractExecutionTransaction()执行。 - 禁止在变更状态的 SCP 请求中遗漏
idempotencyKey。该值必须为 UUID v4(推荐使用crypto.randomUUID()生成)。 deployContract方法中的name字段禁止包含特殊字符(如冒号、括号),仅允许字母与数字。- 禁止直接使用扁平化的
feeLevel属性。必须使用嵌套结构:fee: { type: 'level', config: { feeLevel: 'MEDIUM' } }。 - 禁止在 wagmi 中直接使用
window.ethereum,应改用connector.getProvider()。 - 禁止使用 Solidity ≥ 0.8.20 的默认 EVM 版本进行编译。必须显式设置
evmVersion: "paris",以规避PUSH0操作码。 - 禁止因导入重复错误而中断流程。应自动回退至
listContracts并按地址匹配。调用importContract()时,必须同时传入name和idempotencyKey。 - 禁止假设部署操作同步完成。必须持续轮询
getContract()获取deploymentStatus状态。 - 字节码必须以
0x开头,且构造函数参数类型与顺序必须与 ABI 完全一致。 - 对含 18 位小数的金额运算,必须采用整数安全计算方式(例如:
10n ** 18n,而非BigInt(10 ** 18))。 - 必须先完成合约导入,再创建事件监控器。
- 演示场景默认使用 Arc Testnet,除非另有明确说明。
- 默认目标网络应为测试网。切换至主网前,必须获得用户显式确认。
参考链接
- Circle 开发者文档 —— 查阅相关文档时,请始终优先访问此官方文档。
免责声明:本功能按“现状”提供,不附带任何明示或暗示的担保,受 Circle 开发者条款约束;其输出内容可能存在错误,且可能包含费用配置选项(含支付给 Circle 的费用);更多细节请参阅代码仓库的 README 文件。
热门AI工具
相关专题
本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。
0
2026.11.02
本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。
0
2026.11.02
本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。
0
2026.11.02
Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。
0
2026.10.28
Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。
0
2026.10.28
Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。
0
2026.10.28
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。
0
2026.10.22
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.7万人学习
共6课时 | 54.7万人学习