Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

configurator

CCA(継続清算オークション)スマートコントラクトのパラメータを、インタラクティブな一括フォームフローで設定します。ユーザーが「オークションの設定」「CCAオークション」「トークンオークションのセットアップ」「オークション設定」「継続オークション」などと言及した場合、またはCCAコントラクトに関して触れた際に使用します。

description の原文を見る

Configure CCA (Continuous Clearing Auction) smart contract parameters through an interactive bulk form flow. Use when user says "configure auction", "cca auction", "setup token auction", "auction configuration", "continuous auction", or mentions CCA contracts.

SKILL.md 本文

CCA Configuration

公正で透明なトークン配布のために、Continuous Clearing Auction (CCA) スマートコントラクト パラメータを設定します。

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

Claude Code の使用方法

ユーザーがこのスキルを実行する場合、AskUserQuestion を使用した バルク インタラクティブ フォーム設定フロー でユーザーをガイドします。ユーザー操作を最小化するためにパラメータをバッチで収集します。

バルク インタラクティブ フォームのルール

  1. 質問をバッチ化 - 1 回の AskUserQuestion 呼び出しで最大 4 つの質問を同時に実行
  2. 直接入力を許可 - カスタム値 (アドレス、数字) が必要なフィールド:
    • 「まだ利用できません」または「スキップ」オプションを提供
    • 「その他」オプション (自動提供) で直接カスタム入力が可能
    • 決して 「X を持っていますか?」を別の質問として尋ねない
  3. 回答を保存 - 収集した値を設定オブジェクトに記録
  4. 収集後に検証 - 各バッチ後、すべての入力を進める前に検証
  5. 進行状況を表示 - 各バッチ後、収集したパラメータと残りのパラメータを表示

設定フロー

次のバッチでパラメータを収集:

Batch 1: タスク選択 (1 つの質問)

質問 1: タスクタイプ

  • プロンプト: 「CCA で何を行いたいですか?」
  • オプション: 「オークション パラメータを設定」「供給スケジュールのみを生成」「既存設定をレビュー」「既存設定をデプロイ」

収集後: 「オークション パラメータを設定」でない場合、適切なセクションにスキップします。


Batch 2: 基本設定 (4 つの質問)

質問 1: ネットワーク

  • プロンプト: 「どのネットワークにデプロイしますか?」
  • オプション: 「Ethereum Mainnet」「Unichain (Mainnet)」「Unichain Sepolia (Testnet)」「Base」「Arbitrum」「Sepolia」
  • 保存: chainIdblockTimerpcUrlcurrencyDecimals (選択した通貨の場合)

質問 2: トークン アドレス

  • プロンプト: 「オークションするトークンはどれですか?」
  • オプション: 「トークンがまだデプロイされていません」 (プレースホルダー)、カスタム アドレス (「その他」経由)
  • 検証: 0x で始まる 42 文字である必要があります
  • 保存: token

質問 3: 総供給量

  • プロンプト: 「オークションするトークン数はいくつですか?」
  • オプション: 「100 百万トークン (18 decimals)」「10 億トークン (18 decimals)」「100 億トークン (18 decimals)」、カスタム (「その他」経由)
  • 検証: <= 1e30 wei である必要があります
  • 保存: totalSupply

質問 4: 通貨

  • プロンプト: 「入札者が使用する通貨は何ですか?」
  • オプション: 「ETH (Native)」「USDC on [network]」「USDT on [network]」、カスタム ERC20 (「その他」経由)
  • 検証: 0x で始まる 42 文字か address(0) である必要があります
  • 保存: currency

収集後: すべての入力を検証し、基本設定のサマリーを表示します。


Batch 3: タイミング & 価格 (4 つの質問)

質問 1: オークション期間

  • プロンプト: 「オークションはどのくらいの期間実行されるべきですか?」
  • オプション: 「1 日」「2 日」「3 日」「7 日」、カスタム ブロック (「その他」経由)
  • ネットワーク ブロック時間に基づいてブロック数を計算
  • 保存: auctionBlocks

