Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions foundry.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
"rev": "b8f065fda83b8cd94a6b2fec8fcd911dc3b444fd"
},
"lib/openzeppelin-contracts": {
"rev": "dc44c9f1a4c3b10af99492eed84f83ed244203f6"
"rev": "fcbae5394ae8ad52d8e580a3477db99814b9d565"
},
"lib/rain.math.saturating": {
"rev": "f74ea6977b03f5d905cd8d6be3d68567071ba3d3"
"rev": "22e58d70a223b18d83dfc5529e3ac87aef3ff478"
},
"lib/rain.string": {
"rev": "85d0074c8cd1fdca3285366c15bc9b44b84ad5e9"
"rev": "0b1ca08aed6d9c06b83fe127a7d20ee7002ead28"
}
}
2 changes: 1 addition & 1 deletion foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ solc = "0.8.25"
optimizer = true
optimizer_runs = 100000

evm_version = "paris"
evm_version = "cancun"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

# Check foundry.toml structure and context
cat -n foundry.toml | head -20

Repository: rainlanguage/rain.math.fixedpoint

Length of output: 355


🏁 Script executed:

# Search for submodule references in the codebase
rg "openzeppelin-contracts|rain\.math\.saturating|rain\.string" --type toml --type json -i

Repository: rainlanguage/rain.math.fixedpoint

Length of output: 164


🏁 Script executed:

# Look for .gitmodules to confirm submodules
cat .gitmodules 2>/dev/null || echo "No .gitmodules found"

Repository: rainlanguage/rain.math.fixedpoint

Length of output: 548


🏁 Script executed:

# Check for existing test commands or CI configurations
find . -type f \( -name "*.yml" -o -name "*.yaml" -o -name "Makefile" \) | head -10 | xargs grep -l "forge test" 2>/dev/null || echo "No CI/test configs found with forge test"

Repository: rainlanguage/rain.math.fixedpoint

Length of output: 117


🏁 Script executed:

# Search for any existing EVM version specifications
rg "evm.version|evm-version" -i

Repository: rainlanguage/rain.math.fixedpoint

Length of output: 112


🌐 Web query:

Solidity 0.8.25 default EVM version Cancun

💡 Result:

Yes — Solidity v0.8.25 sets the compiler's default EVM version to "cancun". [1][2]

Note: later releases (e.g., v0.8.30) changed the default EVM version (to "prague"). [3]

Sources:

  • Solidity 0.8.25 release announcement (soliditylang.org). [1]
  • Solidity v0.8.25 GitHub release. [2]
  • Solidity 0.8.30 release announcement (shows default changed to "prague"). [3]

🌐 Web query:

Cancun EVM vs Paris breaking changes opcodes

💡 Result:

Short comparison — Cancun (Dencun-era EVM changes) vs Paris (Merge) — focused on opcode breaking/added changes:

  • Paris (The Merge)

    • Main EVM change: DIFFICULTY opcode removed/repurposed; PREVRANDAO exposed for on‑chain randomness (change tied to Merge/Paris). [1][2]
  • Cancun / Dencun (post‑Shanghai family)

    • New transient-storage opcodes added: TSTORE and TLOAD (EIP‑1153). These are new opcodes (not repurposed existing ones). [3][4]
    • New/auxiliary opcodes used by toolchains/compilers (e.g., MCOPY used by compilers like Vyper targeting the Cancun EVM). [5]
    • Cancun is part of the Dencun stack which also includes proto‑danksharding (EIP‑4844) features; other opcode-level additions from Shanghai (e.g., PUSH0 via EIP‑3855) are separate upgrades in the upgrade sequence and affect what bytecode/new opcodes appear when compiling for later EVM revisions. [3][6]

Notes:

  • Paris was mostly a consensus-layer/EL transition (Merge) with a small, explicit opcode change (DIFFICULTY → PREVRANDAO). Cancun introduced new opcodes (transient storage) rather than changing semantics of widely‑used existing opcodes. [1][3][5]

Sources:
[1] Coinbase explainer (Paris / PREVRANDAO).
[2] Ethereum roadmap / upgrade descriptions (Paris).
[3] Ethereum Execution Spec tests / changelog (Cancun, EIP‑1153 coverage).
[4] @ethereumjs/@evm and EIP listings (EIP‑1153 transient storage).
[5] Vyper release notes (MCOPY usage and Cancun evm target).
[6] Ethereum roadmap (Shanghai / PUSH0 context).


Verify Cancun EVM compatibility testing for submodules.

Solidity 0.8.25 does default to Cancun EVM. The three submodules (openzeppelin-contracts, rain.math.saturating, rain.string) are present in the repository. While the Paris-to-Cancun migration is relatively safe—Cancun introduced new opcodes (TSTORE, TLOAD, MCOPY) without breaking existing opcode semantics—it's appropriate to confirm the submodules and their dependencies compile and behave correctly under the Cancun EVM. Run the test suite with forge test --evm-version cancun -v to verify bytecode generation and contract behavior.


fuzz.runs = 1024

2 changes: 1 addition & 1 deletion lib/openzeppelin-contracts
2 changes: 1 addition & 1 deletion lib/rain.math.saturating
2 changes: 1 addition & 1 deletion lib/rain.string