Für Entwickler / SENDIT
SENDIT für Entwickler
SENDIT ist eine Reihe von Contracts auf der Pickle Chain rund um eine Bank, plus zwei Lese-APIs. Alles, was ein Trader tut, ist eine Transaktion, die Sie selbst senden können, von einer Wallet oder von einem registrierten Trading-Schlüssel.
Die Bestandteile
- SenditBank hält pUSD, ETH und gestartete Tokens jedes Kontos sowie dessen Trading-Schlüssel. Jeder andere Contract ist ein Venue, der die Bank mit
pullbelastet und ihr mitpushgutschreibt. - Die Perps-Engine (PepperPerps VERSION 3), ihr Orderbuch für zweistufige Märkte und Trigger, und der LP-Vault.
- Der Spot-Router, die pUSD-Exchange und das Copy-Trading, dazu pUSD selbst.
- Die HTTP-APIs: dex-api für Märkte, Positionen, Guthaben, den Feed und Tokens; social-api für Sitzungen.
- Einen Bot bauen fügt alles zusammen.
SENDIT läuft im öffentlichen Testnet (Chain-ID 78270). App und APIs werden von https://sendit.picklechain.xyz ausgeliefert; JSON-RPC ist das der Chain, unter https://rpc.picklechain.xyz.
Das Manifest lesen
Lesen Sie die Adressen zur Laufzeit. Ein Engine-Upgrade deployt neue Contracts neben die alten und verschiebt jeden Schlüssel, und ein Aufruf an eine Adresse ohne Code gelingt auf einer EVM; eine fest codierte Adresse, die veraltet ist, scheitert also lautlos.
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());Schlüssel des Manifests
| Schlüssel | Typ |
|---|---|
| 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 steht nicht im Manifest: Lesen Sie idBase() an der Engine.
Aktuelle Adressen
So ausgeliefert am 2026-10-20. Gleichen Sie sie mit dem Manifest ab; codieren Sie sie nicht fest.
| Schlüssel | Adresse |
|---|---|
| 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 |
Ids und frühere Engines
Die aktuelle Engine nummeriert Positionen ab idBase() + 1, also 10.000.001, und ihr Orderbuch nummeriert Anfragen von derselben Basis aus; eine Id bezeichnet daher auf der ganzen Chain genau eine Position oder Anfrage, gleich welche Engine sie hält. Die frühere Engine (VERSION 1, in perpsPrevious) nummeriert ab 1, ist älter als die Bank und nur per Wallet signierbar: Dort noch offene Positionen werden mit ihrem eigenen close von der Wallet geschlossen, die sie eröffnet hat. dex-api markiert jede Zeile von ihr mit legacy: true.
Das Manifest ist die einzige Quelle der Wahrheit, die die App selbst verwendet. Fehlt ein Schlüssel (keine Bank in einem Netz, noch keine Exchange), ist die Funktion dort aus; /api/perp/deployment lässt das Feld weg.