# Arbitrum One ## Overview Aribtrum is an optimistic rollup enabling scalability with trustless security assumptions and compatility with Ethereum. It became a pioneering optimistic rollup by starting the public mainnet network in August 2021. Considering locked value and number of transactions, it is biggest and most used L2 solution as of December 2021. Yet still considered beta with limited capacity, centralized administration and permissioned fraud proof system. | | | | ----------------- | ------------------------------------------------------------ | | State | mainnet, beta 'Arbitrum One', August 2021 | | Git repo | https://github.com/OffchainLabs/arbitrum | | Website | https://arbitrum.io/ | | Technology | optimistic execution, ineractive proving | | Docs | https://developer.offchainlabs.com/docs/developer_quickstart | | Community | https://discord.com/invite/5KE54JwyTs, ~32k members | | Explorer | https://arbiscan.io/ | | Bridge | https://bridge.arbitrum.io/, | | Native token | ETH, 'ArbGas' | | Points of contact | | ## Technology ### Rollup Arbitrum leverages own chain based on optimistic rollup technology secured by interactive proving mechanism. ### Security Risks and trust considerations: * Trusted operating system ArbOS, AVM (open, created by OL, verifiable?) * Contracts upgradable without delay * Interactive proving, at least one honest validator needed * permissioned, only validated by Offchain labs * One centralized sequencer * Sequencer can do MEV, censor.. Dispute mechanism for achieving trustless security in Arbitrum is interactive proving. This allows validators to stake on certain state and create Disputable Assertion if there is an issue. Dispute is solved by offchain protocol where participants are proving states and only last step is verified in rollup. This has benefits in rollup architecture but relies on assumption of at least one validator who will stake honestly and create disputes. **Currently, this is permissioned, done only by Offchain labs and not open to the public.** https://medium.com/offchainlabs/arbitrum-one-outage-report-d365b24d49c Not funds lost, only downtime ### Client Arbitrum is implemented in Go as own client which connects to L1 client via JSON RPC and doesn all the sync and verification based on this data by itself. ArbOS - compatible execution environment for EVM smart contracts. Program created by Offchain Labs, runs on AVM and control records, traffic, enforces execution on the chain. #### EVM Custom EVM architechture (AVM) * More complexity but higher optimizations * Can implemented in it's own client, externally from Arbitrum client ## Usage As promised, Arbitrum delivers instant and cheap transactions and compatibility with Ethereum ecosystem. User experience is on one hand limited by tools, apps without proper L2 support. On the other hand, Arbitrum software and documentation has some issues considering early stage of the project. ### Documentation All docs, for users and developers can be found at https://developer.offchainlabs.com. Documentation is thorough but not clear. Having everything in one place makes it more difficult to orient and lookup information. * Dissaranged and missing information * E.g. practices on running node, staking and validating, local blockchain * [Docs are open](https://github.com/OffchainLabs/arbitrum/tree/master/docs), contributing is possible * However, there is no maintainer and contributions don't get responses * No native search within docs, it is hard to search for specific info #### Support and community Arbitrum discord channel is official and very active community. Lot of members and lack of proper moderation make it bit of chaos. There is also unofficial [subreddit](https://www.reddit.com/r/Arbitrum/) with much less activity. Support from Offchain labs within discord channel is semi responsive. Sometimes it takes time and many questions are left without any response. Official support can be contacted at https://support.arbitrum.io. Discord support mostly asks users to open tickets there which reduces open discussion and community help. ### Wallet configuration Wallets supporting L2s or arbitrary networks via own RPC are easy to use with Arbitrum. Some issues are possible for cases where Arbitrum differs from L1 like nonces, network switching. Web3 integrations enable seamless network switching in wallets. Triggered by button or automaticly, user switches networks with one click. * Constant network switching is confusing and annoying * Ideal UX would be fully automatic without user knowing what is happening on the background * Automaticly switching to different RPC comes with security risks, enables new phishing technuqies * Switching networks opens new surfaces for bugs in [wallets](https://github.com/MetaMask/metamask-extension/issues/12715) and apps Easiest way to use Arbitrum is using public RPC endpoint. Free RPCs are provided by * Offchain labs https://arb1.arbitrum.io/rpc * Infura, Alchemy ### Bridges Within rollup's architecture, users, L1 Ethereum contracts, and Arbitrum nodes make calls to the EthBridge contracts to interact with the Arbitrum chain. Official Arbitrum bridge with UI ooperated by Offchain labs enables easy and trustless enter to Arbitrum network as well as withdraw. ETH and any There was a lot of work done on bridge UX since release. Usage flow is clear and design improved, however there still might be some [issues](https://github.com/OffchainLabs/arb-token-bridge/issues) * Tx cancelation not handlded properly * UI bug when deposit tx doesn't show Bridge uses various contracts as gateways for registering different tokens to L2. Source code matching deployed bytecode is verified via Etherscan, but not on Sourcify. * Deposit conf takes ~ 10 minutes. * Gas used by ETH deposit tx 92,041. (on Eth mainnet) * Withdraw takes a week. * Other trustless bridges * bridge.renproject.io, https://cbridge.celer.network ### Dapps * Transactions instant (with one sequencer) * Explorer slow and lacking info about transaction purpose, missing verified contract info. * Only explorer so far * Missing features compared to many mainnet explorers * Fees 4-6x cheaper than mainnet [dda](https://storage.googleapis.com/ethereum-hackmd/upload_9f9633a3c1d43b5d124a0dc61c5fc2bb.png) ## Developer experience * Nice tutorials for contracts in various use cases https://github.com/OffchainLabs/arbitrum-tutorials * Everything that compiles to EVM should work. * Few differences in Solidity in L2 context https://developer.offchainlabs.com/docs/solidity_support ### Tooling support * Hardhat * Easy setup to configure RPC in one config * In tutorial, smooth deploy * Truffle * Bit more strech to configure * Not remote node support? * Remix? * Website lists it but in official Remix app module not found, in docs as well #### Integrations Etherjs, Web3js support ### Running a node Official client running Arbitrum One is written in Go and * Binary not provided, monorepo confusing, compiling everything including submodules needed, docs not clear * Easier with docker but not documented properly and heavy on resources * Local network not possible? https://developer.offchainlabs.com/docs/local_blockchain * Node randomly shuts down during sync? * Fork of Geth * Different configuration, less features * Arbitrum client just needs to point to L1 RPC and will sync in few days. * Database size ~30GB * Pruned by default, gc not archive ### Setup Clone arbitrum repo and use script to install it via docker. It might take a while. ``` git clone -b master https://github.com/offchainlabs/arbitrum.git cd arbitrum ./scripts/build_node_docker.py ``` Test compiled software by running: ``` docker run arb-node:latest --help ``` For running node long term and storing data externaly, you need to create a persistent volume. ``` # Create files and copy to external persisent volume docker run -d --rm -it --name arbitrum_node arb-node:latest --l1.url 'https://bordel.xyz' docker cp arbitrum_node:/home/user/ /external/volume docker kill arbitrum_node ``` Now you can execute Arbitrum store with mounted external volume. ``` docker run --rm -it --network="host" -name arbitrum_node -v /external/volume/:/home/user/ arb-node:latest --l1.url 'https://bordel.xyz' --metrics ``` Node is running in `forwarder` mode by default. Metrics are optional and can be pushed to Prometheus gateway by setting cron with push_metrics.sh script.