Pour les développeurs / SENDIT
SENDIT pour les développeurs
SENDIT est un ensemble de contrats sur Pickle Chain autour d'une seule banque, plus deux API de lecture. Tout ce que fait un trader est une transaction que vous pouvez envoyer vous-même, depuis un portefeuille ou depuis une clé de trading enregistrée.
Les pièces du système
- SenditBank détient le pUSD, l'ETH et les jetons lancés de chaque compte, ainsi que ses clés de trading. Chaque autre contrat est un venue qui débite la banque avec
pullet la crédite avecpush. - Le moteur de perps (PepperPerps VERSION 3), son carnet d'ordres pour les ordres au marché en deux temps et les déclencheurs, et le coffre des LP.
- Le routeur spot, l'échange pUSD et le copy trading, plus pUSD lui-même.
- Les API HTTP : dex-api pour les marchés, les positions, les soldes, le fil et les jetons ; social-api pour les sessions.
- Construire un bot assemble le tout.
SENDIT tourne sur le testnet public (chain ID 78270). Son application et ses API sont servies depuis https://sendit.picklechain.xyz ; le JSON-RPC est celui de la chaîne, à https://rpc.picklechain.xyz.
Lire le manifeste
Lisez les adresses à l'exécution. Une mise à niveau du moteur déploie de nouveaux contrats à côté des anciens et déplace chaque clé, et sur une EVM un appel vers une adresse sans code réussit : une adresse codée en dur devenue obsolète échoue donc en silence.
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());Clés du manifeste
| Clé | Type |
|---|---|
| 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 n'est pas dans le manifeste : lisez idBase() sur le moteur.
Adresses actuelles
Telles que servies le 2026-10-20. Vérifiez-les avec le manifeste ; ne les codez pas en dur.
| Clé | 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 |
Identifiants et moteurs précédents
Le moteur actuel numérote les positions à partir de idBase() + 1, soit 10 000 001, et son carnet d'ordres numérote les demandes à partir de la même base : un identifiant désigne donc une seule position ou demande sur toute la chaîne, quel que soit le moteur qui la détient. Le moteur précédent (VERSION 1, dans perpsPrevious) numérote à partir de 1, est antérieur à la banque et ne se signe qu'avec le portefeuille : les positions encore ouvertes chez lui se ferment avec son propre close, depuis le portefeuille qui les a ouvertes. dex-api marque chacune de ses lignes legacy: true.
Le manifeste est la seule source de vérité qu'utilise l'application elle-même. Si une clé manque (pas de banque sur un réseau, pas encore d'échange), la fonction y est désactivée ; /api/perp/deployment omet alors le champ.