質問 2: プリビッド期間

  • プロンプト: 「プリビッド期間を含めますか? (トークンが売却されない期間)」
  • オプション: 「プリビッド期間なし (0 ブロック)」「12 時間」「1 日」、カスタム ブロック (「その他」経由)
  • ネットワーク ブロック時間に基づいてブロック数を計算
  • 保存: prebidBlocks

質問 3: フロア価格

  • プロンプト: 「スターティング フロア価格は? (通貨とトークンの比率)」
  • オプション: 「0.10x (1:1 比率の 10%)」「0.01x (1:1 比率の 1%)」「0.001x (1:1 比率の 0.1%)」、カスタム比率 (「その他」経由)
  • 小数点の差を考慮して Q96 値を計算: Q96 * ratio / 10^(tokenDecimals - currencyDecimals)
  • USDC (6 decimals) と 18 decimal トークンの場合: Q96 * ratio / 10^12
  • ネイティブ ETH (18 decimals) と 18 decimal トークンの場合: Q96 * ratio / 10^0 = Q96 * ratio
  • 保存: floorPriceRatiofloorPrice (Q96)、tokenDecimalscurrencyDecimals

質問 4: ティック スペーシング

  • プロンプト: 「フロア価格のパーセンテージとしてのティック スペーシング?」
  • オプション: 「フロア価格の 1% (推奨)」「フロア価格の 10%」「フロア価格の 0.1%」、カスタム パーセンテージ (「その他」経由)
  • 計算: tickSpacing = int(floorPrice * percentage)
  • 重要: フロア価格をティック スペーシングで均等に割り切れるようにDOWNに丸める:
    • roundedFloorPrice = (floorPrice // tickSpacing) * tickSpacing
    • 確認: roundedFloorPrice % tickSpacing == 0 は真である必要があります
  • 検証: ティック スペーシングはフロア価格の最小 1 basis point 以上である必要があります
  • 保存: tickSpacingPercentagetickSpacing (Q96)、roundedFloorPrice

収集後: 入力を検証し、フロア価格の可除性を確認し、Q96 値を計算して表示し、タイミング サマリーを表示します。


Batch 4: 受取人とローンチ (4 つの質問)

質問 1: トークン受取人

  • プロンプト: 「売却されなかったトークンはどこに送られるべきですか?」
  • オプション: 「資金受取人と同じ」、カスタム アドレス (「その他」経由)
  • 検証: 0x で始まる 42 文字である必要があります
  • 保存: tokensRecipient

質問 2: 資金受取人

  • プロンプト: 「調達した資金はどこに送られるべきですか?」
  • オプション: 「トークン受取人と同じ」、カスタム アドレス (「その他」経由)
  • 検証: 0x で始まる 42 文字である必要があります
  • 保存: fundsRecipient

質問 3: 開始時間

  • プロンプト: 「オークションはいつ開始されるべきですか?」
  • オプション: 「1 時間以内」「6 時間以内」「24 時間以内」、カスタム ブロック番号 (「その他」経由)
  • RPC から現在のブロック番号をフェッチして計算
  • 保存: startBlock
  • 計算: endBlock = startBlock + prebidBlocks + auctionBlocksclaimBlock = endBlock

質問 4: 必要な最小資金

  • プロンプト: 「卒業するために必要な最小通貨の調達を要求しますか?」
  • オプション: 「最小値なし (0)」「100 ETH」「1000 ETH」、カスタム金額 (wei 単位) (「その他」経由)
  • 保存: requiredCurrencyRaised

収集後: アドレスを検証し、RPC からの現在のブロックをフェッチし、完全なブロック タイムラインを計算します。


Batch 5: オプション フック (1 つの質問)

質問 1: 検証フック

  • プロンプト: 「検証フック コントラクトを使用しますか?」
  • オプション: 「検証フックなし」、カスタム フック アドレス (「その他」経由)
  • 検証: (提供されている場合) 0x で始まる 42 文字である必要があります
  • 保存: validationHook

収集後: 提供されている場合、フック アドレスを検証します。


Step 6: 供給スケジュールを生成

MCP サーバーが実行されていない場合、開始方法の指示を提供します:

# MCP サーバー ディレクトリに移動
cd packages/plugins/uniswap-cca/mcp-server/supply-schedule

# セットアップ スクリプトを実行 (初回のみ)
chmod +x setup.sh
./setup.sh

# MCP サーバーを開始
python3 server.py

MCP サーバーが実行されたら、cca-supply-schedule__generate_supply_schedule MCP ツールを収集したパラメータで呼び出します。このツールは JSON オブジェクトを予想:

{
  "auction_blocks": 86400,
  "prebid_blocks": 0
}

値を収集した実際の auctionBlocksprebidBlocks で置き換えます。

MCP ツールが利用できない場合、フォールバック Python アルゴリズムを直接使用します (「供給スケジュール設定」セクションを参照)。

保存: supplySchedule

Step 7: 設定を生成して表示

すべてのパラメータを収集して供給スケジュールを生成した後、完全な JSON 設定を CLI 出力に表示します:

{
  "[chainId]": {
    "token": "...",
    "totalSupply": ...,
    "currency": "...",
    "tokensRecipient": "...",
    "fundsRecipient": "...",
    "startBlock": ...,
    "endBlock": ...,
    "claimBlock": ...,
    "tickSpacing": ...,
    "validationHook": "...",
    "floorPrice": ...,
    "requiredCurrencyRaised": ...,
    "supplySchedule": [...]
  }
}

自動的にファイルを作成しません。 ユーザーが JSON をコピーするか、保存するファイル パスを指定できるようにします。

Step 8: サマリーを表示

ユーザーに包括的な形式のサマリーを表示します:

  • ネットワークとチェーン ID
  • トークンと通貨の詳細
  • ブロック タイムライン (開始、終了、クレーム) 人間が読める形式で
  • 価格設定 (フロア価格、ティック スペーシング) Q96 比率形式両方で
  • 受取人 (トークン、資金)
  • 供給スケジュール サマリー (全フェーズ、最終ブロック パーセンテージ)
  • 検証チェックリスト (すべての検証ルールが成功/失敗)

Step 9: 次のステップ

ユーザーに次のステップを尋ねます:

  • 「ファイルに保存」 (ファイル パスを尋ねる、デフォルト: script/auction-config.json)
  • 「デプロイ指示を表示」 (deployer スキルの使用を提案)
  • 「設定を変更」
  • 「終了」 (終了、CLI 出力から JSON をコピーできます)

重要な注意事項

  • バッチで検証 - 各バッチ収集後にすべての入力を検証
  • RPC から現在のブロック番号をフェッチ - 開始/終了ブロックを計算する場合
  • Q96 値を正しく計算 フロア価格とティック スペーシング:
    • 重要: 小数点の差を考慮: Q96 * ratio / 10^(tokenDecimals - currencyDecimals)
    • USDC はすべてのネットワークで 6 decimals - 18 decimal トークン用に 10^12 で除算
    • ネイティブ ETH は 18 decimals - 18 decimal トークン用に調整不要
  • フロア価格を丸める ティック スペーシングで均等に割り切れるようにします:
    • roundedFloorPrice = (floorPrice // tickSpacing) * tickSpacing
    • 必ず確認: roundedFloorPrice % tickSpacing == 0
  • MCP ツールを使用 供給スケジュール生成用 (実行されていない場合はセットアップ指示を提供)
  • 相互作用ラウンドを最小化 - バッチごとに合理的なだけ多くのパラメータを収集

ネットワーク固有の定数

クイック リファレンスのためにこれらを保存:

const NETWORKS = {
  1: {
    name: 'Mainnet',
    blockTime: 12,
    rpc: 'https://ethereum-rpc.publicnode.com',
    usdc: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
  },
  130: {
    name: 'Unichain',
    blockTime: 1,
    rpc: 'https://mainnet.unichain.org',
    usdc: '0x078D782b760474a361dDA0AF3839290b0EF57AD6',
  },
  1301: {
    name: 'Unichain Sepolia (Testnet)',
    blockTime: 2,
    rpc: 'https://sepolia.unichain.org',
    usdc: '0x078D782b760474a361dDA0AF3839290b0EF57AD6',
  },
  8453: {
    name: 'Base',
    blockTime: 2,
    rpc: 'https://mainnet.base.org',
    usdc: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
  },
  42161: {
    name: 'Arbitrum',
    blockTime: 2,
    rpc: 'https://arb1.arbitrum.io/rpc',
    usdc: '0xaf88d065e77c8cc2239327c5edb3a432268e5831',
  },
  11155111: {
    name: 'Sepolia',
    blockTime: 12,
    rpc: 'https://ethereum-sepolia-rpc.publicnode.com',
    usdc: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',
  },
};

// Q96 = 2^96 (JavaScript BigInt 記法)
const Q96 = 79228162514264337593543950336n;

Python 等価:

# Q96 = 2**96
Q96 = 79228162514264337593543950336

概要

CCA (Continuous Clearing Auction) は、均一価格オークションを連続時間に一般化する新しいオークション メカニズムです。初期流動性をブートストラップするための公正な価格発見を提供しながら、タイミング ゲームを排除し、早期参加を促進します。

主な機能:

  • 公正な価格発見: タイミング ゲームなしの継続的なクリアリング
  • 透明な配布: 事前に決定されたスケジュールでリリースされた供給
  • 柔軟な設定: カスタマイズ可能なオークション パラメータとスケジュール
  • マルチチェーン サポート: EVM チェーン全体での正規デプロイ
  • ファクトリー デプロイ: CREATE2 経由の一貫したアドレス

クイック デシジョン ガイド

タスク...このセクションを使用
オークション パラメータを設定設定ガイド
供給スケジュールを生成供給スケジュール設定
オークション メカニズスを理解技術概要

設定ガイド

オークション パラメータ

CCA オークションは AuctionParameters 構造体を通じて設定されます:

struct AuctionParameters {
    address currency;              // 資金を集める通貨 (ETH の場合は address(0))
    address tokensRecipient;       // 残りトークンを受け取るアドレス
    address fundsRecipient;        // 集めた資金をすべて受け取るアドレス
    uint64 startBlock;             // オークションが開始されるブロック
    uint64 endBlock;               // オークションが終了されるブロック
    uint64 claimBlock;             // トークンを請求できるブロック
    uint256 tickSpacing;           // 価格の固定粒度 (Q96)
    address validationHook;        // オプション フック (なしの場合 0x0)
    uint256 floorPrice;            // スターティング フロア価格 (Q96)
    uint128 requiredCurrencyRaised; // 卒業するための最小資金
    bytes auctionStepsData;        // パック済み供給発行スケジュール
}

設定ファイル形式

JSON 設定ファイル (例: script/auction-config.json) を作成します:

{
  "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 }
    ]
  }
}

