Agent Skills by ALSEL
Anthropic ClaudeDevOps・インフラ⭐ リポ 0品質スコア 50/100

deployer

CCA(継続清算オークション)スマートコントラクトをFactoryパターンを使用してデプロイします。ユーザーが「deploy auction」「deploy cca」「factory deployment」と指示した場合や、設定済みのオークションをデプロイしたい場合に使用します。

description の原文を見る

Deploy CCA (Continuous Clearing Auction) smart contracts using the Factory pattern. Use when user says "deploy auction", "deploy cca", "factory deployment", or wants to deploy a configured auction.

SKILL.md 本文

CCA デプロイ

CREATE2 を使用して一貫したアドレスをチェーン全体で生成する ContinuousClearingAuctionFactory を使用して、Continuous Clearing Auction (CCA) スマートコントラクトをデプロイします。

ランタイム互換性: このスキルは対話的なプロンプトに AskUserQuestion を使用します。ランタイムで AskUserQuestion が利用できない場合は、同じパラメータを自然言語会話を通じて収集してください。

Claude Code の指示

ユーザーがこのスキルを呼び出したときは、適切な安全警告と検証を含めて CCA デプロイメントプロセスをガイドします。

デプロイ前の要件

デプロイを進める前に、以下のことを行う必要があります:

  1. 教育的免責事項を表示してユーザーの承認を得る
  2. 設定ファイルを検証(提供されている場合)
  3. ターゲットネットワークのファクトリーアドレスを確認
  4. デプロイメントパラメータをユーザーと確認

デプロイメントワークフロー

  1. 教育的免責事項を表示(必須)
  2. 設定を読み込むか要求
  3. 設定を検証
  4. デプロイメント計画を表示
  5. ユーザーの確認を取得
  6. デプロイメントコマンドを提供
  7. デプロイ後のステップ

⚠️ 教育的使用に関する免責事項

重要: デプロイを進める前に、以下の事項を承認する必要があります:

本ツールとすべてのデプロイメント指示は、教育目的のみで提供されています。AI が生成したデプロイメントコマンドはエラーまたはセキュリティ脆弱性を含む可能性があります。

以下のことを実行する必要があります:

  1. デプロイ前にすべての設定を慎重に確認する
  2. すべてのパラメータ(アドレス、価格設定、スケジュール) が正しいことを確認
  3. メインネットにデプロイする前にテストネットで最初にテストする
  4. 実際の資金でデプロイする前にコントラクトを監査する

ユーザーが警告を承認したことを確認するには、AskUserQuestion を使用してからデプロイメントステップに進んでください。

入力検証ルール

