Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: fe-lang/bountiful
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: master
Choose a base ref
...
head repository: fe-lang/bountiful
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: revamp
Choose a head ref
Checking mergeability… Don’t worry, you can still create the pull request.
  • 19 commits
  • 123 files changed
  • 2 contributors

Commits on Feb 27, 2026

  1. Migrate Bountiful from Fe 0.20.0-alpha to Fe 26.0.0-alpha.8

    Replace the old multi-file ingot structure (13 .fe files) with a single
    bountiful.fe using the new effects-based contract model. The 6 game
    variants and trait system are consolidated into one Game contract due to
    compiler limitations (StorageMap structs can't be passed as values,
    tuple ABI arity cap).
    
    Key changes:
    - Contracts use msg/recv blocks instead of pub fn with Context
    - Storage uses StorageMap effects instead of inline Map fields
    - Cross-contract calls use Call effect instead of stub contracts
    - Board stored in StorageMap<u256,u256> instead of Array<u256,16>
    - Reverts replaced with error code returns
    - 8 Fe-native tests (fe test) replace the old Hardhat test suite
    
    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
    cburgdorf and claude committed Feb 27, 2026
    Configuration menu
    Copy the full SHA
    7e990f2 View commit details
    Browse the repository at this point in the history
  2. Restructure bountiful.fe into multi-file ingot and document Fe compil…

    …er limitations
    
    Split the single bountiful.fe into a proper Fe ingot structure:
    - src/lib.fe: shared error codes, constants, helpers, cross-contract msg interfaces
    - src/game.fe: Game contract (15-puzzle challenge)
    - src/registry.fe: BountyRegistry contract (bounty platform)
    
    The standalone bountiful.fe is kept for running tests (fe test only discovers
    #[test] in the root module, and cross-module contract refs cause an ICE).
    
    Add LIMITATIONS.md documenting 6 Fe compiler limitations for GitHub issues.
    
    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
    cburgdorf and claude committed Feb 27, 2026
    Configuration menu
    Copy the full SHA
    6357b8b View commit details
    Browse the repository at this point in the history
  3. Add 3 new game variants to increase Fe compiler attack surface

    GameBitboard (bitwise u256 board), Game2D (nested 2D arrays),
    and GameEnum (enum/match/struct impl) — exercises distinct Fe
    language features. All 14 tests pass.
    
    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
    cburgdorf and claude committed Feb 27, 2026
    Configuration menu
    Copy the full SHA
    b1ef3b4 View commit details
    Browse the repository at this point in the history
  4. Split bountiful.fe monolith into ingot modules

    Delete the 1093-line monolith and activate the child module files in
    src/. Tests now live in lib.fe and import contracts from child modules
    via `use ingot::*`. All 14 tests pass.
    
    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
    cburgdorf and claude committed Feb 27, 2026
    Configuration menu
    Copy the full SHA
    2a6c5b1 View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    ba61752 View commit details
    Browse the repository at this point in the history
  6. Add comprehensive registry tests and fix admin address bug

    Port 7 new tests from the old JS test suite: non-admin register,
    admin register+check, remove unlocked, remove while locked, claim
    without lock, claim unregistered, claim unsolved.
    
    Fix critical bug: all tests used args: (0,) as admin_inner, but
    ctx.caller() in Fe test EVM is the test contract's address (not
    Address::ZERO). Use evm.address().inner to correctly set admin.
    This also fixes test_full_bounty_flow which was silently a no-op.
    
    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
    cburgdorf and claude committed Feb 27, 2026
    Configuration menu
    Copy the full SHA
    d90016a View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    0ab37c3 View commit details
    Browse the repository at this point in the history
  8. Cleanup Address usage

    cburgdorf committed Feb 27, 2026
    Configuration menu
    Copy the full SHA
    27e7035 View commit details
    Browse the repository at this point in the history
  9. Configuration menu
    Copy the full SHA
    b83ba45 View commit details
    Browse the repository at this point in the history
  10. Remove test_winning_value workaround from lib.fe

    The workaround test was needed because the Fe test runner only checked
    lib.fe for #[test] functions. This has been fixed upstream, so the
    workaround can be removed.
    
    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
    cburgdorf and claude committed Feb 27, 2026
    Configuration menu
    Copy the full SHA
    2663fc7 View commit details
    Browse the repository at this point in the history
  11. User proper selectors

    cburgdorf committed Feb 27, 2026
    Configuration menu
    Copy the full SHA
    c88d825 View commit details
    Browse the repository at this point in the history

