Git Product home page Git Product logo

nitro's Introduction


Logo

Arbitrum Nitro

Next Generation Ethereum L2 Technology »

About Arbitrum Nitro

Logo

Nitro is the latest iteration of the Arbitrum technology. It is a fully integrated, complete layer 2 optimistic rollup system, including fraud proofs, the sequencer, the token bridges, advanced calldata compression, and more.

See the live docs-site here (or here for markdown docs source.)

See here for security audit reports.

The Nitro stack is built on several innovations. At its core is a new prover, which can do Arbitrum’s classic interactive fraud proofs over WASM code. That means the L2 Arbitrum engine can be written and compiled using standard languages and tools, replacing the custom-designed language and compiler used in previous Arbitrum versions. In normal execution, validators and nodes run the Nitro engine compiled to native code, switching to WASM if a fraud proof is needed. We compile the core of Geth, the EVM engine that practically defines the Ethereum standard, right into Arbitrum. So the previous custom-built EVM emulator is replaced by Geth, the most popular and well-supported Ethereum client.

The last piece of the stack is a slimmed-down version of our ArbOS component, rewritten in Go, which provides the rest of what’s needed to run an L2 chain: things like cross-chain communication, and a new and improved batching and compression system to minimize L1 costs.

Essentially, Nitro runs Geth at layer 2 on top of Ethereum, and can prove fraud over the core engine of Geth compiled to WASM.

Arbitrum One successfully migrated from the Classic Arbitrum stack onto Nitro on 8/31/22. (See state migration and dapp migration for more info).

License

Nitro is currently licensed under a Business Source License, similar to our friends at Uniswap and Aave, with an "Additional Use Grant" to ensure that everyone can have full comfort using and running nodes on all public Arbitrum chains.

The Additional Use Grant also permits the deployment of the Nitro software, in a permissionless fashion and without cost, as a new blockchain provided that the chain settles to either Arbitrum One or Arbitrum Nova.

For those that prefer to deploy the Nitro software either directly on Ethereum (i.e. an L2) or have it settle to another Layer-2 on top of Ethereum, the Arbitrum Expansion Program (the "AEP") was recently established. The AEP allows for the permissionless deployment in the aforementioned fashion provided that 10% of net revenue (as more fully described in the AEP) is contributed back to the Arbitrum community in accordance with the requirements of the AEP.

Contact

Discord - Arbitrum

Twitter: Arbitrum

nitro's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nitro's Issues

Remove or make use of RollupEventBridge

As the title of the issue says. Do we want to either remove or make use of the RollupEventBridge. It's adds cost in a number of places since it adds a message to the delayed inbox

Decide on auxiliary receipt fields

We've decided to augment the transaction receipt with a number of additional useful fields that won't be covered by the consensus hash but will be tracked by a syncing node. Next steps are to determine which additional fields we'd like to include, augment the RLP encoded receipt storage struct to include them, and then propagate them throughout the codebase where needed

ABI encode error return values from ArbOS precompiles

I'm not sure what the current behavior is for failed precompile calls, but I think optimally we'd return human readable errors in places that it makes sense. I think that would entail for user directed error messages ABI encoding the error string on return. There's hopefully a single place in the code we could put this rather than having to change many locations, though we might need to put in a different error type to differentiate from out of gas errors.

Put number of sends in block header

This has two purposes:

  • Allows clients to figure out what size send tree they need to prove against (needed to prove withdrawals on L1)
  • Allows clients to binary search to find the adjacent nodes they need to create the merkle proof.

Consider if retryable cancels in a redeem should succeed

If the beneficiary is a smart contract, it may have an assumption that if it cancels the retryable the retryable will never run and it will get the funds. That's not currently upheld if the cancel is inside the execution of the same retryable.

Gas estimation for retryable redeems

Right now we don't expose a user-friendly way to estimate how much a redeem will cost. A user could get the details of the retryable and execute an equivalent eth_call, but it would be a lot easier if they could simply gas estimate the redeem itself.

Add message signing to sequencer coordinator

Two major advantages of signing these are

  • We don't need to trust the Redis server for correctness. Worst case of corruption there without this is we cause a reorg and post batch data that we don't get paid for
  • We reduce the security risk on the Redis server since write access doesn't give you the ability to lie

Add further challenge timeout testing

We currently test that challenges can be timed out if the amount of time since the last move is greater than the total challenge clock, but we don't have test coverage to validate that the amount of time left actually decreases. It would be useful to have a timeout test that periodically makes a move in a challenge slowly enough that it will run out of time before it reaches the end to verify that that element of the timeout process

Add test of `Redeem` method gas burn

The retryable precompile redeem method has to calculate how much gas to donate to the retry attempt by calculating the amount of gas that will be left beyond the gas charged for the other operations in the precompile. It's bit tricky to maintain the math correctly so it would be great to have a test which makes sure the gas used by it is exactly equal to the gas sent.

Switch to more advanced config system

There are a bunch of different config config options that have developed associated with the nitro node seen in

type NodeConfig struct {

Currently we're just using the standard go flags library and we'll presumably want to move to a more comprehensive config system

func main() {

We've had a good experience with koanf from the classic Arbitrum node software so I think using that probably makes sense. The alternative would be to use Geth's home brew config param library, but I think that would likely be more complex

Solidity auto-formatting

We currently don't have an established Solidity formatting standard. We should consider establishing one and running it in CI.

Gas estimation for retryable autoredeems

We have a good strategy for handling gas estimation of retryable redeems, but don't have a method for handling estimation for autoredeems. In classic we use the NodeInterface method called estimateRetryableTicket https://github.com/OffchainLabs/arbitrum/blob/005badd0f7beff05c222bf9d6d301564aa2b8f10/packages/arb-bridge-peripherals/contracts/rpc-utils/NodeInterface.sol#L54 implemented in https://github.com/OffchainLabs/arbitrum/blob/master/packages/arb-rpc-node/web3/nodeInterface.go.

Some sort of estimation system is critical for implementing autoredeems which is core functionality for retryables

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.