パラメータの詳細

基本設定

パラメータタイプ説明
tokenaddressオークション対象のトークン
totalSupplynumberオークション対象の総トークン数 (wei/最小単位)
currencyaddress購入トークン (USDC など) または ETH の場合 address(0)
tokensRecipientaddress売却されなかったトークンが送られる場所
fundsRecipientaddress調達した資金が送られる場所

ブロック設定

パラメータタイプ説明制約
startBlocknumberオークションが開始されるときstartBlock < endBlock
endBlocknumberオークションが終了されるときendBlock <= claimBlock
claimBlocknumberトークンを請求できるときclaimBlock >= endBlock

ネットワーク別ブロック時間:

  • Mainnet、Sepolia: 12 秒/ブロック
  • Unichain、Base、Arbitrum: 2 秒/ブロック

価格設定パラメータ

パラメータタイプ説明
floorPricenumber最小価格 (Q96 形式)
tickSpacingnumber価格ティック増加分 (Q96 形式)
validationHookaddressオプション検証コントラクト (なしの場合 0x0)
requiredCurrencyRaisednumber必要な最小資金 (最小値なしの場合 0)

供給スケジュール

パラメータタイプ説明
supplySchedulearray{mps, blockDelta} オブジェクトの配列

価格計算 (Q96 形式)

