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 pull et la crédite avec push.
  • 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.

JavaScript
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
perpsaddressThe perps engine, PepperPerps VERSION 3. /api/perp/deployment calls it `engine`.
perpOrdersaddressThe two-step orders book, PepperPerpOrders. `orders` in /api/perp/deployment.
perpVaultaddressThe LP vault, PepperPerpVault (pLP). `vault` in /api/perp/deployment.
bankaddressSenditBank: every trader's pUSD, ETH and launched tokens, and the trading keys.
spotRouteraddressSenditSpotRouter: buy, sell and launch tokens with bank money.
copyFactoryaddressCopyFactory VERSION 3: one CopyAccount per copier and leader.
copyAccountImpladdressThe CopyAccount implementation every copy account clones (EIP-1167).
pusdaddressPickleUSD (pUSD), six decimals. The test dollar every position is margined in.
pusdExchangeaddressSenditPusdExchange: pUSD for ETH at one dollar.
perpsPreviousarrayEngines that still hold positions: [{ engine, orders, vault, block, version }]. Legacy positions there are closed by the wallet.
copyFactoryPreviousarrayEarlier copy factories: [{ factory, impl, block, version, engine }]. Stop and withdraw old copies there.
perpsBlock, bankBlock, copyFactoryBlock, pusdExchangeBlocknumberThe block each contract was deployed in: where an indexer starts reading logs.
pusdWethPool, feeRecipient, keeperaddressThe 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
bank0x3366f560DC1539B5Db4f889CB603C3BDd369298F
perps0x57c61D24BaE12D24100ac1FB20950B88904be971VERSION 3, idBase() 10000000: position and request ids start at 10,000,001
perpOrders0xcb62fcb714f8aa69d2b2abC8Ba9cCEF2A1E02C84
perpVault0x20F4E42E5f56E47e6e058fA137c698C86B0aF459
spotRouter0xD6516A4720018AFa6c777F2D686247d715EDa04B
copyFactory0xf288A5F90Ea3b07b014f52110FC4C7f82206dd95
pusd0x47091c58e34bDC4f32A05541C1243710249Dd777
pusdExchange0x07b5E6fd6b5A86FBE3685B434988D3b5aFB4385F
perpsPrevious[0].engine0x8452242B9d7C453556E3a9b0556e48a25ced0ef2VERSION 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.

Une clé absente signifie que la fonction est désactivée

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.