Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

DSLリファレンス

条件DSL(ドメイン固有言語)は、どのトークンを見つけるかどの条件にマッチさせるかを表現する方法です。JSON形式で記述し、バリデーションされて安全なパラメータ化SQLにコンパイルされます。

概要

DSL条件は以下のプロパティを持つJSONオブジェクトです:

{
  "target": "tokens",          // 必須: クエリ対象(現在は "tokens" のみ)
  "select": [...],             // 任意: 返すフィールド
  "joins": [...],              // 任意: 結合する追加データ
  "derived_joins": [...],      // 任意: 取引から計算されるメトリクス
  "where": {...},              // 任意: フィルター条件
  "order_by": [...],           // 任意: ソート順
  "limit": 100                 // 任意: 最大結果数(上限500)
}

クエリ可能なデータ

tokens
基本トークンデータ: ミントアドレス、シンボル、メタデータURL、作成時刻、作成者、プラットフォームタイプ。
Example: tokens.symbol, tokens.mint_address
token_metrics
計算されたメトリクス: 価格、時価総額、ホルダー数、ATH値、卒業ステータス。
Example: token_metrics.holder_count, token_metrics.mc_lamports
trades
取引イベント。特定の取引が発生したかを確認するために 'exists' と共に使用。
Example: 大口買いのexistsチェック
derived
タイムウィンドウ内の取引から計算される集約値。
Example: derived.min_price_sol, derived.max_price_sol, derived.trade_count

利用可能なフィールド

トークンフィールド (tokens.*)

フィールド説明
tokens.mint_addressstringユニークなトークン識別子
tokens.symbolstringトークンシンボル(例:PEPE)
tokens.meta_urlstringメタデータURL
tokens.created_timestampnumber作成時のUnixタイムスタンプ
tokens.created_blocknumber作成時のブロック番号
tokens.creator_addressstring作成者のウォレットアドレス
tokens.bonding_curve_addressstringボンディングカーブアドレス
tokens.platform_typestringプラットフォームタイプ

トークンメトリクスフィールド (token_metrics.*)

joins: ["token_metrics"] が必要です。

フィールド説明
token_metrics.price_lamportsnumberlamports建ての現在価格
token_metrics.mc_lamportsnumberlamports建ての時価総額
token_metrics.holder_countnumberホルダー数
token_metrics.ath_price_lamportsnumber最高値価格
token_metrics.ath_mc_lamportsnumber最高値時価総額
token_metrics.ath_timestampnumberATH達成時刻
token_metrics.graduate_timestampnumber卒業時刻(未卒業はnull)
token_metrics.updated_timestampnumber最終メトリクス更新

派生フィールド (derived.*)

derived_joins エントリが必要です。

フィールド説明
derived.pct_range価格レンジ %(trade_price_range_1h から)
derived.min_price_solSOL建て最小価格(trade_price_window から)
derived.max_price_solSOL建て最大価格(trade_price_window から)
derived.volume_solSOL建て取引量(trade_price_window から)
derived.trade_count取引回数(trade_price_window から)

取引フィールド (trades.*)

exists 条件内でのみ使用可能。

フィールド説明
trades.sidestring"buy" または "sell"
trades.sol_amount_lamportsnumberlamports建て取引額
trades.token_amountnumber取引されたトークン量
trades.price_lamportsnumber取引時の価格
trades.block_timestampnumber取引発生時刻
trades.wallet_addressstringトレーダーのウォレット

Joins

通常のJoins

{
  "target": "tokens",
  "joins": ["token_metrics"]
}

現在は token_metrics のみサポートされています。

Derived Joins

Derived joinsは取引データから集約値を計算します。on句は必須で、以下の通り正確に記述する必要があります:

