diff --git a/docs/apps/index.mdx b/docs/apps/index.mdx index b2253affa..3fb73842a 100644 --- a/docs/apps/index.mdx +++ b/docs/apps/index.mdx @@ -333,7 +333,7 @@ Base is a fast, low-cost Ethereum L2 built to bring the next billion users oncha `useReadContract` caches its result and does not automatically refetch after a write. Use `queryClient.invalidateQueries` with the read's query key to trigger a single refetch when a transaction confirms. - Surface three states to the user: waiting for wallet signature, waiting for on-chain confirmation, and success. + Surface three states to the user: waiting for wallet signature, waiting for onchain confirmation, and success. Without `useSwitchChain`, calling `writeContract` while the wallet is on the wrong network causes wagmi to attempt a background chain switch. If the user misses or dismisses the wallet popup, the button stays at "Confirm in Wallet..." indefinitely with no error and no recovery path. diff --git a/docs/apps/quickstart/build-app.mdx b/docs/apps/quickstart/build-app.mdx index 2c2070b96..4b4729a6c 100644 --- a/docs/apps/quickstart/build-app.mdx +++ b/docs/apps/quickstart/build-app.mdx @@ -333,7 +333,7 @@ Base is a fast, low-cost Ethereum L2 built to bring the next billion users oncha `useReadContract` caches its result and does not automatically refetch after a write. Use `queryClient.invalidateQueries` with the read's query key to trigger a single refetch when a transaction confirms. - Surface three states to the user: waiting for wallet signature, waiting for on-chain confirmation, and success. + Surface three states to the user: waiting for wallet signature, waiting for onchain confirmation, and success. Without `useSwitchChain`, calling `writeContract` while the wallet is on the wrong network causes wagmi to attempt a background chain switch. If the user misses or dismisses the wallet popup, the button stays at "Confirm in Wallet..." indefinitely with no error and no recovery path. diff --git a/docs/base-account/guides/accept-payments.mdx b/docs/base-account/guides/accept-payments.mdx index 2bd176355..1396e39ba 100644 --- a/docs/base-account/guides/accept-payments.mdx +++ b/docs/base-account/guides/accept-payments.mdx @@ -176,7 +176,7 @@ export async function verifyAndFulfillPayment( throw new Error('Transaction already processed'); } - // 2. Verify the payment status on-chain + // 2. Verify the payment status onchain const { status, sender, amount, recipient } = await getPaymentStatus({ id: txId, testnet diff --git a/docs/base-account/improve-ux/spend-permissions.mdx b/docs/base-account/improve-ux/spend-permissions.mdx index b84f34ac7..faa0987e0 100644 --- a/docs/base-account/improve-ux/spend-permissions.mdx +++ b/docs/base-account/improve-ux/spend-permissions.mdx @@ -23,7 +23,7 @@ If you're using Sub Accounts, learn how Base Account can automatically fund Sub ### Request a Spend Permission -You create an EIP-712 payload that describes the permission and ask the user to sign it. Store the resulting signature along with the permission data so you can register the permission on-chain later. The SDK helper below handles construction and signing for you. +You create an EIP-712 payload that describes the permission and ask the user to sign it. Store the resulting signature along with the permission data so you can register the permission onchain later. The SDK helper below handles construction and signing for you. | Field Name | Type | Description | | ----------- | --------- | ---------------------------------------------------------------------------------------- | diff --git a/docs/base-account/reference/base-pay/getOrCreateSubscriptionOwnerWallet.mdx b/docs/base-account/reference/base-pay/getOrCreateSubscriptionOwnerWallet.mdx index 05291f756..6c29bc2c8 100644 --- a/docs/base-account/reference/base-pay/getOrCreateSubscriptionOwnerWallet.mdx +++ b/docs/base-account/reference/base-pay/getOrCreateSubscriptionOwnerWallet.mdx @@ -342,7 +342,7 @@ const basicWallet = await base.subscription.getOrCreateSubscriptionOwnerWallet({ **Wallet Address is Public** -The smart wallet address is public and will be visible on-chain. This is expected and safe - users need to know which address they're granting permissions to. +The smart wallet address is public and will be visible onchain. This is expected and safe - users need to know which address they're granting permissions to. ## Related Functions diff --git a/docs/base-account/reference/core/capabilities/auxiliaryFunds.mdx b/docs/base-account/reference/core/capabilities/auxiliaryFunds.mdx index c86cc84ba..7ef6bcbc9 100644 --- a/docs/base-account/reference/core/capabilities/auxiliaryFunds.mdx +++ b/docs/base-account/reference/core/capabilities/auxiliaryFunds.mdx @@ -1,12 +1,12 @@ --- title: "auxiliaryFunds" -description: "Indicates wallet access to funds beyond on-chain balance verification" +description: "Indicates wallet access to funds beyond onchain balance verification" --- Defined in [EIP-5792](https://eips.ethereum.org/EIPS/eip-5792) -The auxiliaryFunds capability allows wallets to indicate they have access to funds beyond what can be directly verified on-chain by the wallet's address. This enables more flexible transaction execution and improved user experiences. +The auxiliaryFunds capability allows wallets to indicate they have access to funds beyond what can be directly verified onchain by the wallet's address. This enables more flexible transaction execution and improved user experiences. @@ -28,7 +28,7 @@ The auxiliary funds capability configuration for the specified chain. -Indicates whether the wallet has access to auxiliary funding sources beyond on-chain balance. +Indicates whether the wallet has access to auxiliary funding sources beyond onchain balance. @@ -50,7 +50,7 @@ if (auxiliaryFunds?.supported) { // Don't block transactions based on visible balance alone console.log("Wallet has access to auxiliary funds"); } else { - // Check on-chain balance before allowing transactions + // Check onchain balance before allowing transactions const balance = await provider.request({ method: 'eth_getBalance', params: [userAddress, 'latest'] @@ -140,7 +140,7 @@ async function checkCanExecuteTransaction(amount: bigint) { return true; } - // Check on-chain balance as fallback + // Check onchain balance as fallback const balance = await provider.request({ method: 'eth_getBalance', params: [userAddress, 'latest'] diff --git a/docs/base-account/reference/core/capabilities/overview.mdx b/docs/base-account/reference/core/capabilities/overview.mdx index fbb0dcabf..4c716d579 100644 --- a/docs/base-account/reference/core/capabilities/overview.mdx +++ b/docs/base-account/reference/core/capabilities/overview.mdx @@ -27,7 +27,7 @@ const baseCapabilities = capabilities["0x2105"]; // Base mainnet chain ID | Capability | Method | Description | |-----------|---------|-------------| | [signInWithEthereum](/base-account/reference/core/capabilities/signInWithEthereum) | `wallet_connect` | SIWE authentication | -| [auxiliaryFunds](/base-account/reference/core/capabilities/auxiliaryFunds) | `wallet_sendCalls` | Access to funds beyond the visible on-chain balance (currently disabled) | +| [auxiliaryFunds](/base-account/reference/core/capabilities/auxiliaryFunds) | `wallet_sendCalls` | Access to funds beyond the visible onchain balance (currently disabled) | | [atomic](/base-account/reference/core/capabilities/atomic) | `wallet_sendCalls` | Atomic batch transactions | | [paymasterService](/base-account/reference/core/capabilities/paymasterService) | `wallet_sendCalls` | Gasless transactions | | [flowControl](/base-account/reference/core/capabilities/flowControl) | `wallet_sendCalls` | Flow control | diff --git a/docs/base-account/reference/core/provider-rpc-methods/wallet_getCapabilities.mdx b/docs/base-account/reference/core/provider-rpc-methods/wallet_getCapabilities.mdx index cac568900..abb9da64c 100644 --- a/docs/base-account/reference/core/provider-rpc-methods/wallet_getCapabilities.mdx +++ b/docs/base-account/reference/core/provider-rpc-methods/wallet_getCapabilities.mdx @@ -27,7 +27,7 @@ Capabilities object for a specific chain (e.g., "0x2105" for Base Mainnet). -Indicates wallet access to funds beyond on-chain balance verification. This capability is currently disabled. +Indicates wallet access to funds beyond onchain balance verification. This capability is currently disabled. diff --git a/docs/base-account/reference/spend-permission-utilities/getPermissionStatus.mdx b/docs/base-account/reference/spend-permission-utilities/getPermissionStatus.mdx index 63ed44522..dfd7cb605 100644 --- a/docs/base-account/reference/spend-permission-utilities/getPermissionStatus.mdx +++ b/docs/base-account/reference/spend-permission-utilities/getPermissionStatus.mdx @@ -64,7 +64,7 @@ A promise that resolves to an object containing permission status details. When the next allowance period begins. This is calculated as one second after the current period ends. - True if the permission has been revoked on-chain. + True if the permission has been revoked onchain. True if the current timestamp is past the permission's end time. diff --git a/docs/base-chain/api-reference/ethereum-json-rpc-api/eth_call.mdx b/docs/base-chain/api-reference/ethereum-json-rpc-api/eth_call.mdx index dfe2a16c8..2e3f4f7db 100644 --- a/docs/base-chain/api-reference/ethereum-json-rpc-api/eth_call.mdx +++ b/docs/base-chain/api-reference/ethereum-json-rpc-api/eth_call.mdx @@ -4,7 +4,7 @@ sidebarTitle: 'eth_call' description: 'Executes a message call without creating a transaction. Use pending to simulate against pre-confirmed state.' --- -Executes a message call immediately without broadcasting a transaction to the network. No gas is consumed on-chain. Used to read contract state or simulate calls. +Executes a message call immediately without broadcasting a transaction to the network. No gas is consumed onchain. Used to read contract state or simulate calls. **Flashblocks:** Query `https://mainnet.base.org` with `"pending"` to simulate against the current pre-confirmed block state, updated every ~200ms. diff --git a/docs/base-chain/api-reference/ethereum-json-rpc-api/eth_getLogs.mdx b/docs/base-chain/api-reference/ethereum-json-rpc-api/eth_getLogs.mdx index fca1c3b7a..a5a2f3ac0 100644 --- a/docs/base-chain/api-reference/ethereum-json-rpc-api/eth_getLogs.mdx +++ b/docs/base-chain/api-reference/ethereum-json-rpc-api/eth_getLogs.mdx @@ -4,7 +4,7 @@ sidebarTitle: 'eth_getLogs' description: 'Returns logs matching a filter. Use pending to query logs from pre-confirmed transactions.' --- -Returns an array of all logs matching a given filter object. Particularly useful for indexing on-chain events. +Returns an array of all logs matching a given filter object. Particularly useful for indexing onchain events. Queries spanning large block ranges or high-activity contracts can time out or be rejected. Keep `fromBlock`-to-`toBlock` ranges under 2,000 blocks for reliable results. Node providers may enforce their own limits. diff --git a/docs/base-chain/api-reference/flashblocks-api/flashblocks-api-overview.mdx b/docs/base-chain/api-reference/flashblocks-api/flashblocks-api-overview.mdx index 9382125ea..63fe36693 100644 --- a/docs/base-chain/api-reference/flashblocks-api/flashblocks-api-overview.mdx +++ b/docs/base-chain/api-reference/flashblocks-api/flashblocks-api-overview.mdx @@ -77,7 +77,7 @@ Contains full block header properties. **Only present in the `index: 0` message* Maximum gas allowed in this block (hex). Unix timestamp of block creation (hex). EIP-1559 base fee per gas (hex). -Previous RANDAO value used for on-chain randomness. +Previous RANDAO value used for onchain randomness. Arbitrary data field set by the sequencer. Root of the parent beacon block (EIP-4788). diff --git a/docs/base-chain/node-operators/node-providers.mdx b/docs/base-chain/node-operators/node-providers.mdx index 3640fed2d..4e168fb65 100644 --- a/docs/base-chain/node-operators/node-providers.mdx +++ b/docs/base-chain/node-operators/node-providers.mdx @@ -16,7 +16,7 @@ import {HeaderNoToc} from "/snippets/headerNoToc.mdx"; ## 1RPC -[1RPC](https://1rpc.io/) is the first and only on-chain attested privacy preserving RPC that eradicates metadata exposure and leakage when interacting with blockchains. 1RPC offers free and [paid plans](https://www.1rpc.io/#pricing) with additional features and increased request limits. +[1RPC](https://1rpc.io/) is the first and only onchain attested privacy preserving RPC that eradicates metadata exposure and leakage when interacting with blockchains. 1RPC offers free and [paid plans](https://www.1rpc.io/#pricing) with additional features and increased request limits. diff --git a/docs/base-chain/specs/protocol/batcher.mdx b/docs/base-chain/specs/protocol/batcher.mdx index f5e60bf06..3c77e3bff 100644 --- a/docs/base-chain/specs/protocol/batcher.mdx +++ b/docs/base-chain/specs/protocol/batcher.mdx @@ -51,7 +51,7 @@ Each channel covers a contiguous, non-overlapping range of L2 block numbers. The The derivation spec constrains how far the L2 timestamp may advance ahead of the L1 timestamp of its origin block. An L2 block's timestamp must not exceed the L1 origin timestamp plus `max_sequencer_drift`. Prior to the Fjord hardfork, `max_sequencer_drift` is a per-chain configuration parameter. From Fjord onward it is fixed at 1800 seconds. When this limit is exceeded, the derivation pipeline will only accept a batch if its transaction list is empty (a deposit-only block). The batcher must therefore not include user transactions in blocks whose timestamp would exceed the drift limit, and must coordinate with the sequencer accordingly. -To prevent the sequencer from outpacing the batcher's L1 submission capacity, the batcher measures its data availability backlog — the total encoded size of L2 blocks that have been sequenced but whose data has not yet been confirmed on L1. When the backlog exceeds a configured threshold, the batcher signals the sequencer to reduce its block production rate. The throttle can be graduated: a modest backlog may request a modest slowdown, while a large backlog may pause block production entirely until the batcher catches up. This feedback mechanism is transparent to the derivation pipeline and is not reflected in any on-chain data. +To prevent the sequencer from outpacing the batcher's L1 submission capacity, the batcher measures its data availability backlog — the total encoded size of L2 blocks that have been sequenced but whose data has not yet been confirmed on L1. When the backlog exceeds a configured threshold, the batcher signals the sequencer to reduce its block production rate. The throttle can be graduated: a modest backlog may request a modest slowdown, while a large backlog may pause block production entirely until the batcher catches up. This feedback mechanism is transparent to the derivation pipeline and is not reflected in any onchain data. ## Compression @@ -73,4 +73,4 @@ If a submitted frame's L1 transaction fails to be included, the batcher must res The Fjord hardfork changes the channel encoding format. Channels opened after Fjord activation must use Brotli compression and prefix the first frame's payload with version byte `0x01`. The protocol limit `max_rlp_bytes_per_channel` increases substantially at Fjord activation, relaxing the channel size constraint. Channels opened before Fjord activation must use the pre-Fjord format for all their frames, regardless of when those frames are posted. -The Holocene hardfork imposes strict ordering requirements at both the frame and batch layers. At the frame layer, frames for a given channel must be delivered to the derivation pipeline contiguously and in order; a non-first frame that is not the immediate successor of the previously seen frame for that channel is dropped immediately, and an incomplete channel is dropped if a new first frame for it arrives before its final frame has been seen. At the batch layer, batches within a channel must be strictly ordered by L2 timestamp with no repeated timestamps; any batch with a timestamp not strictly greater than the previous batch in the same channel causes the channel to be invalidated and all remaining batches in it to be dropped. These rules impose no new on-chain obligations, but they mean the batcher has zero tolerance for frame delivery gaps or reordering after Holocene activation. +The Holocene hardfork imposes strict ordering requirements at both the frame and batch layers. At the frame layer, frames for a given channel must be delivered to the derivation pipeline contiguously and in order; a non-first frame that is not the immediate successor of the previously seen frame for that channel is dropped immediately, and an incomplete channel is dropped if a new first frame for it arrives before its final frame has been seen. At the batch layer, batches within a channel must be strictly ordered by L2 timestamp with no repeated timestamps; any batch with a timestamp not strictly greater than the previous batch in the same channel causes the channel to be invalidated and all remaining batches in it to be dropped. These rules impose no new onchain obligations, but they mean the batcher has zero tolerance for frame delivery gaps or reordering after Holocene activation. diff --git a/docs/base-chain/specs/reference/glossary.mdx b/docs/base-chain/specs/reference/glossary.mdx index 41f2e464c..821f1a213 100644 --- a/docs/base-chain/specs/reference/glossary.mdx +++ b/docs/base-chain/specs/reference/glossary.mdx @@ -784,7 +784,7 @@ proof][fault-proof]. [fault-proof]: glossary#fault-proof -An on-chain _interactive_ proof, performed by [validators][validator], that demonstrates that a [sequencer] provided +An onchain _interactive_ proof, performed by [validators][validator], that demonstrates that a [sequencer] provided erroneous [output roots][l2-output]. ### Time Slot diff --git a/docs/base-chain/specs/upgrades/beryl/b20.mdx b/docs/base-chain/specs/upgrades/beryl/b20.mdx index eca60a93a..61a3e62a9 100644 --- a/docs/base-chain/specs/upgrades/beryl/b20.mdx +++ b/docs/base-chain/specs/upgrades/beryl/b20.mdx @@ -5,10 +5,12 @@ description: "B20 is Base's native token standard - designed for stablecoin issu B20 is the Base ecosystem's own version of [ERC-20](https://eips.ethereum.org/EIPS/eip-20). It ships with a built-in compliance toolkit: transfer policies, freeze-and-seize, role-based access control, memos, and supply caps. The full interface specs are available in the [Base Standard Library](https://github.com/base/base-std/tree/main) repository. +B20 tokens are implemented as **Rust precompiles** rather than EVM smart contracts, making them faster, cheaper, and more native to the chain. All tokens are deployed via the singleton B20Factory precompile. + To deploy your first B20 token, see the [Launch a B20 Token](/get-started/launch-b20-token) quickstart. -[Verify the Activation Registry is enabled](/get-started/launch-b20-token#verify-the-activation-registry-is-enabled) before attempting to deploy. +[Verify the ActivationRegistry is enabled](/get-started/launch-b20-token#verify-the-activationregistry-is-enabled) before attempting to deploy. B20 supports two variants: @@ -18,9 +20,7 @@ B20 supports two variants: | **Asset** | 6–18 (configurable) | Rebase multiplier, onchain announcements, batched issuance | | **Stablecoin** | 6 (fixed) | Self-declared fiat currency code | -## ERC-20 Compatibility - -B20 tokens are implemented as **Rust precompiles** rather than EVM smart contracts, making them faster, cheaper, and more native to the chain. All tokens are deployed via the singleton B20Factory precompile. +## ERC-20 compatibility B20 is a superset of ERC-20. Every ERC-20 call (`transfer`, `transferFrom`, `approve`, `balanceOf`, `allowance`, and the standard events) behaves exactly as the standard specifies, so existing ERC-20 tooling and integrations work against B20 with no changes. @@ -28,7 +28,7 @@ B20 is a superset of ERC-20. Every ERC-20 call (`transfer`, `transferFrom`, `app B20 adds methods that ERC-20 does not include: memos, mint/burn, policy gating, granular pause, and ERC-2612 `permit`. These extend ERC-20 without altering it - every ERC-20 method exists on B20, but the reverse does not hold. For the complete ABIs, see the [interface definitions](https://github.com/base/base-std/tree/main/src/interfaces) in the Base Standard Library. -## Roles Model +## Roles model B20 role-based access control extends OpenZeppelin `AccessControl` with a fixed set of roles and one behavioral override on admin renunciation. @@ -44,7 +44,7 @@ B20 role-based access control extends OpenZeppelin `AccessControl` with a fixed User-defined roles are supported via `setRoleAdmin` and `grantRole`. They carry no built-in effect - B20 only enforces gates against the seven base-surface roles above. The Asset variant adds an eighth role, `OPERATOR_ROLE` (see [Variants](#variants)). -### Admin Renunciation +### Run a token without an admin The last `DEFAULT_ADMIN_ROLE` holder cannot be removed via `renounceRole` or `revokeRole` (both revert with `LastAdminCannotRenounce`). The dedicated `renounceLastAdmin()` is the only path to permanently transition a token to admin-less. @@ -56,7 +56,7 @@ After `renounceLastAdmin()` (or for tokens deployed with `initialAdmin == addres - Roles already granted to other addresses (`MINT_ROLE`, `BURN_ROLE`, etc.) continue to function independently. - Admin resurrection is blocked: `grantRole`, `revokeRole`, and `setRoleAdmin` all revert with `AccessControlUnauthorizedAccount` even if the caller holds a custom role. -## Policy Registry +## PolicyRegistry The PolicyRegistry is a singleton precompile that manages allowlists and blocklists. B20 tokens reference policies by `uint64` ID. Any caller can create a policy and nominate its admin. @@ -64,7 +64,7 @@ The PolicyRegistry is a singleton precompile that manages allowlists and blockli State-changing functions on the PolicyRegistry are gated by the ActivationRegistry, which tracks which Base features are live. Read functions (`isAuthorized`, `policyExists`, `policyAdmin`, `pendingPolicyAdmin`) are always callable. -### Policy Types +### Policy types | Type | Default | Behavior | |------|---------|----------| @@ -88,11 +88,11 @@ Two built-in IDs require no creation: Consumers that write a policy ID (e.g. `updatePolicy`) MUST validate `policyExists(policyId)` at write time to avoid silently binding to an unintended empty-set policy. -### Admin Model +### Policy admin Each policy has one admin. Admin transfers are two-step: the current admin calls `stageUpdateAdmin(policyId, newAdmin)`, then the pending admin calls `finalizeUpdateAdmin(policyId)`. `renounceAdmin(policyId)` permanently freezes the policy - membership can never be changed again. -### Creating and Managing Policies +### Create and manage policies ```solidity // Create a policy (admin first, then type) @@ -106,7 +106,7 @@ policyRegistry.updateBlocklist(policyId, false, accounts); // unblock these acc // For ALLOWLIST policies: policyRegistry.updateAllowlist(policyId, allowed, accounts) ``` -### Read Interface +### Read a policy from the PolicyRegistry | Method | Description | |--------|-------------| @@ -115,7 +115,7 @@ policyRegistry.updateBlocklist(policyId, false, accounts); // unblock these acc | `policyAdmin(policyId)` | Current admin address. | | `pendingPolicyAdmin(policyId)` | Pending admin during a two-step transfer. | -## Policy Integration +## Token policy scopes B20 declares a fixed set of policy scopes. Each scope stores a `uint64` policy ID pointing into the PolicyRegistry. On every gated operation, B20 calls `isAuthorized` against the relevant scope and reverts with `PolicyForbids` if the account is not authorized. @@ -132,49 +132,88 @@ B20 declares a fixed set of policy scopes. Each scope stores a `uint64` policy I Every scope defaults to `ALWAYS_ALLOW` at token creation unless overridden in the bootstrap `initCalls`. An unattended B20 deployment is fully open - token behavior must be intentionally constrained. -Scopes are read via `policyId(scope)` and written via `updatePolicy(scope, policyId)`. `updatePolicy` is admin-gated and reverts if the scope is not recognized. +### Read a token's policy assignments + +Each B20 token exposes its scopes and their current policy IDs directly, so integrators can discover which policies apply without simulating a transfer. + +| Method | Description | +|--------|-------------| +| `TRANSFER_SENDER_POLICY()`, `TRANSFER_RECEIVER_POLICY()`, `TRANSFER_EXECUTOR_POLICY()`, `MINT_RECEIVER_POLICY()` | The `bytes32` scope constants. | +| `policyId(scope)` | The `uint64` policy ID configured for `scope`. Returns `0` (`ALWAYS_ALLOW`) for a scope that has never been assigned. Reverts with `UnsupportedPolicyType` if the scope is not recognized. | + +To change an assignment, the token admin calls `updatePolicy(scope, policyId)`, which emits `PolicyUpdated` and reverts if the scope is not recognized. + +## Check if a transfer will succeed -## Mint +To confirm an account can move tokens, read each scope's policy ID from the token and check it against the [PolicyRegistry](#policyregistry), then check pause state: + +```solidity Read-only transferability check +// Will transferFrom(from, to, amount), executed by `executor`, pass policy and pause checks? +IPolicyRegistry registry = IPolicyRegistry(0x8453000000000000000000000000000000000002); + +bool allowed = + registry.isAuthorized(token.policyId(token.TRANSFER_SENDER_POLICY()), from) && + registry.isAuthorized(token.policyId(token.TRANSFER_RECEIVER_POLICY()), to) && + (executor == from || registry.isAuthorized(token.policyId(token.TRANSFER_EXECUTOR_POLICY()), executor)) && + !token.isPaused(PausableFeature.TRANSFER); +``` + +For a plain `transfer`, drop the executor check. Balance and allowance checks still apply as in ERC-20, and policy or pause state can change between the read and the transfer. + +## Token operations + +The token surface beyond ERC-20: issuance, memos, pause, signed approvals, and metadata. + +### Mint New supply is created via `mint` / `mintWithMemo`, gated by `MINT_ROLE`. The recipient is policy-checked against `MINT_RECEIVER_POLICY`. The operation reverts with `SupplyCapExceeded` if it would push `totalSupply` past the cap. -## Burn +### Burn Two burn paths exist: - **`burn` / `burnWithMemo`** - caller burns from their own balance. Gated by `BURN_ROLE`. - **`burnBlocked`** - burns from a third party's balance. Gated by `BURN_BLOCKED_ROLE`. The target account MUST be denied by `TRANSFER_SENDER_POLICY` - this is the freeze-and-seize path for regulated issuers. -## Supply Cap +### Supply cap The supply cap is optional. The sentinel `type(uint128).max` indicates no cap (the default at creation); it is also the maximum permitted cap, so `totalSupply` can never exceed it. `updateSupplyCap(newCap)` is admin-gated and emits `SupplyCapUpdated`. It reverts with `InvalidSupplyCap` if `newCap` is below the current `totalSupply` or above `type(uint128).max`. -## Memos +### Memos -A memo is an optional `bytes32` payload attached to a token operation for off-chain reference. Every memo-emitting operation emits `Memo(address indexed caller, bytes32 indexed memo)` immediately after the operation's primary event. Indexers join via `(transactionHash, logIndex − 1)`. +A memo is an optional `bytes32` payload attached to a token operation for offchain reference. Every memo-emitting operation emits `Memo(address indexed caller, bytes32 indexed memo)` immediately after the operation's primary event. Indexers join via `(transactionHash, logIndex − 1)`. Memo-emitting entrypoints: `transferWithMemo`, `transferFromWithMemo`, `mintWithMemo`, `burnWithMemo`. -## Pause +### Pause Pauses are granular: the `PausableFeature` enum partitions the token surface into independently pausable operations - `TRANSFER`, `MINT`, and `BURN`. The enum is append-only. `pause(features)` and `unpause(features)` are gated by separate roles (`PAUSE_ROLE` and `UNPAUSE_ROLE`) by design. -## ERC-2612 Permit / EIP-712 +Pause state is publicly readable: + +| Method | Description | +|--------|-------------| +| `isPaused(feature)` | Whether `feature` is currently paused. O(1). | +| `pausedFeatures()` | All currently paused features. Order is implementation-defined - treat the result as a set. | + +Pause changes emit `Paused(address indexed updater, PausableFeature[] features)` and `Unpaused(address indexed updater, PausableFeature[] features)`. + +### Permit (ERC-2612) B20 implements ERC-2612 (signed approvals) using an EIP-712 domain shaped as `(name, version, chainId, verifyingContract)`, with `version` fixed at `"1"`. `updateName` rotates the domain separator and emits `EIP712DomainChanged` (ERC-5267). ERC-1271 contract signatures are not accepted - ECDSA only. -## Contract URI (ERC-7572) +### Contract URI (ERC-7572) -`contractURI()` returns a string pointing to off-chain metadata per ERC-7572. `updateContractURI(newUri)` is gated by `METADATA_ROLE`. +`contractURI()` returns a string pointing to offchain metadata per ERC-7572. `updateContractURI(newUri)` is gated by `METADATA_ROLE`. -## Metadata Updates +### Update name and symbol `METADATA_ROLE` gates: - `updateName(newName)` - updates `name` and rotates the EIP-712 domain separator. Emits `NameUpdated` and `EIP712DomainChanged`. - `updateSymbol(newSymbol)` - updates `symbol` only. Emits `SymbolUpdated`. -## Factory +## B20Factory All B20 tokens are created through the singleton B20Factory precompile via `createB20(variant, salt, params, initCalls)`. In `base-std` it is exposed as `StdPrecompiles.B20_FACTORY`. @@ -187,7 +226,7 @@ All B20 tokens are created through the singleton B20Factory precompile via `crea `createB20` reverts with `IActivationRegistry.FeatureNotActivated` if the requested variant's feature is not yet activated on the chain. -### Address Derivation +### Address derivation B20 addresses are deterministic and encode the variant directly: @@ -197,7 +236,7 @@ B20 addresses are deterministic and encode the variant directly: The variant is recoverable from the address alone without an RPC call — inspect byte 10 (zero-indexed) to identify the token type. Helper functions `getB20Address(variant, deployer, salt)`, `isB20(addr)`, and `isB20Initialized(addr)` are available on the factory. -### initCalls Semantics +### initCalls semantics `initCalls` are dispatched after token creation. During this bootstrap window, factory-originated calls bypass the token's role gates and its transfer-side policy gates (`TRANSFER_SENDER_POLICY`, `TRANSFER_RECEIVER_POLICY`, `TRANSFER_EXECUTOR_POLICY`), allowing admin-gated configuration (e.g. setting policies, granting roles) and bootstrap transfers in the same transaction as deployment. The bypass is deliberately not total: @@ -207,7 +246,7 @@ The variant is recoverable from the address alone without an RPC call — inspec ## Variants -Each variant is identified by a 1-byte value encoded directly in the token's address (see [Address Derivation](#address-derivation)): +Each variant is identified by a 1-byte value encoded directly in the token's address (see [Address derivation](#address-derivation)): | Variant | Byte | |---------|------| @@ -234,17 +273,19 @@ A WAD-precision rebase multiplier applied to all balance reads. Raw balances are #### Announcements -On-chain disclosure brackets that wrap sensitive operations (e.g. batch mints, multiplier updates) with a public notice period. Gated by `OPERATOR_ROLE`. +Onchain disclosure brackets that wrap sensitive operations (e.g. batch mints, multiplier updates) with a public notice period. Gated by `OPERATOR_ROLE`. `announce(internalCalls, id, description, uri)` emits an `Announcement` event, executes `internalCalls`, then emits `EndAnnouncement`. The `id` must be unique and is enforced forever. Inner call reverts are wrapped in `InternalCallFailed`. -#### Batch Mint +`internalCalls` is executed but not emitted in either event (see [Events](#events) for the full signatures). Apps that need the call payloads must read them from the transaction calldata. + +#### Batch mint `batchMint(recipients, amounts)` mints to multiple recipients in a single call. Gated by `MINT_ROLE`. Should be wrapped in `announce()` for transparency. -#### Extra Metadata +#### Extra metadata -An arbitrary key/value store for issuer-defined on-chain metadata. +An arbitrary key/value store for issuer-defined onchain metadata. | Method | Description | |--------|-------------| @@ -257,13 +298,74 @@ The fixed-decimals, fiat-backed carveout. Decimals are hard-wired to `6` and are Adds `currency()`, which returns an ISO-style currency code string (e.g. `"USD"`, `"EUR"`). The code is set once at creation via `B20StablecoinCreateParams.currency`, restricted to characters `A`-`Z` only. It is self-declared and not verified against any external registry. +## Events + +Full event interfaces, verbatim from the [Base Standard Library](https://github.com/base/base-std/tree/main/src/interfaces). `indexed` parameters are the log topics apps can filter on. + +### All B20 token events + +Every B20 token emits these, regardless of variant. + +| Event | Emitted by | +|-------|------------| +| `Transfer(address indexed from, address indexed to, uint256 amount)` | Transfers; `mint` (`from` = zero address) and `burn` (`to` = zero address) | +| `Approval(address indexed owner, address indexed spender, uint256 amount)` | `approve`, `permit` | +| `Memo(address indexed caller, bytes32 indexed memo)` | The `*WithMemo` entrypoints, after the operation's primary event | +| `BurnedBlocked(address indexed caller, address indexed from, uint256 amount)` | `burnBlocked` | +| `RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)` | `grantRole` | +| `RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)` | `revokeRole`, `renounceRole` | +| `RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)` | `setRoleAdmin` | +| `LastAdminRenounced(address indexed previousAdmin)` | `renounceLastAdmin` | +| `Paused(address indexed updater, PausableFeature[] features)` | `pause` | +| `Unpaused(address indexed updater, PausableFeature[] features)` | `unpause` | +| `PolicyUpdated(bytes32 indexed policyScope, uint64 oldPolicyId, uint64 newPolicyId)` | `updatePolicy` | +| `SupplyCapUpdated(address indexed updater, uint256 oldSupplyCap, uint256 newSupplyCap)` | `updateSupplyCap` | +| `ContractURIUpdated()` | `updateContractURI` | +| `NameUpdated(address indexed updater, string newName)` | `updateName` | +| `SymbolUpdated(address indexed updater, string newSymbol)` | `updateSymbol` | +| `EIP712DomainChanged()` | `updateName` (ERC-5267 domain rotation) | + +### Asset variant events + +| Event | Emitted by | +|-------|------------| +| `MultiplierUpdated(uint256 multiplier)` | `updateMultiplier` | +| `ExtraMetadataUpdated(string key, string value)` | `updateExtraMetadata` | +| `Announcement(address indexed caller, string id, string description, string uri)` | `announce`, before the internal calls execute | +| `EndAnnouncement(string id)` | `announce`, after the internal calls execute | + +### PolicyRegistry events + +| Event | Emitted by | +|-------|------------| +| `PolicyCreated(uint64 indexed policyId, address indexed creator, PolicyType policyType)` | `createPolicy`, `createPolicyWithAccounts` | +| `PolicyAdminStaged(uint64 indexed policyId, address indexed currentAdmin, address indexed pendingAdmin)` | `stageUpdateAdmin` | +| `PolicyAdminUpdated(uint64 indexed policyId, address indexed previousAdmin, address indexed newAdmin)` | `finalizeUpdateAdmin`, `renounceAdmin` | +| `AllowlistUpdated(uint64 indexed policyId, address indexed updater, bool allowed, address[] accounts)` | `updateAllowlist` | +| `BlocklistUpdated(uint64 indexed policyId, address indexed updater, bool blocked, address[] accounts)` | `updateBlocklist` | + +### B20Factory events + +| Event | Emitted by | +|-------|------------| +| `B20Created(address indexed token, B20Variant indexed variant, string name, string symbol, uint8 decimals, bytes variantEventParams)` | `createB20`, after the token's identity is sealed and before `initCalls` are dispatched | + +`variantEventParams` carries variant-specific immutable identity data, ABI-encoded and prefixed with a version byte: empty for `ASSET`; the currency code for `STABLECOIN`. + +### ActivationRegistry events + +| Event | Emitted by | +|-------|------------| +| `FeatureActivated(bytes32 indexed feature, address indexed caller)` | Feature activation | +| `FeatureDeactivated(bytes32 indexed feature, address indexed caller)` | Feature deactivation | + ## Precompile addresses These addresses are identical on every network where B20 is active (Mainnet, Base Sepolia, Vibenet, and local `base-anvil`). | Precompile | Address | |---|---| -| [B20Factory](#factory) | `0xB20f000000000000000000000000000000000000` | -| Activation Registry | `0x8453000000000000000000000000000000000001` | -| [Policy Registry](#policy-registry) | `0x8453000000000000000000000000000000000002` | +| [B20Factory](#b20factory) | `0xB20f000000000000000000000000000000000000` | +| ActivationRegistry | `0x8453000000000000000000000000000000000001` | +| [PolicyRegistry](#policyregistry) | `0x8453000000000000000000000000000000000002` | diff --git a/docs/base-chain/specs/upgrades/beryl/overview.mdx b/docs/base-chain/specs/upgrades/beryl/overview.mdx index dba87a6b9..fab62e37c 100644 --- a/docs/base-chain/specs/upgrades/beryl/overview.mdx +++ b/docs/base-chain/specs/upgrades/beryl/overview.mdx @@ -33,10 +33,10 @@ Action required before activation. Upgrade to the required version before each n B20 is Base's native token standard - ERC-20 compatible tokens implemented as Rust precompiles, designed for stablecoin, real-world asset, and long-tail token issuers. - [B20 Overview](/base-chain/specs/upgrades/beryl/b20) -- [Roles Model](/base-chain/specs/upgrades/beryl/b20#roles-model) -- [Policy Integration](/base-chain/specs/upgrades/beryl/b20#policy-integration) -- [Factory](/base-chain/specs/upgrades/beryl/b20#factory) -- [Policy Registry](/base-chain/specs/upgrades/beryl/b20#policy-registry) +- [Roles model](/base-chain/specs/upgrades/beryl/b20#roles-model) +- [Token policy scopes](/base-chain/specs/upgrades/beryl/b20#token-policy-scopes) +- [B20Factory](/base-chain/specs/upgrades/beryl/b20#b20factory) +- [PolicyRegistry](/base-chain/specs/upgrades/beryl/b20#policyregistry) - [Mint & Burn](/base-chain/specs/upgrades/beryl/b20#mint) - [Variants](/base-chain/specs/upgrades/beryl/b20#variants) diff --git a/docs/base-chain/specs/upgrades/ecotone/l1-attributes.mdx b/docs/base-chain/specs/upgrades/ecotone/l1-attributes.mdx index 9dea82309..af5a26cb9 100644 --- a/docs/base-chain/specs/upgrades/ecotone/l1-attributes.mdx +++ b/docs/base-chain/specs/upgrades/ecotone/l1-attributes.mdx @@ -49,7 +49,7 @@ and also set the following new attributes: The `1` value is derived from the EIP-4844 `MIN_BLOB_GASPRICE`. Note that the L1 blob bas fee is _not_ exposed as a part of the L1 origin block. -It must be computed using an parameterized off-chain formula which takes the +It must be computed using an parameterized offchain formula which takes the excess blob gas field from the header of the L1 origin block as described in [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844#base-fee-per-blob-gas-update-rule). The `BLOB_BASE_FEE_UPDATE_FRACTION` parameter in the formula varies diff --git a/docs/get-started/base-services-hub.mdx b/docs/get-started/base-services-hub.mdx index d4e04a4a1..67407302c 100644 --- a/docs/get-started/base-services-hub.mdx +++ b/docs/get-started/base-services-hub.mdx @@ -25,7 +25,7 @@ Thank you to all the teams supporting the Base ecosystem and its builders! If yo | [Anchor Zero](https://anchorzero.com) | Tax Planning | AnchorZero Roth IRAs can eliminate capital gains tax on pre-launch token investments | Waive all implementation fees | Mention you are building on Base in your introductory call with AnchorZero. | | [Api3](https://www.api3.org/) | Oracle's / Data Infrastructure | API3 is an oracle service that delivers Real World Price Feeds to your smart contract. The Price feeds provided allow dapps to regain lost value with Oracle Extractable Value built in to the feed. | If you are a lending dapp deploying on BASE, stable coin, morpho curator, borrow/lending dapp we will provide oracle services to your markets. | Contact: http://t.me/billyjitsu