forge/cast コマンドまたはデプロイメントスクリプトにユーザー提供の値を補間する前に:

  • Ethereum アドレス: ^0x[a-fA-F0-9]{40}$ に一致する必要があります — それ以外の場合は拒否
  • チェーン ID: サポートされているチェーンリストから選択する必要があります (1, 130, 143, 1301, 8453, 42161, 11155111)
  • 数値(供給量、価格、ブロック、チェーン ID): 負でなく、^[0-9]+\.?[0-9]*$ に一致する必要があります
  • 以下のシェルメタ文字を含む入力は拒否: ;, |, &, $, `, (, ), >, <, \, ', ", 改行
  • 検証なしでユーザー入力をシェルコマンドに直接渡さない

⚠️ パーミッション安全性

Claude Code 設定で Bash(forge:*) または Bash(cast:*) を自動承認しないでください。 ガスを使用または トランザクションをブロードキャストするコマンドは常に、呼び出しごとの承認が必要です。.claude/hooks/ の PreToolUse フックはプログラマティック検証をセーフティネットとして提供しますが、コマンドごとのユーザー承認が主要なコントロールです。


🔐 秘密鍵のセキュリティ

重大: セキュアなデプロイメントのために秘密鍵を安全に処理することは不可欠です。

⚠️ 絶対に行わないこと

  • 秘密鍵を git リポジトリまたは設定ファイルに保存しない
  • 秘密鍵をコマンドラインに直接貼り付けない(シェル履歴に表示される)
  • 秘密鍵を共有または共有環境に保存しない
  • 信頼されていないコンピュータでメインネット秘密鍵を使用しない
  • --private-key フラグを使用しない(PreToolUse フックでブロック)

✅ 推奨される実践

オプション 1: ハードウェアウォレット (最も安全)

Ledger または Trezor ハードウェアウォレットを --ledger フラグで使用:

forge script script/Example.s.sol:ExampleScript \
  --rpc-url $RPC_URL \
  --broadcast \
  --ledger

オプション 2: 暗号化キーストア

cast wallet import で暗号化キーストアを作成:

# 秘密鍵を暗号化キーストアにインポート (1 回限りのセットアップ)
cast wallet import deployer --interactive

# キーストアをデプロイメントに使用
forge script script/Example.s.sol:ExampleScript \
  --rpc-url $RPC_URL \
  --broadcast \
  --account deployer \
  --sender $DEPLOYER_ADDRESS

オプション 3: 環境変数 (テストのみ)

環境変数を使用する場合は、以下を確認:

  • セキュアな .env ファイルに設定 (git にコミットしない)
  • source .env または dotenv で読み込み
  • 信頼できるセキュアなコンピュータでのみ使用
  • 開発にはテストネットキーを使用

例:

# .env ファイル (.gitignore に追加)
PRIVATE_KEY=0x...
RPC_URL=https://...

# 環境を読み込み
source .env

# デプロイ (--private-key の代わりに暗号化キーストアを使用)
cast wallet import deployer --interactive
forge script ... --account deployer --sender $DEPLOYER_ADDRESS

テストネットを最初に試す

メインネットの前に必ずテストネットでテスト:

  • Sepolia (テストネット): フォーセットから無料の ETH を入手
  • Base Sepolia: Base でテストするための無料 ETH
  • テストネットで完全なワークフローをデプロイおよび検証
  • 十分なテスト後、メインネットにのみデプロイ

デプロイメントガイド

ファクトリーデプロイ

CCA インスタンスは ContinuousClearingAuctionFactory コントラクト経由でデプロイされます。このコントラクトは CREATE2 を使用して、チェーン全体で一貫したアドレスを生成します。

ファクトリーアドレス

バージョンアドレスステータス
v1.1.00xCCccCcCAE7503Cac057829BF2811De42E16e0bD5推奨

オークションインスタンスをデプロイ

ステップ 0: CCA リポジトリをクローン

CCA コントラクトをローカルにまだ持っていない場合は、リポジトリをクローンして依存関係をインストール:

git clone https://github.com/Uniswap/continuous-clearing-auction.git
cd continuous-clearing-auction
forge install

これにより、後のステップで参照されるデプロイメントスクリプト、コントラクト ABI、およびテストヘルパーにアクセスできます。

ステップ 1: 設定を準備

有効な設定ファイルがあることを確認 (configurator スキルで生成されたか、手動で作成)。

設定ファイル構造の例:

{
  "1": {
    "token": "0x...",
    "totalSupply": 1e29,
    "currency": "0x0000000000000000000000000000000000000000",
    "tokensRecipient": "0x...",
    "fundsRecipient": "0x...",
    "startBlock": 24321000,
    "endBlock": 24327001,
    "claimBlock": 24327001,
    "tickSpacing": 79228162514264337593543950,
    "validationHook": "0x0000000000000000000000000000000000000000",
    "floorPrice": 7922816251426433759354395000,
    "requiredCurrencyRaised": 0,
    "supplySchedule": [
      { "mps": 1000, "blockDelta": 6000 },
      { "mps": 4000000, "blockDelta": 1 }
    ]
  }
}

ステップ 2: 設定を検証

デプロイ前に、設定がすべての検証ルールを通過することを確認 (検証ルールセクションを参照)。

ステップ 3: ファクトリー経由でデプロイ

ファクトリーはシンプルなインターフェースを持っています:

function initializeDistribution(
    address token,
    uint256 amount,
    bytes calldata configData,
    bytes32 salt
) external returns (IDistributionContract);

ここで:

  • token: 売却するトークンのアドレス
  • amount: オークションで売却するトークンの数量
  • configData: ABI エンコードされた AuctionParameters 構造体
  • salt: バニティアドレスマイニング用のオプション bytes32 値

ステップ 3.5: 設定を configData にエンコード

ファクトリーの initializeDistribution は、ABI エンコードされた AuctionParameters として configData を期待します。JSON 設定をエンコード済みバイトに変換:

cast (Foundry CLI) を使用:

# AuctionParameters 構造体をエンコード
cast abi-encode "initializeDistribution(address,uint256,bytes,bytes32)" \
  "$TOKEN_ADDRESS" \
  "$TOTAL_SUPPLY" \
  "$(cast abi-encode "(address,address,address,uint64,uint64,uint64,uint256,address,uint256,uint128,bytes)" \
    "$CURRENCY" \
    "$TOKENS_RECIPIENT" \
    "$FUNDS_RECIPIENT" \
    "$START_BLOCK" \
    "$END_BLOCK" \
    "$CLAIM_BLOCK" \
    "$TICK_SPACING" \
    "$VALIDATION_HOOK" \
    "$FLOOR_PRICE" \
    "$REQUIRED_CURRENCY_RAISED" \
    "$ENCODED_SUPPLY_SCHEDULE")" \
  "0x0000000000000000000000000000000000000000000000000000000000000000"

Foundry スクリプトを使用:

// script/DeployAuction.s.sol
pragma solidity ^0.8.24;

import "forge-std/Script.sol";

interface ICCAFactory {
    function initializeDistribution(
        address token,
        uint256 amount,
        bytes calldata configData,
        bytes32 salt
    ) external returns (address);
}

contract DeployAuction is Script {
    function run() external {
        // 設定値を読み込み
        address token = vm.envAddress("TOKEN");
        uint256 amount = vm.envUint("TOTAL_SUPPLY");

        // AuctionParameters をエンコード
        bytes memory configData = abi.encode(
            vm.envAddress("CURRENCY"),
            vm.envAddress("TOKENS_RECIPIENT"),
            vm.envAddress("FUNDS_RECIPIENT"),
            uint64(vm.envUint("START_BLOCK")),
            uint64(vm.envUint("END_BLOCK")),
            uint64(vm.envUint("CLAIM_BLOCK")),
            vm.envUint("TICK_SPACING"),
            vm.envAddress("VALIDATION_HOOK"),
            vm.envUint("FLOOR_PRICE"),
            uint128(vm.envUint("REQUIRED_CURRENCY_RAISED")),
            vm.envBytes("ENCODED_SUPPLY_SCHEDULE")
        );

        vm.startBroadcast();

        // ファクトリーへのトークン転送を承認
        IERC20(token).approve(
            0xCCccCcCAE7503Cac057829BF2811De42E16e0bD5,
            amount
        );

        // オークションをデプロイ
        address auction = ICCAFactory(
            0xCCccCcCAE7503Cac057829BF2811De42E16e0bD5
        ).initializeDistribution(
            token,
            amount,
            configData,
            bytes32(0) // salt
        );

        vm.stopBroadcast();

        console.log("Auction deployed at:", auction);
    }
}

重要: initializeDistribution を呼び出す前にファクトリーへのトークン転送を承認する必要があります。ファクトリーはあなたのアドレスから新しく作成されたオークションコントラクトに amount トークンを転送します。

ステップ 4: Foundry スクリプトを使用

# ファクトリーをデプロイ (新しいネットワークで必要な場合)
forge script script/deploy/DeployContinuousAuctionFactory.s.sol:DeployContinuousAuctionFactoryScript \
  --rpc-url $RPC_URL \
  --broadcast \
  --account deployer --sender $DEPLOYER_ADDRESS

# オークションインスタンスをデプロイ
forge script script/Example.s.sol:ExampleScript \
  --rpc-url $RPC_URL \
  --broadcast \
  --account deployer --sender $DEPLOYER_ADDRESS

ステップ 5: デプロイ後

デプロイ後、オークションがトークンを受け取ったことを通知するために onTokensReceived() を呼び出す必要があります:

cast send $AUCTION_ADDRESS "onTokensReceived()" --rpc-url $RPC_URL --account deployer --sender $DEPLOYER_ADDRESS

これはオークションが入札を受け入れることができるようになる前の必須前提条件です。

代替: コンストラクター経由でのデプロイ

コンストラクター経由で直接デプロイすることもできます:

constructor(
    address token,
    uint128 amount,
    AuctionParameters memory parameters
) {}

このアプローチは salt パラメータを必要としませんが、CREATE2 の決定的なアドレス指定のメリットを得られません。

ブロックエクスプローラーでの検証

検証用の標準 JSON 入力を生成:

forge verify-contract $AUCTION_ADDRESS \
  src/ContinuousClearingAuction.sol:ContinuousClearingAuction \
  --rpc-url $RPC_URL \
  --show-standard-json-input > standard-json-input.json

このファイルをブロックエクスプローラーにアップロードして検証します。


検証ルール

デプロイ前に、以下のことを確認:

  1. ブロック制約: startBlock < endBlock <= claimBlock
  2. 有効なアドレス: すべてのアドレスが有効な Ethereum アドレス (0x + 40 の 16 進文字)
  3. 負でない値: すべての数値 >= 0
  4. フロアプライスの配置: フロアプライスはティック間隔の倍数である必要があります
  5. ティック間隔: フロアプライスの最小 1 ベーシスポイント (1%, 10% 推奨)
  6. 供給スケジュール: 最後のブロックは大幅なトークンを売却 (~30%+)
  7. 総供給量の範囲: 最大 1e30 wei (1 兆の 18 進トークン)
  8. FoT トークンなし: Fee-on-transfer トークンはサポートされていません
  9. 最小デシマル: 6 デシマル未満のトークンを使用しないでください

技術概要

Q96 固定小数点数学

オークションは Q96 固定小数点演算を使用:

library FixedPoint96 {
    uint8 internal constant RESOLUTION = 96;
    uint256 internal constant Q96 = 0x1000000000000000000000000; // 2^96
}
  • 価格: 分数価格比率の Q96 固定小数点数
  • 需要: Q96 でスケールされた通貨の数量

オークションステップ (供給発行)

ステップはバイト単位でパックされ、各ステップは uint64:

  • 最初の 24 ビット: mps (ブロックあたりの発行レート MPS)
  • 最後の 40 ビット: blockDelta (ブロック数)
function parse(bytes8 data) internal pure returns (uint24 mps, uint40 blockDelta) {
    mps = uint24(bytes3(data));
    blockDelta = uint40(uint64(data));
}

データはより安い読み取りのために外部 SSTORE2 コントラクトにデプロイされます。

主要なコントラクト関数

submitBid()

ユーザーが以下を含む入札を送信:

  • maxPrice: 支払い意思額 (Q96)
  • amount: 入札する通貨の数量
  • owner: トークン/払い戻しを受け取るアドレス
  • prevTickPrice: ガス最適化のヒント
  • hookData: 検証フック用のオプションデータ

checkpoint()

オークションは新しい入札でブロックあたり 1 回チェックポイント。チェックポイントがトークン割り当てを決定します。

exitBid() / exitPartiallyFilledBid()

入札は、アウトビッドされたとき、またはオークション終了時 (卒業後のみ) に終了できます。

isGraduated()

currencyRaised >= requiredCurrencyRaised の場合は true を返します。卒業前は入札を終了できません。

claimTokens()

ユーザーは claimBlock 後に購入トークンを請求 (卒業したオークションのみ)。

sweepCurrency() / sweepUnsoldTokens()

オークション終了後:

  • sweepCurrency(): 募集した通貨を引き出し (卒業したもののみ)
  • sweepUnsoldTokens(): 売れ残りトークンを引き出し

サポート対象チェーン

CCA はセレクト EVM チェーン全体のカノニカルアドレスにデプロイされています:

チェーン IDネットワークブロック時間
1Mainnet12s
130Unichain1s
1301Unichain Sepolia2s
8453Base2s
42161Arbitrum2s
11155111Sepolia12s

トラブルシューティング

よくある問題

問題解決策
"Invalid block sequence"startBlock < endBlock <= claimBlock を確認
"Floor price not aligned"フロアプライスをティック間隔の倍数に丸め
"Tick spacing too small"ティック間隔がフロアプライスの少なくとも 1%
"Total supply too large"最大 1e30 wei (1 兆の 18 進トークン)
"Gas inefficiency"ティック間隔を増加
"Invalid address"アドレスが 0x で始まる 42 文字であることを確認

検証チェックリスト

デプロイ前:

  • ブロックシーケンスが有効 (start < end <= claim)
  • フロアプライスはティック間隔の倍数
  • ティック間隔 >= フロアプライスの 1%
  • すべてのアドレスが有効な Ethereum アドレス
  • 総供給量 <= 1e30 wei
  • 通貨がトークンより価値が高い
  • ブロック時間がネットワークに一致 (メインネット 12s、L2 2s)
  • 受取人アドレスが設定済み (プレースホルダーではない)
  • ネットワークの通貨アドレスが正確
  • 最後の供給ステップが ~30%+ のトークンを売却
  • Fee-on-transfer トークンは使用されていない
  • トークンデシマル >= 6
  • onTokensReceived() がデプロイ後に呼び出された

追加リソース

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
uniswap
リポジトリ
uniswap/uniswap-ai
ライセンス
MIT
最終更新
不明

Source: https://github.com/uniswap/uniswap-ai / ライセンス: MIT

関連スキル

汎用DevOps・インフラ⭐ リポ 502

superpowers-streamer-cli

SuperPowers デスクトップストリーマーの npm パッケージをインストール、ログイン、実行、トラブルシューティングできます。ユーザーが npm から `superpowers-ai` をセットアップしたい場合、メールまたは電話でサインインもしくはアカウント作成を行いたい場合、ストリーマーを起動したい場合、表示されたコントロールリンクを開きたい場合、後で停止したい場合、またはソースコードへのアクセスなしに npm やランタイムの一般的な問題から復旧したい場合に使用します。

by rohanarun
汎用DevOps・インフラ⭐ リポ 493

catc-client-ops

Catalyst Centerのクライアント操作・監視機能 - 有線・無線クライアントのリスト表示・フィルタリング、MACアドレスによる詳細なクライアント検索、クライアント数分析、時間軸での分析、SSIDおよび周波数帯によるフィルタリング、無線トラブルシューティング機能を提供します。MACアドレスやIPアドレスでのクライアント検索、サイト別やSSID別のクライアント数集計、無線周波数帯の分布分析、Wi-Fi信号の問題調査が必要な場合に活用できます。

by automateyournetwork
汎用DevOps・インフラ⭐ リポ 39,967

ci-cd-and-automation

CI/CDパイプラインの設定を自動化します。ビルドおよびデプロイメントパイプラインの構築または変更時に使用できます。品質ゲートの自動化、CI内のテストランナー設定、またはデプロイメント戦略の確立が必要な場合に活用します。

by addyosmani
汎用DevOps・インフラ⭐ リポ 39,967

shipping-and-launch

本番環境へのリリース準備を行います。本番環境へのデプロイ準備が必要な場合、リリース前チェックリストが必要な場合、監視機能の設定を行う場合、段階的なロールアウトを計画する場合、またはロールバック戦略が必要な場合に使用します。

by addyosmani
OpenAIDevOps・インフラ⭐ リポ 38,974

linear-release-setup

Linear Releaseに向けたCI/CD設定を生成します。リリース追跡の設定、LinearのCIパイプライン構築、またはLinearリリースとのデプロイメント連携を実施する際に利用できます。GitHub Actions、GitLab CI、CircleCIなど複数のプラットフォームに対応しています。

by novuhq
Anthropic ClaudeDevOps・インフラ⭐ リポ 2,159

tracking-application-response-times

API エンドポイント、データベースクエリ、サービスコール全体にわたるアプリケーションのレスポンスタイムを追跡・最適化できます。パフォーマンス監視やボトルネック特定の際に活用してください。「レスポンスタイムを追跡する」「API パフォーマンスを監視する」「遅延を分析する」といった表現で呼び出せます。

by jeremylongshore
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: uniswap · uniswap/uniswap-ai · ライセンス: MIT