Skip to content
Merged
Show file tree
Hide file tree
Changes from 61 commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
8ff9c6a
Update migrated imports from community to vanilla contracts
ernestognw Jul 25, 2025
d91e95f
Use ERC20Bridgeable from Contracts 5.4.0
ericglau Aug 8, 2025
8aaf3fe
Update Hardhat package to use Contracts 5.4.0
ericglau Aug 8, 2025
97ac202
Avoid immutable for token bridge address
ericglau Aug 8, 2025
52e8788
Add changeset
ericglau Aug 8, 2025
e8c07e9
Update changeset
ericglau Aug 8, 2025
003e509
Update doc links, remove experimental
ericglau Aug 8, 2025
0909c7f
Merge remote-tracking branch 'upstream/chore/release-5.4' into contra…
ericglau Aug 8, 2025
7ec131a
Update imports, types
ericglau Aug 8, 2025
b18904f
Merge remote-tracking branch 'upstream/master' into chore/release-5.4
ericglau Aug 12, 2025
bbd308c
Merge branch 'master' into chore/release-5.4
ernestognw Aug 15, 2025
d1df618
Minimize changes
ernestognw Aug 15, 2025
f27b285
Use constructors instead of initializers for signers
ernestognw Aug 15, 2025
7bf5e16
Add upgradeability
ernestognw Aug 15, 2025
03dcb36
up
ernestognw Aug 15, 2025
e928a95
Remove experimental
ernestognw Aug 15, 2025
3a7fc32
Update snapshots
ernestognw Aug 15, 2025
47b8d6e
up
ernestognw Aug 15, 2025
ef0c60a
Add changeset
ernestognw Aug 15, 2025
34b594b
Add more changesets
ernestognw Aug 15, 2025
2579170
up
ernestognw Aug 15, 2025
f76ae21
up
ernestognw Aug 15, 2025
21385f5
Update tests
ernestognw Aug 15, 2025
dbc1108
up
ernestognw Aug 15, 2025
57e390e
format
ernestognw Aug 15, 2025
9b90959
up
ernestognw Aug 16, 2025
40c043d
Fix solidity compile test workflow, add upgradeable to account compil…
ericglau Aug 18, 2025
81a267b
Merge remote-tracking branch 'upstream/master' into chore/release-5.4
ericglau Aug 18, 2025
bfa9574
Fix some compilation issues
ernestognw Aug 19, 2025
77744e0
Fix initializable
ernestognw Aug 19, 2025
c7abb24
Update snapshots
ernestognw Aug 19, 2025
fd4aab9
Add missing modifier
ernestognw Aug 19, 2025
0213855
Remove experimental from AI prompts
ericglau Aug 19, 2025
888f36a
Fix detection of upgradeable option in Hardhat/Foundry, add account t…
ericglau Aug 19, 2025
66bcc96
Omit upgrades plugins for upgradeable Account
ericglau Aug 20, 2025
b1a362a
Fix compile error
ericglau Aug 20, 2025
efa2420
Merge branch 'master' into chore/release-5.4
ericglau Aug 20, 2025
39c0486
Show erc7702 upgrade errors as red tooltips
ericglau Aug 20, 2025
3d0680e
Use reactivity to disable erc7702 upgradeable in UI
ericglau Aug 20, 2025
e862916
Format
ernestognw Aug 20, 2025
b2c858c
Remove redundant error check for upgradeable section
ericglau Aug 20, 2025
912ad47
Fix formatting
ericglau Aug 20, 2025
8b15bf4
Merge remote-tracking branch 'upstream/chore/release-5.4' into chore/…
ericglau Aug 20, 2025
5d9d2fc
Refactor Initializable import logic for clarity
ericglau Aug 20, 2025
e0452c4
Use upgradeable import for UUPSUpgradeable
ericglau Aug 20, 2025
b2db161
Update snapshots
ericglau Aug 20, 2025
46a18eb
Revert generate sources to use parents
ericglau Aug 20, 2025
88ff42f
Fix oz-upgrades-unsafe-allow tag and add comments to constructors
ernestognw Aug 21, 2025
d873a79
Fix constructors for upgradeable accounts without signer
ernestognw Aug 21, 2025
cd769af
up
ernestognw Aug 21, 2025
14b1e1b
Update snapshots
ernestognw Aug 21, 2025
825e89f
Merge branch 'master' into chore/release-5.4
ericglau Aug 21, 2025
281cdeb
Add check for consistency
ericglau Aug 21, 2025
3bd7a19
Use oz-upgrades-unsafe-allow-reachable, update snapshots
ericglau Aug 21, 2025
b9d3740
Lint
ericglau Aug 21, 2025
7656f32
Bump community contracts version
ericglau Aug 21, 2025
c8e260d
Update snapshots
ericglau Aug 21, 2025
a44081a
add constructor or initializer for ERC7579 accounts that don't have a…
Amxx Aug 27, 2025
64af729
makeUpgradeable helper
Amxx Aug 27, 2025
bbba3ad
fix lint
Amxx Aug 27, 2025
102afdf
Add type check
ericglau Aug 27, 2025
e3f45b2
Add note for helper fn
ericglau Aug 27, 2025
1b243e5
Use posix to ensure forward slashes
ericglau Aug 27, 2025
5b1bd5a
Merge branch 'master' into chore/release-5.4
ericglau Aug 27, 2025
e031954
Update snapshots
ernestognw Aug 27, 2025
4375257
Add changeset for common
ericglau Aug 28, 2025
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: 6 additions & 0 deletions .changeset/odd-ants-hunt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@openzeppelin/wizard': minor
'@openzeppelin/contracts-mcp': minor
---