Commits on Feb 28, 2026

  1. Split bountiful into a workspace with 3 ingots

    Restructure the flat single-ingot project into a workspace with
    dedicated ingots for better separation of concerns:
    
      shared   — error codes, constants, cross-contract msg interfaces,
                 game_util helpers, DummyLockValidator test utility
      registry — BountyRegistry contract, DummyGame test utility
      games    — Game, Game2D, GameBitboard, GameEnum contracts
    
    Dependency graph (no cycles):
      shared ← registry
      shared ← games
    
    DummyLockValidator lives in shared (not games) so both registry and
    games tests can deploy it without creating a circular dependency.
    DummyGame in registry replaces the real Game contract in registry tests,
    eliminating the games→registry→games cycle.
    
    All 26 tests pass (shared: 1, registry: 14, games: 11).
    
    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
    cburgdorf and claude committed Feb 28, 2026
    Configuration menu
    Copy the full SHA
    5100ea6 View commit details
    Browse the repository at this point in the history
  2. Add Foundry e2e tests for BountyRegistry and Game contracts

    Migrate e2e testing from Hardhat to Foundry to cover scenarios Fe's
    test runner cannot: block advancement (vm.roll), ETH value transfers,
    and multi-account authorization (vm.prank). 21 tests across two suites.
    
    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
    cburgdorf and claude committed Feb 28, 2026
    Configuration menu
    Copy the full SHA
    6631f5d View commit details
    Browse the repository at this point in the history
  3. Add Foundry deployment script for Sepolia

    Deploys BountyRegistry + Game, registers the game as a challenge, and
    initializes a solvable 15-puzzle board. Configurable lock deposit via
    LOCK_DEPOSIT env var (default 0.01 ETH).
    
    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
    cburgdorf and claude committed Feb 28, 2026
    Configuration menu
    Copy the full SHA
    9a21a0e View commit details
    Browse the repository at this point in the history
  4. Replace ERR_* constants with Error enum and sequential codes

    Introduce a shared Error enum with to_int() for type-safe,
    sequential error codes (1-8) instead of scattered constants
    with gaps. Update all contracts and Foundry test constants.
    
    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
    cburgdorf and claude committed Feb 28, 2026
    Configuration menu
    Copy the full SHA
    72b971b View commit details
    Browse the repository at this point in the history
  5. Remove old Hardhat setup and JS tests

    Drop hardhat.config.js, package.json, old JS test files, and Hardhat
    deployment scripts. Update .gitignore for Foundry build artifacts.
    
    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
    cburgdorf and claude committed Feb 28, 2026
    Configuration menu
    Copy the full SHA
    d4eb1bd View commit details
    Browse the repository at this point in the history
  6. Replace IGame with ISolvable as the only shared interface

    IGame pretended to be universal but didn't match all game variants
    (game_2d has a different getBoard signature). The registry only needs
    isSolved(), so that's the shared interface now. Tests and deploy script
    define their own local IGame for variant-specific methods.
    
    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
    cburgdorf and claude committed Feb 28, 2026
    Configuration menu
    Copy the full SHA
    4398e39 View commit details
    Browse the repository at this point in the history
  7. Use bool return types for IsSolved, IsLocked, and IsOpenChallenge

    These APIs answer yes/no questions and should return bool instead of
    u256. Also changes open_challenges map to StorageMap<Address, bool>.
    
    Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
    cburgdorf and claude committed Feb 28, 2026
    Configuration menu
    Copy the full SHA
    057106a View commit details
    Browse the repository at this point in the history

Commits on Mar 1, 2026

  1. Configuration menu
    Copy the full SHA
    3fc668b View commit details
    Browse the repository at this point in the history
Loading