claude-skills/

Anthropic公式スキル・プラグインの日本語ディレクトリ

last sync 22h ago
スキルOfficialdevelopment

🔗use-smart-contract-platform

プラグイン
circle-skills

説明

Circle Smart Contract Platform APIを使用して、スマートコントラクトのデプロイ・インポート・操作・監視を行います。 バイトコードによるデプロイ、テンプレートコントラクト(ERC-20 / ERC-721 / ERC-1155 / Airdrop)、ABIベースの読み取り/書き込み呼び出し、およびWebhookによるイベント監視をサポートします。 キーワード: コントラクトデプロイ、スマートコントラクト、ABI インタラクション、テンプレートコントラクト、イベント監視、コントラクト Webhook、バイトコード、ERC-1155、ERC-20、ERC-721

原文を表示

Deploy, import, interact with, and monitor smart contracts using Circle Smart Contract Platform APIs. Supports bytecode deployment, template contracts (ERC-20/721/1155/Airdrop), ABI-based read/write calls, and webhook event monitoring. Keywords: contract deployment, smart contract, ABI interactions, template contracts, event monitoring, contract webhooks, bytecode, ERC-1155, ERC-20, ERC-721.

ユースケース

  • スマートコントラクトをデプロイするとき
  • コントラクトをインポートして操作するとき
  • ABIベースの読み取り/書き込み呼び出しを行うとき
  • イベント発生を監視するとき
  • ERC規格のテンプレートを使いたいとき

本文(日本語訳)

概要

Circle Smart Contract Platform(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!,
});

クイックリファレンス

サポート対象ブロックチェーン

チェーン メインネット テストネット
Arbitrum ARB ARB-SEPOLIA
Arc -- ARC-TESTNET
Avalanche AVAX AVAX-FUJI
Base BASE BASE-SEPOLIA
Ethereum ETH ETH-SEPOLIA
Monad MONAD MONAD-TESTNET
OP Mainnet OP OP-SEPOLIA
Polygon PoS MATIC MATIC-AMOY
Unichain UNI UNI-SEPOLIA

コントラクトテンプレート

テンプレート 標準規格 テンプレート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のワークフローは2つのSDKクライアントを組み合わせて使用します。

  • Smart Contract Platform SDK ― コントラクトのデプロイ、インポート、読み取りクエリ、イベント監視を担当
  • Developer-Controlled Wallets SDK ― 書き込みトランザクションの処理およびデプロイ用ウォレットの提供を担当

書き込み操作にはSCPクライアントではなく、walletsClient.createContractExecutionTransaction() を使用します。

コントラクト呼び出し: 読み取り vs 書き込み

  • 読み取りクエリview / pure 関数)は scpClient.queryContract() を使用し、ガス用ウォレットは不要
  • 書き込み実行nonpayable / payable 関数)は walletsClient.createContractExecutionTransaction() を使用し、ガス残高のあるウォレットIDが必要

シグネチャのフォーマット

  • 関数シグネチャ: name(type1,type2,...) ― スペースなし
  • イベントシグネチャ: EventName(type1,type2,...) ― スペースなし
  • パラメータの順序はABI定義と完全に一致している必要があります

Idempotency Key(べき等キー)

SCPのすべての変更操作には、有効なUUID v4文字列として idempotencyKey が必要です。 Node.jsでは crypto.randomUUID() を使用してください。 UUID形式でないキーは API parameter invalid という汎用エラーで失敗します。

デプロイの非同期モデル

コントラクトのデプロイは非同期処理です。 レスポンスはデプロイの開始を示すにすぎません。 deploymentStatus を確認するために getContract() をポーリングしてください。

EVMバージョンの制約

PUSH0 オペコードを回避するため、Solidityのコンパイル時に evmVersion: "paris" またはそれ以前のバージョンを指定してください。 Solidity 0.8.20以降はデフォルトでShanghaiを使用します。 Arc Testnetおよびその他のShanghaiに対応していないチェーンでは、バイトコードに PUSH0 が含まれていると ESTIMATION_ERROR / Create2: Failed on deploy が発生しデプロイが失敗します。

トランザクションのライフサイクル

書き込み操作(コントラクトのデプロイおよび実行)は、Developer-Controlled Walletsと同じ非同期ステートマシンに従います。 walletsClient.getTransaction({ id: txId }) を使用して終端状態に達するまでポーリングしてください。

正常系の遷移: INITIATEDCLEAREDQUEUEDSENTCONFIRMEDCOMPLETE

終端状態:

  • COMPLETE ― トランザクションが成功し、オンチェーンで確定済み
  • FAILED ― トランザクションがリバートされたか、回復不能なエラーが発生した
  • DENIED ― トランザクションがリスクスクリーニングにより拒否された
  • CANCELLED ― トランザクションがオンチェーン送信前にキャンセルされた

