EVM Perp · サンドボックス合格
Bring-up
ジェネシス → 最初のブロック生成 → 最初のオーダーブック投入 → 最初の約定。ストレス適用前に、エンジンが既知の正常状態へ起動することを検証。
openhl が起動し、最初の入金が着地。PDA の割り当てはゼロ——ブリッジの状態こそが市場そのもの。
何が起きるか
openhl perp 市場をゼロから立ち上げる。EVM 側ではこれは*暗黙的*:`LiveRethEvmBridge<()>` は市場 struct を初期状態で持って構築され、最初の入金はブリッジの `accounts` マップへのエントリにすぎない。市場ごとに割り当てる PDA も、別途初期化する Market ヘッダも、導出する vault PDA もない——ブリッジが市場そのものである。同じ状態に到達するのに5つのオンチェーン命令と約4つの異なるアカウント(生の Market alloc、Initialize、invoke_signed による市場 PDA、(market,mint) ごとの vault PDA、CPI 入金)を要する `openhl-solana/bring-up`(同じ `compare_key`)と対比せよ。差はアカウントモデルにある。
宣言された結果
宣言した各結果は、実行時の実際の状態に対して ✓ 合格 / ✗ 不合格 で採点されます。
- 単一の入金が単一のトレーディングアカウントを生む——途中にアカウントごとの PDA 割り当てはない
- 立ち上げでは約定は発生しない(注文の提出なし)
- 静かな立ち上げ——スキャナは検知対象を見つけない
- 立ち上げ後のアカウント10の証拠金は入金額に等しい;それを動かしたものは何もない
4件中4件の結果を検証
実行を1ブロックずつ辿る
マーク100ソースstub-empty-book取引0約定0入金1清算0ADL—
検証レポート(原文)
ツールが出力する英語の原文レポート(5セクション)——毎回同一です。
─── scenario: bring-up ────────────────────────────────────
HEADLINE ✓: openhl is up; the first deposit lands. Zero PDAs allocated — the bridge state IS the market.
DESCRIPTION:
Stand up an openhl perp market from zero. On the EVM side this is *implicit*: the `LiveRethEvmBridge<()>` is constructed with the market struct already in its initial state, and the first deposit is just an entry in the bridge's `accounts` map. There is no per-market PDA to allocate, no Market header to initialize separately, no vault PDA to derive — the bridge IS the market. Contrast this with `openhl-solana/bring-up` (same `compare_key`), where reaching the same state requires 5 on-chain instructions and ~4 distinct accounts (raw Market alloc, Initialize, market PDA via invoke_signed, per-(market,mint) vault PDA, CPI deposit). The diff is the account model.
TIMELINE (per-block):
height mark src trades fills deposits liqs adl fund
------ ------ --------------- ------ ----- -------- ---- --- ----
1 100 stub-empty-book 0 0 1 0 — —
2 100 stub-empty-book 0 0 0 0 — —
3 100 stub-empty-book 0 0 0 0 — —
ACCOUNT DELTA (final − initial):
account collateral position avg_entry
------- ---------- -------- ---------
10 100 0 0
(initial account count: 0, final account count: 1)
OUTCOMES:
✓ Single deposit lands a single trading account — no per-account PDA allocation along the way.
✓ Bring-up emits no fills (no orders submitted).
✓ Quiet bring-up — the scanner finds nothing to flag.
✓ Account 10's post-bring-up collateral equals the deposited amount; nothing has moved it.
4 of 4 outcome(s) verified.
NOTE: v1 runs the scenario in-process against a unit-provider
`LiveRethEvmBridge<()>` (no Reth boot). For the production-shape
run (real Reth + Malachite + JSON-RPC), use:
openhl reth-devnet --chain-history scenarios/bring-up.json --rounds 3
NEXT:
• Adopt this engine : https://github.com/psyto/rdk
• Custom build : https://fabrknt.com/waitlist.html?product=evm-perp&intent=build
• Hosted access : https://fabrknt.com/waitlist.html?product=evm-perp&intent=hosted