開発者へ / SENDIT
開発者のための SENDIT
SENDIT は、一つのバンクを中心とした Pickle Chain 上のコントラクト群と、二つの読み取り API です。トレーダーが行うことはすべて、ウォレットからでも登録済みのトレーディングキーからでも、あなた自身が送れるトランザクションです。
構成要素
- SenditBank は、すべてのアカウントの pUSD、ETH、ローンチされたトークン、そしてトレーディングキーを保持します。ほかのすべてのコントラクトはベニューであり、
pullでバンクから引き落とし、pushでバンクに入金します。 - パーペチュアルエンジン(PepperPerps VERSION 3)、2 段階のマーケットとトリガーのための注文ブック、そして LP ボールト。
- スポットルーター、pUSD エクスチェンジ、コピートレード、そして pUSD 自体。
- HTTP API:マーケット、ポジション、残高、フィード、トークンのための dex-api と、セッションのための social-api。
- ボットを作るで全体をまとめます。
SENDIT は公開テストネット(chain ID 78270)で動いています。アプリと API は https://sendit.picklechain.xyz から提供され、JSON-RPC はチェーンのもので https://rpc.picklechain.xyz にあります。
マニフェストを読む
アドレスは実行時に読んでください。エンジンのアップグレードでは古いコントラクトの横に新しいコントラクトがデプロイされ、すべてのキーが移ります。そして EVM ではコードのないアドレスへの呼び出しが成功するので、古くなったハードコードのアドレスは何も言わずに失敗します。
const ORIGIN = "https://sendit.picklechain.xyz";
// The deployment, as the app itself reads it. Never cached (Cache-Control: no-store).
const manifest = await fetch(`${ORIGIN}/op-deployment/l2-perps.json`).then((r) => r.json());
const { bank, perps, perpOrders, perpVault, spotRouter, copyFactory, pusd, pusdExchange } = manifest;
// Or the same addresses, lower-cased and renamed, from the API:
// { engine, orders, vault, previous, bank, spotRouter, pusdExchange }
const deployment = await fetch(`${ORIGIN}/api/perp/deployment`).then((r) => r.json());マニフェストのキー
| キー | 型 |
|---|---|
| perps | addressThe perps engine, PepperPerps VERSION 3. /api/perp/deployment calls it `engine`. |
| perpOrders | addressThe two-step orders book, PepperPerpOrders. `orders` in /api/perp/deployment. |
| perpVault | addressThe LP vault, PepperPerpVault (pLP). `vault` in /api/perp/deployment. |
| bank | addressSenditBank: every trader's pUSD, ETH and launched tokens, and the trading keys. |
| spotRouter | addressSenditSpotRouter: buy, sell and launch tokens with bank money. |
| copyFactory | addressCopyFactory VERSION 3: one CopyAccount per copier and leader. |
| copyAccountImpl | addressThe CopyAccount implementation every copy account clones (EIP-1167). |
| pusd | addressPickleUSD (pUSD), six decimals. The test dollar every position is margined in. |
| pusdExchange | addressSenditPusdExchange: pUSD for ETH at one dollar. |
| perpsPrevious | arrayEngines that still hold positions: [{ engine, orders, vault, block, version }]. Legacy positions there are closed by the wallet. |
| copyFactoryPrevious | arrayEarlier copy factories: [{ factory, impl, block, version, engine }]. Stop and withdraw old copies there. |
| perpsBlock, bankBlock, copyFactoryBlock, pusdExchangeBlock | numberThe block each contract was deployed in: where an indexer starts reading logs. |
| pusdWethPool, feeRecipient, keeper | addressThe pool the protocol's fee share is sold through, the FeeRouter that receives it, and the keeper's wallet. |
idBase はマニフェストにはありません。エンジンの idBase() を読んでください。
現在のアドレス
2026-10-20 時点で提供されているものです。マニフェストと照合し、ハードコードしないでください。
| キー | アドレス |
|---|---|
| bank | 0x3366f560DC1539B5Db4f889CB603C3BDd369298F |
| perps | 0x57c61D24BaE12D24100ac1FB20950B88904be971VERSION 3, idBase() 10000000: position and request ids start at 10,000,001 |
| perpOrders | 0xcb62fcb714f8aa69d2b2abC8Ba9cCEF2A1E02C84 |
| perpVault | 0x20F4E42E5f56E47e6e058fA137c698C86B0aF459 |
| spotRouter | 0xD6516A4720018AFa6c777F2D686247d715EDa04B |
| copyFactory | 0xf288A5F90Ea3b07b014f52110FC4C7f82206dd95 |
| pusd | 0x47091c58e34bDC4f32A05541C1243710249Dd777 |
| pusdExchange | 0x07b5E6fd6b5A86FBE3685B434988D3b5aFB4385F |
| perpsPrevious[0].engine | 0x8452242B9d7C453556E3a9b0556e48a25ced0ef2VERSION 1, ids from 1, wallet-signed only |
ID と以前のエンジン
現在のエンジンはポジションに idBase() + 1、つまり 10,000,001 から番号を振り、その注文ブックもリクエストに同じ基数から番号を振ります。そのため一つの ID は、どのエンジンが保持していても、チェーン全体で一つのポジションまたはリクエストを指します。以前のエンジン(VERSION 1、perpsPrevious にあるもの)は 1 から番号を振り、バンクより前のもので、ウォレットの署名でしか操作できません。そこでまだ開いているポジションは、それを開いたウォレットから、そのエンジン自身の close で決済します。dex-api はそこからのすべての行に legacy: true を付けます。
マニフェストは、アプリ自身が使う唯一の信頼できる情報源です。キーがない場合(ネットワークにバンクがない、エクスチェンジがまだないなど)、その機能はそこではオフであり、/api/perp/deployment はそのフィールドを省きます。