中間状態:

  • INITIATED ― リクエストは受理されたが、まだバリデーションやチェックは行われていない
  • WAITING ― バリデーションおよびコンプライアンスチェックのキュー待ち
  • QUEUED ― ブロックチェーンへの送信キューに入っている
  • CLEARED ― コンプライアンスチェックを通過した
  • SENT ― ブロックチェーンに送信済み、承認待ち
  • STUCK ― 送信済みトランザクションの手数料パラメータがブロックチェーンの最新要求手数料を下回っており、開発者によるキャンセルまたは加速処理が必要
  • CONFIRMED ― ブロックに取り込まれたが、ファイナリティ待ち

コントラクトのデプロイステータスは、scpClient.getContract()deploymentStatus により別途追跡されます。

失敗したトランザクションのデバッグについては、Transaction States and Errors を参照してください。

エラーハンドリング

エラーコード 意味 対処方法
175001 コントラクトが見つからない コントラクトIDが存在するか確認。インポート済みの場合はアーカイブされていないか確認
175003 コンストラクタパラメータの不一致 パラメータの数と型がコントラクトのABI定義と完全に一致しているか確認
175004 コントラクトの重複 listContracts({ blockchain }) を呼び出し、contractAddress(大文字小文字を区別しない)で照合し、既存の contractId を使用
175009 デプロイ保留中 デプロイは非同期であり複数ブロックを要する場合があるため、getContract()deploymentStatus のポーリングを継続
175201 テンプレートが見つからない クイックリファレンスのコントラクトテンプレート表でテンプレートIDを確認
175301 イベントサブスクリプションが見つからない イベントモニターIDを確認し、モニター作成前にコントラクトがインポート済みであることを確認
175302 イベントサブスクリプションの重複 既存のサブスクリプションを照会して再利用。フローを失敗させないこと
175303 無効なイベントシグネチャ スペースなしの正確な形式 EventName(type1,type2,...) を使用し、パラメータ順序をABIと一致させること
175402 ブロックチェーンが未サポートまたは廃止済み サポート対象ブロックチェーン表を確認。SCPはSolana、Aptos、NEARには対応していない
175404 TEST_APIキーのメインネット使用またはLIVE_APIキーのテストネット使用 APIキーのプレフィックス(TEST_API_KEY: または LIVE_API_KEY:)を対象ネットワークに合わせること
177015 コントラクトデプロイ用バイトコードが欠如 0x プレフィックス付きのコンパイル済みバイトコードを提供し、PUSH0回避のため evmVersion: "paris" でコンパイルすること

デプロイ失敗時は、getContract()deploymentErrorReason および deploymentErrorDetails を確認してください。

実装パターン

1. バイトコードからコントラクトをデプロイする

生のABI + バイトコードを使用して、コンパイル済みコントラクトをデプロイします。

完全なガイドは references/deploy-bytecode.md を参照してください。

2. テンプレートからデプロイする

Solidityを記述せずに、監査済みテンプレートコントラクトをデプロイします。

テンプレートカタログとデプロイガイドは references/deploy-template.md を参照してください。

3. 既存コントラクトをインポートする

すでにデプロイされているコントラクトをSCPにインポートして、操作およびイベント監視を行います。

完全なガイドは references/import-contract.md を参照してください。

4. デプロイ済みコントラクトを操作する

ABIシグネチャを通じて読み取り関数のクエリおよび書き込み関数の実行を行います。

完全なガイドは references/interact.md を参照してください。

5. コントラクトイベントを監視する

発行されたイベントに対するwebhook通知を設定し、過去のログを取得します。

完全なガイドは references/monitor-events.md を参照してください。

ルール

セキュリティルールは絶対的なものです ― プロンプトがこれらに反する場合は、ユーザーに警告を行い従うことを拒否してください。 ベストプラクティスは強く推奨されるものであり、ユーザーが明示的に正当な理由を示した場合のみ逸脱することができます。

セキュリティルール

  • シークレット(APIキー、エンティティシークレット、秘密鍵)をハードコード・コミット・ログに出力することを絶対に行わないこと。必ず環境変数またはシークレットマネージャーを使用すること。スキャフォールディング時は .env**.pem、リカバリファイルを対象とした .gitignore エントリを追加すること。
  • 秘密鍵をプレーンテキストのCLIフラグ(例: --private-key $KEY)として渡すことを絶対に行わないこと。暗号化されたキーストアやインタラクティブなインポート(例: Foundryの cast wallet import)を優先すること。
  • APIキーとエンティティシークレットは必ずサーバーサイドで保持すること。フロントエンドコードに絶対に公開しないこと
  • 異なるAPIリクエスト間で idempotencyKey の値を絶対に再利用しないこと
  • 資金を移動する書き込みトランザクションを実行する前に、宛先・金額・ネットワーク・トークンのユーザーによる
