Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
290 commits
Select commit Hold shift + click to select a range
73ba95b
Reject a zero P256 owner key on both deploy paths
ManulParihar Jul 30, 2026
59ab940
Replace the two tautological key guards in preCreateAccountValidation
ManulParihar Jul 30, 2026
2599a02
Cover the zero owner key rejection on all three entry points
ManulParihar Jul 30, 2026
1ce64e3
Lock the four UUPS implementations against direct initialization
ManulParihar Jul 30, 2026
339fbf9
Cover the implementation initializer lock on all four UUPS contracts
ManulParihar Jul 30, 2026
4b4868e
Reject ownership renouncement on every Ownable contract
ManulParihar Jul 30, 2026
d3b0e1f
Cover the renouncement guard on all five Ownable contracts
ManulParihar Jul 30, 2026
1df2263
Emit OwnershipTransferred once per eSIM wallet transfer
ManulParihar Jul 30, 2026
43bdcd0
Pin the OwnershipTransferred emission count to one
ManulParihar Jul 30, 2026
8290290
Refuse an eSIM identifier switch once either wallet is deployed
ManulParihar Jul 30, 2026
e748867
Cover both deployed-device cases for the identifier switch
ManulParihar Jul 30, 2026
9f4233a
Reject a zero factory address in the registry initializer
ManulParihar Jul 30, 2026
2f105d5
Cover both zero factory cases in the registry initializer
ManulParihar Jul 30, 2026
9d767cc
Drop the unused verifier argument from the registry initializer
ManulParihar Jul 30, 2026
d4ed935
Restrict a device wallet to deploying eSIM wallets for itself
ManulParihar Jul 30, 2026
bb1b2d5
Cover the deploy-for-self restriction and the salt derivation
ManulParihar Jul 30, 2026
a31464e
Pin the challenge read to the challenge key and bound the indices
ManulParihar Jul 30, 2026
73621d8
Cover the challenge key check and the three panic paths
ManulParihar Jul 30, 2026
33e326b
Require the device wallet owner key to be a point on the P256 curve
ManulParihar Jul 30, 2026
051b2cd
Cover off-curve and out-of-field owner keys on all three deploy paths
ManulParihar Jul 30, 2026
1f50642
Clear the eSIM wallet bindings before calling back into it on removal
ManulParihar Jul 30, 2026
4ad9cb4
Cover the reentrant removal callback
ManulParihar Jul 30, 2026
c3f6da6
Let an eSIM wallet remove only itself
ManulParihar Jul 30, 2026
9dd5d67
Cover a sibling attempting a removal
ManulParihar Jul 30, 2026
eafa457
Move the account-abstraction dependency to EntryPoint v0.8
ManulParihar Jul 30, 2026
5554279
Refuse to re-register a device identifier or owner key
ManulParihar Jul 30, 2026
92001e4
Cover a second wallet claiming a taken identifier or key
ManulParihar Jul 30, 2026
4251c9e
Fail a short user operation instead of naming a bad aggregator
ManulParihar Jul 30, 2026
4313d2b
Cover a user operation with a signature too short to parse
ManulParihar Jul 30, 2026
5ac7e8e
Sign WebAuthn assertions during the test instead of replaying one
ManulParihar Jul 30, 2026
86c2376
Bind the expiry, chain and wallet into the ERC-1271 challenge
ManulParihar Jul 31, 2026
264e3b8
Cover a rewritten expiry and a sibling wallet on the ERC-1271 path
ManulParihar Jul 31, 2026
c5ddd2a
Validate operations in the mock entry point instead of emitting an event
ManulParihar Jul 31, 2026
c9cca07
Drop the commented user operation scratch block
ManulParihar Jul 31, 2026
80e26f7
Run a user operation against the deployed entry point on both chains
ManulParihar Jul 31, 2026
f82a406
Pin the storage slot of every variable behind a proxy
ManulParihar Jul 31, 2026
6a6769d
Record where a new state variable would move live storage
ManulParihar Jul 31, 2026
5726a89
Name the salt when an eSIM wallet address is already taken
ManulParihar Jul 31, 2026
6107b5d
Hold the deposit in the mock stake manager
ManulParihar Jul 31, 2026
901b2bd
Drop the empty Registry fuzz placeholder
ManulParihar Jul 31, 2026
6b66bc9
Reject calls naming a function the wallet does not have
ManulParihar Jul 31, 2026
48de406
Delete declarations nothing calls
ManulParihar Jul 31, 2026
ba1eb80
Read the admin from the one place that can rotate it
ManulParihar Jul 31, 2026
63a792a
Warn against the two static analysis suggestions on the retained slot
ManulParihar Jul 31, 2026
0fe291c
Hold the admin address in the registry and nowhere else
ManulParihar Jul 31, 2026
fab1dcc
Send wallet funding to the wallet rather than its entry point deposit
ManulParihar Jul 31, 2026
96f142c
Cover a wallet paying its own prefund with no deposit
ManulParihar Jul 31, 2026
d27b7f5
Move the registry bindings when a device wallet rotates its owner key
ManulParihar Jul 31, 2026
423abdd
Reject an unusable P256 key when a device wallet rotates its owner
ManulParihar Jul 31, 2026
e2b6741
Cap the eSIM identifiers a device can accumulate before deployment
ManulParihar Jul 31, 2026
a172e1a
Give the ETH-moving paths a stop that does not need an upgrade
ManulParihar Jul 31, 2026
0be2d44
Hold both P256 verification paths to the same answer
ManulParihar Jul 31, 2026
786f9f3
Report the upgrade authority from the owner rather than a stale copy
ManulParihar Jul 31, 2026
2db0e51
Bound what an eSIM wallet can be charged for one data bundle
ManulParihar Jul 31, 2026
91e40e8
Trim the purchase history a lazy deployment carries into a wallet
ManulParihar Jul 31, 2026
0acf408
Remove the per-device eSIM identifier cap
ManulParihar Aug 1, 2026
0e7514d
Cover the remaining rejection arms in WebAuthn verification
ManulParihar Aug 2, 2026
477a082
Cover the execution and deposit surface a device wallet inherits
ManulParihar Aug 2, 2026
f5c5050
Cover the input guards on the device wallet factory
ManulParihar Aug 2, 2026
0036547
Cover the reject arms on the device wallet
ManulParihar Aug 2, 2026
f19c95c
Cover the reject arms on the eSIM wallet
ManulParihar Aug 2, 2026
45a5f96
Cover the initialiser checks and caller gates on the registry
ManulParihar Aug 2, 2026
d80bfd5
Cover the input guards on the lazy wallet registry
ManulParihar Aug 2, 2026
5715813
Cover the gate on deploying a wallet for a user
ManulParihar Aug 2, 2026
a5974ac
Cover the prefund a wallet forwards during validation
ManulParihar Aug 2, 2026
fe4b10d
Cover an assertion presented after its own expiry
ManulParihar Aug 2, 2026
9d6fc56
Cover ETH that cannot be delivered
ManulParihar Aug 2, 2026
6a2f2cf
Remove a modifier the factory never applies
ManulParihar Aug 2, 2026
bb21b38
Add a branch coverage reader that skips uncountable sites
ManulParihar Aug 2, 2026
1bfe5bf
Deploy the protocol into an empty world for invariant runs
ManulParihar Aug 2, 2026
a9d8526
Assert ETH conservation across random call sequences
ManulParihar Aug 2, 2026
c8b4337
Check the eSIM wallet association across long sequences
ManulParihar Aug 2, 2026
298dadd
Hold invariant ghost state in its own contract
ManulParihar Aug 2, 2026
534e1cc
Split the invariant handler by actor
ManulParihar Aug 2, 2026
51685eb
Split the invariants by protocol area and add three registry ones
ManulParihar Aug 2, 2026
ca02078
Rotate the admin role during the campaign
ManulParihar Aug 2, 2026
afe5de9
Give the campaign the pause pair, the beacons and the price ceiling
ManulParihar Aug 2, 2026
20e59f8
Let the wallet owner set its own price ceiling, and check every charg…
ManulParihar Aug 2, 2026
399ab59
Check the wallet side of the association from three more angles
ManulParihar Aug 2, 2026
7ac8395
Check the protocol's own configuration holds together
ManulParihar Aug 2, 2026
b4c2b2b
Check the lazy registry keeps its two views of an association in step
ManulParihar Aug 2, 2026
f8ff360
Assert what each state-changing call left behind
ManulParihar Aug 2, 2026
5eb5f0e
Group unit tests into a folder per contract they cover
ManulParihar Aug 2, 2026
419cd81
Split the device wallet tests by what each one is about
ManulParihar Aug 2, 2026
27b8c58
Split the device wallet factory tests by what each one is about
ManulParihar Aug 2, 2026
a9644f0
Fuzz the two P256 verifiers against each other
ManulParihar Aug 2, 2026
125b0cd
Fuzz the shape of what the two signature entry points accept
ManulParihar Aug 2, 2026
cd8607f
Fuzz the WebAuthn verifier against arbitrary assertion fields
ManulParihar Aug 2, 2026
44755c8
Fuzz the ETH amounts on every path in and out of a wallet
ManulParihar Aug 2, 2026
b704ff8
Fuzz identifier lengths and array shapes on the lazy registry
ManulParihar Aug 2, 2026
16c5a0d
Cover a funded lazy deploy blocked by a front-run
ManulParihar Aug 4, 2026
bd63092
Send the deposit to an adopted wallet instead of refunding it
ManulParihar Aug 4, 2026
3fcd5f4
Baseline gas and check it in CI
ManulParihar Aug 4, 2026
aff77f0
Run the workflow on pull requests and pushes to main
ManulParihar Aug 4, 2026
70ecbf5
Stop ignoring lib so a new dependency is not silently dropped
ManulParihar Aug 4, 2026
8c5e749
Move OpenZeppelin to v5.4.0
ManulParihar Aug 4, 2026
87c46b3
Stop the deploy handlers restating an existing wallet's bindings
ManulParihar Aug 4, 2026
fca7871
Say why fork and invariant tests sit outside the branch coverage number
ManulParihar Aug 4, 2026
94982c6
Cover a batch deploy replaying an entry it already deployed
ManulParihar Aug 4, 2026
306027a
Check the registry before reading the admin off it
ManulParihar Aug 4, 2026
7342e7c
Read loop bounds once instead of on every pass
ManulParihar Aug 4, 2026
f12947b
Read the batch arrays from calldata instead of copying them
ManulParihar Aug 4, 2026
99e4768
Reject with typed errors in the eSIM wallet factory
ManulParihar Aug 4, 2026
6399ea2
Reject with typed errors in the account base
ManulParihar Aug 4, 2026
9da6415
Reject with typed errors in the registry helper
ManulParihar Aug 4, 2026
5d73089
Reject with typed errors in the registry
ManulParihar Aug 4, 2026
483d187
Reject with typed errors in the eSIM wallet
ManulParihar Aug 4, 2026
a404008
Reject with typed errors in the device wallet
ManulParihar Aug 4, 2026
7316952
Reject with typed errors in the lazy wallet registry
ManulParihar Aug 4, 2026
63e39b4
Reject with typed errors in the device wallet factory
ManulParihar Aug 4, 2026
4da277e
Name the error every revert test expects
ManulParihar Aug 4, 2026
a5d96c7
Write an eSIM wallet's association and its standby flag in one regist…
ManulParihar Aug 5, 2026
a5eb5f4
Add errors for the split history population path
ManulParihar Aug 5, 2026
27fd5c6
Let populateHistory append a batch instead of refusing a second call
ManulParihar Aug 5, 2026
3d1aa7a
Forward lazy purchase history through the registry
ManulParihar Aug 5, 2026
789355c
Stop carrying purchase history through lazy wallet deployment
ManulParihar Aug 5, 2026
acc0474
Copy lazy purchase history into deployed wallets in batches
ManulParihar Aug 5, 2026
dfaf149
Pin the lazy wallet registry mapping slots
ManulParihar Aug 5, 2026
2bd910c
Fuzz the history copy over arbitrary batch sizes
ManulParihar Aug 5, 2026
08b71f8
Hold the history copy as an invariant across the campaign
ManulParihar Aug 5, 2026
f84657d
Re-measure the lazy deployment and pin a full history batch
ManulParihar Aug 5, 2026
59189b3
Set the deploy gas bound so the coverage run passes too
ManulParihar Aug 5, 2026
1e214c5
Add a non-reverting decoder for an encoded WebAuthn signature
ManulParihar Aug 5, 2026
9760bf2
Reject a malformed signature body instead of reverting on it
ManulParihar Aug 5, 2026
72c2d32
Measure the signature decoder against solc's own
ManulParihar Aug 5, 2026
001c65c
Rebaseline gas after the signature decode change
ManulParihar Aug 5, 2026
459260c
Deploy a lazy device's eSIM wallets in batches
ManulParihar Aug 5, 2026
24e1da7
Cover the batched lazy deployment
ManulParihar Aug 5, 2026
23f8ff3
Fuzz the batched lazy deployment across arbitrary batch sizes
ManulParihar Aug 5, 2026
9015c96
Hold the deploy cursor as an invariant
ManulParihar Aug 5, 2026
119fa3f
Rebaseline gas after the batched lazy deployment
ManulParihar Aug 5, 2026
91d7f69
Advance the deploy cursor before deploying the batch
ManulParihar Aug 5, 2026
d4c9738
Hold the invariant run settings in foundry.toml
ManulParihar Aug 5, 2026
144f529
Add the Certora smoke spec and its conf
ManulParihar Aug 5, 2026
9af7940
Filter the unrenounceable owner out of the reachability rule
ManulParihar Aug 5, 2026
8f697fa
Measure gas per operation instead of per test body
ManulParihar Aug 5, 2026
d9235c1
Add a timelocked owner for the four upgradeable contracts
ManulParihar Aug 6, 2026
136b793
Cover the admin contract's roles, delay, upgrades and handover
ManulParihar Aug 6, 2026
a147c92
Fuzz and sequence the admin contract against arbitrary actors
ManulParihar Aug 6, 2026
10ccd3b
Measure what an operation costs through the admin contract
ManulParihar Aug 6, 2026
91a43a0
Narrow the guardian to releasing a pause and stripping a canceller
ManulParihar Aug 6, 2026
595c6e9
Walk each key compromise and the way out of it
ManulParihar Aug 6, 2026
f088a04
Rebaseline gas after narrowing the guardian
ManulParihar Aug 6, 2026
7b8eaa7
Add the Registry association rules spec for the prover
ManulParihar Aug 6, 2026
32ec648
Pin the two states the older registry entry points can reach
ManulParihar Aug 6, 2026
bc9fad7
Separate the eSIM wallet registration from the transfer marker
ManulParihar Aug 6, 2026
c202ed4
State the registry association rules the design actually implies
ManulParihar Aug 6, 2026
b3f09bc
Stop tracking .DS_Store files
ManulParihar Aug 7, 2026
a90a992
Push history entries whole instead of writing them field by field
ManulParihar Aug 7, 2026
8c3d518
Carry append-only purchase history as an invariant
ManulParihar Aug 7, 2026
1c8f32e
Prove the device wallet's eSIM rights and owner key with the prover
ManulParihar Aug 7, 2026
e2d2338
Prove the device wallet factory's wiring and deployment record
ManulParihar Aug 7, 2026
dcda7fd
Correct the comment on the registry call in the add path
ManulParihar Aug 7, 2026
22f6f2b
Prove the registry and the device wallet agree on who holds an eSIM w…
ManulParihar Aug 7, 2026
8f47f84
Close the base account's owner setup to outside callers
ManulParihar Aug 7, 2026
30d1512
Lock the eSIM wallet implementation at the maximum version
ManulParihar Aug 7, 2026
97aa7e7
Rebaseline gas after the initialiser changes
ManulParihar Aug 7, 2026
aaf62df
Verify the admin timelock's delay floor and guardian powers
ManulParihar Aug 7, 2026
6dc02dd
Pin every contract's storage layout so a moved slot fails CI
ManulParihar Aug 7, 2026
3c0cc74
Act on the static analysis findings worth changing
ManulParihar Aug 7, 2026
4c1dfb0
Move the two shared interfaces out of the admin contract
ManulParihar Aug 7, 2026
bc69f7e
Put the registry's declarations in one order
ManulParihar Aug 7, 2026
15dba61
Put the registry helper's declarations in one order
ManulParihar Aug 7, 2026
3113c70
Put the eSIM wallet's declarations in one order
ManulParihar Aug 7, 2026
14926b3
Put the eSIM wallet factory's declarations in one order
ManulParihar Aug 7, 2026
2513f74
Put the lazy wallet registry's declarations in one order
ManulParihar Aug 7, 2026
5a7a7bf
Put the device wallet's declarations in one order
ManulParihar Aug 7, 2026
cf14aff
Put the device wallet factory's declarations in one order
ManulParihar Aug 7, 2026
8730fcd
Document the account abstraction base and give it one comment style
ManulParihar Aug 7, 2026
2a99668
Group the registry under section headings and finish its NatSpec
ManulParihar Aug 7, 2026
3563295
Finish the registry helper's NatSpec and split it into two sections
ManulParihar Aug 7, 2026
4a18a5c
Give the eSIM wallet section headings and a full set of NatSpec
ManulParihar Aug 7, 2026
7f4637b
Document the eSIM wallet factory and redraw the beacon diagram
ManulParihar Aug 7, 2026
0f66440
Correct the eSIM wallet initialiser's doc comment
ManulParihar Aug 7, 2026
da8d62e
Document the device wallet and split it into six sections
ManulParihar Aug 7, 2026
0e0bf45
Document the device wallet factory's two deployment routes
ManulParihar Aug 7, 2026
57ea378
Document the lazy wallet registry and split it into seven sections
ManulParihar Aug 7, 2026
5bf0305
Head the three shared files with what they are for
ManulParihar Aug 7, 2026
51db081
Group the protocol admin under three section headings
ManulParihar Aug 7, 2026
4bc4a6b
Convert the last block comments in the test suite
ManulParihar Aug 7, 2026
139a5ca
Comment rearranged
ManulParihar Aug 7, 2026
b10902a
Rewrite the README around building, testing and the trust model
ManulParihar Aug 7, 2026
6a6a59b
Updated Readme
ManulParihar Aug 7, 2026
3b85440
Updated docs
ManulParihar Aug 7, 2026
e1c89cd
Updated Specifications in README
ManulParihar Aug 7, 2026
50812a2
Prove the eSIM wallet factory's registry, beacon and deployment record
ManulParihar Aug 11, 2026
b23c626
Count the eSIM wallet factory spec in the README
ManulParihar Aug 11, 2026
d5822b7
Reorganise the scripts folder by what each script does
ManulParihar Aug 11, 2026
1ed3790
Add forge deployment scripts and a checkable deployment record
ManulParihar Aug 11, 2026
91755e4
Add upgrade scripts that go through the timelock in two halves
ManulParihar Aug 11, 2026
84de972
Key the deployment record by chain name and chain id
ManulParihar Aug 11, 2026
13b3e32
Cut env.sample down to variables something actually reads
ManulParihar Aug 11, 2026
8ca8483
Stop tracking .vscode
ManulParihar Aug 11, 2026
ae70ceb
Pin npm dependencies at exact versions and drop three unused ones
ManulParihar Aug 11, 2026
2f585f2
Rename the workflow to ci.yml and cancel superseded runs
ManulParihar Aug 11, 2026
77dabb8
Move the vault address to the registry and make it rotatable
ManulParihar Aug 11, 2026
42decfa
Move the two vault rules onto the registry spec
ManulParihar Aug 11, 2026
3508a6f
Regenerate the gas baselines, storage layouts and docs
ManulParihar Aug 11, 2026
96a25e7
Require a non-zero data bundle price cap at deploy time
ManulParihar Aug 11, 2026
0b5beea
Delete payETHForDataBundles, the uncapped ETH-to-vault exit
ManulParihar Aug 12, 2026
c88238a
Record the data bundle purchase before paying the vault
ManulParihar Aug 12, 2026
f12bac7
Reject a zero validUntil in the user operation signature path
ManulParihar Aug 12, 2026
360ec2a
Refuse the guardian overlap at runtime, not only at construction
ManulParihar Aug 12, 2026
e776259
Probe past an occupied salt instead of freezing a lazy device forever
ManulParihar Aug 12, 2026
a06e605
Authorize eSIM wallet release and rebind on the real owner
ManulParihar Aug 12, 2026
0abe427
Restore an eSIM wallet's binding on a cancelled transfer, and guard a…
ManulParihar Aug 12, 2026
2899780
Pin that the lazy deploy path never leaves ETH for the registry to re…
ManulParihar Aug 12, 2026
627379d
Check grant authority before the role overlap, not after
ManulParihar Aug 12, 2026
fa503e4
Restate the timelock operation rules through the stored timestamp
ManulParihar Aug 12, 2026
3ebbc2a
Bind the recorded wallet address to its identifier and owner key
ManulParihar Aug 12, 2026
e13e9c5
Cover the postCreateAccount binding in the unit and invariant suites
ManulParihar Aug 12, 2026
289d8af
Price postCreateAccount and regenerate both gas baselines
ManulParihar Aug 12, 2026
363c68b
Record that postCreateAccount now exceeds the spec hashing bound
ManulParihar Aug 12, 2026
6792c48
Regenerate the docs
ManulParihar Aug 12, 2026
8176f23
Let an outstanding eSIM wallet transfer be re-targeted
ManulParihar Aug 12, 2026
30f33fa
Cover re-targeting a pending eSIM wallet transfer
ManulParihar Aug 12, 2026
bf4e61a
Rebaseline gas after the conditional removal
ManulParihar Aug 12, 2026
a64fe1e
Correct the spec prose describing the removal as unconditional
ManulParihar Aug 12, 2026
e8d75b0
Grant a guardian the executor role however it is installed
ManulParihar Aug 12, 2026
508fe72
Cover both guardian install paths and the two step eviction
ManulParihar Aug 12, 2026
6ba5008
Rebaseline gas after the paired guardian grant
ManulParihar Aug 12, 2026
a46e668
Regenerate the docs
ManulParihar Aug 12, 2026
e65fb5b
Point readers at getMinDelay rather than the MinDelayChange event
ManulParihar Aug 12, 2026
cbab244
Regenerate the docs
ManulParihar Aug 12, 2026
81bd607
Let the owner replace the admin, and add a suspension
ManulParihar Aug 13, 2026
feb44fc
Give the guardian a way to suspend the admin key
ManulParihar Aug 13, 2026
0493c7a
Restate the admin rules over the recorded address
ManulParihar Aug 13, 2026
f0089be
Regenerate the docs and both gas baselines
ManulParihar Aug 13, 2026
29b2e77
Clear the eSIM wallet price ceiling on a handover
ManulParihar Aug 13, 2026
4922144
Ask the factory whether it deployed an eSIM wallet before registering it
ManulParihar Aug 13, 2026
f6cc83f
Regenerate the docs and both gas baselines
ManulParihar Aug 13, 2026
3fe4e3f
Name the device identifier predicate after what it answers
ManulParihar Aug 13, 2026
5ff38c4
Refuse a device identifier a fiat user is already waiting on
ManulParihar Aug 13, 2026
0f6070e
Record which eSIM wallet holds each eSIM identifier
ManulParihar Aug 13, 2026
4f2fbf9
Cover both identifier collisions between the two routes
ManulParihar Aug 13, 2026
3fea5e7
Make the two routes contend over the same identifiers
ManulParihar Aug 13, 2026
ffe6822
Extend the specs to the eSIM identifier record
ManulParihar Aug 13, 2026
429f958
Correct the lazy batch cost figures the new checks moved
ManulParihar Aug 13, 2026
d380c6f
Regenerate the docs, gas baselines and storage layouts
ManulParihar Aug 13, 2026
e6e3744
Refuse ETH access at bind time and leave granting to the owner
ManulParihar Aug 13, 2026
b9a554d
Cover the revocation the admin used to be able to undo
ManulParihar Aug 13, 2026
47f6985
Hold the campaign to the same rule
ManulParihar Aug 13, 2026
4f98bc0
Extend the spec to the ETH access flag
ManulParihar Aug 13, 2026
0dd9880
Regenerate the docs and gas baselines
ManulParihar Aug 13, 2026
1fefbbe
Tighten the comments on the ETH access and identifier work
ManulParihar Aug 13, 2026
a77379a
Regenerate the docs
ManulParihar Aug 13, 2026
d78af2f
Match the initialiser filter to the registry's current signature
ManulParihar Aug 14, 2026
83ee31b
Verify the admin handover rule under bit-vector theory
ManulParihar Aug 14, 2026
c63d28e
Resolve the ownership path calls and pin the eSIM wallet to its own d…
ManulParihar Aug 15, 2026
64942d2
Add a single rule conf for probing cross contract summarisation
ManulParihar Aug 15, 2026
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
498 changes: 498 additions & 0 deletions .gas-snapshot

