Skip to content

Commit 146d014

Browse files
Merge branch 'master' into arbitrum-chain-name-change
2 parents d813279 + c4a065a commit 146d014

File tree

104 files changed

+1611
-2592
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

104 files changed

+1611
-2592
lines changed

docs/audit-reports.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
| Auditor | Audit date (MM/DD/YYY) | Audited code | View report |
44
| ----------------------- | ---------------------- | ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
5+
| **Trail of Bits** | 12/01/2025 | ArbOS 50 & 51 Security Review | [view](hosted-pdfs/audit-reports//2025-12-offchain-arbos50-and-51-securityreview.pdf) |
56
| **Trail of Bits** | 07/30/2025 | Upgrade Executor | [view](hosted-pdfs/audit-reports//2025-07-offchainlabs-upgrade-executor-report.pdf) |
67
| **Trail of Bits** | 06/02/2025 | Block Hash Pusher | [view](hosted-pdfs/audit-reports/2025-06-offchain-arbitrum-block-hash-pusher-securityreview.pdf) |
78
| **Trail of Bits** | 06/02/2025 | Mint/Burn Precompile | [view](hosted-pdfs/audit-reports//2025-06-offchain-arbitrum-mint-burn-precompile-securityreview.pdf) |

docs/build-decentralized-apps/02-how-to-estimate-gas.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Multiplying the value obtained from `eth_estimateGas` by the child chain gas pri
2222

2323
Alternatively, to obtain the gas limit for your transaction, you can call `NodeInterface.gasEstimateComponents()` and then use the first result, which is `gasEstimate`. Next, to find the total cost, you need to multiply this amount by the child chain gas price, which is available in the third result, `baseFee`.
2424

25-
Note that when working with parent to child chain messages (also known as [retryable tickets](/how-arbitrum-works/deep-dives/l1-to-l2-messaging.mdx)), you can use the function [`L1ToL2MessageGasEstimator.estimateAll()`](https://github.com/OffchainLabs/arbitrum-sdk/blob/main/src/lib/message/L1ToL2MessageGasEstimator.ts#L215) of the Arbitrum SDK or [`NodeInterface.estimateRetryableTicket()`](https://github.com/OffchainLabs/@@nitroRepositorySlug=nitro@@/blob/@@nitroVersionTag=v3.8.0@@/nodeInterface/NodeInterface.go#L120) to get all the gas information needed to send a successful transaction.
25+
Note that when working with parent to child chain messages (also known as [retryable tickets](/how-arbitrum-works/deep-dives/l1-to-l2-messaging.mdx)), you can use the function [`L1ToL2MessageGasEstimator.estimateAll()`](https://github.com/OffchainLabs/arbitrum-sdk/blob/main/src/lib/message/L1ToL2MessageGasEstimator.ts#L215) of the Arbitrum SDK or [`NodeInterface.estimateRetryableTicket()`](https://github.com/OffchainLabs/@@nitroRepositorySlug=nitro@@/blob/@@nitroVersionTag=v3.9.3@@/nodeInterface/NodeInterface.go#L120) to get all the gas information needed to send a successful transaction.
2626

2727
## Breaking down the formula
2828

docs/build-decentralized-apps/arbitrum-vs-ethereum/02-block-numbers-and-time.mdx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ content_type: concept
99
displayed_sidebar: buildAppsSidebar
1010
---
1111

12+
import { VanillaAdmonition } from '@site/src/components/VanillaAdmonition/';
13+
1214
:::info block number vs `block.number`
1315

1416
Throughout this and other pages, we note that the block number of a chain does not match the value obtained from `block.number`. When using `block.number` in a smart contract, the value obtained will be the block of the first non-Arbitrum ancestor chain. That is:
@@ -22,7 +24,7 @@ As with Ethereum, Arbitrum clients submit transactions, and the system executes
2224

2325
Once in the chain's core inbox contract, transaction processing occurs in order. Generally, some time will elapse between when a message is put into the inbox (and timestamped) and when the contract processes the message and carries out the transaction requested by the message.
2426

25-
Additionally, since the calldata of Arbitrum transactions (or the DAC certificate on <a data-quicklook-from= "arbitrum-anytrust-chain">AnyTrust</a>chains) is posted to Ethereum, the gas paid when executing them includes a component for the parent chain to cover the costs of the batch poster.
27+
Additionally, since the calldata/blobs of Arbitrum transactions (or the DAC certificate on <a data-quicklook-from= "arbitrum-anytrust-chain">AnyTrust</a>chains) is posted to Ethereum, the gas paid when executing them includes a component for the parent chain to cover the costs of the batch poster.
2628

2729
This page explains the implications of this mechanism for the block gas limit, block numbers, and the time assumptions associated with transactions submitted to Arbitrum.
2830

@@ -42,7 +44,7 @@ A single Ethereum block can include multiple Arbitrum blocks; however, an Arbitr
4244

4345
### Ethereum (or parent chain) block numbers within Arbitrum
4446

45-
Accessing block numbers within an Arbitrum smart contract (i.e., `block.number` in Solidity) will return a value _close to_ (but not necessarily exactly) the block number of the first non-Arbitrum ancestor chain at which the sequencer received the transaction.
47+
Accessing block numbers within an Arbitrum smart contract (i.e., `block.number` in Solidity) will return a value _close to_ (but not necessarily exactly) the block number of the first non-Arbitrum ancestor chain where the sequencer received the transaction.
4648

4749
The "first non-Arbitrum ancestor chain" is:
4850

@@ -73,15 +75,14 @@ A client that queries an Arbitrum node's RPC interface (e.g., transaction receip
7375
```typescript
7476
const txnReceipt = await arbitrumProvider.getTransactionReceipt('0x...');
7577
/**
76-
txnReceipt.blockNumber => Arbitrum block number
7778
txnReceipt.l1BlockNumber => Approximate block number of the first non-Arbitrum ancestor chain
7879
*/
7980
```
8081

8182
The Arbitrum block number can also be retrieved within an Arbitrum contract via [ArbSys](/build-decentralized-apps/precompiles/02-reference.mdx#arbsys) precompile:
8283

8384
```solidity
84-
ArbSys(100).arbBlockNumber() // returns Arbitrum block number
85+
ArbSys(100).arbBlockNumber() // returns Arbitrum block number
8586
```
8687

8788
### Example
@@ -94,7 +95,13 @@ The following example illustrates timings on a chain that settles to Ethereum (s
9495
| Chain's `block.number` \* | 1000 | 1000 | 1000 | 1000 | 1004 | 1004 |
9596
| Chain's block number (from RPCs) \*\* | 370000 | 370005 | 370006 | 370008 | 370012 | 370015 |
9697

97-
_\* **The chain's `block.number`:** updated to sync with Ethereum's `block.number` approximately every minute. Thus, over time, it will, like Ethereum's `block.number`, average to ~12 seconds per block._
98+
<VanillaAdmonition type="info">
99+
100+
txnReceipt.blockNumber => Arbitrum block number
101+
102+
\_\* **The chain's `block.number`:** updated to sync with Ethereum's `block.number` every 13 to 15 seconds (occasionally longer).
103+
104+
</VanillaAdmonition>
98105

99106
_\*\* **Chain's block number from RPCs:** note that this can be updated multiple times per Ethereum block (this lets the sequencer give sub-Ethereum-block-time transaction receipts.)_
100107

docs/build-decentralized-apps/nodeinterface/01-overview.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ displayed_sidebar: buildAppsSidebar
88

99
<!-- todo: remove this doc, redirect to existing ref doc -->
1010

11-
The Arbitrum Nitro software includes a special `NodeInterface` contract available at address `0xc8` that is only accessible via RPCs (it's not actually deployed onchain and thus can't be called by smart contracts). The way it works is that the node uses Geth's [`InterceptRPCMessage`](https://github.com/OffchainLabs/go-ethereum/blob/@@goEthereumCommit=e845151eb649647a8d2d2b5c874377ffe5d2a8c9@@/internal/ethapi/api.go#L1034) hook to detect messages sent to the address `0xc8`, and swaps out the message it's handling before deriving a transaction from it.
11+
The Arbitrum Nitro software includes a special `NodeInterface` contract available at address `0xc8` that is only accessible via RPCs (it's not actually deployed onchain and thus can't be called by smart contracts). The way it works is that the node uses Geth's [`InterceptRPCMessage`](https://github.com/OffchainLabs/go-ethereum/blob/@@goEthereumCommit=ae34a6a9ef5af5079c8eef6571895d703023efef@@/internal/ethapi/api.go#L1034) hook to detect messages sent to the address `0xc8`, and swaps out the message it's handling before deriving a transaction from it.
1212

1313
The [reference page](/build-decentralized-apps/nodeinterface/02-reference.mdx) contains information about all methods available in the `NodeInterface`.

0 commit comments

Comments
 (0)