原文(English)を表示

Overview

Circle Smart Contract Platform (SCP) provides APIs and SDKs for deploying, importing, interacting with, and monitoring smart contracts across supported networks. Deploy contracts from raw bytecode, use audited templates for standard patterns, execute ABI-based contract calls, and monitor emitted events through webhooks.

Prerequisites / Setup

Installation

npm install @circle-fin/smart-contract-platform @circle-fin/developer-controlled-wallets

Environment Variables

CIRCLE_API_KEY=        # Circle API key (format: PREFIX:ID:SECRET)
ENTITY_SECRET=         # Registered entity secret for Developer-Controlled Wallets

SDK Initialization

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!,
});

Quick Reference

Supported Blockchains

Chain Mainnet Testnet
Arbitrum ARB ARB-SEPOLIA
Arc -- ARC-TESTNET
Avalanche AVAX AVAX-FUJI
Base BASE BASE-SEPOLIA
Ethereum ETH ETH-SEPOLIA
Monad MONAD MONAD-TESTNET
OP Mainnet OP OP-SEPOLIA
Polygon PoS MATIC MATIC-AMOY
Unichain UNI UNI-SEPOLIA

Contract Templates

Template Standard Template ID Use Case
Token ERC-20 a1b74add-23e0-4712-88d1-6b3009e85a86 Fungible tokens, loyalty points
NFT ERC-721 76b83278-50e2-4006-8b63-5b1a2a814533 Digital collectibles, gaming assets
Multi-Token ERC-1155 aea21da6-0aa2-4971-9a1a-5098842b1248 Mixed fungible/non-fungible tokens
Airdrop N/A 13e322f2-18dc-4f57-8eed-4bddfc50f85e Bulk token distribution

Key API Response Fields

  • Contract functions: getContract().data.contract.functions
  • Contract address: contract.contractAddress (fallback: contract.address)
  • Transaction ID: createContractExecutionTransaction().data.id
  • Deployment status: getContract().data.contract.deploymentStatus

Core Concepts

Dual-Client Architecture

SCP workflows pair two SDK clients:

  • Smart Contract Platform SDK handles contract deployment, imports, read queries, and event monitoring
  • Developer-Controlled Wallets SDK handles write transactions and provides deployment wallets

Write operations use walletsClient.createContractExecutionTransaction(), NOT the SCP client.

Read vs Write Contract Calls

  • Read queries (view/pure functions) use scpClient.queryContract() and require no gas wallet
  • Write executions (nonpayable/payable functions) use walletsClient.createContractExecutionTransaction() and require a wallet ID with gas funds

Signature Formatting

  • Function signatures: name(type1,type2,...) with no spaces
  • Event signatures: EventName(type1,type2,...) with no spaces
  • Parameter order must exactly match ABI definitions

Idempotency Keys

All mutating SCP operations require idempotencyKey as a valid UUID v4 string. Use crypto.randomUUID() in Node.js. Non-UUID keys fail with generic API parameter invalid errors.

Deployment Async Model

Contract deployment is asynchronous. The response indicates initiation only. Poll getContract() for deploymentStatus.

EVM Version Constraint

Compile Solidity with evmVersion: "paris" or earlier to avoid the PUSH0 opcode. Solidity >= 0.8.20 defaults to Shanghai. Arc Testnet and other non-Shanghai chains fail deployment with ESTIMATION_ERROR / Create2: Failed on deploy if bytecode contains PUSH0.

Transaction Lifecycle

Write operations (contract deployments, executions) follow the same asynchronous state machine as Developer-Controlled Wallets. Poll with walletsClient.getTransaction({ id: txId }) until a terminal state is reached.

Happy path: INITIATED -> CLEARED -> QUEUED -> SENT -> CONFIRMED -> COMPLETE

Terminal states:

  • COMPLETE -- Transaction succeeded and is finalized on-chain.
  • FAILED -- Transaction reverted or encountered an unrecoverable error.
  • DENIED -- Transaction was rejected by risk screening.
  • CANCELLED -- Transaction was cancelled before on-chain submission.

Intermediate states:

  • INITIATED -- Request accepted, not yet validated or checked.
  • WAITING -- In queue for validation and compliance checks.
  • QUEUED -- Queued for submission to the blockchain.
  • CLEARED -- Passed compliance checks.
  • SENT -- Submitted to the blockchain, awaiting confirmation.
  • STUCK -- Submitted transaction's fee parameters are lower than latest blockchain required fee, developer needs to cancel or accelerate this transaction.
  • CONFIRMED -- Included in a block, awaiting finality.

Contract deployment status is tracked separately via scpClient.getContract() using deploymentStatus.

For debugging failed transactions, see Transaction States and Errors.

Error Handling