Large diffs are not rendered by default.

79 changes: 79 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: CI

on:
push:
branches: [main, test-and-security]
pull_request:
workflow_dispatch:

# A new push to the same branch makes the run in flight pointless. Cancelling it frees a runner and
# stops two results racing to report on the same branch.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
check:
strategy:
fail-fast: true

name: Build, test and baselines
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: v1.7.1

# The signature tests shell out to test/utils/ffi/webauthn-signer.js, which imports ethers
- name: Install Node
uses: actions/setup-node@v4
with:
node-version: 22
cache: npm

- name: Install node dependencies
run: npm ci

- name: Run Forge build
run: |
forge --version
forge build --via-ir --sizes
id: build

- name: Run Forge tests
run: |
forge test --via-ir -vvv
id: test

# Fuzz and invariant runs draw a fresh seed each time, and the malleable twin case verifies a
# signature generated offchain per run, so all three report a different figure every time.
# They are left out of the baseline rather than given a tolerance, so what remains is checked
# exactly. test/foundry/gas is out because it keeps its own baseline under snapshots/, one
# figure per operation, and sweeping it in here would record the test bodies instead.
- name: Check gas snapshot
run: |
forge snapshot --check --via-ir \
--no-match-path "test/foundry/{fuzz-testing,invariant-testing,fork,gas}/*" \
--no-match-test "test_verifySignature_rejectsTheMalleableTwinOfARealAssertion"
id: snapshot

# The per-operation baseline. forge test rewrites snapshots/ on every run, so a difference
# here means an operation moved rather than a test body moving around it.
- name: Check per-operation gas snapshots
run: |
git diff --exit-code -- snapshots/
id: operation-snapshot

# Four UUPS singletons and every wallet behind two beacons, so a slot that moves reaches
# live state. The generator strips ast ids, which renumber on edits that touch no storage,
# so a difference here is a real layout change.
- name: Check storage layouts
run: |
python3 scripts/checks/storage-layouts.py
git diff --exit-code -- storage-layouts/
id: storage-layout
34 changes: 0 additions & 34 deletions .github/workflows/test.yml

This file was deleted.

10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ artifacts/
cache/
out/
forge-cache/

# Written by every `forge script --broadcast` run. The deployment record kept on purpose is
# deployments/address.json, which the scripts write and later scripts read.
broadcast/
lcov.info
.env
lib/
.DS_Store

# Editor settings are per developer. The remappings inside are generated from remappings.txt
# anyway, so a stale copy here is worse than no copy.
.vscode/
Loading
Loading