価格レンジ(1時間)
直近1時間の価格レンジ割合を計算
{
  "target": "tokens",
  "derived_joins": [
    {
      "derived": "trade_price_range_1h",
      "on": {
        "left": "tokens.mint_address",
        "right": "derived.mint_address"
      }
    }
  ]
}
価格ウィンドウ
タイムウィンドウの最小/最大価格とボリュームを取得
{
  "target": "tokens",
  "derived_joins": [
    {
      "derived": "trade_price_window",
      "window": "1h",
      "on": {
        "left": "tokens.mint_address",
        "right": "derived.mint_address"
      }
    }
  ]
}

利用可能なウィンドウ: 5m, 15m, 1h(デフォルト), 4h, 24h

Where 演算子

比較: cmp

フィールドをリテラル値と比較します。

ホルダー数の閾値
100人以上のホルダーを持つトークンを検索
{
  "op": "cmp",
  "cmp": ">=",
  "left": {
    "type": "field",
    "field": "token_metrics.holder_count"
  },
  "right": 100
}

比較演算子: <, <=, >, >=, =, !=

比較: cmp_field

2つのフィールドを直接比較します。

ATH以下の価格
現在価格がATH以下のトークンを検索
{
  "op": "cmp_field",
  "cmp": "<",
  "left": {
    "type": "field",
    "field": "token_metrics.price_lamports"
  },
  "right": {
    "type": "field",
    "field": "token_metrics.ath_price_lamports"
  }
}

比較: cmp_scaled_field

フィールドを別のフィールドにスケールファクターを掛けた値と比較します。

ATHから70%下落
ATH時価総額の30%以下のトークンを検索
{
  "op": "cmp_scaled_field",
  "cmp": "<=",
  "left": {
    "type": "field",
    "field": "token_metrics.mc_lamports"
  },
  "right": {
    "type": "field",
    "field": "token_metrics.ath_mc_lamports"
  },
  "scale": 0.3
}

レンジ糖衣構文: minmax

一般的な >=<= 比較のショートハンド。

最小時価総額
時価総額が最低1000 lamports
{
  "op": "min",
  "ref": {
    "type": "field",
    "field": "token_metrics.mc_lamports"
  },
  "value": 1000
}
最大ホルダー数
ホルダー数が最大500
{
  "op": "max",
  "ref": {
    "type": "field",
    "field": "token_metrics.holder_count"
  },
  "value": 500
}

文字列マッチング: ilikelike

大文字小文字を区別しないパターンマッチング。

シンボルに 'wif' を含む
シンボルのどこかに 'wif' を含むトークンを検索
{
  "op": "ilike",
  "ref": {
    "type": "field",
    "field": "tokens.symbol"
  },
  "pattern": "%wif%"
}

パターン構文:

  • % は任意の文字列にマッチ
  • _ は任意の1文字にマッチ

NULLチェック: is_nullis_not_null

未卒業
まだ卒業していないトークンを検索
{
  "op": "is_null",
  "ref": {
    "type": "field",
    "field": "token_metrics.graduate_timestamp"
  }
}
卒業済み
卒業したトークンを検索
{
  "op": "is_not_null",
  "ref": {
    "type": "field",
    "field": "token_metrics.graduate_timestamp"
  }
}

時間比較: now_minus_seconds_cmp

タイムスタンプフィールドを「現在時刻 - X秒」と比較します。

直近2時間以内に作成
直近7200秒以内に作成されたトークンを検索
{
  "op": "now_minus_seconds_cmp",
  "ref": {
    "type": "field",
    "field": "tokens.created_timestamp"
  },
  "cmp": ">=",
  "seconds": 7200
}

存在チェック: exists

関連レコードがtradesに存在するかチェックします。