Or Request: https://api3dao.typeform.com/to/TBTu8bJt

The team will reach out and discuss the options for gas grants for oracle services. | | [Artemis](https://artemis.xyz) | Onchain Analytics | Artemis standardizes digital finance data into a single open data platform. Metrics that matter for digital finance. All in one place. | Artemis is offering free, out-of-the-box onchain metrics dashboards for Base builder's applications. | Please fill out the [Google Form](https://forms.gle/ZDS9LkxSBJVJonR36) with your application metadata and contract information. We will contact your email once your application dashboard has been created. | -| [Birdeye ](https://bds.birdeye.so/) | Data Analytics - Data API - Developer Tools | Birdeye Data Services is a high-performance data provider that delivers real-time, accurate, and comprehensive on-chain data across tokens, wallets, trades, and protocols. | - Startup/Projects get 30% OFF for first 6 months - Free access to our full Business Lite package (valued at $299) for teams participating in Hackathons or Base Batches during the program period. | Apply [here](https://docs.google.com/forms/d/e/1FAIpQLSfkv8JWR1WWq7Biqx5yyDvF6belUtdbR37mddludfu-boI34Q/viewform)

We will be in touch once the application has been reviewed. For any other inquiries, please reach out to BDS on Telegram: @birdeye_data. | +| [Birdeye ](https://bds.birdeye.so/) | Data Analytics - Data API - Developer Tools | Birdeye Data Services is a high-performance data provider that delivers real-time, accurate, and comprehensive onchain data across tokens, wallets, trades, and protocols. | - Startup/Projects get 30% OFF for first 6 months - Free access to our full Business Lite package (valued at $299) for teams participating in Hackathons or Base Batches during the program period. | Apply [here](https://docs.google.com/forms/d/e/1FAIpQLSfkv8JWR1WWq7Biqx5yyDvF6belUtdbR37mddludfu-boI34Q/viewform)

We will be in touch once the application has been reviewed. For any other inquiries, please reach out to BDS on Telegram: @birdeye_data. | | [Cantina](https://cantina.xyz/welcome) | Security | Cantina is the one-stop shop for the highest quality security researchers and solutions. Reduce the likelihood of hacks, time spent, and context lost. | 10% off all services including audits, audit competitions, pen-testing, architecture reviews, fuzzing/unit/e2e testing 50% off of bug bounty hosting for the first year | https://cantina.xyz/introduction/base-cantina | | [Chainalysis Hexagate](https://www.chainalysis.com) | Security | Hexagate provides real-time automated alerts and responses to stop hacks, exploits, and financial risks while protecting TVL and reputation. Trusted by Coinbase, Polygon, Mantle, and many others. | Free version of Hexagate | Apply [here.](https://hexagate.typeform.com/HexagateForBase) | | [Coinwatch](https://coinwatch.co/) | Market Making | We help projects get the best market making deals and track their market makers to ensure they deliver on their promises. | 15% discount for 1 year of Gold tier | Fill out this [typeform](https://form.typeform.com/to/h4Xq2TF9?typeform-source=coinwatch.co)



Under the "Any additional details or questions for us?" section, input the code: BASExCOINWATCH



We will get back to you and apply the discount at the time of payment. | @@ -35,9 +35,9 @@ Thank you to all the teams supporting the Base ecosystem and its builders! If yo | [Decubate Technologies](https://decubate.com/tms) | Token Management | Decubate's TMS: All-in-one, white-labeled compliant tokenization solution. Minting, vesting, staking, lockups aligned with MiCAR—no coding needed. | Minimum 20% discount on Decubate's TMS—the all-in-one, white-labeled token management system with code-free minting, vesting, staking, lockups, tier systems, and more | Please fill our [form](https://share-eu1.hsforms.com/1ZOvFJZMnQKCPQk-IwyIWoQf5bmh) and mention 'Base' 'under where did you find us?' | | [Dune](https://www.dune.com/home) | Data Analytics - Data API - Developer Tools | Dune is a web3 data platform that lets anyone query, visualize, and share blockchain data. It’s used by analysts, builders, and communities to make onchain insights accessible and actionable. | 20% on any annual plans. | Email support@dune.com with your company/project name using your work email. | | [Dynamic](https://dynamic.xyz) | Wallet Infrastructure | Dynamic combines authentication, smart wallets, and secure key management into one flexible SDK. Get the most multi-chain coverage across chains and third-party wallets. | Base builders can get 3 months free of our $99/month Growth plan, which supports up to 2,000 MAUs. | Fill out this [form](https://d9hc0.share.hsforms.com/2CIpNaX14T1Cv1erD_2ou1A) in detail. Once the team receives your app, we'll review and get in touch. Note: One discount available per team. | -| [FailSafe](https://www.getfailsafe.com) | Infrastructure, CyberSecurity, Audits | FailSafe provides real-time blockchain risk monitoring and smart contract audit solutions for protocols, stablecoins, and digital asset platforms across global markets. | Get $3,000 off your first smart contract audit or monitoring subscription with FailSafe. Ideal for Base stablecoin issuers, or DeFi platforms looking to strengthen on-chain security and protect funds. | Email wui@getfailsafe.com with github repo of codebase for a quote on a security audit. Discount will be applied once a commercial contract is signed. | +| [FailSafe](https://www.getfailsafe.com) | Infrastructure, CyberSecurity, Audits | FailSafe provides real-time blockchain risk monitoring and smart contract audit solutions for protocols, stablecoins, and digital asset platforms across global markets. | Get $3,000 off your first smart contract audit or monitoring subscription with FailSafe. Ideal for Base stablecoin issuers, or DeFi platforms looking to strengthen onchain security and protect funds. | Email wui@getfailsafe.com with github repo of codebase for a quote on a security audit. Discount will be applied once a commercial contract is signed. | | [Firepan](https://firepan.com/) | Security | AI-powered smart contract security that runs 24/7. Firepan scans every commit, detects vulnerabilities early, and prevents exploits before deployment - continuous protection without $150k audits. | 80% off the first month to try all of the features of a deep scan. | Sign up at Firepan.com, connect your GitHub repo, and launch your first Deep Scan in minutes. Base Builders get 80% off the first month to test every feature using code "FIREPAN80" at checkout. Add the coupon code at Stripe checkout. | -| [Fjord Foundry](https://www.fjordfoundry.com/) | Fundraising / Token Sale | Connecting innovative projects and community backers through on-chain capital formation, with over $1bn raised since 2021. | Free Premium Marketing | To claim this offer, simply tell us you discovered it through the Base Builder Services Hub when you contact Fjord. If your project passes our due‑diligence review and is selected as a launch partner, you’ll be eligible. | +| [Fjord Foundry](https://www.fjordfoundry.com/) | Fundraising / Token Sale | Connecting innovative projects and community backers through onchain capital formation, with over $1bn raised since 2021. | Free Premium Marketing | To claim this offer, simply tell us you discovered it through the Base Builder Services Hub when you contact Fjord. If your project passes our due‑diligence review and is selected as a launch partner, you’ll be eligible. | | [FLock.io](https://www.flock.io/) | AI | FLock.io is the first decentralized AI training platform combining Federated Learning and blockchain to enable secure, privacy-preserving model training. | Base ecosystem projects get up to 50% off Qwen tokens using FLock.io-trained models or other major Qwen variants, plus: 1 free FLock.io training task and 1hr free AI consultation. | Please fill out this [Google Form](https://forms.gle/N8We623NQdAppEj26) with your application and contract information.



FLock.io team will contact you once we receive your application. | | [Flow](http://flowonbase.com) | FX, Ramping, Payments | Flow empowers projects with seamless FX, global payments, and local‐currency on/off-ramping — and offers its best pricing to those building or migrating onto Base. | For Base Builders, we offer 15% minimum discount on global ramping requirements & zero license fee for white label products. Further discounts available volume dependent. | Get market-leading FX, on/off-ramp, and global payment rates. We offer unmatched pricing that beats any verified competitor quote — book a consultation at flowonbase.com | | [Galxe](https://www.galxe.com) | Growth, distribution and infrastructure. | Galxe is web3’s leading growth platform and distribution network, trusted by 36M+ users and over 7.8K + brands globally. | Exclusive 10% discount on all Galxe Business+ plans, giving Base builders access to Galxe’s unified, battle-tested infrastructure to scale growth and distribution. | Builders can complete onboarding at https://dashboard.galxe.com/business+ and must explicitly specify that they are coming from the Base ecosystem during the signup process. The Galxe team will review and verify that the project is building on Base before applying the discount. If assistance is needed at any stage, builders may reach out to the Galxe team directly for support. | @@ -47,7 +47,7 @@ Thank you to all the teams supporting the Base ecosystem and its builders! If yo | [Hexens](https://hexens.io) | Security | At Hexens, we provide security audits to protect the future of Web3. We directly secure $120B+ in assets, working with industry leaders like Lido, EigenLayer, LayerZero, 1inch, Ava Labs, and Polygon. | Hexens will provide a discount of 15% for smart contract audits and 10% for services like pentest’s, and social engineering. Full triage will be provided for our bug bounty [r.xyz] for 3 months. | Please send your audit request to alice.rigby@hexens.io or @alicerigby on Telegram. | | [Hypernative](https://www.hypernative.io/) | Security | Hypernative is the leading real-time security and threat prevention platform trusted by over 200 projects—including Ethena, Uniswap, Ethereum Foundation, Morpho, Chainlink, Solana, and Kraken. | Receive a discounted rate for the first year for Hypernative's real-time threat prevention platform. | Email marshall@hypernative.io to begin your trial and claim your offer. | | [Immunefi](https://immunefi.com/) | AI & Security | Immunefi — One Platform. Unified Security Operations. Complete Onchain Protection. Over $180B of user funds protected across 500+ protocols. | 15%+ discount on Immunefi Audits, Audit Competitions, Vulnerability Detection/PR Reviews, Onchain Monitoring/Threat Prevention, Cloud Based Formal Verification, Brand Protection and Bug Bounty. | Please fill in this [form](https://calendly.com/d/cwsd-82q-rpj), and our Sales Team will review your submission and contact you shortly. | -| [Layer3](https://layer3.xyz) | Ecosystem Growth | Acquire high-quality users through campaigns that drive meaningful on-chain engagement. | 15% discount on all campaign fees for Base Builders! | Contact: https://t.me/justkhoo5



or



Fill out our enquiry form: https://shorturl.at/NbI67 | +| [Layer3](https://layer3.xyz) | Ecosystem Growth | Acquire high-quality users through campaigns that drive meaningful onchain engagement. | 15% discount on all campaign fees for Base Builders! | Contact: https://t.me/justkhoo5



or



Fill out our enquiry form: https://shorturl.at/NbI67 | | [MCA - MultiChain Advisors Inc.](https://www.multichainadv.com) | Consulting Firm | MCA is one of the top growth firms specalized in Marketing, GTM, ICOs, Partnerships, Capital Markets (Raise & Tokenomics), PR/Media, KOLs, and more - driving end to end execution from launch to scale. | Happy to provide 10-20% off our different services for the Base ecosystem. | Please fill this form out & include the code "MCA-Base"



[MCA Intake form](https://form.typeform.com/to/SU7MlYo1) | | [Meow](http://meow.com/) | Treasury Management & Yield | Meow helps web3 teams earn yield, send/receive USDC, and automate treasury via FDIC-insured accounts with free USDC transactions on Base—no wallets, prefunding, or exchange risk. | Only Base ecosystem projects (and select VC portfolios like a16z) get up to 3.5% interest on checking. Others get 0% and must use external funds for yield. | Sign up via https://app.meow.com/signup?referral=Base



Or list “Base Ecosystem” under “How did you hear about us?” during signup.



For intros, DM @dustinmeow on Telegram. | | [Neynar](https://neynar.com) | Social and crypto infrastructure | Infrastructure to build easily in crypto and on social protocols like Farcaster. | 100% off for first month of Starter tier, only new customers are eligible. | Email team@neynar.com with what you're building on Base to get the coupon code | @@ -81,7 +81,7 @@ Thank you to all the teams supporting the Base ecosystem and its builders! If yo | [Braille Studio](https://braille.wtf) | Product Design, Branding, Motion/Video, Web Design, Engineering | We design and build products for Based teams, covering brand, web, product, and launch assets, all focused on shipping something people can actually use. | 15% off our services and a free 1-hour mentoring session. (Starts at $3,000) | croissant@braille.wtf or Telegram: [braille_studio](https://t.me/braille_studio) | | [Builders Garden](https://www.builders.garden/) | Product Studio | Fullstack product studio, specialized in consumer crypto use cases. | 15 mins free review / feedback sessions. | Telegram: @limone_eth | | [Dacoit Design](https://www.dacoit.design/) | Design Studio | Full-stack crypto-native design studio specializing in brand identity, website design, and product design for Web3 projects. | Complimentary design audit. 20% discount on retainer engagements. (Starting at $7,500 for a 2-week branding sprint) | Telegram: @karanruparel or Email: karan@dacoit.design | -| [Ethereal Labs](https://www.ethereallabs.io/) | Full Stack Crypto Development Agency | End-to-end Web3 engineering with a focus on bespoke smart-contract architecture, high-performance dApp development, and secure on-chain infrastructure, taking projects from concept to production-ready launch. | 10% discount on services and free initial consultation. | dev@ethereallabs.io, Telegram: [ethereallabs](https://t.me/ethereallabs), or X: [@ethereallabs_](https://x.com/ethereallabs_) | +| [Ethereal Labs](https://www.ethereallabs.io/) | Full Stack Crypto Development Agency | End-to-end Web3 engineering with a focus on bespoke smart-contract architecture, high-performance dApp development, and secure onchain infrastructure, taking projects from concept to production-ready launch. | 10% discount on services and free initial consultation. | dev@ethereallabs.io, Telegram: [ethereallabs](https://t.me/ethereallabs), or X: [@ethereallabs_](https://x.com/ethereallabs_) | | [ForceField Digital](https://www.forcefield.digital/) | Marketing Agency | ForceField is the operating group and growth partner for Kenetic Capital and a leading venture capital in Web3 with over 300 investments. ForceField is a Web3-native growth partner that delivers real traction. | Base ecosystem members will receive a 20% discount. | info@forcefield.digital | | [Gloww](https://gloww.design) | Product Design, UX/UI, Branding, and Motion Design | Gloww gives Base builders hands-on product design support, working like an embedded founding designer. Focus is on shaping the product, polishing the UX, refining the visuals, and shipping high quality interfaces. | Happy to give anyone coming from Base services Hub a 20% off. ($3,000 min fee) | DM @akshitvrma on Telegram | | [GMGM Media](http://gmgm.media/) | Video Editing | Podcast repurposing, TikToks, interviews, launch / hype videos. | No payment required upfront. | Message @GMGMMedia on TG | diff --git a/docs/get-started/block-explorers.mdx b/docs/get-started/block-explorers.mdx index 5d438ea69..45e4dc2c0 100644 --- a/docs/get-started/block-explorers.mdx +++ b/docs/get-started/block-explorers.mdx @@ -47,7 +47,7 @@ A testnet explorer for [Base Sepolia](https://sepolia.basescan.org/) is also ava - Search by address, transaction, block, or token - View, verify, and interact with smart contract source code -- Access a comprehensive and real-time stream of on-chain data, including large transactions and significant fund movements +- Access a comprehensive and real-time stream of onchain data, including large transactions and significant fund movements - Address labels (i.e. project labels, contract labels, risk labels, black address labels, etc.) ## Tenderly Explorer diff --git a/docs/get-started/data-indexers.mdx b/docs/get-started/data-indexers.mdx index 489811a02..eead6bc41 100644 --- a/docs/get-started/data-indexers.mdx +++ b/docs/get-started/data-indexers.mdx @@ -33,7 +33,7 @@ References: ## Covalent -[Covalent](https://www.covalenthq.com/?utm_source=base&utm_medium=partner-docs) is a hosted blockchain data solution providing access to historical and current on-chain data for [100+ supported blockchains](https://goldrush.dev/docs/chains), including [Base](https://goldrush.dev/docs/chains/base). +[Covalent](https://www.covalenthq.com/?utm_source=base&utm_medium=partner-docs) is a hosted blockchain data solution providing access to historical and current onchain data for [100+ supported blockchains](https://goldrush.dev/docs/chains), including [Base](https://goldrush.dev/docs/chains/base). Covalent maintains a full archival copy of every supported blockchain, meaning every balance, transaction, log event, and NFT asset data is available from the genesis block. This data is available via: @@ -89,7 +89,7 @@ To get started, you can [sign up for an account](https://app.ghostlogs.xyz/ghost ## The Indexing Company -[The Indexing Company](https://www.indexing.co/) provides indexing as a service, capable of indexing any chain (EVM and non-EVM) with an RPC endpoint and integrating off-chain data within the same infrastructure. +[The Indexing Company](https://www.indexing.co/) provides indexing as a service, capable of indexing any chain (EVM and non-EVM) with an RPC endpoint and integrating offchain data within the same infrastructure. Our services include data transformations, aggregations, and streamlined data flows, allowing teams to develop their products faster while saving on developer resources, time, and money. Our solution is ideal for teams needing advanced data engineering for modular chain setups, multi-chain products, L1/L2/L3 chains and AI. @@ -131,7 +131,7 @@ Find out more in the [Shovel Docs](https://indexsupply.com/shovel/docs/) ## Subsquid [Subsquid](https://subsquid.io/) is a decentralized hyper-scalable data platform optimized for providing efficient, permissionless access to large volumes of data. -It currently serves historical on-chain data, including event logs, transaction receipts, traces, and per-transaction state diffs. +It currently serves historical onchain data, including event logs, transaction receipts, traces, and per-transaction state diffs. Subsquid offers a powerful toolkit for creating custom data extraction and processing pipelines, achieving an indexing speed of up to 150k blocks per second. To get started, visit the [documentation](https://docs.subsquid.io/) or see this [quickstart with examples](https://docs.subsquid.io/sdk/examples/) on how to easily create subgraphs via Subsquid. @@ -183,7 +183,7 @@ See [all supported networks](https://thegraph.com/docs/en/#supported-networks) [Flair](https://flair.dev) is a real-time and historical custom data indexing for any EVM chain. -It offers reusable **indexing primitives** (such as fault-tolerant RPC ingestors, custom processors and aggregations, re-org aware database integrations) to make it easy to receive, transform, store and access your on-chain data. +It offers reusable **indexing primitives** (such as fault-tolerant RPC ingestors, custom processors and aggregations, re-org aware database integrations) to make it easy to receive, transform, store and access your onchain data. To get started, visit the [documentation](https://docs.flair.dev) or clone the [starter boilerplate](https://github.com/flair-sdk/starter-boilerplate) template and follow the instructions. diff --git a/docs/get-started/launch-b20-token.mdx b/docs/get-started/launch-b20-token.mdx index c0f61578a..bf340bfff 100644 --- a/docs/get-started/launch-b20-token.mdx +++ b/docs/get-started/launch-b20-token.mdx @@ -1,11 +1,11 @@ --- title: "Launch a B20 Token" -description: "Launch a B20 token on Base by calling the B20 Factory precompile." +description: "Launch a B20 token on Base by calling the B20Factory precompile." --- B20 is an ERC-20 superset that runs as a native precompile on Base, which makes transfers cheaper and higher-throughput than a standard contract token while keeping full ERC-20 compatibility. Roles, supply caps, pausing, policy gating, memos, and `permit` are built into the chain. -A standard ERC-20 leaves that logic for you to build, audit, and maintain. With B20, you call the singleton [**B20 Factory**](/base-chain/specs/upgrades/beryl/b20#factory) to create a token, fully configured, in a single transaction. +A standard ERC-20 leaves that logic for you to build, audit, and maintain. With B20, you call the singleton [**B20Factory**](/base-chain/specs/upgrades/beryl/b20#b20factory) to create a token, fully configured, in a single transaction. This guide creates an Asset token, mints its initial supply, and verifies the balance onchain. To accept the token as payment in an app, continue with [Accept B20 payments](/apps/guides/accept-b20-payments). @@ -22,14 +22,14 @@ You need **Base's Foundry build** (`base-forge`, `base-cast`, [`base-anvil`](htt Standard `forge` cannot simulate calls to B20 precompile addresses (they hold no contract bytecode) and aborts with `call to non-contract address`. Base's `base-forge` registers the precompiles into its EVM. It installs alongside your existing Foundry toolchain without overwriting it — use `base-forge`, `base-cast`, and `base-anvil` for all commands in this guide. -## Verify the Activation Registry is enabled +## Verify the ActivationRegistry is enabled -Attempting to deploy before the Activation Registry is enabled will revert with `FeatureNotActivated`. Run the check for the variant you plan to deploy and confirm it returns `true` before proceeding: +Attempting to deploy before the ActivationRegistry is enabled will revert with `FeatureNotActivated`. Run the check for the variant you plan to deploy and confirm it returns `true` before proceeding: ```bash Terminal theme={null} -REG=0x8453000000000000000000000000000000000001 # Activation Registry precompile +REG=0x8453000000000000000000000000000000000001 # ActivationRegistry precompile RPC=https://mainnet.base.org # replace with your target network (e.g. https://sepolia.base.org, https://rpc.vibes.base.org) base-cast call $REG "isActivated(bytes32)(bool)" $(base-cast keccak "base.b20_asset") --rpc-url $RPC diff --git a/docs/llms-full.txt b/docs/llms-full.txt index e0fe01537..88a64f3b0 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -102,7 +102,7 @@ const client = createPublicClient({ chain: base, transport: http() }) - [Static Docs Files](https://docs.base.org/get-started/docs-llms): Use llms.txt and llms-full.txt to give AI assistants access to Base documentation. - [MCP Server](https://docs.base.org/get-started/docs-mcp): Connect your AI coding assistant to Base documentation using Model Context Protocol for real-time access. - [Get Funded](https://docs.base.org/get-started/get-funded): The Base ecosystem offers multiple funding pathways designed specifically for builders at every stage—from weekend experiments to full-scale ventures. -- [Launch a B20 Token](https://docs.base.org/get-started/launch-b20-token): Launch a B20 token on Base by calling the B20 Factory precompile. +- [Launch a B20 Token](https://docs.base.org/get-started/launch-b20-token): Launch a B20 token on Base by calling the B20Factory precompile. - [Launch a Token](https://docs.base.org/get-started/launch-token) - [Learning Resources](https://docs.base.org/get-started/learning-resources): Find educational content for learning Solidity, Ethereum, and blockchain development - [Developer's Guide to Effective AI Prompting](https://docs.base.org/get-started/prompt-library): Learn practical AI prompting techniques to enhance your coding workflow and get better results from AI coding assistants. @@ -177,7 +177,7 @@ const client = createPublicClient({ chain: base, transport: http() }) - [Node Providers](https://docs.base.org/base-chain/node-operators/node-providers): Documentation for Node Providers for the Base network. Including details on their services, supported networks, and pricing plans. - [Node Performance](https://docs.base.org/base-chain/node-operators/performance-tuning): Hardware specifications, storage requirements, client recommendations, and configuration settings for running a performant Base node. - [Run a Node](https://docs.base.org/base-chain/node-operators/run-a-base-node): A tutorial that teaches how to set up and run a Base Node. -- [Node Snapshots](https://docs.base.org/base-chain/node-operators/snapshots): Download and restore Base node snapshots to significantly reduce initial sync time for both archive and pruned nodes. +- [Node Snapshots](https://docs.base.org/base-chain/node-operators/snapshots): Download and restore Base node snapshots to significantly reduce initial sync time for nodes. - [Node Troubleshooting](https://docs.base.org/base-chain/node-operators/troubleshooting): Solutions to common issues when setting up and running a Base node, covering sync problems, networking, snapshots, and performance. - [Connecting to Base](https://docs.base.org/base-chain/quickstart/connecting-to-base): Network details and wallet setup for Base Mainnet, Base Testnet (Sepolia), and Base Vibenet. - [How to avoid getting your app flagged as malicious](https://docs.base.org/base-chain/security/avoid-malicious-flags): The Base bug bounty program and procedures for reporting vulnerabilities. @@ -286,7 +286,7 @@ const client = createPublicClient({ chain: base, transport: http() }) - [subscription.subscribe](https://docs.base.org/base-account/reference/base-pay/subscribe): Create USDC subscriptions with spend permissions on Base network - [Subscriptions Overview](https://docs.base.org/base-account/reference/base-pay/subscriptions-overview): Accept recurring USDC payments using spend permissions on Base - [atomic](https://docs.base.org/base-account/reference/core/capabilities/atomic): Ensures batched transactions are executed atomically and contiguously -- [auxiliaryFunds](https://docs.base.org/base-account/reference/core/capabilities/auxiliaryFunds): Indicates wallet access to funds beyond on-chain balance verification +- [auxiliaryFunds](https://docs.base.org/base-account/reference/core/capabilities/auxiliaryFunds): Indicates wallet access to funds beyond onchain balance verification - [dataCallback](https://docs.base.org/base-account/reference/core/capabilities/datacallback): Base Account allows you to collect personal information like email addresses, physical addresses, phone numbers, and names during transactions. - [dataSuffix](https://docs.base.org/base-account/reference/core/capabilities/dataSuffix): Append arbitrary data to transaction calldata for attribution tracking - [flowControl](https://docs.base.org/base-account/reference/core/capabilities/flowControl): Control transaction batch behavior after failed or reverted calls diff --git a/docs/llms.txt b/docs/llms.txt index b1fd97cdf..f895f74cd 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -14,7 +14,7 @@ - [Static Docs Files](https://docs.base.org/get-started/docs-llms): Use llms.txt and llms-full.txt to give AI assistants access to Base documentation. - [MCP Server](https://docs.base.org/get-started/docs-mcp): Connect your AI coding assistant to Base documentation using Model Context Protocol for real-time access. - [Get Funded](https://docs.base.org/get-started/get-funded): The Base ecosystem offers multiple funding pathways designed specifically for builders at every stage—from weekend experiments to full-scale ventures. -- [Launch a B20 Token](https://docs.base.org/get-started/launch-b20-token): Launch a B20 token on Base by calling the B20 Factory precompile. +- [Launch a B20 Token](https://docs.base.org/get-started/launch-b20-token): Launch a B20 token on Base by calling the B20Factory precompile. - [Launch a Token](https://docs.base.org/get-started/launch-token) - [Learning Resources](https://docs.base.org/get-started/learning-resources): Find educational content for learning Solidity, Ethereum, and blockchain development - [Developer's Guide to Effective AI Prompting](https://docs.base.org/get-started/prompt-library): Learn practical AI prompting techniques to enhance your coding workflow and get better results from AI coding assistants. @@ -89,7 +89,7 @@ - [Node Providers](https://docs.base.org/base-chain/node-operators/node-providers): Documentation for Node Providers for the Base network. Including details on their services, supported networks, and pricing plans. - [Node Performance](https://docs.base.org/base-chain/node-operators/performance-tuning): Hardware specifications, storage requirements, client recommendations, and configuration settings for running a performant Base node. - [Run a Node](https://docs.base.org/base-chain/node-operators/run-a-base-node): A tutorial that teaches how to set up and run a Base Node. -- [Node Snapshots](https://docs.base.org/base-chain/node-operators/snapshots): Download and restore Base node snapshots to significantly reduce initial sync time for both archive and pruned nodes. +- [Node Snapshots](https://docs.base.org/base-chain/node-operators/snapshots): Download and restore Base node snapshots to significantly reduce initial sync time for nodes. - [Node Troubleshooting](https://docs.base.org/base-chain/node-operators/troubleshooting): Solutions to common issues when setting up and running a Base node, covering sync problems, networking, snapshots, and performance. - [Connecting to Base](https://docs.base.org/base-chain/quickstart/connecting-to-base): Network details and wallet setup for Base Mainnet, Base Testnet (Sepolia), and Base Vibenet. - [How to avoid getting your app flagged as malicious](https://docs.base.org/base-chain/security/avoid-malicious-flags): The Base bug bounty program and procedures for reporting vulnerabilities. @@ -198,7 +198,7 @@ - [subscription.subscribe](https://docs.base.org/base-account/reference/base-pay/subscribe): Create USDC subscriptions with spend permissions on Base network - [Subscriptions Overview](https://docs.base.org/base-account/reference/base-pay/subscriptions-overview): Accept recurring USDC payments using spend permissions on Base - [atomic](https://docs.base.org/base-account/reference/core/capabilities/atomic): Ensures batched transactions are executed atomically and contiguously -- [auxiliaryFunds](https://docs.base.org/base-account/reference/core/capabilities/auxiliaryFunds): Indicates wallet access to funds beyond on-chain balance verification +- [auxiliaryFunds](https://docs.base.org/base-account/reference/core/capabilities/auxiliaryFunds): Indicates wallet access to funds beyond onchain balance verification - [dataCallback](https://docs.base.org/base-account/reference/core/capabilities/datacallback): Base Account allows you to collect personal information like email addresses, physical addresses, phone numbers, and names during transactions. - [dataSuffix](https://docs.base.org/base-account/reference/core/capabilities/dataSuffix): Append arbitrary data to transaction calldata for attribution tracking - [flowControl](https://docs.base.org/base-account/reference/core/capabilities/flowControl): Control transaction batch behavior after failed or reverted calls