diff --git a/NOTICE b/NOTICE index 00d1cb893..e68e93389 100644 --- a/NOTICE +++ b/NOTICE @@ -1,5 +1,5 @@ OpenZeppelin Contracts Wizard -Copyright (C) 2021-2024 Zeppelin Group Ltd +Copyright (C) 2021-2025 Zeppelin Group Ltd This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3. diff --git a/packages/core-cairo/CHANGELOG.md b/packages/core-cairo/CHANGELOG.md index a62296b4f..58675b083 100644 --- a/packages/core-cairo/CHANGELOG.md +++ b/packages/core-cairo/CHANGELOG.md @@ -1,9 +1,12 @@ # Changelog -## 0.21.0 (2025-01-09) +## 0.21.0 (2025-01-13) - Add Vesting tab. ([#425](https://github.com/OpenZeppelin/contracts-wizard/pull/425)) -- Update Contracts Wizard license to AGPLv3. ([#424](https://github.com/OpenZeppelin/contracts-wizard/pull/424)) + +- **Breaking changes**: + - Remove `isAccessControlRequired` from `governor` and `vesting`. ([#426](https://github.com/OpenZeppelin/contracts-wizard/pull/426)) + - Update Contracts Wizard license to AGPLv3. ([#424](https://github.com/OpenZeppelin/contracts-wizard/pull/424)) ## 0.20.1 (2024-12-17) diff --git a/packages/core-cairo/NOTICE b/packages/core-cairo/NOTICE index 00d1cb893..e68e93389 100644 --- a/packages/core-cairo/NOTICE +++ b/packages/core-cairo/NOTICE @@ -1,5 +1,5 @@ OpenZeppelin Contracts Wizard -Copyright (C) 2021-2024 Zeppelin Group Ltd +Copyright (C) 2021-2025 Zeppelin Group Ltd This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3. diff --git a/packages/core-cairo/README.md b/packages/core-cairo/README.md index 4ad6626b9..61a929f04 100644 --- a/packages/core-cairo/README.md +++ b/packages/core-cairo/README.md @@ -17,6 +17,8 @@ The following contract types are supported: - `erc721` - `erc1155` - `account` +- `governor` +- `vesting` - `custom` Each contract type has functions/constants as defined below. @@ -37,6 +39,12 @@ function print(opts?: ERC1155Options): string function print(opts?: AccountOptions): string ``` ```js +function print(opts?: GovernorOptions): string +``` +```js +function print(opts?: VestingOptions): string +``` +```js function print(opts?: CustomOptions): string ``` Returns a string representation of a contract generated using the provided options. If `opts` is not provided, uses [`defaults`](#defaults). @@ -55,6 +63,12 @@ const defaults: Required const defaults: Required ``` ```js +const defaults: Required +``` +```js +const defaults: Required +``` +```js const defaults: Required ``` The default options that are used for [`print`](#print). @@ -74,8 +88,8 @@ function isAccessControlRequired(opts: Partial): boolean ``` Whether any of the provided options require access control to be enabled. If this returns `true`, then calling `print` with the same options would cause the `access` option to default to `'ownable'` if it was `undefined` or `false`. -> Note that account contracts handle permissions differently from the other supported contracts. -Thus, the `account` contract type does not include `isAccessControlRequired`. +> Note that contracts such as `account`, `governor`, and `vesting` have their own ways of handling permissions and do not support the `access` option. +Thus, those types do not include `isAccessControlRequired`. ### Contract specific functions diff --git a/packages/core-cairo/src/api.ts b/packages/core-cairo/src/api.ts index a061e6993..a70fc497d 100644 --- a/packages/core-cairo/src/api.ts +++ b/packages/core-cairo/src/api.ts @@ -3,9 +3,9 @@ import { printERC20, defaults as erc20defaults, isAccessControlRequired as erc20 import { printERC721, defaults as erc721defaults, isAccessControlRequired as erc721IsAccessControlRequired, ERC721Options } from './erc721'; import { printERC1155, defaults as erc1155defaults, isAccessControlRequired as erc1155IsAccessControlRequired, ERC1155Options } from './erc1155'; import { printAccount, defaults as accountDefaults, AccountOptions } from './account'; -import { printGovernor, defaults as governorDefaults, isAccessControlRequired as governorIsAccessControlRequired, GovernorOptions } from './governor'; +import { printGovernor, defaults as governorDefaults, GovernorOptions } from './governor'; import { printCustom, defaults as customDefaults, isAccessControlRequired as customIsAccessControlRequired, CustomOptions } from './custom'; -import { printVesting, defaults as vestingDefaults, isAccessControlRequired as vestingIsAccessControlRequired, VestingOptions } from './vesting'; +import { printVesting, defaults as vestingDefaults, VestingOptions } from './vesting'; export interface WizardAccountAPI{ /** @@ -29,21 +29,23 @@ export interface WizardContractAPI { * The default options that are used for `print`. */ defaults: Required; +} +export interface AccessControlAPI { /** * Whether any of the provided options require access control to be enabled. If this returns `true`, then calling `print` with the * same options would cause the `access` option to default to `'ownable'` if it was `undefined` or `false`. */ - isAccessControlRequired: (opts: Partial) => boolean; + isAccessControlRequired: (opts: Partial) => boolean; } -export type ERC20 = WizardContractAPI; -export type ERC721 = WizardContractAPI; -export type ERC1155 = WizardContractAPI; +export type ERC20 = WizardContractAPI & AccessControlAPI; +export type ERC721 = WizardContractAPI & AccessControlAPI; +export type ERC1155 = WizardContractAPI & AccessControlAPI; export type Account = WizardAccountAPI; export type Governor = WizardContractAPI; export type Vesting = WizardContractAPI; -export type Custom = WizardContractAPI; +export type Custom = WizardContractAPI & AccessControlAPI; export const erc20: ERC20 = { print: printERC20, @@ -67,12 +69,10 @@ export const account: Account = { export const governor: Governor = { print: printGovernor, defaults: governorDefaults, - isAccessControlRequired: governorIsAccessControlRequired } export const vesting: Vesting = { print: printVesting, defaults: vestingDefaults, - isAccessControlRequired: vestingIsAccessControlRequired } export const custom: Custom = { print: printCustom, diff --git a/packages/core-cairo/src/governor.ts b/packages/core-cairo/src/governor.ts index 5ff6fb99c..fac953e62 100644 --- a/packages/core-cairo/src/governor.ts +++ b/packages/core-cairo/src/governor.ts @@ -65,10 +65,6 @@ export interface GovernorOptions extends CommonOptions { appVersion?: string; } -export function isAccessControlRequired(opts: Partial): boolean { - return false; -} - function withDefaults(opts: GovernorOptions): Required { return { ...opts, diff --git a/packages/core-cairo/src/vesting.test.ts b/packages/core-cairo/src/vesting.test.ts index 6a931f275..3f9ead374 100644 --- a/packages/core-cairo/src/vesting.test.ts +++ b/packages/core-cairo/src/vesting.test.ts @@ -109,10 +109,6 @@ testAPIEquivalence('API all custom settings', { schedule: 'custom' }); -test('Vesting API isAccessControlRequired', async t => { - t.is(vesting.isAccessControlRequired({}), true); -}); - test('cliff too high', async t => { const error = t.throws(() => buildVesting({ ...defaults, diff --git a/packages/core-cairo/src/vesting.ts b/packages/core-cairo/src/vesting.ts index 543ff0534..51c6512f2 100644 --- a/packages/core-cairo/src/vesting.ts +++ b/packages/core-cairo/src/vesting.ts @@ -44,10 +44,6 @@ function withDefaults(opts: VestingOptions): Required { }; } -export function isAccessControlRequired(_: Partial): boolean { - return true; -} - export function buildVesting(opts: VestingOptions): Contract { const c = new ContractBuilder(opts.name); const allOpts = withDefaults(opts); diff --git a/packages/core/NOTICE b/packages/core/NOTICE index 00d1cb893..e68e93389 100644 --- a/packages/core/NOTICE +++ b/packages/core/NOTICE @@ -1,5 +1,5 @@ OpenZeppelin Contracts Wizard -Copyright (C) 2021-2024 Zeppelin Group Ltd +Copyright (C) 2021-2025 Zeppelin Group Ltd This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3. diff --git a/packages/ui/public/cairo.html b/packages/ui/public/cairo.html index f70741172..8e4b6056c 100644 --- a/packages/ui/public/cairo.html +++ b/packages/ui/public/cairo.html @@ -58,7 +58,7 @@ diff --git a/packages/ui/public/index.html b/packages/ui/public/index.html index e33a0c43f..321be516a 100644 --- a/packages/ui/public/index.html +++ b/packages/ui/public/index.html @@ -90,7 +90,7 @@