Arbitrum est une famille de rollups optimistes : les transactions sont exécutées hors d'Ethereum, leurs données y sont publiées, et des preuves de fraude permettent de contester un état incorrect. Pour un projet, cela signifie des coûts de transaction réduits avec l'expérience de développement EVM habituelle, mais aussi des hypothèses propres aux rollups qu'il faut comprendre et faire vérifier.
Développer sur Arbitrum
Arbitrum est compatible EVM : les contrats Solidity et Vyper se compilent avec les outils habituels et la plupart du code Ethereum se déploie sans changement majeur. Un séquenceur ordonne les transactions ; les messages entre Ethereum et Arbitrum passent par des contrats de pont, et les retraits vers Ethereum sont soumis à une période de contestation. Arbitrum accepte aussi des contrats compilés en WebAssembly, écrits par exemple en Rust.
- Langages : Solidity, Vyper, et Rust via l'environnement WebAssembly
- Frameworks : Foundry, Hardhat
- Différences à vérifier : sémantique du numéro de bloc et de l'horodatage, coût du gas incluant la publication des données sur Ethereum
Ce que regardent les auditeurs
- Les hypothèses sur le séquenceur : comportement en cas d'arrêt ou de retard, contrôle de disponibilité associé aux flux de prix
- La messagerie entre Ethereum et Arbitrum : authentification de l'expéditeur, alias d'adresse des contrats de L1, messages rejouables qui peuvent échouer ou être exécutés plus tard
- Les dépendances au temps et aux blocs, qui ne se comportent pas comme sur Ethereum
- Les tokens pontés : quel pont a émis l'actif, et le contrat suppose-t-il une version canonique
- Les risques EVM classiques (réentrance, contrôle d'accès, manipulation d'oracle), qui s'appliquent tels quels
Avant de demander des devis
- Précisez si le système vit uniquement sur Arbitrum ou aussi sur Ethereum et d'autres rollups
- Décrivez chaque flux de messages entre couches et qui peut le déclencher
- Listez les oracles et actifs pontés utilisés, et votre plan en cas d'indisponibilité du séquenceur
- Signalez tout code WebAssembly, qui demande des relecteurs expérimentés en Rust