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
17 changes: 17 additions & 0 deletions crates/optimism/tests/proofs/contracts/src/MultiStorage.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract MultiStorage {
uint256 public slotA;
uint256 public slotB;
address public owner;

constructor() {
owner = msg.sender;
}

function setValues(uint256 _a, uint256 _b) external {
slotA = _a;
slotB = _b;
}
}
55 changes: 55 additions & 0 deletions crates/optimism/tests/proofs/contracts/src/TokenVault.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/// @title TokenVault - realistic contract for eth_getProof testing
/// @notice Demonstrates mappings, nested mappings, and dynamic arrays
contract TokenVault {
struct Allowance {
uint256 amount;
bool active;
}

// Mapping: user => balance
mapping(address => uint256) public balances;

// Nested Mapping: owner => spender => allowance info
mapping(address => mapping(address => Allowance)) public allowances;

// Dynamic array: list of all depositors
address[] public depositors;

constructor() {
// initialize contract with a few entries
address alice = address(0xA11CE);
address bob = address(0xB0B);

balances[alice] = 1000;
balances[bob] = 2000;

allowances[alice][bob] = Allowance({amount: 300, active: true});
allowances[bob][alice] = Allowance({amount: 150, active: false});

depositors.push(alice);
depositors.push(bob);
}

function deposit() external payable {
balances[msg.sender] += msg.value;
depositors.push(msg.sender);
}

function approve(address spender, uint256 amount) external {
allowances[msg.sender][spender] = Allowance({
amount: amount,
active: true
});
}

function deactivateAllowance(address spender) external {
allowances[msg.sender][spender].active = false;
}

function getDepositors() external view returns (address[] memory) {
return depositors;
}
}
Loading
Loading