CCA は正確な価格設定に Q96 固定小数点形式を使用します。基本値 2^96 (79228162514264337593543950336) は 1:1 の価格比率を表します。

フロア価格計算

重要: トークンと通貨の小数点の差を考慮します。

# 1:1 比率の基本値
Q96 = 79228162514264337593543950336

# 公式: Q96 * (人間が読める価格比率) / 10^(token_decimals - currency_decimals)

# 例 1: $0.10 比率での 18 decimal トークンあたりの USDC (6 decimals)
token_decimals = 18
currency_decimals = 6  # USDC は 6 decimals
decimal_adjustment = 10 ** (token_decimals - currency_decimals)  # 10^12

floorPrice = Q96 * 0.1 / decimal_adjustment
# 結果: 7922816251426433759354395 (約)

# 例 2: 0.1 比率での 18 decimal トークンあたりのネイティブ ETH (18 decimals)
token_decimals = 18
currency_decimals = 18  # ネイティブ ETH は 18 decimals
decimal_adjustment = 10 ** (18 - 18)  # 10^0 = 1

floorPrice = Q96 * 0.1 / 1
# 結果: 7922816251426433759354395034

重要なポイント: USDC はすべてのネットワークで 6 decimals を持つため、18 decimal トークン付きで USDC を使用するときは 10^12 で除算する必要があります。

ティック スペーシング計算

ティック スペーシングは入札を配置できる場所を決定します。フロア価格の 最低 1 basis point を選択します。1% または 10% も合理的です。

# 例: フロア価格の 1%
tickSpacing = int(floorPrice * 0.01)

# floorPrice = 7922816251426433759354395000 の場合
# 結果: 79228162514264337593543950

フロア価格を丸める (重要)

フロア価格はティック スペーシングで均等に割り切れる必要があります。 正確な可除性を確保するために DOWN に丸めます:

# 最初にティック スペーシングを計算
tickSpacing = int(floorPrice * 0.01)  # フロア価格の 1%

# フロア価格を DOWN に丸めて均等に割り切れるようにします
roundedFloorPrice = (floorPrice // tickSpacing) * tickSpacing

# 可除性を確認 (True である必要があります)
assert roundedFloorPrice % tickSpacing == 0, "フロア価格はティック スペーシングで割り切れる必要があります!"

例:

Q96 = 79228162514264337593543950336
raw_floor_price = int(Q96 * 0.0001)  # トークンあたり 0.0001 ETH
# 結果: 7922816251426434139029504

tick_spacing = int(raw_floor_price * 0.01)  # 1%
# 結果: 79228162514264350785536

rounded_floor_price = (raw_floor_price // tick_spacing) * tick_spacing
# 結果: 7843588088912170727768064

# 確認: 7843588088912170727768064 / 79228162514264350785536 = 99 (正確)
# 余り: 0 ✓

警告: ティック スペーシングが小さすぎると、オークションは極度にガス効率が悪く、DoS 攻撃の対象になる可能性があります。


供給スケジュール設定

MPS (Milli-Basis Points) の理解

供給スケジュールは MPS = 1e7 (1000 万) を使用します。各ユニットは 1 basis point の 1000 分の 1 を表します。

供給スケジュールは時間に渡るトークン発行率を定義します。各ステップには以下が含まれます:

  • mps: ブロックごとにリリースされるトークン (mps ユニット)
  • blockDelta: このレートが適用されるブロック数

標準スケジュール ジェネレータ

プラグインには、以下のプロパティを持つ 正規化されたコンベックス曲線 を使用して供給スケジュールを生成する MCP サーバーが含まれています:

  • 12 ステップ (デフォルト、設定可能) for gradual release
  • ステップごとの等しいトークン金額 (70% gradual release の場合 5.8333%)
  • 減少するブロック期間 (凸曲線プロパティ)
  • 大きな最終ブロック 残りトークンを受け取ります (~30%、設定可能 20-40%)
  • 合計: 常にちょうど 10,000,000 MPS

標準分布を生成するために MCP ツール generate_supply_schedule を使用:

MCP ツール呼び出し:

{
  "auction_blocks": 86400,
  "prebid_blocks": 0
}

アルゴリズムは自動的に計算:

  1. ステップごとの等しいトークン金額 (例: 70% gradual での 12 ステップで 5.8333%)
  2. 正規化されたカーブ C(t) = t^α (デフォルト α = 1.2) からの時間境界
  3. ブロック期間が時間に渡って減少 (凸曲線プロパティ)
  4. ちょうど 10,000,000 MPS に達するための最終ブロック調整

例: Base での 2 日オークション

Base は 2 秒ブロックを使用するため、2 日 = 86400 ブロック。

以下で generate_supply_schedule を呼び出す:

{
  "auction_blocks": 86400,
  "prebid_blocks": 0
}

出力 (正規化されたコンベックス分布):

{
  "schedule": [
    { "mps": 54, "blockDelta": 10894 },
    { "mps": 68, "blockDelta": 8517 },
    { "mps": 75, "blockDelta": 7803 },
    { "mps": 79, "blockDelta": 7373 },
    { "mps": 83, "blockDelta": 7068 },
    { "mps": 85, "blockDelta": 6835 },
    { "mps": 88, "blockDelta": 6647 },
    { "mps": 90, "blockDelta": 6490 },
    { "mps": 92, "blockDelta": 6356 },
    { "mps": 94, "blockDelta": 6238 },
    { "mps": 95, "blockDelta": 6136 },
    { "mps": 97, "blockDelta": 6043 },
    { "mps": 2988006, "blockDelta": 1 }
  ],
  "auction_blocks": 86400,
  "prebid_blocks": 0,
  "total_phases": 13,
  "summary": {
    "total_mps": 10000000,
    "target_mps": 10000000,
    "final_block_mps": 2988006,
    "final_block_percentage": 29.88,
    "num_steps": 12,
    "alpha": 1.2,
    "main_supply_pct": 70.0,
    "step_tokens_pct": 5.8333
  }
}

注:

  • ブロック期間は減少: 10894 → 8517 → 7803 → ... → 6043
  • ステップごとのトークン金額はおよそ等しい (~5.8333% 各)
  • 最終ブロックは全トークンの 29.88% を含む
  • 合計はちょうど 10,000,000 MPS

例: プリビッド期間付き

トークンが リリースされないプリビッド期間 (mps=0) を追加します。プリビッドはスケジュールの前に付加されます。

以下で generate_supply_schedule を呼び出す:

{
  "auction_blocks": 86400,
  "prebid_blocks": 43200
}

出力:

{
  "schedule": [
    { "mps": 0, "blockDelta": 43200 },
    { "mps": 54, "blockDelta": 10894 },
    { "mps": 68, "blockDelta": 8517 },
    ...
    { "mps": 2988006, "blockDelta": 1 }
  ],
  "auction_blocks": 86400,
  "prebid_blocks": 43200,
  "total_phases": 14,
  "summary": {
    "total_mps": 10000000,
    "target_mps": 10000000,
    "final_block_mps": 2988006,
    "final_block_percentage": 29.88,
    "num_steps": 12,
    "alpha": 1.2,
    "main_supply_pct": 70.0,
    "step_tokens_pct": 5.8333
  }
}

注: プリビッド フェーズは単に mps: 0 で付加されます。オークション部分は同じ正規化されたコンベックス分布を使用します。

カスタム スケジュール

カスタム分布には、スケジュールを手動で定義:

{
  "supplySchedule": [
    { "mps": 100, "blockDelta": 5000 },
    { "mps": 200, "blockDelta": 5000 },
    { "mps": 500, "blockDelta": 4400 }
  ]
}

重要: 最終ブロックは価格操作を防ぐためにかなりの量のトークンを販売する必要があります (通常 30%+)。


オンチェーン デプロイの供給スケジュール エンコーディング

供給スケジュールを生成した後、オンチェーン AuctionParameters 構造体のバイト形式にエンコードする必要があります。エンコーディングは各 {mps, blockDelta} 要素を uint64 にパック。

エンコーディング アルゴリズム

供給スケジュール内の各要素に対して:

  1. uint64 を作成 (64 ビット / 8 バイト) where:
    • 最初の 24 ビット: mps 値 (左パディング)
    • 次の 40 ビット: blockDelta 値 (左パディング)
  2. すべての uint64 をパック encodePacked 経由 (バイト連結)
  3. 返す 16 進バイト文字列として 0x プレフィックス付き

エンコーディング 公式

// Solidity 等価
uint64 packed = (uint64(mps) << 40) | uint64(blockDelta);
bytes memory auctionStepsData = abi.encodePacked(packed1, packed2, ...);

値制約

  • mps: 24 ビットに収まる必要があります (最大: 16,777,215)
  • blockDelta: 40 ビットに収まる必要があります (最大: 1,099,511,627,775)

MCP ツール を使用

供給スケジュールをエンコードするために encode_supply_schedule MCP ツール を使用:

入力:

{
  "schedule": [
    { "mps": 0, "blockDelta": 43200 },
    { "mps": 54, "blockDelta": 10894 },
    { "mps": 68, "blockDelta": 8517 }
  ]
}

出力:

{
  "encoded": "0x0000000000a8c00000003600002aa60000004400002145...",
  "length_bytes": 112,
  "num_elements": 14
}

手動エンコーディング 例 (Python)

def encode_supply_schedule(schedule):
    """供給スケジュールをバイトにエンコードします。"""
    encoded_bytes = b''

    for item in schedule:
        mps = item['mps']
        block_delta = item['blockDelta']

        # 境界を検証
        assert mps < 2**24, f"mps {mps} は 24 ビット最大を超えます"
        assert block_delta < 2**40, f"blockDelta {block_delta} は 40 ビット最大を超えます"

        # uint64 にパック: mps (24 ビット) << 40 | blockDelta (40 ビット)
        packed = (mps << 40) | block_delta

        # 8 バイト (big-endian) に変換
        encoded_bytes += packed.to_bytes(8, byteorder='big')

    return '0x' + encoded_bytes.hex()

# 例
schedule = [
    {"mps": 0, "blockDelta": 43200},
    {"mps": 54, "blockDelta": 10894}
]
encoded = encode_supply_schedule(schedule)
print(encoded)  # 0x0000000000a8c00000003600002aa6

設定フローとの統合

configurator スキルを使用する場合:

  1. スケジュールを生成 generate_supply_schedule MCP ツール 経由
  2. スケジュールをエンコード encode_supply_schedule MCP ツール 経由
  3. エンコード済みバイトを含める 最終設定出力内
  4. デプロイメントに渡す auctionStepsData パラメータとしてのスクリプト

エンコード済みバイト文字列は Factory の initializeDistribution 関数に configData パラメータの一部として渡されるものです。


現在のブロック番号を取得

パブリック RPC を使用して startBlock 設定の現在のブロックをフェッチ:

利用可能なパブリック RPC

ネットワークRPC URL
Mainnethttps://ethereum-rpc.publicnode.com
Unichainhttps://unichain-rpc.publicnode.com
Basehttps://mainnet.base.org
Arbitrumhttps://arb1.arbitrum.io/rpc
Sepoliahttps://ethereum-sepolia-rpc.publicnode.com

ブロック番号をフェッチ

curl -X POST "https://mainnet.base.org" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "eth_blockNumber",
    "params": [],
    "id": 1
  }'

応答:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": "0x123abc"
}

ブロック番号のために 16 進を 10 進に変換。


検証ルール

設定を生成する前に、確認:

  1. ブロック制約: startBlock < endBlock <= claimBlock
  2. 有効なアドレス: すべてのアドレスは有効な Ethereum アドレス (0x + 40 16 進文字)
  3. 非負値: すべての数値 >= 0
  4. フロア価格整列: フロア価格はティック スペーシングの倍数である必要があります
  5. ティック スペーシング: フロア価格の最小 1 basis point (1%、10% 推奨)
  6. 供給スケジュール: 最終ブロック販売相当額のトークン (~30%+)
  7. 総供給範囲: 最大 1e30 wei (1 兆 18 decimal トークン)
  8. FoT トークンなし: Fee-on-transfer トークンはサポートされていません
  9. 最小 decimals: < 6 decimals のトークンは使用しないでください

追加資料

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

詳細情報

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

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

関連スキル

汎用その他⭐ リポ 1,982

superfluid

Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

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