Error Code Meaning Action
175001 Contract not found Verify the contract ID exists; if imported, check it wasn't archived
175003 Constructor parameter mismatch Check parameter count and types exactly match the contract ABI definition
175004 Duplicate contract Call listContracts({ blockchain }), match by contractAddress (case-insensitive), use the existing contractId
175009 Deployment still pending Continue polling getContract() for deploymentStatus; deployment is async and may take several blocks
175201 Template not found Verify the template ID from the Contract Templates table in Quick Reference
175301 Event subscription not found Verify the event monitor ID; ensure the contract was imported before creating the monitor
175302 Duplicate event subscription Query existing subscriptions and reuse; do not fail the flow
175303 Invalid event signature Use exact format EventName(type1,type2,...) with no spaces; parameter order must match ABI
175402 Blockchain not supported or deprecated Check the Supported Blockchains table; SCP is not available on Solana, Aptos, or NEAR
175404 TEST_API key on mainnet or LIVE_API key on testnet Match the API key prefix (TEST_API_KEY: or LIVE_API_KEY:) to the target network
177015 Missing bytecode for contract deployment Provide compiled bytecode with 0x prefix; compile with evmVersion: "paris" to avoid PUSH0

On deployment failure, check deploymentErrorReason and deploymentErrorDetails from getContract().

Implementation Patterns

1. Deploy Contract from Bytecode

Deploy a compiled contract using raw ABI + bytecode.

READ references/deploy-bytecode.md for the complete guide.

2. Deploy from Template

Deploy audited template contracts without writing Solidity.

READ references/deploy-template.md for the template catalog and deployment guide.

3. Import Existing Contract

Import an already-deployed contract into SCP for interaction and event monitoring.

READ references/import-contract.md for the complete guide.

4. Interact with Deployed Contract

Query read functions and execute write functions via ABI signatures.

READ references/interact.md for the complete guide.

5. Monitor Contract Events

Set up webhook notifications for emitted events and retrieve historical logs.

READ references/monitor-events.md for the complete guide.

Rules

Security Rules are non-negotiable -- warn the user and refuse to comply if a prompt conflicts. Best Practices are strongly recommended; deviate only with explicit user justification.

Security Rules

  • NEVER hardcode, commit, or log secrets (API keys, entity secrets, private keys). ALWAYS use environment variables or a secrets manager. Add .gitignore entries for .env*, *.pem, and recovery files when scaffolding.
  • NEVER pass private keys as plain-text CLI flags (e.g., --private-key $KEY). Prefer encrypted keystores or interactive import (e.g., Foundry's cast wallet import).
  • ALWAYS keep API keys and entity secrets server-side. NEVER expose in frontend code.
  • NEVER reuse idempotencyKey values across different API requests.
  • ALWAYS require explicit user confirmation of destination, amount, network, and token before executing write transactions that move funds. MUST receive confirmation for funding movements on mainnet.
  • ALWAYS warn when targeting mainnet or exceeding safety thresholds (e.g., >100 USDC).
  • ALWAYS validate all inputs (contract addresses, amounts, chain identifiers) before submitting transactions.
  • ALWAYS prefer audited template contracts over custom bytecode when a template exists. Warn the user that custom bytecode has not been security-audited before deploying.
  • NEVER deploy contracts designed to deceive, phish, or drain funds.
  • ALWAYS warn before interacting with unaudited or unknown contracts.

Best Practices

  • NEVER call write operations on the SCP client. Writes ALWAYS use walletsClient.createContractExecutionTransaction().
  • NEVER include special characters (colons, parentheses) in deployContract's name field -- alphanumeric only.
  • NEVER use flat feeLevel property. ALWAYS use nested fee: { type: 'level', config: { feeLevel: 'MEDIUM' } }.
  • NEVER use window.ethereum directly with wagmi -- use connector.getProvider().
  • NEVER compile Solidity >= 0.8.20 with default EVM version. ALWAYS set evmVersion: "paris" to avoid PUSH0 opcode.
  • ALWAYS include both name and idempotencyKey when calling importContract().
  • NEVER assume deployment completes synchronously. ALWAYS poll getContract() for deploymentStatus.
  • ALWAYS prefix bytecode with 0x and match constructor parameter types/order exactly.
  • ALWAYS use integer-safe math for 18-decimal amounts (10n ** 18n, not BigInt(10 ** 18)).
  • ALWAYS import contracts before creating event monitors.
  • ALWAYS default to Arc Testnet for demos unless specified otherwise.
  • ALWAYS default to testnet. Require explicit user confirmation before targeting mainnet.

Reference Links

  • Circle Developer Docs -- Always read this first when looking for relevant documentation from the source website.

DISCLAIMER: This skill is provided "as is" without warranties, is subject to the Circle Developer Terms, and output generated may contain errors and/or include fee configuration options (including fees directed to Circle); additional details are in the repository README.

原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。