大口買い検出
直近30分以内に10 SOL以上の買いが1回以上あるトークンを検索
{
  "op": "exists",
  "source": "trades",
  "join_on": {
    "left": "tokens.mint_address",
    "right": "trades.mint_address"
  },
  "where": {
    "op": "and",
    "args": [
      {
        "op": "cmp",
        "cmp": "=",
        "left": {
          "type": "field",
          "field": "trades.side"
        },
        "right": "buy"
      },
      {
        "op": "cmp",
        "cmp": ">=",
        "left": {
          "type": "field",
          "field": "trades.sol_amount_lamports"
        },
        "right": 10000000000
      },
      {
        "op": "now_minus_seconds_cmp",
        "ref": {
          "type": "field",
          "field": "trades.block_timestamp"
        },
        "cmp": ">=",
        "seconds": 1800
      }
    ]
  }
}

論理演算子: and, or, not

複数の条件を組み合わせます。

複数条件
ホルダーが増加中の新規トークンを検索
{
  "op": "and",
  "args": [
    {
      "op": "now_minus_seconds_cmp",
      "ref": {
        "type": "field",
        "field": "tokens.created_timestamp"
      },
      "cmp": ">=",
      "seconds": 3600
    },
    {
      "op": "cmp",
      "cmp": ">=",
      "left": {
        "type": "field",
        "field": "token_metrics.holder_count"
      },
      "right": 50
    }
  ]
}

完全な例

新規トークン発見

直近1時間以内に作成された、50人以上のホルダーを持つトークンを検索:

トラクションのある新規トークン
{
  "target": "tokens",
  "joins": [
    "token_metrics"
  ],
  "where": {
    "op": "and",
    "args": [
      {
        "op": "now_minus_seconds_cmp",
        "ref": {
          "type": "field",
          "field": "tokens.created_timestamp"
        },
        "cmp": ">=",
        "seconds": 3600
      },
      {
        "op": "cmp",
        "cmp": ">=",
        "left": {
          "type": "field",
          "field": "token_metrics.holder_count"
        },
        "right": 50
      }
    ]
  },
  "order_by": [
    {
      "field": "token_metrics.holder_count",
      "dir": "desc"
    }
  ],
  "limit": 20
}

レンジ相場検出

狭いレンジで取引されているトークンを検索(最大価格が最小価格の1.2倍以内):

レンジ相場のトークン
{
  "target": "tokens",
  "derived_joins": [
    {
      "derived": "trade_price_window",
      "window": "1h",
      "on": {
        "left": "tokens.mint_address",
        "right": "derived.mint_address"
      }
    }
  ],
  "where": {
    "op": "cmp_scaled_field",
    "cmp": "<=",
    "left": {
      "type": "field",
      "field": "derived.max_price_sol"
    },
    "right": {
      "type": "field",
      "field": "derived.min_price_sol"
    },
    "scale": 1.2
  },
  "limit": 50
}

ATHからのディップ

ATHの30%まで下落した卒業済みトークンを検索:

ディップ買いの機会
{
  "target": "tokens",
  "joins": [
    "token_metrics"
  ],
  "where": {
    "op": "and",
    "args": [
      {
        "op": "is_not_null",
        "ref": {
          "type": "field",
          "field": "token_metrics.graduate_timestamp"
        }
      },
      {
        "op": "cmp_scaled_field",
        "cmp": "<=",
        "left": {
          "type": "field",
          "field": "token_metrics.mc_lamports"
        },
        "right": {
          "type": "field",
          "field": "token_metrics.ath_mc_lamports"
        },
        "scale": 0.3
      }
    ]
  },
  "limit": 100
}

制限事項

項目制限
Target"tokens" のみサポート
Joins["token_metrics"] のみ
Derived joins条件ごとに最大1つ
結果評価ごとに上限500件
テーブル任意のテーブルはクエリ不可

セキュリティ

条件が安全な理由:

  • バリデーション: すべてのフィールドと演算子がホワイトリストに対してチェックされます
  • パラメータ化: すべての値は文字列連結ではなくSQLパラメータになります
  • 生のSQLなし: JSONを書き、システムが安全にコンパイルします

評価動作の詳細は、仕組みをご覧ください。