讲师中心 微信公众号
AI工具推荐 视频效率加速

Use Smart Contract Platform

Polar Sponsor
爱发电 赞助
.NET 9.0

使用 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() 返回重复/已存在错误:

  1. 调用 listContracts({ blockchain: 'ARC-TESTNET' })
  2. 按 contractAddress 匹配(不区分大小写)
  3. 继续使用已存在的 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工具

更多
SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

相关专题

更多
Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

0

2026.11.02

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

0

2026.11.02

Uvicorn安装配置教程
Uvicorn安装配置教程

本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。

0

2026.11.02

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

0

2026.10.28

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

0

2026.10.28

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

0

2026.10.28

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

0

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn