-
Notifications
You must be signed in to change notification settings - Fork 261
Tutorial: custom bridges (also how do have SuperchainERC20 equivalence without using the same addresses) #1574
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
✅ Deploy Preview for docs-optimism ready!Built without sensitive environment variables
To edit notification comments on pull requests, go to your Netlify site configuration. |
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
Outdated
Show resolved
Hide resolved
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
Outdated
Show resolved
Hide resolved
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
Outdated
Show resolved
Hide resolved
📝 WalkthroughWalkthroughThis change introduces a new tutorial and supporting resources for creating a custom ERC20 token bridge across Superchain networks when token contract addresses differ between chains. It adds a detailed tutorial article in the interoperability section explaining how to use beacon proxies and upgradeable beacons to manage contract upgrades and cross-chain interoperability. Two new Solidity contracts are included: Sequence Diagram(s)sequenceDiagram
participant User
participant CustomBridge (Chain A)
participant L2ToL2Messenger
participant CustomBridge (Chain B)
participant InteropToken (Chain A)
participant InteropToken (Chain B)
User->>CustomBridge (Chain A): sendERC20(_to, _amount)
CustomBridge (Chain A)->>InteropToken (Chain A): crosschainBurn(User, _amount)
CustomBridge (Chain A)->>L2ToL2Messenger: send message (relayERC20)
L2ToL2Messenger->>CustomBridge (Chain B): relayERC20(_from, _to, _amount)
CustomBridge (Chain B)->>InteropToken (Chain B): crosschainMint(_to, _amount)
Suggested labels
Suggested reviewers
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
🧹 Nitpick comments (16)
public/tutorials/InteropToken.sol (3)
16-25
: Consider adding protection against zero-address transfers.The
crosschainMint
function has appropriate access control but lacks validation for zero addresses.function crosschainMint(address _to, uint256 _amount) external { require(msg.sender == PredeployAddresses.SUPERCHAIN_TOKEN_BRIDGE, "Unauthorized"); + require(_to != address(0), "Cannot mint to zero address"); _mint(_to, _amount); emit CrosschainMint(_to, _amount, msg.sender); }
38-42
: Consider removing 'virtual' from supportsInterface.The
supportsInterface
method is marked as virtual but isn't meant to be overridden since this is a concrete implementation.- function supportsInterface(bytes4 _interfaceId) public view virtual returns (bool) { + function supportsInterface(bytes4 _interfaceId) public view returns (bool) { return _interfaceId == type(IERC7802).interfaceId || _interfaceId == type(IERC20).interfaceId || _interfaceId == type(IERC165).interfaceId; }
9-43
: Consider adding bridge address update capability.The contract has the bridge address hard-coded via
PredeployAddresses.SUPERCHAIN_TOKEN_BRIDGE
. Consider adding a function for the owner to update this address if needed for future flexibility.contract InteropToken is Initializable, ERC20Upgradeable, OwnableUpgradeable, IERC7802 { + address public bridgeAddress; function initialize(string memory name, string memory symbol, uint256 initialSupply) public initializer { __ERC20_init(name, symbol); __Ownable_init(msg.sender); _mint(msg.sender, initialSupply); + bridgeAddress = PredeployAddresses.SUPERCHAIN_TOKEN_BRIDGE; } + /// @notice Allows the owner to update the bridge address + /// @param _newBridgeAddress New address for the bridge + function updateBridgeAddress(address _newBridgeAddress) external onlyOwner { + require(_newBridgeAddress != address(0), "Invalid bridge address"); + bridgeAddress = _newBridgeAddress; + } /// @notice Allows the SuperchainTokenBridge to mint tokens. /// @param _to Address to mint tokens to. /// @param _amount Amount of tokens to mint. function crosschainMint(address _to, uint256 _amount) external { - require(msg.sender == PredeployAddresses.SUPERCHAIN_TOKEN_BRIDGE, "Unauthorized"); + require(msg.sender == bridgeAddress, "Unauthorized"); _mint(_to, _amount); emit CrosschainMint(_to, _amount, msg.sender); } /// @notice Allows the SuperchainTokenBridge to burn tokens. /// @param _from Address to burn tokens from. /// @param _amount Amount of tokens to burn. function crosschainBurn(address _from, uint256 _amount) external { - require(msg.sender == PredeployAddresses.SUPERCHAIN_TOKEN_BRIDGE, "Unauthorized"); + require(msg.sender == bridgeAddress, "Unauthorized"); _burn(_from, _amount); emit CrosschainBurn(_from, _amount, msg.sender); }public/tutorials/setup-for-erc20-upgrade.sh (4)
20-20
: Unused variable detected.The
USER_ADDRESS
variable is defined but not used in the script.Either remove this line or use the variable in the script.
🧰 Tools
🪛 Shellcheck (0.10.0)
[warning] 20-20: USER_ADDRESS appears unused. Verify use (or export if used externally).
(SC2034)
69-69
: Add error handling for the forge script command.The script should check if the forge command succeeds.
-forge script script/LabSetup.s.sol --rpc-url $URL_CHAIN_A --broadcast --private-key $PRIVATE_KEY --tc LabSetup | tee setup_output +forge script script/LabSetup.s.sol --rpc-url $URL_CHAIN_A --broadcast --private-key $PRIVATE_KEY --tc LabSetup | tee setup_output || { echo "Forge script failed"; exit 1; }
58-61
: Consider making chain ID conditions more maintainable.The hardcoded chain IDs in the conditional expression may become difficult to maintain as more chains are added.
Consider defining the chain IDs as named variables at the top of the script or creating a function that returns the initial supply based on chain ID.
74-76
: Consider exporting variables automatically.Instead of just printing commands to export variables, consider exporting them directly in the script.
-echo Run these commands to store the configuration: -echo BEACON_ADDRESS=$BEACON_ADDRESS -echo export ERC20_ADDRESS=$ERC20_ADDRESS +echo "Exporting variables automatically..." +export BEACON_ADDRESS=$BEACON_ADDRESS +export ERC20_ADDRESS=$ERC20_ADDRESS +echo "Exported BEACON_ADDRESS=$BEACON_ADDRESS" +echo "Exported ERC20_ADDRESS=$ERC20_ADDRESS" +echo "You can use these variables in your current shell session"pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx (7)
1-5
: Improve description grammar for clarity
“…The example is a bridge when the addresses of the ERC20 contracts are not the same.” reads awkwardly. Re‑phrase to something like “Example bridge for cases where the ERC‑20 contract addresses differ across chains.”
34-39
: Avoid comma before an essential ‘because’ clause“…we don't have it on most pages, because this tutorial…”
Remove the comma to satisfy the COMMA_BEFORE_BECAUSE lint warning.
150-152
: Typo: “nonoce” → “nonce”
Heading currently reads “Advance the user's nonoce on chain B”.-### Advance the user's nonoce on chain B +### Advance the user's nonce on chain B
152-160
: Insert comma after introductory clause
“To simulate this situation we send …” → add a comma after “situation” to improve readability and resolve the IN_ORDER_TO_VB_COMMA hint.🧰 Tools
🪛 LanguageTool
[typographical] ~153-~153: It seems that a comma is missing.
Context: ...tract was installed. To simulate this situation we send a few meaningless transactions ...(IN_ORDER_TO_VB_COMMA)
184-187
: Repeated sentence opener “We” – vary wording
Three consecutive sentences start with “We …”. Consider re‑phrasing to avoid a monotone style (ENGLISH_WORD_REPEAT_BEGINNING_RULE).🧰 Tools
🪛 LanguageTool
[style] ~184-~184: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...t we need to create the other three. We have an interesting [chicken-and-egg](h...(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
282-283
: Remove comma before essential ‘because’ clause“…or the chain ID on the other side, because they are hardwired…”
Delete the comma.
🧰 Tools
🪛 LanguageTool
[formatting] ~282-~282: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...dress, or the chain ID on the other side, because they are hardwired in this bridge. ...(COMMA_BEFORE_BECAUSE)
338-340
: Double determiner: “The A chain”
Use either “Chain A” or “The chain A”. Suggested:-See the new balances. The A chain should have 0.9 tokens, and the B chain should have 0.1 tokens. +See the new balances. Chain A should have 0.9 tokens and chain B should have 0.1 tokens.🧰 Tools
🪛 LanguageTool
[grammar] ~338-~338: Two determiners in a row. Choose either “The” or “A”.
Context: ... ``` 4. See the new balances. The A chain should have 0.9 tokens, and the B...(DT_DT)
public/tutorials/CustomBridge.sol (2)
8-9
: UnusedIERC165
import
IERC165
is imported but never referenced, which produces a compiler warning.-import { IERC7802, IERC165 } from "interop-lib/src/interfaces/IERC7802.sol"; +import { IERC7802 } from "interop-lib/src/interfaces/IERC7802.sol";
66-74
: Validate non‑zero transfer amount
sendERC20
allows_amount == 0
, resulting in a no‑op burn and cross‑chain message that still consumes gas.if (_to == address(0)) revert ZeroAddress(); +if (_amount == 0) revert("AmountZero");
(Define an
error AmountZero();
for consistency.)
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
pages/interop/tutorials/upgrade-to-superchain-erc20/_meta.json
(1 hunks)pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
(1 hunks)public/tutorials/CustomBridge.sol
(1 hunks)public/tutorials/InteropToken.sol
(1 hunks)public/tutorials/setup-for-erc20-upgrade.sh
(1 hunks)words.txt
(8 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`**/*.mdx`: "ALWAYS review Markdown content THOROUGHLY with the following criteria: - First, check the frontmatter section at the top of the file: 1. For regular pages, ensure AL...
**/*.mdx
: "ALWAYS review Markdown content THOROUGHLY with the following criteria:
- First, check the frontmatter section at the top of the file:
- For regular pages, ensure ALL these fields are present and not empty:
--- title: [non-empty] lang: [non-empty] description: [non-empty] topic: [non-empty] personas: [non-empty array] categories: [non-empty array] content_type: [valid type] ---
- For landing pages (index.mdx or files with ), only these fields are required:
--- title: [non-empty] lang: [non-empty] description: [non-empty] topic: [non-empty] ---
- If any required fields are missing or empty, comment:
'This file appears to be missing required metadata. Please check keywords.config.yaml for valid options and add the required fields manually. You can validate your changes by running:pnpm validate-metadata ```'
- Use proper nouns in place of personal pronouns like 'We' and 'Our' to maintain consistency in communal documentation.
- Avoid gender-specific language and use the imperative form.
- Monitor capitalization for emphasis. Avoid using all caps, italics, or bold for emphasis.
- Ensure proper nouns are capitalized in sentences.
- Apply the Oxford comma.
- Use proper title case for buttons, tab names, page names, and links. Sentence case should be used for body content and short phrases, even in links.
- Use correct spelling and grammar at all times (IMPORTANT).
- For H1, H2, and H3 headers:
- Use sentence case, capitalizing only the first word.
- Preserve the capitalization of proper nouns, technical terms, and acronyms as defined in the 'nouns.txt' file located in the root directory of the project.
- Do not automatically lowercase words that appear in the 'nouns.txt' file, regardless of their position in the header.
- Flag any headers that seem to inconsistently apply these rules for manual review.
- When reviewing capitalization, always refer to the 'nouns.txt' file for the correct capitalization of proper nouns and technical terms specific to the project.
"
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
🪛 LanguageTool
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
[formatting] ~43-~43: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...ere, when we don't have it on most pages, because this tutorial has code that is a lot mo...
(COMMA_BEFORE_BECAUSE)
[typographical] ~153-~153: It seems that a comma is missing.
Context: ...tract was installed. To simulate this situation we send a few meaningless transactions ...
(IN_ORDER_TO_VB_COMMA)
[style] ~184-~184: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...t we need to create the other three. We have an interesting [chicken-and-egg](h...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~206-~206: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...` ### Deploy ERC7802 contracts We need to replace the ERC20 contracts with contra...
(REP_NEED_TO_VB)
[typographical] ~210-~210: Consider adding a comma after ‘Normally’ for more clarity.
Context: ... address to mint and burn tokens. Normally this is `PredeployAddresses.SUPERCHAIN_...
(RB_LY_COMMA)
[formatting] ~282-~282: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...dress, or the chain ID on the other side, because they are hardwired in this bridge. ...
(COMMA_BEFORE_BECAUSE)
[grammar] ~338-~338: Two determiners in a row. Choose either “The” or “A”.
Context: ... ``` 4. See the new balances. The A chain should have 0.9 tokens, and the B...
(DT_DT)
words.txt
[duplication] ~2-~2: Možný preklep: zopakovali ste slovo
Context: ACCOUNTQUEUE accountqueue ACCOUNTSLOTS accountslots ACDC ADDI ADDIU ADDU airgap Allnodes al...
(WORD_REPEAT_RULE)
[duplication] ~11-~11: Možný preklep: zopakovali ste slovo
Context: ... ADDI ADDIU ADDU airgap Allnodes allocs Alphanet alphanet Alphanets alphanets altda ANDI Ankr Ape...
(WORD_REPEAT_RULE)
[duplication] ~13-~13: Možný preklep: zopakovali ste slovo
Context: ...irgap Allnodes allocs Alphanet alphanet Alphanets alphanets altda ANDI Ankr Apeworx Arweave authrpc...
(WORD_REPEAT_RULE)
[duplication] ~21-~21: Možný preklep: zopakovali ste slovo
Context: ...altda ANDI Ankr Apeworx Arweave authrpc Autorelay autorelay autorelayer basefee Betanet betanet Bet...
(WORD_REPEAT_RULE)
[duplication] ~25-~25: Možný preklep: zopakovali ste slovo
Context: ...Autorelay autorelay autorelayer basefee Betanet betanet Betanets betanets BGEZ BGTZ Biconomy BL...
(WORD_REPEAT_RULE)
[duplication] ~27-~27: Možný preklep: zopakovali ste slovo
Context: ...lay autorelayer basefee Betanet betanet Betanets betanets BGEZ BGTZ Biconomy BLEZ BLOBPOOL blobpo...
(WORD_REPEAT_RULE)
[duplication] ~33-~33: Možný preklep: zopakovali ste slovo
Context: ...tanets betanets BGEZ BGTZ Biconomy BLEZ BLOBPOOL blobpool blobspace Blockdaemon Blockdaemon's blo...
(WORD_REPEAT_RULE)
[duplication] ~36-~36: Možný preklep: zopakovali ste slovo
Context: ...conomy BLEZ BLOBPOOL blobpool blobspace Blockdaemon Blockdaemon's blockhash blocklists BLOCKLOGS blockl...
(WORD_REPEAT_RULE)
[duplication] ~40-~40: Možný preklep: zopakovali ste slovo
Context: ...emon Blockdaemon's blockhash blocklists BLOCKLOGS blocklogs BLOCKPROFILERATE blockprofilerate Block...
(WORD_REPEAT_RULE)
[duplication] ~42-~42: Možný preklep: zopakovali ste slovo
Context: ...lockhash blocklists BLOCKLOGS blocklogs BLOCKPROFILERATE blockprofilerate Blockscout Blockspace blockspace blockt...
(WORD_REPEAT_RULE)
[duplication] ~45-~45: Možný preklep: zopakovali ste slovo
Context: ...PROFILERATE blockprofilerate Blockscout Blockspace blockspace blocktime Blocktimes blocktimes BLOOMFI...
(WORD_REPEAT_RULE)
[duplication] ~48-~48: Možný preklep: zopakovali ste slovo
Context: ...ckscout Blockspace blockspace blocktime Blocktimes blocktimes BLOOMFILTER bloomfilter BLTZ Bootcamp b...
(WORD_REPEAT_RULE)
[duplication] ~50-~50: Možný preklep: zopakovali ste slovo
Context: ...ckspace blocktime Blocktimes blocktimes BLOOMFILTER bloomfilter BLTZ Bootcamp bootnode BOOTNODES Bootno...
(WORD_REPEAT_RULE)
[duplication] ~55-~55: Možný preklep: zopakovali ste slovo
Context: ...LTER bloomfilter BLTZ Bootcamp bootnode BOOTNODES Bootnodes bootnodes bottlenecked Brotli brotli Ca...
(WORD_REPEAT_RULE)
[duplication] ~59-~59: Možný preklep: zopakovali ste slovo
Context: ...TNODES Bootnodes bootnodes bottlenecked Brotli brotli Callouts callouts CCIP Celestia Celesti...
(WORD_REPEAT_RULE)
[duplication] ~61-~61: Možný preklep: zopakovali ste slovo
Context: ...es bootnodes bottlenecked Brotli brotli Callouts callouts CCIP Celestia Celestia's chainid Chainl...
(WORD_REPEAT_RULE)
[duplication] ~78-~78: Možný preklep: zopakovali ste slovo
Context: ...alized collateralized compr Comprensive COMPUTEPENDINGBLOCK computependingblock confs Consen corsdomain counterfactuall...
(WORD_REPEAT_RULE)
[duplication] ~84-~84: Možný preklep: zopakovali ste slovo
Context: ...onfs Consen corsdomain counterfactually Crosschain crosschain Crossmint Dapphub daserver DATACAP data...
(WORD_REPEAT_RULE)
[duplication] ~89-~89: Možný preklep: zopakovali ste slovo
Context: ...n crosschain Crossmint Dapphub daserver DATACAP datacap DATADIR datadir Devnet devnet Devnets d...
(WORD_REPEAT_RULE)
[duplication] ~91-~91: Možný preklep: zopakovali ste slovo
Context: ...ssmint Dapphub daserver DATACAP datacap DATADIR datadir Devnet devnet Devnets devnets Devs dire...
(WORD_REPEAT_RULE)
[duplication] ~93-~93: Možný preklep: zopakovali ste slovo
Context: ...aserver DATACAP datacap DATADIR datadir Devnet devnet Devnets devnets Devs direnv DISABLETXPO...
(WORD_REPEAT_RULE)
[duplication] ~95-~95: Možný preklep: zopakovali ste slovo
Context: ...P datacap DATADIR datadir Devnet devnet Devnets devnets Devs direnv DISABLETXPOOLGOSSIP disable...
(WORD_REPEAT_RULE)
[duplication] ~99-~99: Možný preklep: zopakovali ste slovo
Context: ...vnet devnet Devnets devnets Devs direnv DISABLETXPOOLGOSSIP disabletxpoolgossip Discv discv DIVU Drand dripcheck Drippi...
(WORD_REPEAT_RULE)
[duplication] ~101-~101: Možný preklep: zopakovali ste slovo
Context: ...DISABLETXPOOLGOSSIP disabletxpoolgossip Discv discv DIVU Drand dripcheck Drippie Eigen EIPs...
(WORD_REPEAT_RULE)
[duplication] ~109-~109: Možný preklep: zopakovali ste slovo
Context: ...DIVU Drand dripcheck Drippie Eigen EIPs ENABLEDEPRECATEDPERSONAL enabledeprecatedpersonal enginekind Erigon erigon ETHERBASE ethe...
(WORD_REPEAT_RULE)
[duplication] ~112-~112: Možný preklep: zopakovali ste slovo
Context: ...NAL enabledeprecatedpersonal enginekind Erigon erigon ETHERBASE etherbase Ethernity Ethernow ...
(WORD_REPEAT_RULE)
[duplication] ~114-~114: Možný preklep: zopakovali ste slovo
Context: ...ecatedpersonal enginekind Erigon erigon ETHERBASE etherbase Ethernity Ethernow ETHSTATS ethstats EV...
(WORD_REPEAT_RULE)
[duplication] ~118-~118: Možný preklep: zopakovali ste slovo
Context: ... ETHERBASE etherbase Ethernity Ethernow ETHSTATS ethstats EVMTIMEOUT evmtimeout excercise executa...
(WORD_REPEAT_RULE)
[duplication] ~120-~120: Možný preklep: zopakovali ste slovo
Context: ...se Ethernity Ethernow ETHSTATS ethstats EVMTIMEOUT evmtimeout excercise executability exfiltrate EXIT...
(WORD_REPEAT_RULE)
[duplication] ~125-~125: Možný preklep: zopakovali ste slovo
Context: ...eout excercise executability exfiltrate EXITWHENSYNCED exitwhensynced EXTRADATA extradata Farcaster Faultproo...
(WORD_REPEAT_RULE)
[duplication] ~127-~127: Možný preklep: zopakovali ste slovo
Context: ...xfiltrate EXITWHENSYNCED exitwhensynced EXTRADATA extradata Farcaster Faultproof FDLIMIT fdlimit Fl...
(WORD_REPEAT_RULE)
[duplication] ~131-~131: Možný preklep: zopakovali ste slovo
Context: ...XTRADATA extradata Farcaster Faultproof FDLIMIT fdlimit Flashblocks Flashbots forkable forkchoi...
(WORD_REPEAT_RULE)
[duplication] ~146-~146: Možný preklep: zopakovali ste slovo
Context: ... Funct gameplay GASCAP gascap gaslessly GCMODE gcmode Gelato gifs GLOBALQUEUE globalqueue GLO...
(WORD_REPEAT_RULE)
[duplication] ~150-~150: Možný preklep: zopakovali ste slovo
Context: ...cap gaslessly GCMODE gcmode Gelato gifs GLOBALQUEUE globalqueue GLOBALSLOTS globalslots gokzg growthepi...
(WORD_REPEAT_RULE)
[duplication] ~152-~152: Možný preklep: zopakovali ste slovo
Context: ...ode Gelato gifs GLOBALQUEUE globalqueue GLOBALSLOTS globalslots gokzg growthepie hardfork hardforks HEA...
(WORD_REPEAT_RULE)
[duplication] ~158-~158: Možný preklep: zopakovali ste slovo
Context: ...ots gokzg growthepie hardfork hardforks HEALTHCHECK healthcheck healthchecks HISTORICALRPC historicalrp...
(WORD_REPEAT_RULE)
[duplication] ~161-~161: Možný preklep: zopakovali ste slovo
Context: ...ks HEALTHCHECK healthcheck healthchecks HISTORICALRPC historicalrpc HISTORICALRPCTIMEOUT historicalrpctimeo...
(WORD_REPEAT_RULE)
[duplication] ~163-~163: Možný preklep: zopakovali ste slovo
Context: ...ealthchecks HISTORICALRPC historicalrpc HISTORICALRPCTIMEOUT historicalrpctimeout HOLESKY Holesky holesky IERC IGNOREPRIC...
(WORD_REPEAT_RULE)
[duplication] ~165-~165: Možný preklep: zopakovali ste slovo
Context: ...STORICALRPCTIMEOUT historicalrpctimeout HOLESKY Holesky holesky IERC IGNOREPRICE ignoreprice Im...
(WORD_REPEAT_RULE)
[duplication] ~169-~169: Možný preklep: zopakovali ste slovo
Context: ...rpctimeout HOLESKY Holesky holesky IERC IGNOREPRICE ignoreprice Immunefi Inator inator INFLUXDBV influx...
(WORD_REPEAT_RULE)
[duplication] ~172-~172: Možný preklep: zopakovali ste slovo
Context: ...y IERC IGNOREPRICE ignoreprice Immunefi Inator inator INFLUXDBV influxdbv initcode IPCDISABLE...
(WORD_REPEAT_RULE)
[duplication] ~174-~174: Možný preklep: zopakovali ste slovo
Context: ...RICE ignoreprice Immunefi Inator inator INFLUXDBV influxdbv initcode IPCDISABLE ipcdisable ipcfile ...
(WORD_REPEAT_RULE)
[duplication] ~177-~177: Možný preklep: zopakovali ste slovo
Context: ...tor inator INFLUXDBV influxdbv initcode IPCDISABLE ipcdisable ipcfile IPCPATH ipcpath IPFS Isthumus J...
(WORD_REPEAT_RULE)
[duplication] ~180-~180: Možný preklep: zopakovali ste slovo
Context: ... initcode IPCDISABLE ipcdisable ipcfile IPCPATH ipcpath IPFS Isthumus JALR JOURNALREMOTES journ...
(WORD_REPEAT_RULE)
[duplication] ~185-~185: Možný preklep: zopakovali ste slovo
Context: ...file IPCPATH ipcpath IPFS Isthumus JALR JOURNALREMOTES journalremotes JSPATH jspath jwtsecret Keccak leveldb ...
(WORD_REPEAT_RULE)
[duplication] ~187-~187: Možný preklep: zopakovali ste slovo
Context: ...umus JALR JOURNALREMOTES journalremotes JSPATH jspath jwtsecret Keccak leveldb lightkdf Lisk ...
(WORD_REPEAT_RULE)
[duplication] ~196-~196: Možný preklep: zopakovali ste slovo
Context: ...ak leveldb lightkdf Lisk logfile logfmt MAXAGE maxage MAXBACKUPS maxbackups MAXPEERS maxpeers...
(WORD_REPEAT_RULE)
[duplication] ~198-~198: Možný preklep: zopakovali ste slovo
Context: ...htkdf Lisk logfile logfmt MAXAGE maxage MAXBACKUPS maxbackups MAXPEERS maxpeers MAXPENDPEERS maxpendp...
(WORD_REPEAT_RULE)
[duplication] ~200-~200: Možný preklep: zopakovali ste slovo
Context: ...fmt MAXAGE maxage MAXBACKUPS maxbackups MAXPEERS maxpeers MAXPENDPEERS maxpendpeers MAXPRICE maxp...
(WORD_REPEAT_RULE)
[duplication] ~202-~202: Možný preklep: zopakovali ste slovo
Context: ...MAXBACKUPS maxbackups MAXPEERS maxpeers MAXPENDPEERS maxpendpeers MAXPRICE maxprice MEMPROFILERATE mempro...
(WORD_REPEAT_RULE)
[duplication] ~204-~204: Možný preklep: zopakovali ste slovo
Context: ...EERS maxpeers MAXPENDPEERS maxpendpeers MAXPRICE maxprice MEMPROFILERATE memprofilerate Merkle me...
(WORD_REPEAT_RULE)
[duplication] ~206-~206: Možný preklep: zopakovali ste slovo
Context: ...ENDPEERS maxpendpeers MAXPRICE maxprice MEMPROFILERATE memprofilerate Merkle merkle MFHI MFLO Mgas Minato MIN...
(WORD_REPEAT_RULE)
[duplication] ~208-~208: Možný preklep: zopakovali ste slovo
Context: ... maxprice MEMPROFILERATE memprofilerate Merkle merkle MFHI MFLO Mgas Minato MINFREEDISK minfr...
(WORD_REPEAT_RULE)
[duplication] ~214-~214: Možný preklep: zopakovali ste slovo
Context: ...ate Merkle merkle MFHI MFLO Mgas Minato MINFREEDISK minfreedisk MINSUGGESTEDPRIORITYFEE minsuggestedpri...
(WORD_REPEAT_RULE)
[duplication] ~216-~216: Možný preklep: zopakovali ste slovo
Context: ...FLO Mgas Minato MINFREEDISK minfreedisk MINSUGGESTEDPRIORITYFEE minsuggestedpriorityfee Mintable Mintplex MIPSEVM Mitigations M...
(WORD_REPEAT_RULE)
[duplication] ~222-~222: Možný preklep: zopakovali ste slovo
Context: ...e Mintable Mintplex MIPSEVM Mitigations Monitorism monitorism Moralis Mordor mountpoint MOVN MOVZ MTH...
(WORD_REPEAT_RULE)
[duplication] ~239-~239: Možný preklep: zopakovali ste slovo
Context: ... multiclient multisigs MULTU nethermind NETRESTRICT netrestrict NETWORKID networkid NEWPAYLOAD newpaylo...
(WORD_REPEAT_RULE)
[duplication] ~241-~241: Možný preklep: zopakovali ste slovo
Context: ...ULTU nethermind NETRESTRICT netrestrict NETWORKID networkid NEWPAYLOAD newpayload nextra NOCOMPACTI...
(WORD_REPEAT_RULE)
[duplication] ~243-~243: Možný preklep: zopakovali ste slovo
Context: ...ESTRICT netrestrict NETWORKID networkid NEWPAYLOAD newpayload nextra NOCOMPACTION nocompaction NODEKE...
(WORD_REPEAT_RULE)
[duplication] ~246-~246: Možný preklep: zopakovali ste slovo
Context: ... networkid NEWPAYLOAD newpayload nextra NOCOMPACTION nocompaction NODEKEY nodekey NODEKEYHEX nodekeyhex n...
(WORD_REPEAT_RULE)
[duplication] ~248-~248: Možný preklep: zopakovali ste slovo
Context: ...ayload nextra NOCOMPACTION nocompaction NODEKEY nodekey NODEKEYHEX nodekeyhex nodename NODISCOV...
(WORD_REPEAT_RULE)
[duplication] ~250-~250: Možný preklep: zopakovali ste slovo
Context: ...COMPACTION nocompaction NODEKEY nodekey NODEKEYHEX nodekeyhex nodename NODISCOVER nodiscover NOLOCALS...
(WORD_REPEAT_RULE)
[duplication] ~253-~253: Možný preklep: zopakovali ste slovo
Context: ... nodekey NODEKEYHEX nodekeyhex nodename NODISCOVER nodiscover NOLOCALS nolocals nonoce NOPREFETCH nop...
(WORD_REPEAT_RULE)
[duplication] ~255-~255: Možný preklep: zopakovali ste slovo
Context: ...dekeyhex nodename NODISCOVER nodiscover NOLOCALS nolocals nonoce NOPREFETCH noprefetch NOPRUNING ...
(WORD_REPEAT_RULE)
[duplication] ~258-~258: Možný preklep: zopakovali ste slovo
Context: ...VER nodiscover NOLOCALS nolocals nonoce NOPREFETCH noprefetch NOPRUNING nopruning NOSYNCSERVE nosyncs...
(WORD_REPEAT_RULE)
[duplication] ~260-~260: Možný preklep: zopakovali ste slovo
Context: ...S nolocals nonoce NOPREFETCH noprefetch NOPRUNING nopruning NOSYNCSERVE nosyncserve Numba Offchain ...
(WORD_REPEAT_RULE)
[duplication] ~262-~262: Možný preklep: zopakovali ste slovo
Context: ...PREFETCH noprefetch NOPRUNING nopruning NOSYNCSERVE nosyncserve Numba Offchain offchain opchaina opchai...
(WORD_REPEAT_RULE)
[duplication] ~265-~265: Možný preklep: zopakovali ste slovo
Context: ...nopruning NOSYNCSERVE nosyncserve Numba Offchain offchain opchaina opchainb OPCM Openfort oplabs ...
(WORD_REPEAT_RULE)
[duplication] ~279-~279: Možný preklep: zopakovali ste slovo
Context: ...bility pcscdpath Pectra pectra Pectra's Peerstore peerstore peerstores Permissioned permissioned Pe...
(WORD_REPEAT_RULE)
[duplication] ~282-~282: Možný preklep: zopakovali ste slovo
Context: ...Pectra's Peerstore peerstore peerstores Permissioned permissioned Permissionless permissionless permissio...
(WORD_REPEAT_RULE)
[duplication] ~284-~284: Možný preklep: zopakovali ste slovo
Context: ...re peerstores Permissioned permissioned Permissionless permissionless permissionlessly Perps Peta Pimlico POA...
(WORD_REPEAT_RULE)
[duplication] ~292-~292: Možný preklep: zopakovali ste slovo
Context: ...ionlessly Perps Peta Pimlico POAP POAPs PPROF pprof Precommitments precommitments preconfig...
(WORD_REPEAT_RULE)
[duplication] ~294-~294: Možný preklep: zopakovali ste slovo
Context: ...rps Peta Pimlico POAP POAPs PPROF pprof Precommitments precommitments preconfigured predeploy Predeployed pre...
(WORD_REPEAT_RULE)
[duplication] ~298-~298: Možný preklep: zopakovali ste slovo
Context: ... precommitments preconfigured predeploy Predeployed predeployed Predeploys predeploys prefunded Preimag...
(WORD_REPEAT_RULE)
[duplication] ~300-~300: Možný preklep: zopakovali ste slovo
Context: ...gured predeploy Predeployed predeployed Predeploys predeploys prefunded Preimage preimage PREIMAGES p...
(WORD_REPEAT_RULE)
[duplication] ~303-~303: Možný preklep: zopakovali ste slovo
Context: ...eployed Predeploys predeploys prefunded Preimage preimage PREIMAGES preimages preinstall Preinsta...
(WORD_REPEAT_RULE)
[duplication] ~305-~305: Možný preklep: zopakovali ste slovo
Context: ... predeploys prefunded Preimage preimage PREIMAGES preimages preinstall Preinstalls preinstalls Pres...
(WORD_REPEAT_RULE)
[duplication] ~308-~308: Možný preklep: zopakovali ste slovo
Context: ...preimage PREIMAGES preimages preinstall Preinstalls preinstalls Prestate prestate prestates PREVRANDAO ...
(WORD_REPEAT_RULE)
[duplication] ~310-~310: Možný preklep: zopakovali ste slovo
Context: ...ages preinstall Preinstalls preinstalls Prestate prestate prestates PREVRANDAO PRICEBUMP pricebum...
(WORD_REPEAT_RULE)
[duplication] ~314-~314: Možný preklep: zopakovali ste slovo
Context: ... Prestate prestate prestates PREVRANDAO PRICEBUMP pricebump PRICELIMIT pricelimit productionize pro...
(WORD_REPEAT_RULE)
[duplication] ~316-~316: Možný preklep: zopakovali ste slovo
Context: ...restates PREVRANDAO PRICEBUMP pricebump PRICELIMIT pricelimit productionize productionized Protip Pro...
(WORD_REPEAT_RULE)
[duplication] ~322-~322: Možný preklep: zopakovali ste slovo
Context: ...uctionize productionized Protip Proxied Proxyd proxyd Pyth Pyth's QRNG Quicknode quicknode qu...
(WORD_REPEAT_RULE)
[duplication] ~324-~324: Možný preklep: zopakovali ste slovo
Context: ...uctionized Protip Proxied Proxyd proxyd Pyth Pyth's QRNG Quicknode quicknode quickstarts ...
(WORD_REPEAT_RULE)
[duplication] ~327-~327: Možný preklep: zopakovali ste slovo
Context: ... Proxied Proxyd proxyd Pyth Pyth's QRNG Quicknode quicknode quickstarts rebalancing Regenesis regen...
(WORD_REPEAT_RULE)
[duplication] ~331-~331: Možný preklep: zopakovali ste slovo
Context: ...knode quicknode quickstarts rebalancing Regenesis regenesis Reimagine REJOURNAL rejournal REMOTEDB ...
(WORD_REPEAT_RULE)
[duplication] ~334-~334: Možný preklep: zopakovali ste slovo
Context: ...balancing Regenesis regenesis Reimagine REJOURNAL rejournal REMOTEDB remotedb Reown Reown's replaya...
(WORD_REPEAT_RULE)
[duplication] ~336-~336: Možný preklep: zopakovali ste slovo
Context: ...regenesis Reimagine REJOURNAL rejournal REMOTEDB remotedb Reown Reown's replayability replayor re...
(WORD_REPEAT_RULE)
[duplication] ~338-~338: Možný preklep: zopakovali ste slovo
Context: ...e REJOURNAL rejournal REMOTEDB remotedb Reown Reown's replayability replayor reposts reprov...
(WORD_REPEAT_RULE)
[duplication] ~344-~344: Možný preklep: zopakovali ste slovo
Context: ...replayability replayor reposts reproven REQUIREDBLOCKS requiredblocks rollouts Rollups rollups Routescan rpck...
(WORD_REPEAT_RULE)
[duplication] ~347-~347: Možný preklep: zopakovali ste slovo
Context: ... REQUIREDBLOCKS requiredblocks rollouts Rollups rollups Routescan rpckind RPCPREFIX rpcprefix r...
(WORD_REPEAT_RULE)
[duplication] ~351-~351: Možný preklep: zopakovali ste slovo
Context: ...louts Rollups rollups Routescan rpckind RPCPREFIX rpcprefix rpcs RPGF Runbooks runbooks RWAs safedb...
(WORD_REPEAT_RULE)
[duplication] ~355-~355: Možný preklep: zopakovali ste slovo
Context: ...n rpckind RPCPREFIX rpcprefix rpcs RPGF Runbooks runbooks RWAs safedb Schnorr SEPOLIA Sepolia sep...
(WORD_REPEAT_RULE)
[duplication] ~360-~360: Možný preklep: zopakovali ste slovo
Context: ...F Runbooks runbooks RWAs safedb Schnorr SEPOLIA Sepolia sepolia seqnr SEQUENCERHTTP sequencerht...
(WORD_REPEAT_RULE)
[duplication] ~364-~364: Možný preklep: zopakovali ste slovo
Context: ...b Schnorr SEPOLIA Sepolia sepolia seqnr SEQUENCERHTTP sequencerhttp serv signup SLLV SLTI SLTIU SLTU smartc...
(WORD_REPEAT_RULE)
[duplication] ~382-~382: Možný preklep: zopakovali ste slovo
Context: ...olana Soneium soyboy Spearbit SRAV SRLV Stablecoins stablecoins statefulset subcomponents subgame subhe...
(WORD_REPEAT_RULE)
[duplication] ~391-~391: Možný preklep: zopakovali ste slovo
Context: ...ame subheaders subsecond SUBU Sunnyside SUPERCHAIN Superchain superchain Superchain's superchainerc S...
(WORD_REPEAT_RULE)
[duplication] ~393-~393: Možný preklep: zopakovali ste slovo
Context: ...nd SUBU Sunnyside SUPERCHAIN Superchain superchain Superchain's superchainerc Superlend Superloans Su...
(WORD_REPEAT_RULE)
[duplication] ~399-~399: Možný preklep: zopakovali ste slovo
Context: ...chainerc Superlend Superloans Superscan Supersim supersim SYNCMODE syncmode SYNCTARGET synctarget...
(WORD_REPEAT_RULE)
[duplication] ~401-~401: Možný preklep: zopakovali ste slovo
Context: ... Superloans Superscan Supersim supersim SYNCMODE syncmode SYNCTARGET synctarget syscalls thirdweb...
(WORD_REPEAT_RULE)
[duplication] ~403-~403: Možný preklep: zopakovali ste slovo
Context: ...can Supersim supersim SYNCMODE syncmode SYNCTARGET synctarget syscalls thirdweb threadcreate timeseri...
(WORD_REPEAT_RULE)
[duplication] ~431-~431: Možný preklep: zopakovali ste slovo
Context: ...ubmitted UPNP upstreaming VERKLE verkle VHOSTS vhosts Viem viem Viem's viem's VMDEBUG vmdebug...
(WORD_REPEAT_RULE)
[duplication] ~433-~433: Možný preklep: zopakovali ste slovo
Context: ...upstreaming VERKLE verkle VHOSTS vhosts Viem viem Viem's viem's VMDEBUG vmdebug VMODULE v...
(WORD_REPEAT_RULE)
[duplication] ~437-~437: Možný preklep: zopakovali ste slovo
Context: ...e VHOSTS vhosts Viem viem Viem's viem's VMDEBUG vmdebug VMODULE vmodule xlarge XORI ZKPs ZKVM Z...
(WORD_REPEAT_RULE)
[duplication] ~439-~439: Možný preklep: zopakovali ste slovo
Context: ...Viem viem Viem's viem's VMDEBUG vmdebug VMODULE vmodule xlarge XORI ZKPs ZKVM Zora zora
(WORD_REPEAT_RULE)
[duplication] ~445-~445: Možný preklep: zopakovali ste slovo
Context: ...g VMODULE vmodule xlarge XORI ZKPs ZKVM Zora zora
(WORD_REPEAT_RULE)
🪛 Shellcheck (0.10.0)
public/tutorials/setup-for-erc20-upgrade.sh
[warning] 5-5: Use 'cd ... || exit' or 'cd ... || return' in case cd fails.
(SC2164)
[warning] 17-17: URL_CHAIN_B appears unused. Verify use (or export if used externally).
(SC2034)
[warning] 20-20: USER_ADDRESS appears unused. Verify use (or export if used externally).
(SC2034)
🪛 Gitleaks (8.21.2)
public/tutorials/setup-for-erc20-upgrade.sh
10-10: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
🔇 Additional comments (7)
pages/interop/tutorials/upgrade-to-superchain-erc20/_meta.json (1)
1-3
: LGTM: Valid JSON structure for page metadata.This metadata file correctly maps the "custom-bridge" key to its display title for the tutorial section.
words.txt (1)
2-445
: LGTM: Consistent word capitalization patterns.The changes normalize capitalization by pairing uppercase and lowercase variants of technical terms used throughout the documentation. This improves consistency for spell-checking and terminology recognition.
🧰 Tools
🪛 LanguageTool
[duplication] ~2-~2: Možný preklep: zopakovali ste slovo
Context: ACCOUNTQUEUE accountqueue ACCOUNTSLOTS accountslots ACDC ADDI ADDIU ADDU airgap Allnodes al...(WORD_REPEAT_RULE)
[duplication] ~11-~11: Možný preklep: zopakovali ste slovo
Context: ... ADDI ADDIU ADDU airgap Allnodes allocs Alphanet alphanet Alphanets alphanets altda ANDI Ankr Ape...(WORD_REPEAT_RULE)
[duplication] ~13-~13: Možný preklep: zopakovali ste slovo
Context: ...irgap Allnodes allocs Alphanet alphanet Alphanets alphanets altda ANDI Ankr Apeworx Arweave authrpc...(WORD_REPEAT_RULE)
[duplication] ~21-~21: Možný preklep: zopakovali ste slovo
Context: ...altda ANDI Ankr Apeworx Arweave authrpc Autorelay autorelay autorelayer basefee Betanet betanet Bet...(WORD_REPEAT_RULE)
[duplication] ~25-~25: Možný preklep: zopakovali ste slovo
Context: ...Autorelay autorelay autorelayer basefee Betanet betanet Betanets betanets BGEZ BGTZ Biconomy BL...(WORD_REPEAT_RULE)
[duplication] ~27-~27: Možný preklep: zopakovali ste slovo
Context: ...lay autorelayer basefee Betanet betanet Betanets betanets BGEZ BGTZ Biconomy BLEZ BLOBPOOL blobpo...(WORD_REPEAT_RULE)
[duplication] ~33-~33: Možný preklep: zopakovali ste slovo
Context: ...tanets betanets BGEZ BGTZ Biconomy BLEZ BLOBPOOL blobpool blobspace Blockdaemon Blockdaemon's blo...(WORD_REPEAT_RULE)
[duplication] ~36-~36: Možný preklep: zopakovali ste slovo
Context: ...conomy BLEZ BLOBPOOL blobpool blobspace Blockdaemon Blockdaemon's blockhash blocklists BLOCKLOGS blockl...(WORD_REPEAT_RULE)
[duplication] ~40-~40: Možný preklep: zopakovali ste slovo
Context: ...emon Blockdaemon's blockhash blocklists BLOCKLOGS blocklogs BLOCKPROFILERATE blockprofilerate Block...(WORD_REPEAT_RULE)
[duplication] ~42-~42: Možný preklep: zopakovali ste slovo
Context: ...lockhash blocklists BLOCKLOGS blocklogs BLOCKPROFILERATE blockprofilerate Blockscout Blockspace blockspace blockt...(WORD_REPEAT_RULE)
[duplication] ~45-~45: Možný preklep: zopakovali ste slovo
Context: ...PROFILERATE blockprofilerate Blockscout Blockspace blockspace blocktime Blocktimes blocktimes BLOOMFI...(WORD_REPEAT_RULE)
[duplication] ~48-~48: Možný preklep: zopakovali ste slovo
Context: ...ckscout Blockspace blockspace blocktime Blocktimes blocktimes BLOOMFILTER bloomfilter BLTZ Bootcamp b...(WORD_REPEAT_RULE)
[duplication] ~50-~50: Možný preklep: zopakovali ste slovo
Context: ...ckspace blocktime Blocktimes blocktimes BLOOMFILTER bloomfilter BLTZ Bootcamp bootnode BOOTNODES Bootno...(WORD_REPEAT_RULE)
[duplication] ~55-~55: Možný preklep: zopakovali ste slovo
Context: ...LTER bloomfilter BLTZ Bootcamp bootnode BOOTNODES Bootnodes bootnodes bottlenecked Brotli brotli Ca...(WORD_REPEAT_RULE)
[duplication] ~59-~59: Možný preklep: zopakovali ste slovo
Context: ...TNODES Bootnodes bootnodes bottlenecked Brotli brotli Callouts callouts CCIP Celestia Celesti...(WORD_REPEAT_RULE)
[duplication] ~61-~61: Možný preklep: zopakovali ste slovo
Context: ...es bootnodes bottlenecked Brotli brotli Callouts callouts CCIP Celestia Celestia's chainid Chainl...(WORD_REPEAT_RULE)
[duplication] ~64-~64: Možný preklep: zopakovali ste slovo
Context: ...ed Brotli brotli Callouts callouts CCIP Celestia Celestia's chainid Chainlink chainlist Chainstac...(WORD_REPEAT_RULE)
[duplication] ~74-~74: Možný preklep: zopakovali ste slovo
Context: ...ck chaosnet Chugsplash Clabby codebases Collateralized collateralized compr Comprensive COMPUTEPENDINGBLOCK c...(WORD_REPEAT_RULE)
[duplication] ~78-~78: Možný preklep: zopakovali ste slovo
Context: ...alized collateralized compr Comprensive COMPUTEPENDINGBLOCK computependingblock confs Consen corsdomain counterfactuall...(WORD_REPEAT_RULE)
[duplication] ~84-~84: Možný preklep: zopakovali ste slovo
Context: ...onfs Consen corsdomain counterfactually Crosschain crosschain Crossmint Dapphub daserver DATACAP data...(WORD_REPEAT_RULE)
[duplication] ~89-~89: Možný preklep: zopakovali ste slovo
Context: ...n crosschain Crossmint Dapphub daserver DATACAP datacap DATADIR datadir Devnet devnet Devnets d...(WORD_REPEAT_RULE)
[duplication] ~91-~91: Možný preklep: zopakovali ste slovo
Context: ...ssmint Dapphub daserver DATACAP datacap DATADIR datadir Devnet devnet Devnets devnets Devs dire...(WORD_REPEAT_RULE)
[duplication] ~93-~93: Možný preklep: zopakovali ste slovo
Context: ...aserver DATACAP datacap DATADIR datadir Devnet devnet Devnets devnets Devs direnv DISABLETXPO...(WORD_REPEAT_RULE)
[duplication] ~95-~95: Možný preklep: zopakovali ste slovo
Context: ...P datacap DATADIR datadir Devnet devnet Devnets devnets Devs direnv DISABLETXPOOLGOSSIP disable...(WORD_REPEAT_RULE)
[duplication] ~99-~99: Možný preklep: zopakovali ste slovo
Context: ...vnet devnet Devnets devnets Devs direnv DISABLETXPOOLGOSSIP disabletxpoolgossip Discv discv DIVU Drand dripcheck Drippi...(WORD_REPEAT_RULE)
[duplication] ~101-~101: Možný preklep: zopakovali ste slovo
Context: ...DISABLETXPOOLGOSSIP disabletxpoolgossip Discv discv DIVU Drand dripcheck Drippie Eigen EIPs...(WORD_REPEAT_RULE)
[duplication] ~109-~109: Možný preklep: zopakovali ste slovo
Context: ...DIVU Drand dripcheck Drippie Eigen EIPs ENABLEDEPRECATEDPERSONAL enabledeprecatedpersonal enginekind Erigon erigon ETHERBASE ethe...(WORD_REPEAT_RULE)
[duplication] ~112-~112: Možný preklep: zopakovali ste slovo
Context: ...NAL enabledeprecatedpersonal enginekind Erigon erigon ETHERBASE etherbase Ethernity Ethernow ...(WORD_REPEAT_RULE)
[duplication] ~114-~114: Možný preklep: zopakovali ste slovo
Context: ...ecatedpersonal enginekind Erigon erigon ETHERBASE etherbase Ethernity Ethernow ETHSTATS ethstats EV...(WORD_REPEAT_RULE)
[duplication] ~118-~118: Možný preklep: zopakovali ste slovo
Context: ... ETHERBASE etherbase Ethernity Ethernow ETHSTATS ethstats EVMTIMEOUT evmtimeout excercise executa...(WORD_REPEAT_RULE)
[duplication] ~120-~120: Možný preklep: zopakovali ste slovo
Context: ...se Ethernity Ethernow ETHSTATS ethstats EVMTIMEOUT evmtimeout excercise executability exfiltrate EXIT...(WORD_REPEAT_RULE)
[duplication] ~125-~125: Možný preklep: zopakovali ste slovo
Context: ...eout excercise executability exfiltrate EXITWHENSYNCED exitwhensynced EXTRADATA extradata Farcaster Faultproo...(WORD_REPEAT_RULE)
[duplication] ~127-~127: Možný preklep: zopakovali ste slovo
Context: ...xfiltrate EXITWHENSYNCED exitwhensynced EXTRADATA extradata Farcaster Faultproof FDLIMIT fdlimit Fl...(WORD_REPEAT_RULE)
[duplication] ~131-~131: Možný preklep: zopakovali ste slovo
Context: ...XTRADATA extradata Farcaster Faultproof FDLIMIT fdlimit Flashblocks Flashbots forkable forkchoi...(WORD_REPEAT_RULE)
[duplication] ~143-~143: Možný preklep: zopakovali ste slovo
Context: ...s Fraxtal funcationality Funct gameplay GASCAP gascap gaslessly GCMODE gcmode Gelato gifs GLO...(WORD_REPEAT_RULE)
[duplication] ~146-~146: Možný preklep: zopakovali ste slovo
Context: ... Funct gameplay GASCAP gascap gaslessly GCMODE gcmode Gelato gifs GLOBALQUEUE globalqueue GLO...(WORD_REPEAT_RULE)
[duplication] ~150-~150: Možný preklep: zopakovali ste slovo
Context: ...cap gaslessly GCMODE gcmode Gelato gifs GLOBALQUEUE globalqueue GLOBALSLOTS globalslots gokzg growthepi...(WORD_REPEAT_RULE)
[duplication] ~152-~152: Možný preklep: zopakovali ste slovo
Context: ...ode Gelato gifs GLOBALQUEUE globalqueue GLOBALSLOTS globalslots gokzg growthepie hardfork hardforks HEA...(WORD_REPEAT_RULE)
[duplication] ~158-~158: Možný preklep: zopakovali ste slovo
Context: ...ots gokzg growthepie hardfork hardforks HEALTHCHECK healthcheck healthchecks HISTORICALRPC historicalrp...(WORD_REPEAT_RULE)
[duplication] ~161-~161: Možný preklep: zopakovali ste slovo
Context: ...ks HEALTHCHECK healthcheck healthchecks HISTORICALRPC historicalrpc HISTORICALRPCTIMEOUT historicalrpctimeo...(WORD_REPEAT_RULE)
[duplication] ~163-~163: Možný preklep: zopakovali ste slovo
Context: ...ealthchecks HISTORICALRPC historicalrpc HISTORICALRPCTIMEOUT historicalrpctimeout HOLESKY Holesky holesky IERC IGNOREPRIC...(WORD_REPEAT_RULE)
[duplication] ~165-~165: Možný preklep: zopakovali ste slovo
Context: ...STORICALRPCTIMEOUT historicalrpctimeout HOLESKY Holesky holesky IERC IGNOREPRICE ignoreprice Im...(WORD_REPEAT_RULE)
[duplication] ~169-~169: Možný preklep: zopakovali ste slovo
Context: ...rpctimeout HOLESKY Holesky holesky IERC IGNOREPRICE ignoreprice Immunefi Inator inator INFLUXDBV influx...(WORD_REPEAT_RULE)
[duplication] ~172-~172: Možný preklep: zopakovali ste slovo
Context: ...y IERC IGNOREPRICE ignoreprice Immunefi Inator inator INFLUXDBV influxdbv initcode IPCDISABLE...(WORD_REPEAT_RULE)
[duplication] ~174-~174: Možný preklep: zopakovali ste slovo
Context: ...RICE ignoreprice Immunefi Inator inator INFLUXDBV influxdbv initcode IPCDISABLE ipcdisable ipcfile ...(WORD_REPEAT_RULE)
[duplication] ~177-~177: Možný preklep: zopakovali ste slovo
Context: ...tor inator INFLUXDBV influxdbv initcode IPCDISABLE ipcdisable ipcfile IPCPATH ipcpath IPFS Isthumus J...(WORD_REPEAT_RULE)
[duplication] ~180-~180: Možný preklep: zopakovali ste slovo
Context: ... initcode IPCDISABLE ipcdisable ipcfile IPCPATH ipcpath IPFS Isthumus JALR JOURNALREMOTES journ...(WORD_REPEAT_RULE)
[duplication] ~185-~185: Možný preklep: zopakovali ste slovo
Context: ...file IPCPATH ipcpath IPFS Isthumus JALR JOURNALREMOTES journalremotes JSPATH jspath jwtsecret Keccak leveldb ...(WORD_REPEAT_RULE)
[duplication] ~187-~187: Možný preklep: zopakovali ste slovo
Context: ...umus JALR JOURNALREMOTES journalremotes JSPATH jspath jwtsecret Keccak leveldb lightkdf Lisk ...(WORD_REPEAT_RULE)
[duplication] ~196-~196: Možný preklep: zopakovali ste slovo
Context: ...ak leveldb lightkdf Lisk logfile logfmt MAXAGE maxage MAXBACKUPS maxbackups MAXPEERS maxpeers...(WORD_REPEAT_RULE)
[duplication] ~198-~198: Možný preklep: zopakovali ste slovo
Context: ...htkdf Lisk logfile logfmt MAXAGE maxage MAXBACKUPS maxbackups MAXPEERS maxpeers MAXPENDPEERS maxpendp...(WORD_REPEAT_RULE)
[duplication] ~200-~200: Možný preklep: zopakovali ste slovo
Context: ...fmt MAXAGE maxage MAXBACKUPS maxbackups MAXPEERS maxpeers MAXPENDPEERS maxpendpeers MAXPRICE maxp...(WORD_REPEAT_RULE)
[duplication] ~202-~202: Možný preklep: zopakovali ste slovo
Context: ...MAXBACKUPS maxbackups MAXPEERS maxpeers MAXPENDPEERS maxpendpeers MAXPRICE maxprice MEMPROFILERATE mempro...(WORD_REPEAT_RULE)
[duplication] ~204-~204: Možný preklep: zopakovali ste slovo
Context: ...EERS maxpeers MAXPENDPEERS maxpendpeers MAXPRICE maxprice MEMPROFILERATE memprofilerate Merkle me...(WORD_REPEAT_RULE)
[duplication] ~206-~206: Možný preklep: zopakovali ste slovo
Context: ...ENDPEERS maxpendpeers MAXPRICE maxprice MEMPROFILERATE memprofilerate Merkle merkle MFHI MFLO Mgas Minato MIN...(WORD_REPEAT_RULE)
[duplication] ~208-~208: Možný preklep: zopakovali ste slovo
Context: ... maxprice MEMPROFILERATE memprofilerate Merkle merkle MFHI MFLO Mgas Minato MINFREEDISK minfr...(WORD_REPEAT_RULE)
[duplication] ~214-~214: Možný preklep: zopakovali ste slovo
Context: ...ate Merkle merkle MFHI MFLO Mgas Minato MINFREEDISK minfreedisk MINSUGGESTEDPRIORITYFEE minsuggestedpri...(WORD_REPEAT_RULE)
[duplication] ~216-~216: Možný preklep: zopakovali ste slovo
Context: ...FLO Mgas Minato MINFREEDISK minfreedisk MINSUGGESTEDPRIORITYFEE minsuggestedpriorityfee Mintable Mintplex MIPSEVM Mitigations M...(WORD_REPEAT_RULE)
[duplication] ~222-~222: Možný preklep: zopakovali ste slovo
Context: ...e Mintable Mintplex MIPSEVM Mitigations Monitorism monitorism Moralis Mordor mountpoint MOVN MOVZ MTH...(WORD_REPEAT_RULE)
[duplication] ~233-~233: Možný preklep: zopakovali ste slovo
Context: ...oint MOVN MOVZ MTHI MTLO MULT multiaddr Multichain multichain multiclient multisigs MULTU nethermind ...(WORD_REPEAT_RULE)
[duplication] ~239-~239: Možný preklep: zopakovali ste slovo
Context: ... multiclient multisigs MULTU nethermind NETRESTRICT netrestrict NETWORKID networkid NEWPAYLOAD newpaylo...(WORD_REPEAT_RULE)
[duplication] ~241-~241: Možný preklep: zopakovali ste slovo
Context: ...ULTU nethermind NETRESTRICT netrestrict NETWORKID networkid NEWPAYLOAD newpayload nextra NOCOMPACTI...(WORD_REPEAT_RULE)
[duplication] ~243-~243: Možný preklep: zopakovali ste slovo
Context: ...ESTRICT netrestrict NETWORKID networkid NEWPAYLOAD newpayload nextra NOCOMPACTION nocompaction NODEKE...(WORD_REPEAT_RULE)
[duplication] ~246-~246: Možný preklep: zopakovali ste slovo
Context: ... networkid NEWPAYLOAD newpayload nextra NOCOMPACTION nocompaction NODEKEY nodekey NODEKEYHEX nodekeyhex n...(WORD_REPEAT_RULE)
[duplication] ~248-~248: Možný preklep: zopakovali ste slovo
Context: ...ayload nextra NOCOMPACTION nocompaction NODEKEY nodekey NODEKEYHEX nodekeyhex nodename NODISCOV...(WORD_REPEAT_RULE)
[duplication] ~250-~250: Možný preklep: zopakovali ste slovo
Context: ...COMPACTION nocompaction NODEKEY nodekey NODEKEYHEX nodekeyhex nodename NODISCOVER nodiscover NOLOCALS...(WORD_REPEAT_RULE)
[duplication] ~253-~253: Možný preklep: zopakovali ste slovo
Context: ... nodekey NODEKEYHEX nodekeyhex nodename NODISCOVER nodiscover NOLOCALS nolocals nonoce NOPREFETCH nop...(WORD_REPEAT_RULE)
[duplication] ~255-~255: Možný preklep: zopakovali ste slovo
Context: ...dekeyhex nodename NODISCOVER nodiscover NOLOCALS nolocals nonoce NOPREFETCH noprefetch NOPRUNING ...(WORD_REPEAT_RULE)
[duplication] ~258-~258: Možný preklep: zopakovali ste slovo
Context: ...VER nodiscover NOLOCALS nolocals nonoce NOPREFETCH noprefetch NOPRUNING nopruning NOSYNCSERVE nosyncs...(WORD_REPEAT_RULE)
[duplication] ~260-~260: Možný preklep: zopakovali ste slovo
Context: ...S nolocals nonoce NOPREFETCH noprefetch NOPRUNING nopruning NOSYNCSERVE nosyncserve Numba Offchain ...(WORD_REPEAT_RULE)
[duplication] ~262-~262: Možný preklep: zopakovali ste slovo
Context: ...PREFETCH noprefetch NOPRUNING nopruning NOSYNCSERVE nosyncserve Numba Offchain offchain opchaina opchai...(WORD_REPEAT_RULE)
[duplication] ~265-~265: Možný preklep: zopakovali ste slovo
Context: ...nopruning NOSYNCSERVE nosyncserve Numba Offchain offchain opchaina opchainb OPCM Openfort oplabs ...(WORD_REPEAT_RULE)
[duplication] ~276-~276: Možný preklep: zopakovali ste slovo
Context: ... opnode's opstack Pausability pcscdpath Pectra pectra Pectra's Peerstore peerstore peerstores...(WORD_REPEAT_RULE)
[duplication] ~279-~279: Možný preklep: zopakovali ste slovo
Context: ...bility pcscdpath Pectra pectra Pectra's Peerstore peerstore peerstores Permissioned permissioned Pe...(WORD_REPEAT_RULE)
[duplication] ~282-~282: Možný preklep: zopakovali ste slovo
Context: ...Pectra's Peerstore peerstore peerstores Permissioned permissioned Permissionless permissionless permissio...(WORD_REPEAT_RULE)
[duplication] ~284-~284: Možný preklep: zopakovali ste slovo
Context: ...re peerstores Permissioned permissioned Permissionless permissionless permissionlessly Perps Peta Pimlico POA...(WORD_REPEAT_RULE)
[duplication] ~292-~292: Možný preklep: zopakovali ste slovo
Context: ...ionlessly Perps Peta Pimlico POAP POAPs PPROF pprof Precommitments precommitments preconfig...(WORD_REPEAT_RULE)
[duplication] ~294-~294: Možný preklep: zopakovali ste slovo
Context: ...rps Peta Pimlico POAP POAPs PPROF pprof Precommitments precommitments preconfigured predeploy Predeployed pre...(WORD_REPEAT_RULE)
[duplication] ~298-~298: Možný preklep: zopakovali ste slovo
Context: ... precommitments preconfigured predeploy Predeployed predeployed Predeploys predeploys prefunded Preimag...(WORD_REPEAT_RULE)
[duplication] ~300-~300: Možný preklep: zopakovali ste slovo
Context: ...gured predeploy Predeployed predeployed Predeploys predeploys prefunded Preimage preimage PREIMAGES p...(WORD_REPEAT_RULE)
[duplication] ~303-~303: Možný preklep: zopakovali ste slovo
Context: ...eployed Predeploys predeploys prefunded Preimage preimage PREIMAGES preimages preinstall Preinsta...(WORD_REPEAT_RULE)
[duplication] ~305-~305: Možný preklep: zopakovali ste slovo
Context: ... predeploys prefunded Preimage preimage PREIMAGES preimages preinstall Preinstalls preinstalls Pres...(WORD_REPEAT_RULE)
[duplication] ~308-~308: Možný preklep: zopakovali ste slovo
Context: ...preimage PREIMAGES preimages preinstall Preinstalls preinstalls Prestate prestate prestates PREVRANDAO ...(WORD_REPEAT_RULE)
[duplication] ~310-~310: Možný preklep: zopakovali ste slovo
Context: ...ages preinstall Preinstalls preinstalls Prestate prestate prestates PREVRANDAO PRICEBUMP pricebum...(WORD_REPEAT_RULE)
[duplication] ~314-~314: Možný preklep: zopakovali ste slovo
Context: ... Prestate prestate prestates PREVRANDAO PRICEBUMP pricebump PRICELIMIT pricelimit productionize pro...(WORD_REPEAT_RULE)
[duplication] ~316-~316: Možný preklep: zopakovali ste slovo
Context: ...restates PREVRANDAO PRICEBUMP pricebump PRICELIMIT pricelimit productionize productionized Protip Pro...(WORD_REPEAT_RULE)
[duplication] ~322-~322: Možný preklep: zopakovali ste slovo
Context: ...uctionize productionized Protip Proxied Proxyd proxyd Pyth Pyth's QRNG Quicknode quicknode qu...(WORD_REPEAT_RULE)
[duplication] ~324-~324: Možný preklep: zopakovali ste slovo
Context: ...uctionized Protip Proxied Proxyd proxyd Pyth Pyth's QRNG Quicknode quicknode quickstarts ...(WORD_REPEAT_RULE)
[duplication] ~327-~327: Možný preklep: zopakovali ste slovo
Context: ... Proxied Proxyd proxyd Pyth Pyth's QRNG Quicknode quicknode quickstarts rebalancing Regenesis regen...(WORD_REPEAT_RULE)
[duplication] ~331-~331: Možný preklep: zopakovali ste slovo
Context: ...knode quicknode quickstarts rebalancing Regenesis regenesis Reimagine REJOURNAL rejournal REMOTEDB ...(WORD_REPEAT_RULE)
[duplication] ~334-~334: Možný preklep: zopakovali ste slovo
Context: ...balancing Regenesis regenesis Reimagine REJOURNAL rejournal REMOTEDB remotedb Reown Reown's replaya...(WORD_REPEAT_RULE)
[duplication] ~336-~336: Možný preklep: zopakovali ste slovo
Context: ...regenesis Reimagine REJOURNAL rejournal REMOTEDB remotedb Reown Reown's replayability replayor re...(WORD_REPEAT_RULE)
[duplication] ~338-~338: Možný preklep: zopakovali ste slovo
Context: ...e REJOURNAL rejournal REMOTEDB remotedb Reown Reown's replayability replayor reposts reprov...(WORD_REPEAT_RULE)
[duplication] ~344-~344: Možný preklep: zopakovali ste slovo
Context: ...replayability replayor reposts reproven REQUIREDBLOCKS requiredblocks rollouts Rollups rollups Routescan rpck...(WORD_REPEAT_RULE)
[duplication] ~347-~347: Možný preklep: zopakovali ste slovo
Context: ... REQUIREDBLOCKS requiredblocks rollouts Rollups rollups Routescan rpckind RPCPREFIX rpcprefix r...(WORD_REPEAT_RULE)
[duplication] ~351-~351: Možný preklep: zopakovali ste slovo
Context: ...louts Rollups rollups Routescan rpckind RPCPREFIX rpcprefix rpcs RPGF Runbooks runbooks RWAs safedb...(WORD_REPEAT_RULE)
[duplication] ~355-~355: Možný preklep: zopakovali ste slovo
Context: ...n rpckind RPCPREFIX rpcprefix rpcs RPGF Runbooks runbooks RWAs safedb Schnorr SEPOLIA Sepolia sep...(WORD_REPEAT_RULE)
[duplication] ~360-~360: Možný preklep: zopakovali ste slovo
Context: ...F Runbooks runbooks RWAs safedb Schnorr SEPOLIA Sepolia sepolia seqnr SEQUENCERHTTP sequencerht...(WORD_REPEAT_RULE)
[duplication] ~364-~364: Možný preklep: zopakovali ste slovo
Context: ...b Schnorr SEPOLIA Sepolia sepolia seqnr SEQUENCERHTTP sequencerhttp serv signup SLLV SLTI SLTIU SLTU smartc...(WORD_REPEAT_RULE)
[duplication] ~374-~374: Možný preklep: zopakovali ste slovo
Context: ...V SLTI SLTIU SLTU smartcard snapshotlog Snapsync snapsync Solana Soneium soyboy Spearbit SRAV SRL...(WORD_REPEAT_RULE)
[duplication] ~382-~382: Možný preklep: zopakovali ste slovo
Context: ...olana Soneium soyboy Spearbit SRAV SRLV Stablecoins stablecoins statefulset subcomponents subgame subhe...(WORD_REPEAT_RULE)
[duplication] ~391-~391: Možný preklep: zopakovali ste slovo
Context: ...ame subheaders subsecond SUBU Sunnyside SUPERCHAIN Superchain superchain Superchain's superchainerc S...(WORD_REPEAT_RULE)
[duplication] ~393-~393: Možný preklep: zopakovali ste slovo
Context: ...nd SUBU Sunnyside SUPERCHAIN Superchain superchain Superchain's superchainerc Superlend Superloans Su...(WORD_REPEAT_RULE)
[duplication] ~399-~399: Možný preklep: zopakovali ste slovo
Context: ...chainerc Superlend Superloans Superscan Supersim supersim SYNCMODE syncmode SYNCTARGET synctarget...(WORD_REPEAT_RULE)
[duplication] ~401-~401: Možný preklep: zopakovali ste slovo
Context: ... Superloans Superscan Supersim supersim SYNCMODE syncmode SYNCTARGET synctarget syscalls thirdweb...(WORD_REPEAT_RULE)
[duplication] ~403-~403: Možný preklep: zopakovali ste slovo
Context: ...can Supersim supersim SYNCMODE syncmode SYNCTARGET synctarget syscalls thirdweb threadcreate timeseri...(WORD_REPEAT_RULE)
[duplication] ~416-~416: Možný preklep: zopakovali ste slovo
Context: ...essly trustrpc Twei txfeecap txmgr txns TXPOOL txpool txproxy txproxyd uncensorable uncounter...(WORD_REPEAT_RULE)
[duplication] ~429-~429: Možný preklep: zopakovali ste slovo
Context: ... Unprotect unsubmitted UPNP upstreaming VERKLE verkle VHOSTS vhosts Viem viem Viem's viem's V...(WORD_REPEAT_RULE)
[duplication] ~431-~431: Možný preklep: zopakovali ste slovo
Context: ...ubmitted UPNP upstreaming VERKLE verkle VHOSTS vhosts Viem viem Viem's viem's VMDEBUG vmdebug...(WORD_REPEAT_RULE)
[duplication] ~433-~433: Možný preklep: zopakovali ste slovo
Context: ...upstreaming VERKLE verkle VHOSTS vhosts Viem viem Viem's viem's VMDEBUG vmdebug VMODULE v...(WORD_REPEAT_RULE)
[duplication] ~437-~437: Možný preklep: zopakovali ste slovo
Context: ...e VHOSTS vhosts Viem viem Viem's viem's VMDEBUG vmdebug VMODULE vmodule xlarge XORI ZKPs ZKVM Z...(WORD_REPEAT_RULE)
[duplication] ~439-~439: Možný preklep: zopakovali ste slovo
Context: ...Viem viem Viem's viem's VMDEBUG vmdebug VMODULE vmodule xlarge XORI ZKPs ZKVM Zora zora(WORD_REPEAT_RULE)
[duplication] ~445-~445: Možný preklep: zopakovali ste slovo
Context: ...g VMODULE vmodule xlarge XORI ZKPs ZKVM Zora zora(WORD_REPEAT_RULE)
public/tutorials/InteropToken.sol (3)
1-7
: LGTM: Appropriate imports and solidity version.The contract uses a recent Solidity version and imports the necessary OpenZeppelin upgradeable contracts and interop interfaces.
9-14
: LGTM: Correct upgradeable pattern implementation.The contract properly inherits from required interfaces and implements the initializer pattern for upgradeable contracts.
27-36
: LGTM: Properly implemented crosschainBurn function.The function correctly enforces bridge authorization, burns tokens, and emits the required event.
public/tutorials/setup-for-erc20-upgrade.sh (1)
25-67
: LGTM: Well-structured Solidity deployment script.The generated Solidity script properly implements the upgradeable pattern with a token implementation, beacon, and proxy.
public/tutorials/CustomBridge.sol (1)
15-18
:tokenAddressThere
is currently unused
The variable is stored but never read, which triggers theunused‑state‑variable
Solidity warning. Either remove it or integrate it (e.g., emit in events or add future‑proof validation).
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (8)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx (8)
34-39
: Remove italic emphasis for consistency
Avoid using italics for emphasis in documentation. Replace*not*
with plain text.- The code on the documentation site is sample code, *not* production code. + The code on the documentation site is sample code, not production code.
41-47
: Remove internal author comment block
The commented JSX block is not rendered and clutters the source. It should be removed to keep the MDX clean.- {/* - I put this warning here, when we don't have it on most pages, because this tutorial - has code that is a lot more likely to be used in production. It doesn't just - show what is possible, it does the exact job needed. - - */}🧰 Tools
🪛 LanguageTool
[formatting] ~43-~43: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...ere, when we don't have it on most pages, because this tutorial has code that is a lot mo...(COMMA_BEFORE_BECAUSE)
184-187
: Use impersonal or imperative voice instead of 'we'
Avoid first‑person pronouns and maintain an instructional tone.- We have an interesting [chicken-and-egg](https://en.wikipedia.org/wiki/Chicken_or_the_egg) issue here. - To create a proxy, we need the address of the implementation contract, the one with the actual code. - However, the bridge and ERC20 code needs to have the proxy addresses. - One possible solution is to choose a pre-existing contract, and use that as the implementation contract until we can upgrade. + There is an interesting [chicken-and-egg](https://en.wikipedia.org/wiki/Chicken_or_the_egg) issue when deploying proxies. + Creating a proxy requires the address of the implementation contract (the one with the actual code). + However, the bridge and ERC20 contracts must include the proxy addresses. + One solution is to use a pre-existing contract as the implementation until an upgrade is possible.🧰 Tools
🪛 LanguageTool
[style] ~184-~184: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...t we need to create the other three. We have an interesting [chicken-and-egg](h...(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
206-207
: Use imperative phrasing for step instructions
Switch to the imperative mood for clarity in tutorials.- We need to replace the ERC20 contracts with contracts that: + Replace the ERC20 contracts with contracts that:🧰 Tools
🪛 LanguageTool
[style] ~206-~206: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...` ### Deploy ERC7802 contracts We need to replace the ERC20 contracts with contra...(REP_NEED_TO_VB)
210-210
: Add comma after 'Normally'
Insert a comma after the introductory adverb for proper punctuation.- Normally this is `PredeployAddresses.SUPERCHAIN_TOKEN_BRIDGE`, but in our case it would be the bridge proxy address, which we'll store in `bridgeAddress`. + Normally, this is `PredeployAddresses.SUPERCHAIN_TOKEN_BRIDGE`, but in our case it will be the bridge proxy address stored in `bridgeAddress`.🧰 Tools
🪛 LanguageTool
[typographical] ~210-~210: Consider adding a comma after ‘Normally’ for more clarity.
Context: ... address to mint and burn tokens. Normally this is `PredeployAddresses.SUPERCHAIN_...(RB_LY_COMMA)
281-283
: Remove unnecessary comma before 'because'
When the 'because' clause is essential, omit the comma preceding it.- We don't need to specify the token address, or the chain ID on the other side, because they are hardwired in this bridge. + We don't need to specify the token address or the chain ID on the other side because they are hardwired in this bridge.🧰 Tools
🪛 LanguageTool
[formatting] ~282-~282: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...dress, or the chain ID on the other side, because they are hardwired in this bridge. ...(COMMA_BEFORE_BECAUSE)
338-338
: Correct determiner usage for chain references
Avoid double determiners; refer to chains by name.- The A chain should have 0.9 tokens, and the B chain should have 0.1 tokens. + Chain A should have 0.9 tokens, and Chain B should have 0.1 tokens.🧰 Tools
🪛 LanguageTool
[grammar] ~338-~338: Two determiners in a row. Choose either “The” or “A”.
Context: ... ``` 4. See the new balances. The A chain should have 0.9 tokens, and the B...(DT_DT)
132-133
: Use placeholder for private keys in documentation
Avoid publishing actual private keys. Use a placeholder variable to prompt users to insert their own.- PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 + PRIVATE_KEY=<YOUR_PRIVATE_KEY>🧰 Tools
🪛 Gitleaks (8.21.2)
132-132: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
(1 hunks)words.txt
(0 hunks)
💤 Files with no reviewable changes (1)
- words.txt
🧰 Additional context used
📓 Path-based instructions (1)
`**/*.mdx`: "ALWAYS review Markdown content THOROUGHLY with the following criteria: - First, check the frontmatter section at the top of the file: 1. For regular pages, ensure AL...
**/*.mdx
: "ALWAYS review Markdown content THOROUGHLY with the following criteria:
- First, check the frontmatter section at the top of the file:
- For regular pages, ensure ALL these fields are present and not empty:
--- title: [non-empty] lang: [non-empty] description: [non-empty] topic: [non-empty] personas: [non-empty array] categories: [non-empty array] content_type: [valid type] ---
- For landing pages (index.mdx or files with ), only these fields are required:
--- title: [non-empty] lang: [non-empty] description: [non-empty] topic: [non-empty] ---
- If any required fields are missing or empty, comment:
'This file appears to be missing required metadata. Please check keywords.config.yaml for valid options and add the required fields manually. You can validate your changes by running:pnpm validate-metadata ```'
- Use proper nouns in place of personal pronouns like 'We' and 'Our' to maintain consistency in communal documentation.
- Avoid gender-specific language and use the imperative form.
- Monitor capitalization for emphasis. Avoid using all caps, italics, or bold for emphasis.
- Ensure proper nouns are capitalized in sentences.
- Apply the Oxford comma.
- Use proper title case for buttons, tab names, page names, and links. Sentence case should be used for body content and short phrases, even in links.
- Use correct spelling and grammar at all times (IMPORTANT).
- For H1, H2, and H3 headers:
- Use sentence case, capitalizing only the first word.
- Preserve the capitalization of proper nouns, technical terms, and acronyms as defined in the 'nouns.txt' file located in the root directory of the project.
- Do not automatically lowercase words that appear in the 'nouns.txt' file, regardless of their position in the header.
- Flag any headers that seem to inconsistently apply these rules for manual review.
- When reviewing capitalization, always refer to the 'nouns.txt' file for the correct capitalization of proper nouns and technical terms specific to the project.
"
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
🪛 LanguageTool
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
[formatting] ~43-~43: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...ere, when we don't have it on most pages, because this tutorial has code that is a lot mo...
(COMMA_BEFORE_BECAUSE)
[style] ~184-~184: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...t we need to create the other three. We have an interesting [chicken-and-egg](h...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~206-~206: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...` ### Deploy ERC7802 contracts We need to replace the ERC20 contracts with contra...
(REP_NEED_TO_VB)
[typographical] ~210-~210: Consider adding a comma after ‘Normally’ for more clarity.
Context: ... address to mint and burn tokens. Normally this is `PredeployAddresses.SUPERCHAIN_...
(RB_LY_COMMA)
[formatting] ~282-~282: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...dress, or the chain ID on the other side, because they are hardwired in this bridge. ...
(COMMA_BEFORE_BECAUSE)
[grammar] ~338-~338: Two determiners in a row. Choose either “The” or “A”.
Context: ... ``` 4. See the new balances. The A chain should have 0.9 tokens, and the B...
(DT_DT)
🪛 Gitleaks (8.21.2)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
132-132: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
215-215: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
⏰ Context from checks skipped due to timeout of 90000ms (3)
- GitHub Check: Redirect rules - docs-optimism
- GitHub Check: Header rules - docs-optimism
- GitHub Check: Pages changed - docs-optimism
🔇 Additional comments (2)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx (2)
1-9
: Frontmatter is complete and valid
All required metadata fields (title
,lang
,description
,topic
,personas
,categories
,content_type
) are present and non-empty.
11-12
: Import statement
The importedSteps
,Callout
, andTabs
components fromnextra/components
are used appropriately.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks really good! Pushed up a small fix and made some suggestions
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
Outdated
Show resolved
Hide resolved
Co-authored-by: Bradley Camacho <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 5
🧹 Nitpick comments (3)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx (3)
185-185
: Fix subject‑verb agreement
The compound subject “bridge and ERC20 code” should take the plural verb “need.”Diff:
- However, the bridge and ERC20 code needs to have the proxy addresses. + However, the bridge and ERC20 code need to have the proxy addresses.
281-283
: Remove comma before “because”
Per style guidelines, drop the comma before a necessary “because” clause.Diff:
- We don't need to specify the token address, or the chain ID on the other side, because they are hardwired in this bridge. + We don't need to specify the token address or the chain ID on the other side because they are hardwired in this bridge.🧰 Tools
🪛 LanguageTool
[formatting] ~282-~282: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...dress, or the chain ID on the other side, because they are hardwired in this bridge. ...(COMMA_BEFORE_BECAUSE)
132-132
: Use a placeholder for private keys
Replace the hard‑coded example key with a clear placeholder to avoid confusion.Diff:
- PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 + PRIVATE_KEY=<YOUR_PRIVATE_KEY>🧰 Tools
🪛 Gitleaks (8.21.2)
132-132: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
(1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`**/*.mdx`: "ALWAYS review Markdown content THOROUGHLY with the following criteria: - First, check the frontmatter section at the top of the file: 1. For regular pages, ensure AL...
**/*.mdx
: "ALWAYS review Markdown content THOROUGHLY with the following criteria:
- First, check the frontmatter section at the top of the file:
- For regular pages, ensure ALL these fields are present and not empty:
--- title: [non-empty] lang: [non-empty] description: [non-empty] topic: [non-empty] personas: [non-empty array] categories: [non-empty array] content_type: [valid type] ---
- For landing pages (index.mdx or files with ), only these fields are required:
--- title: [non-empty] lang: [non-empty] description: [non-empty] topic: [non-empty] ---
- If any required fields are missing or empty, comment:
'This file appears to be missing required metadata. Please check keywords.config.yaml for valid options and add the required fields manually. You can validate your changes by running:pnpm validate-metadata ```'
- Use proper nouns in place of personal pronouns like 'We' and 'Our' to maintain consistency in communal documentation.
- Avoid gender-specific language and use the imperative form.
- Monitor capitalization for emphasis. Avoid using all caps, italics, or bold for emphasis.
- Ensure proper nouns are capitalized in sentences.
- Apply the Oxford comma.
- Use proper title case for buttons, tab names, page names, and links. Sentence case should be used for body content and short phrases, even in links.
- Use correct spelling and grammar at all times (IMPORTANT).
- For H1, H2, and H3 headers:
- Use sentence case, capitalizing only the first word.
- Preserve the capitalization of proper nouns, technical terms, and acronyms as defined in the 'nouns.txt' file located in the root directory of the project.
- Do not automatically lowercase words that appear in the 'nouns.txt' file, regardless of their position in the header.
- Flag any headers that seem to inconsistently apply these rules for manual review.
- When reviewing capitalization, always refer to the 'nouns.txt' file for the correct capitalization of proper nouns and technical terms specific to the project.
"
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
🪛 LanguageTool
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
[formatting] ~43-~43: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...ere, when we don't have it on most pages, because this tutorial has code that is a lot mo...
(COMMA_BEFORE_BECAUSE)
[uncategorized] ~168-~168: This verb may not be in the correct tense. Consider changing the tense to fit the context better.
Context: ...` ### Create a Foundry project We create a [Foundry](https://book.getfoundry.sh/...
(AI_EN_LECTOR_REPLACEMENT_VERB_TENSE)
[uncategorized] ~168-~168: This verb may not be in the correct tense. Consider changing the tense to fit the context better.
Context: ...ttps://book.getfoundry.sh/) project and import the [OpenZeppelin](https://www.openzepp...
(AI_EN_LECTOR_REPLACEMENT_VERB_TENSE)
[style] ~184-~184: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...t we need to create the other three. We have an interesting [chicken-and-egg](h...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~206-~206: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...` ### Deploy ERC7802 contracts We need to replace the ERC20 contracts with contra...
(REP_NEED_TO_VB)
[typographical] ~210-~210: Consider adding a comma after ‘Normally’ for more clarity.
Context: ... address to mint and burn tokens. Normally this is `PredeployAddresses.SUPERCHAIN_...
(RB_LY_COMMA)
[formatting] ~282-~282: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...dress, or the chain ID on the other side, because they are hardwired in this bridge. ...
(COMMA_BEFORE_BECAUSE)
[grammar] ~338-~338: Two determiners in a row. Choose either “The” or “A”.
Context: ... ``` 4. See the new balances. The A chain should have 0.9 tokens, and the B...
(DT_DT)
🪛 Gitleaks (8.21.2)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
132-132: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
215-215: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
⏰ Context from checks skipped due to timeout of 90000ms (3)
- GitHub Check: Redirect rules - docs-optimism
- GitHub Check: Header rules - docs-optimism
- GitHub Check: Pages changed - docs-optimism
🔇 Additional comments (1)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx (1)
1-9
: Frontmatter metadata completeness
All required frontmatter fields (title
,lang
,description
,topic
,personas
,categories
,content_type
) are present and non-empty.
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
Outdated
Show resolved
Hide resolved
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
Outdated
Show resolved
Hide resolved
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
Outdated
Show resolved
Hide resolved
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
Outdated
Show resolved
Hide resolved
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (3)
public/tutorials/setup-for-erc20-upgrade.sh (3)
1-5
: Add strict error handling and normalize the shell interpreter
It’s best practice to fail fast and avoid subtle bugs by enabling strict mode and using a consistent shell. Consider switching to Bash with#!/usr/bin/env bash
(if you rely onpipefail
) and addingset -euo pipefail
(or at leastset -e
for POSIX).-#! /bin/sh +#!/usr/bin/env bash +set -euo pipefail # Exit on error, unset variable, or failed pipe rm -rf upgrade-erc20 || { echo "Failed to remove directory"; exit 1; } mkdir upgrade-erc20 || { echo "Failed to create directory"; exit 1; } cd upgrade-erc20 || { echo "Failed to change directory"; exit 1; }
21-21
: Remove or use the derived user address
USER_ADDRESS=$(cast wallet address --private-key "$PRIVATE_KEY")
is never consumed later (SC2034). Remove it if not needed, or export/print it for downstream steps.🧰 Tools
🪛 Shellcheck (0.10.0)
[warning] 21-21: USER_ADDRESS appears unused. Verify use (or export if used externally).
(SC2034)
70-73
: Simplify address extraction & modernize subshell syntax
Backticks are deprecated—use$( … )
. You can also target the exact log prefix for clarity. For example:-BEACON_ADDRESS=`cat setup_output | awk '/Beacon:/ {print $2}'` -ERC20_ADDRESS=`cat setup_output | awk '/Proxy:/ {print $2}'` +BEACON_ADDRESS=$(awk '/UpgradeableBeacon:/ {print $2}' setup_output) +ERC20_ADDRESS=$(awk '/Proxy:/ {print $2}' setup_output)This reduces unnecessary
cat
and tightens your grep patterns.
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
public/tutorials/CustomBridge.sol
(1 hunks)public/tutorials/setup-for-erc20-upgrade.sh
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- public/tutorials/CustomBridge.sol
🧰 Additional context used
🪛 Gitleaks (8.21.2)
public/tutorials/setup-for-erc20-upgrade.sh
11-11: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
🪛 Shellcheck (0.10.0)
public/tutorials/setup-for-erc20-upgrade.sh
[warning] 18-18: URL_CHAIN_B appears unused. Verify use (or export if used externally).
(SC2034)
[warning] 21-21: USER_ADDRESS appears unused. Verify use (or export if used externally).
(SC2034)
⏰ Context from checks skipped due to timeout of 90000ms (3)
- GitHub Check: Redirect rules - docs-optimism
- GitHub Check: Header rules - docs-optimism
- GitHub Check: Pages changed - docs-optimism
🔇 Additional comments (3)
public/tutorials/setup-for-erc20-upgrade.sh (3)
23-24
: Initialization commands look good
forge init
andforge install OpenZeppelin/openzeppelin-contracts-upgradeable
correctly scaffold the project and pull in the upgradeable contracts.
26-68
: Verify generated Solidity imports and paths
The heredoc generatesLabSetup.s.sol
with imports fromlib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/...
. Please confirm these paths match the layout produced byforge install
. If the beacon/proxy contracts live undercontracts/
, the import might need to be:import {UpgradeableBeacon} from "openzeppelin-contracts-upgradeable/contracts/proxy/beacon/UpgradeableBeacon.sol"; import {BeaconProxy} from "openzeppelin-contracts-upgradeable/contracts/proxy/beacon/BeaconProxy.sol";This will prevent compilation errors at
forge script
.
75-78
: Echo configuration commands
The finalecho
statements correctly instruct the user how to export the deployed addresses. No changes needed here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
♻️ Duplicate comments (4)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx (4)
34-39
: Remove italic emphasis in callout
Per style guidelines, avoid italics for emphasis. Convert*not*
to plain text.<Callout type="warning"> - The code on the documentation site is sample code, *not* production code. + The code on the documentation site is sample code, not production code.
98-98
: Correct verb form in heading
Use “Set up” instead of “Setup” in the heading.- ### Setup the ERC20 token on chain A + ### Set up the ERC20 token on chain A
166-169
: Avoid first‑person plural in tutorial steps
Line 168 uses “We create…”. Convert to imperative:- We create a [Foundry](https://book.getfoundry.sh/) project and import the [OpenZeppelin](https://www.openzeppelin.com/solidity-contracts) contracts… + Create a [Foundry](https://book.getfoundry.sh/) project and import the [OpenZeppelin](https://www.openzeppelin.com/solidity-contracts) contracts…🧰 Tools
🪛 LanguageTool
[uncategorized] ~168-~168: This verb may not be in the correct tense. Consider changing the tense to fit the context better.
Context: ...` ### Create a Foundry project We create a [Foundry](https://book.getfoundry.sh/...(AI_EN_LECTOR_REPLACEMENT_VERB_TENSE)
[uncategorized] ~168-~168: This verb may not be in the correct tense. Consider changing the tense to fit the context better.
Context: ...ttps://book.getfoundry.sh/) project and import the [OpenZeppelin](https://www.openzepp...(AI_EN_LECTOR_REPLACEMENT_VERB_TENSE)
206-210
: Streamline ERC7802 contract replacement instruction
Line 206 starts with “We need to replace…”. Use imperative and fix comma after “Normally”:- We need to replace the ERC20 contracts with contracts that: + Replace the ERC20 contracts with versions that: ... - Normally this is `PredeployAddresses.SUPERCHAIN_TOKEN_BRIDGE`, but in our case it would be the bridge proxy address, which we'll store in `bridgeAddress`. + Normally, this is `PredeployAddresses.SUPERCHAIN_TOKEN_BRIDGE`, but in this scenario it is the bridge proxy address stored in `bridgeAddress`.🧰 Tools
🪛 LanguageTool
[style] ~206-~206: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...` ### Deploy ERC7802 contracts We need to replace the ERC20 contracts with contra...(REP_NEED_TO_VB)
[typographical] ~210-~210: Consider adding a comma after ‘Normally’ for more clarity.
Context: ... address to mint and burn tokens. Normally this is `PredeployAddresses.SUPERCHAIN_...(RB_LY_COMMA)
🧹 Nitpick comments (10)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx (10)
15-20
: Avoid personal pronouns in explanatory text
Line 19 uses “we can still use interop…”; switch to direct imperative or third‑person to maintain consistency. For example:- However, if the original ERC20 contract is behind a proxy (so we can add [ERC7802] support), we can still use interop by writing our own bridge. + However, when the original ERC20 contract is behind a proxy (enabling [ERC7802] support), you can still leverage interop by writing a custom bridge.
21-32
: Prefer avoiding contractions
Line 26 uses “you'll”. For clarity and formality in documentation, expand to “you will”:- **What you'll learn** + **What you will learn**
83-84
: Eliminate “you want” phrasing
Avoid second‑person phrasing. For instance:- Some steps depend on whether you want to deploy on [Supersim](/interop/tools/supersim) or on the [development network](/interop/tools/devnet). + Some steps depend on whether the target environment is [Supersim](/interop/tools/supersim) or the [development network](/interop/tools/devnet).
88-94
: Use imperative mood for instructions
Line 88 starts with “If you are going to use Supersim…”. Convert to direct instruction:- If you are going to use Supersim, follow these instructions to install and run Supersim. + To use Supersim, follow these instructions to install and run it:
90-96
: Refine callout phrasing
Line 91 could be more direct:- Make sure to run Supersim with autorelay on. + Ensure Supersim is run with `--interop.autorelay true`.
108-112
: Avoid “you want” and personal pronouns
Line 108 uses “If you want to deploy…”. Change to imperative:- If you want to deploy to the [development networks](/interop/tools/devnet), provide `setup-for-erc20-upgrade.sh` with the private key… + To deploy to the [development networks](/interop/tools/devnet), provide `setup-for-erc20-upgrade.sh` with the private key…
125-126
: Remove “we” from usage description
Line 125:- Specify these variables, which we use later: + Specify these variables for later use:
181-184
: Use imperative and remove pronouns
Lines 181–182 use “We need” and “We already have”. Suggest:- We need two contracts on each chain: an ERC20 and a bridge, and to enable future upgrades, we want to install each of those contracts behind a proxy. - We already have one contract, the ERC20 on chain A, but we need to create the other three. + Deploy two contracts on each chain—an ERC20 and a bridge—behind beacon proxies for future upgrades. One ERC20 on chain A already exists; create the other three.🧰 Tools
🪛 LanguageTool
[style] ~184-~184: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...t we need to create the other three. We have an interesting [chicken-and-egg](h...(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
282-282
: Avoid pronouns and refine comma before “because”
Line 282 could be clearer:- We don't need to specify the token address, or the chain ID on the other side, because they are hardwired in this bridge. + The token address and the chain ID on the other side are hardwired in this bridge.🧰 Tools
🪛 LanguageTool
[formatting] ~282-~282: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...dress, or the chain ID on the other side, because they are hardwired in this bridge. ...(COMMA_BEFORE_BECAUSE)
338-338
: Fix redundant determiner in verification text
Convert “The A chain” to “Chain A” for clarity:- The A chain should have 0.9 tokens, and the B chain should have 0.1 tokens. + Chain A should have 0.9 tokens, and Chain B should have 0.1 tokens.🧰 Tools
🪛 LanguageTool
[grammar] ~338-~338: Two determiners in a row. Choose either “The” or “A”.
Context: ... ``` 4. See the new balances. The A chain should have 0.9 tokens, and the B...(DT_DT)
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
(1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`**/*.mdx`: "ALWAYS review Markdown content THOROUGHLY with the following criteria: - First, check the frontmatter section at the top of the file: 1. For regular pages, ensure AL...
**/*.mdx
: "ALWAYS review Markdown content THOROUGHLY with the following criteria:
- First, check the frontmatter section at the top of the file:
- For regular pages, ensure ALL these fields are present and not empty:
--- title: [non-empty] lang: [non-empty] description: [non-empty] topic: [non-empty] personas: [non-empty array] categories: [non-empty array] content_type: [valid type] ---
- For landing pages (index.mdx or files with ), only these fields are required:
--- title: [non-empty] lang: [non-empty] description: [non-empty] topic: [non-empty] ---
- If any required fields are missing or empty, comment:
'This file appears to be missing required metadata. Please check keywords.config.yaml for valid options and add the required fields manually. You can validate your changes by running:pnpm validate-metadata ```'
- Use proper nouns in place of personal pronouns like 'We' and 'Our' to maintain consistency in communal documentation.
- Avoid gender-specific language and use the imperative form.
- Monitor capitalization for emphasis. Avoid using all caps, italics, or bold for emphasis.
- Ensure proper nouns are capitalized in sentences.
- Apply the Oxford comma.
- Use proper title case for buttons, tab names, page names, and links. Sentence case should be used for body content and short phrases, even in links.
- Use correct spelling and grammar at all times (IMPORTANT).
- For H1, H2, and H3 headers:
- Use sentence case, capitalizing only the first word.
- Preserve the capitalization of proper nouns, technical terms, and acronyms as defined in the 'nouns.txt' file located in the root directory of the project.
- Do not automatically lowercase words that appear in the 'nouns.txt' file, regardless of their position in the header.
- Flag any headers that seem to inconsistently apply these rules for manual review.
- When reviewing capitalization, always refer to the 'nouns.txt' file for the correct capitalization of proper nouns and technical terms specific to the project.
"
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
🪛 LanguageTool
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
[formatting] ~43-~43: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...ere, when we don't have it on most pages, because this tutorial has code that is a lot mo...
(COMMA_BEFORE_BECAUSE)
[uncategorized] ~168-~168: This verb may not be in the correct tense. Consider changing the tense to fit the context better.
Context: ...` ### Create a Foundry project We create a [Foundry](https://book.getfoundry.sh/...
(AI_EN_LECTOR_REPLACEMENT_VERB_TENSE)
[uncategorized] ~168-~168: This verb may not be in the correct tense. Consider changing the tense to fit the context better.
Context: ...ttps://book.getfoundry.sh/) project and import the [OpenZeppelin](https://www.openzepp...
(AI_EN_LECTOR_REPLACEMENT_VERB_TENSE)
[style] ~184-~184: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...t we need to create the other three. We have an interesting [chicken-and-egg](h...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~206-~206: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...` ### Deploy ERC7802 contracts We need to replace the ERC20 contracts with contra...
(REP_NEED_TO_VB)
[typographical] ~210-~210: Consider adding a comma after ‘Normally’ for more clarity.
Context: ... address to mint and burn tokens. Normally this is `PredeployAddresses.SUPERCHAIN_...
(RB_LY_COMMA)
[formatting] ~282-~282: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...dress, or the chain ID on the other side, because they are hardwired in this bridge. ...
(COMMA_BEFORE_BECAUSE)
[grammar] ~338-~338: Two determiners in a row. Choose either “The” or “A”.
Context: ... ``` 4. See the new balances. The A chain should have 0.9 tokens, and the B...
(DT_DT)
🪛 Gitleaks (8.21.2)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
132-132: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
215-215: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
⏰ Context from checks skipped due to timeout of 90000ms (3)
- GitHub Check: Redirect rules - docs-optimism
- GitHub Check: Header rules - docs-optimism
- GitHub Check: Pages changed - docs-optimism
🔇 Additional comments (4)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx (4)
1-9
: Frontmatter completeness check
All required metadata fields are present (title
,lang
,description
,topic
,personas
,categories
,content_type
) and non-empty.
11-12
: Imports look correct
The MDX imports fromnextra/components
are necessary for the UI elements used below.
13-13
: Heading style
The H1Building a custom bridge
uses sentence case and is appropriately capitalized.
49-50
: Section header check
The H2How beacon proxies work
follows sentence case and is appropriate.
…dge.mdx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
…dge.mdx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
…dge.mdx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
…dge.mdx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (4)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx (4)
17-20
: Avoid personal pronouns; use a direct instruction
Replace “we can still use interop by writing our own bridge” with a declarative or imperative phrasing. For example:- However, if the original ERC20 contract is behind a proxy (so we can add ERC7802 support), we can still use interop by writing our own bridge. + However, if the original ERC20 contract is behind a proxy (so it supports ERC7802), write a custom bridge to enable interoperability.
36-36
: Avoid personal pronouns in callouts
To maintain an impersonal tone, rephrase “we ran it” in the warning callout. For example:- This means that we ran it, and it works as advertised. + This means that it has been run and works as advertised.
209-210
: Add comma after introductory adverb
For clarity, insert a comma after “Normally”:- Normally this is `PredeployAddresses.SUPERCHAIN_TOKEN_BRIDGE`, but in our case it would be the bridge proxy address... + Normally, this is `PredeployAddresses.SUPERCHAIN_TOKEN_BRIDGE`, but in our case it is the bridge proxy address...🧰 Tools
🪛 LanguageTool
[typographical] ~210-~210: Consider adding a comma after ‘Normally’ for more clarity.
Context: ... address to mint and burn tokens. Normally this is `PredeployAddresses.SUPERCHAIN_...(RB_LY_COMMA)
336-336
: Improve determiners for clarity
Avoid the double-determiner construction “The A chain” / “the B chain.” Use “Chain A” and “Chain B” instead:- The A chain should have 0.9 tokens, and the B chain should have 0.1 tokens. + Chain A should have 0.9 tokens, and Chain B should have 0.1 tokens.🧰 Tools
🪛 LanguageTool
[grammar] ~336-~336: Two determiners in a row. Choose either “The” or “A”.
Context: ... ``` 4. See the new balances. The A chain should have 0.9 tokens, and the B...(DT_DT)
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
(1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`**/*.mdx`: "ALWAYS review Markdown content THOROUGHLY with the following criteria: - First, check the frontmatter section at the top of the file: 1. For regular pages, ensure AL...
**/*.mdx
: "ALWAYS review Markdown content THOROUGHLY with the following criteria:
- First, check the frontmatter section at the top of the file:
- For regular pages, ensure ALL these fields are present and not empty:
--- title: [non-empty] lang: [non-empty] description: [non-empty] topic: [non-empty] personas: [non-empty array] categories: [non-empty array] content_type: [valid type] ---
- For landing pages (index.mdx or files with ), only these fields are required:
--- title: [non-empty] lang: [non-empty] description: [non-empty] topic: [non-empty] ---
- If any required fields are missing or empty, comment:
'This file appears to be missing required metadata. Please check keywords.config.yaml for valid options and add the required fields manually. You can validate your changes by running:pnpm validate-metadata ```'
- Use proper nouns in place of personal pronouns like 'We' and 'Our' to maintain consistency in communal documentation.
- Avoid gender-specific language and use the imperative form.
- Monitor capitalization for emphasis. Avoid using all caps, italics, or bold for emphasis.
- Ensure proper nouns are capitalized in sentences.
- Apply the Oxford comma.
- Use proper title case for buttons, tab names, page names, and links. Sentence case should be used for body content and short phrases, even in links.
- Use correct spelling and grammar at all times (IMPORTANT).
- For H1, H2, and H3 headers:
- Use sentence case, capitalizing only the first word.
- Preserve the capitalization of proper nouns, technical terms, and acronyms as defined in the 'nouns.txt' file located in the root directory of the project.
- Do not automatically lowercase words that appear in the 'nouns.txt' file, regardless of their position in the header.
- Flag any headers that seem to inconsistently apply these rules for manual review.
- When reviewing capitalization, always refer to the 'nouns.txt' file for the correct capitalization of proper nouns and technical terms specific to the project.
"
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
🧠 Learnings (1)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx (1)
Learnt from: qbzzt
PR: ethereum-optimism/docs#1574
File: pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx:34-38
Timestamp: 2025-04-21T17:52:52.231Z
Learning: In warning callouts about sample code vs. production code, emphasis (italics) on the word "not" is intentionally used to highlight this important distinction, especially when advising users about code that works but hasn't been through rigorous audits.
🪛 LanguageTool
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
[formatting] ~43-~43: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...ere, when we don't have it on most pages, because this tutorial has code that is a lot mo...
(COMMA_BEFORE_BECAUSE)
[typographical] ~210-~210: Consider adding a comma after ‘Normally’ for more clarity.
Context: ... address to mint and burn tokens. Normally this is `PredeployAddresses.SUPERCHAIN_...
(RB_LY_COMMA)
[grammar] ~336-~336: Two determiners in a row. Choose either “The” or “A”.
Context: ... ``` 4. See the new balances. The A chain should have 0.9 tokens, and the B...
(DT_DT)
🪛 Gitleaks (8.21.2)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
132-132: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
215-215: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
⏰ Context from checks skipped due to timeout of 90000ms (4)
- GitHub Check: Redirect rules - docs-optimism
- GitHub Check: Header rules - docs-optimism
- GitHub Check: Pages changed - docs-optimism
- GitHub Check: pr-workflow
🔇 Additional comments (1)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx (1)
1-9
: Frontmatter metadata validation
All required frontmatter fields are present (title, lang, description, topic, personas, categories, content_type) and non-empty, matching the project’s documentation guidelines.
We need two contracts on each chain: an ERC20 and a bridge, and to enable future upgrades, we want to install each of those contracts behind a proxy. | ||
You already have one contract—the ERC20 on chain A—but need to create the other three. | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Use imperative form; remove “We need”
Change the explanatory sentence into a direct instruction. For example:
- We need two contracts on each chain: an ERC20 and a bridge, and to enable future upgrades, we want to install each of those contracts behind a proxy.
+ Deploy two contracts on each chain—a token contract and a bridge—each installed behind an upgradeable proxy.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
We need two contracts on each chain: an ERC20 and a bridge, and to enable future upgrades, we want to install each of those contracts behind a proxy. | |
You already have one contract—the ERC20 on chain A—but need to create the other three. | |
Deploy two contracts on each chain—a token contract and a bridge—each installed behind an upgradeable proxy. | |
You already have one contract—the ERC20 on chain A—but need to create the other three. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (4)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx (4)
19-20
: Avoid first-person pronouns in prose
Refactor the sentence to remove “we” and shift to neutral or imperative tone. For example:- However, if the original ERC20 contract is behind a proxy (so we can add ERC7802 support), we can still use interop by writing our own bridge. + However, if the original ERC20 contract is behind a proxy (to add ERC7802 support), it's still possible to enable interoperability by writing a custom bridge.
181-183
: Use imperative tone and remove personal pronouns
Change from “We need … we want” to direct instructions. For example:- We need two contracts on each chain: an ERC20 and a bridge, and to enable future upgrades, we want to install each of those contracts behind a proxy. + Deploy two contracts on each chain—a token contract and a bridge—each installed behind an upgradeable proxy to support future upgrades.
210-210
: Add missing comma for introductory adverb
Insert a comma after “Normally” for improved readability:- * Normally this is `PredeployAddresses.SUPERCHAIN_TOKEN_BRIDGE`, but in our case it would be the bridge proxy address... + * Normally, this is `PredeployAddresses.SUPERCHAIN_TOKEN_BRIDGE`, but in our case it would be the bridge proxy address...🧰 Tools
🪛 LanguageTool
[typographical] ~210-~210: Consider adding a comma after ‘Normally’ for more clarity.
Context: ... address to mint and burn tokens. Normally this is `PredeployAddresses.SUPERCHAIN_...(RB_LY_COMMA)
336-336
: Simplify chain reference and remove double determiners
Replace “The A chain” and “the B chain” with “Chain A” and “Chain B” for clarity:- 4. See the new balances. The A chain should have 0.9 tokens, and the B chain should have 0.1 tokens. + 4. See the new balances. Chain A should have 0.9 tokens, and Chain B should have 0.1 tokens.🧰 Tools
🪛 LanguageTool
[grammar] ~336-~336: Two determiners in a row. Choose either “The” or “A”.
Context: ... ``` 4. See the new balances. The A chain should have 0.9 tokens, and the B...(DT_DT)
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
(1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
`**/*.mdx`: "ALWAYS review Markdown content THOROUGHLY with the following criteria: - First, check the frontmatter section at the top of the file: 1. For regular pages, ensure AL...
**/*.mdx
: "ALWAYS review Markdown content THOROUGHLY with the following criteria:
- First, check the frontmatter section at the top of the file:
- For regular pages, ensure ALL these fields are present and not empty:
--- title: [non-empty] lang: [non-empty] description: [non-empty] topic: [non-empty] personas: [non-empty array] categories: [non-empty array] content_type: [valid type] ---
- For landing pages (index.mdx or files with ), only these fields are required:
--- title: [non-empty] lang: [non-empty] description: [non-empty] topic: [non-empty] ---
- If any required fields are missing or empty, comment:
'This file appears to be missing required metadata. Please check keywords.config.yaml for valid options and add the required fields manually. You can validate your changes by running:pnpm validate-metadata ```'
- Use proper nouns in place of personal pronouns like 'We' and 'Our' to maintain consistency in communal documentation.
- Avoid gender-specific language and use the imperative form.
- Monitor capitalization for emphasis. Avoid using all caps, italics, or bold for emphasis.
- Ensure proper nouns are capitalized in sentences.
- Apply the Oxford comma.
- Use proper title case for buttons, tab names, page names, and links. Sentence case should be used for body content and short phrases, even in links.
- Use correct spelling and grammar at all times (IMPORTANT).
- For H1, H2, and H3 headers:
- Use sentence case, capitalizing only the first word.
- Preserve the capitalization of proper nouns, technical terms, and acronyms as defined in the 'nouns.txt' file located in the root directory of the project.
- Do not automatically lowercase words that appear in the 'nouns.txt' file, regardless of their position in the header.
- Flag any headers that seem to inconsistently apply these rules for manual review.
- When reviewing capitalization, always refer to the 'nouns.txt' file for the correct capitalization of proper nouns and technical terms specific to the project.
"
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
🧠 Learnings (1)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx (1)
Learnt from: qbzzt
PR: ethereum-optimism/docs#1574
File: pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx:34-38
Timestamp: 2025-04-21T17:52:52.231Z
Learning: In warning callouts about sample code vs. production code, emphasis (italics) on the word "not" is intentionally used to highlight this important distinction, especially when advising users about code that works but hasn't been through rigorous audits.
🪛 LanguageTool
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
[formatting] ~43-~43: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...ere, when we don't have it on most pages, because this tutorial has code that is a lot mo...
(COMMA_BEFORE_BECAUSE)
[typographical] ~210-~210: Consider adding a comma after ‘Normally’ for more clarity.
Context: ... address to mint and burn tokens. Normally this is `PredeployAddresses.SUPERCHAIN_...
(RB_LY_COMMA)
[grammar] ~336-~336: Two determiners in a row. Choose either “The” or “A”.
Context: ... ``` 4. See the new balances. The A chain should have 0.9 tokens, and the B...
(DT_DT)
🪛 Gitleaks (8.21.2)
pages/interop/tutorials/upgrade-to-superchain-erc20/custom-bridge.mdx
132-132: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
215-215: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
⏰ Context from checks skipped due to timeout of 90000ms (3)
- GitHub Check: Redirect rules - docs-optimism
- GitHub Check: Header rules - docs-optimism
- GitHub Check: Pages changed - docs-optimism
Description
How to make a custom bridge, and how to use that when you can upgrade your ERC-20 but you can't create ERC-20 in the same address elsewhere.
Tests
N/A
Additional context
N/A
Metadata
This should be merged after #1525