Add constructors for `SignerECDSA`, `SignerP256`, `SignerRSA`, `SignerERC7702`, `SignerERC7913`, `MultiSignerERC7913` and `MultiSignerERC7913Weighted`
6 changes: 6 additions & 0 deletions .changeset/sad-nails-smash.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@openzeppelin/wizard': minor
'@openzeppelin/contracts-mcp': minor
---

Enable upgradeability for `AccountERC7579`, `AccountERC7579Hooked`, `SignerECDSA`, `SignerP256`, `SignerRSA`, `SignerERC7702`, `SignerERC7913` and `MultiSignerERC7913`
6 changes: 6 additions & 0 deletions .changeset/sour-hats-grow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@openzeppelin/wizard': minor
'@openzeppelin/contracts-mcp': minor
---

**Breaking change**: Use `Account`, `AccountERC7579`, `AccountERC7579Hooked`, `ERC7812`, `ERC7739Utils`, `ERC7913Utils`, `AbstractSigner`, `SignerECDSA`, `SignerP256`, `SignerRSA`, `SignerERC7702`, `SignerERC7913`, `MultiSignerERC7913`, and `MultiSignerERC7913Weighted` from OpenZeppelin Contracts 5.4.0 instead of Community Contracts
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ jobs:
working-directory: packages/ui
- name: Run tests
if: matrix.variant == 'default'
run: yarn test '**/*.test.ts' '!**/*.compile.test.ts'
run: yarn test '**/*.test.ts' '**/test.ts' '!**/*.compile.test.ts'
working-directory: packages/core/${{matrix.package}}

- name: Get list of changed files
Expand Down
3 changes: 1 addition & 2 deletions packages/common/src/ai/descriptions/solidity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ export const solidityPrompts = {
Stablecoin:
'Make a stablecoin token that uses the ERC-20 standard. Experimental, some features are not audited and are subject to change.',
RWA: 'Make a real-world asset token that uses the ERC-20 standard. Experimental, some features are not audited and are subject to change.',
Account:
'Make an account contract that follows the ERC-4337 standard. Experimental, some features are not audited and are subject to change.',
Account: 'Make an account contract that follows the ERC-4337 standard.',
Governor: 'Make a contract to implement governance, such as for a DAO.',
Custom: 'Make a custom smart contract.',
};
Expand Down
2 changes: 1 addition & 1 deletion packages/core/solidity/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ The following contract types are supported:
- `governor`
- `custom`

Note that `stablecoin`, `realWorldAsset`, and `account` are experimental and may be subject to change.
Note that `stablecoin`, and `realWorldAsset` are experimental and may be subject to change.

Each contract type has functions/constants as defined below.

Expand Down
2 changes: 1 addition & 1 deletion packages/core/solidity/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"update-env": "rm ./src/environments/hardhat/package-lock.json && npm install --package-lock-only --prefix ./src/environments/hardhat && rm ./src/environments/hardhat/upgradeable/package-lock.json && npm install --package-lock-only --prefix ./src/environments/hardhat/upgradeable"
},
"devDependencies": {
"@openzeppelin/community-contracts": "git+https://github.com/OpenZeppelin/openzeppelin-community-contracts.git#de17c8e",
"@openzeppelin/community-contracts": "git+https://github.com/OpenZeppelin/openzeppelin-community-contracts.git#2d607bd",
"@openzeppelin/contracts": "^5.4.0",
"@openzeppelin/contracts-upgradeable": "^5.4.0",
"@types/node": "^20.0.0",
Expand Down
158 changes: 92 additions & 66 deletions packages/core/solidity/src/account.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,72 +50,98 @@ test('account API assert defaults', async t => {
t.is(account.print(account.defaults), account.print());
});

for (const signer of [false, 'ERC7702', 'ECDSA', 'P256', 'RSA', 'Multisig', 'MultisigWeighted'] as const) {
let title = 'Account';
if (signer) {
title += ` with Signer${signer}`;
function format(upgradeable: false | 'uups' | 'transparent') {
switch (upgradeable) {
case false:
return 'non-upgradeable';
case 'uups':
return 'upgradeable uups';
case 'transparent':
return 'upgradeable transparent';
}
}

testAccount(`${title} named`, {
name: `Custom${title}`,
signer,
});

testAccount(`${title} with ERC1271`, {
name: `Custom${title}ERC1271`,
signatureValidation: 'ERC1271',
signer,
});

testAccount(`${title} with ERC7739`, {
name: `Custom${title}ERC7739`,
signatureValidation: 'ERC7739',
signer,
});

testAccount(`${title} with ERC721Holder`, {
name: `Custom${title}ERC721Holder`,
ERC721Holder: true,
signer,
});

testAccount(`${title} with ERC1155Holder`, {
name: `Custom${title}ERC1155Holder`,
ERC1155Holder: true,
signer,
});

testAccount(`${title} with ERC721Holder and ERC1155Holder`, {
name: `Custom${title}ERC721HolderERC1155Holder`,
ERC721Holder: true,
ERC1155Holder: true,
signer,
});

testAccount(`${title} with ERC7821 Execution`, {
signer,
batchedExecution: true,
});

testAccount(`${title} with ERC7579`, {
signer,
ERC7579Modules: 'AccountERC7579',
});

testAccount(`${title} with ERC7579 with ERC1271`, {
signer,
ERC7579Modules: 'AccountERC7579',
signatureValidation: 'ERC1271',
});

testAccount(`${title} with ERC7579 with ERC7739`, {
signer,
ERC7579Modules: 'AccountERC7579',
signatureValidation: 'ERC7739',
});

testAccount(`${title} with ERC7579 hooks`, {
signer,
ERC7579Modules: 'AccountERC7579Hooked',
});
for (const signer of [false, 'ERC7702', 'ECDSA', 'P256', 'RSA', 'Multisig', 'MultisigWeighted'] as const) {
for (const upgradeable of [false, 'uups', 'transparent'] as const) {
if (signer === 'ERC7702' && !!upgradeable) continue;

let title = 'Account';
if (signer) {
title += ` with Signer${signer}`;
}

testAccount(`${title} named ${format(upgradeable)}`, {
name: `Custom${title}`,
signer,
upgradeable,
});

testAccount(`${title} with ERC1271 ${format(upgradeable)}`, {
name: `Custom${title}ERC1271`,
signatureValidation: 'ERC1271',
signer,
upgradeable,
});

testAccount(`${title} with ERC7739 ${format(upgradeable)}`, {
name: `Custom${title}ERC7739`,
signatureValidation: 'ERC7739',
signer,
upgradeable,
});

testAccount(`${title} with ERC721Holder ${format(upgradeable)}`, {
name: `Custom${title}ERC721Holder`,
ERC721Holder: true,
signer,
upgradeable,
});

testAccount(`${title} with ERC1155Holder ${format(upgradeable)}`, {
name: `Custom${title}ERC1155Holder`,
ERC1155Holder: true,
signer,
upgradeable,
});

testAccount(`${title} with ERC721Holder and ERC1155Holder ${format(upgradeable)}`, {
name: `Custom${title}ERC721HolderERC1155Holder`,
ERC721Holder: true,
ERC1155Holder: true,
signer,
upgradeable,
});

testAccount(`${title} with ERC7821 Execution ${format(upgradeable)}`, {
signer,
upgradeable,
batchedExecution: true,
});

testAccount(`${title} with ERC7579 ${format(upgradeable)}`, {
signer,
upgradeable,
ERC7579Modules: 'AccountERC7579',
});

testAccount(`${title} with ERC7579 with ERC1271 ${format(upgradeable)}`, {
signer,
upgradeable,
ERC7579Modules: 'AccountERC7579',
signatureValidation: 'ERC1271',
});

testAccount(`${title} with ERC7579 with ERC7739 ${format(upgradeable)}`, {
signer,
upgradeable,
ERC7579Modules: 'AccountERC7579',
signatureValidation: 'ERC7739',
});

testAccount(`${title} with ERC7579 hooks ${format(upgradeable)}`, {
signer,
upgradeable,
ERC7579Modules: 'AccountERC7579Hooked',
});
}
}
Loading
Loading