diff --git a/go.mod b/go.mod index d882a47c54..4b99e0d63b 100644 --- a/go.mod +++ b/go.mod @@ -25,7 +25,7 @@ require ( github.com/prometheus/client_golang v1.19.0 github.com/rabbitmq/amqp091-go v1.9.0 github.com/shopspring/decimal v1.3.1 - github.com/stretchr/testify v1.8.4 + github.com/stretchr/testify v1.9.0 github.com/swaggo/swag v1.16.3 github.com/testcontainers/testcontainers-go v0.28.0 github.com/urfave/cli/v2 v2.27.1 diff --git a/go.sum b/go.sum index 24d16af604..d97c2c4b91 100644 --- a/go.sum +++ b/go.sum @@ -615,8 +615,9 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/swaggo/swag v1.16.3 h1:PnCYjPCah8FK4I26l2F/KQ4yz3sILcVUN3cTlBFA9Pg= diff --git a/packages/bridge-ui/package.json b/packages/bridge-ui/package.json index 5bee87cdf9..c1ddceaee8 100644 --- a/packages/bridge-ui/package.json +++ b/packages/bridge-ui/package.json @@ -33,7 +33,7 @@ "@wagmi/cli": "^2.1.1", "abitype": "^1.0.0", "ajv": "^8.12.0", - "autoprefixer": "^10.4.17", + "autoprefixer": "^10.4.18", "daisyui": "^4.7.2", "dotenv": "^16.4.5", "eslint": "^8.56.0", diff --git a/packages/guardian-prover-health-check-ui/package.json b/packages/guardian-prover-health-check-ui/package.json index 4b3be9c5a1..aa792f6bec 100644 --- a/packages/guardian-prover-health-check-ui/package.json +++ b/packages/guardian-prover-health-check-ui/package.json @@ -23,7 +23,7 @@ "@tailwindcss/nesting": "0.0.0-insiders.565cd3e", "@typescript-eslint/eslint-plugin": "^7.1.0", "@typescript-eslint/parser": "^7.0.2", - "autoprefixer": "^10.4.17", + "autoprefixer": "^10.4.18", "daisyui": "^4.7.2", "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", diff --git a/packages/protocol/contracts/L1/gov/TaikoGovernor.sol b/packages/protocol/contracts/L1/gov/TaikoGovernor.sol index 6a44820ee5..6fbfe9d6d5 100644 --- a/packages/protocol/contracts/L1/gov/TaikoGovernor.sol +++ b/packages/protocol/contracts/L1/gov/TaikoGovernor.sol @@ -1,22 +1,19 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.24; -import "@openzeppelin/contracts-upgradeable/governance/GovernorUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/governance/compatibility/GovernorCompatibilityBravoUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorVotesUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorVotesQuorumFractionUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorTimelockControlUpgradeable.sol"; -import "../../common/EssentialContract.sol"; +import "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol"; /// @title TaikoGovernor /// @custom:security-contact security@taiko.xyz contract TaikoGovernor is - EssentialContract, + Ownable2StepUpgradeable, GovernorCompatibilityBravoUpgradeable, - GovernorVotesUpgradeable, GovernorVotesQuorumFractionUpgradeable, GovernorTimelockControlUpgradeable { @@ -36,9 +33,8 @@ contract TaikoGovernor is external initializer { - __Essential_init(_owner); + _transferOwnership(_owner == address(0) ? msg.sender : _owner); __Governor_init("TaikoGovernor"); - __GovernorCompatibilityBravo_init(); __GovernorVotes_init(_token); __GovernorVotesQuorumFraction_init(4); __GovernorTimelockControl_init(_timelock); @@ -58,33 +54,6 @@ contract TaikoGovernor is return super.propose(_targets, _values, _calldatas, _description); } - /// @notice An overwrite of GovernorCompatibilityBravoUpgradeable's propose() as that one does - /// not check that the length of signatures equal the calldata. - /// @dev See vulnerability description here: - /// https://github.com/taikoxyz/taiko-mono/security/dependabot/114 - /// See fix in OZ 4.8.3 here (URL broken down for readability): - /// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/ - /// 0a25c1940ca220686588c4af3ec526f725fe2582/contracts/governance/compatibility/GovernorCompatibilityBravo.sol#L72 - /// See {GovernorCompatibilityBravoUpgradeable-propose} - function propose( - address[] memory _targets, - uint256[] memory _values, - string[] memory _signatures, - bytes[] memory _calldatas, - string memory _description - ) - public - virtual - override(GovernorCompatibilityBravoUpgradeable) - returns (uint256) - { - if (_signatures.length != _calldatas.length) revert TG_INVALID_SIGNATURES_LENGTH(); - - return GovernorCompatibilityBravoUpgradeable.propose( - _targets, _values, _signatures, _calldatas, _description - ); - } - /// @dev See {GovernorUpgradeable-supportsInterface} function supportsInterface(bytes4 _interfaceId) public @@ -124,6 +93,23 @@ contract TaikoGovernor is return 1_000_000_000 ether / 10_000; // 0.01% of Taiko Token } + /// @dev Cancel a proposal with GovernorBravo logic. + function cancel( + address[] memory targets, + uint256[] memory values, + bytes[] memory calldatas, + bytes32 descriptionHash + ) + public + virtual + override(IGovernorUpgradeable, GovernorUpgradeable, GovernorCompatibilityBravoUpgradeable) + returns (uint256) + { + return GovernorCompatibilityBravoUpgradeable.cancel( + targets, values, calldatas, descriptionHash + ); + } + function _execute( uint256 _proposalId, address[] memory _targets, diff --git a/packages/protocol/package.json b/packages/protocol/package.json index d96f493788..280d85d118 100644 --- a/packages/protocol/package.json +++ b/packages/protocol/package.json @@ -35,8 +35,8 @@ "typescript": "^5.2.2" }, "dependencies": { - "@openzeppelin/contracts": "4.8.2", - "@openzeppelin/contracts-upgradeable": "4.8.2", + "@openzeppelin/contracts": "4.9.6", + "@openzeppelin/contracts-upgradeable": "4.9.6", "ds-test": "github:dapphub/ds-test#e282159d5170298eb2455a6c05280ab5a73a4ef0", "forge-std": "github:foundry-rs/forge-std#v1.7.5", "merkletreejs": "^0.3.11", diff --git a/packages/protocol/test/L1/gov/TaikoGovernor.t.sol b/packages/protocol/test/L1/gov/TaikoGovernor.t.sol index 76fb7b6c86..e9a42b57de 100644 --- a/packages/protocol/test/L1/gov/TaikoGovernor.t.sol +++ b/packages/protocol/test/L1/gov/TaikoGovernor.t.sol @@ -99,11 +99,6 @@ contract TestTaikoGovernor is TaikoL1TestBase { true, "Incorrect supports interface" ); - assertEq( - taikoGovernor.supportsInterface(type(IGovernorUpgradeable).interfaceId), - true, - "Incorrect supports interface" - ); assertEq( taikoGovernor.supportsInterface(type(IERC1155ReceiverUpgradeable).interfaceId), true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ae9f9e1f6c..ba3fdd7b4f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -96,8 +96,8 @@ importers: specifier: ^8.12.0 version: 8.12.0 autoprefixer: - specifier: ^10.4.17 - version: 10.4.17(postcss@8.4.35) + specifier: ^10.4.18 + version: 10.4.18(postcss@8.4.35) daisyui: specifier: ^4.7.2 version: 4.7.2(postcss@8.4.35) @@ -208,8 +208,8 @@ importers: specifier: ^7.0.2 version: 7.0.2(eslint@8.56.0)(typescript@5.3.3) autoprefixer: - specifier: ^10.4.17 - version: 10.4.17(postcss@8.4.35) + specifier: ^10.4.18 + version: 10.4.18(postcss@8.4.35) daisyui: specifier: ^4.7.2 version: 4.7.2(postcss@8.4.35) @@ -265,11 +265,11 @@ importers: packages/protocol: dependencies: '@openzeppelin/contracts': - specifier: 4.8.2 - version: 4.8.2 + specifier: 4.9.6 + version: 4.9.6 '@openzeppelin/contracts-upgradeable': - specifier: 4.8.2 - version: 4.8.2 + specifier: 4.9.6 + version: 4.9.6 ds-test: specifier: github:dapphub/ds-test#e282159d5170298eb2455a6c05280ab5a73a4ef0 version: github.com/dapphub/ds-test/e282159d5170298eb2455a6c05280ab5a73a4ef0 @@ -3301,12 +3301,12 @@ packages: fastq: 1.17.1 dev: true - /@openzeppelin/contracts-upgradeable@4.8.2: - resolution: {integrity: sha512-zIggnBwemUmmt9IS73qxi+tumALxCY4QEs3zLCII78k0Gfse2hAOdAkuAeLUzvWUpneMUfFE5sGHzEUSTvn4Ag==} + /@openzeppelin/contracts-upgradeable@4.9.6: + resolution: {integrity: sha512-m4iHazOsOCv1DgM7eD7GupTJ+NFVujRZt1wzddDPSVGpWdKq1SKkla5htKG7+IS4d2XOCtzkUNwRZ7Vq5aEUMA==} dev: false - /@openzeppelin/contracts@4.8.2: - resolution: {integrity: sha512-kEUOgPQszC0fSYWpbh2kT94ltOJwj1qfT2DWo+zVttmGmf97JZ99LspePNaeeaLhCImaHVeBbjaQFZQn7+Zc5g==} + /@openzeppelin/contracts@4.9.6: + resolution: {integrity: sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==} dev: false /@parcel/watcher-android-arm64@2.4.0: @@ -6100,6 +6100,13 @@ packages: /@web3modal/siwe@4.0.9(typescript@5.3.3): resolution: {integrity: sha512-OB4z/lTHCAm3bjiuyPz4uBib46YU6kzp4eeSnAWZzAHj9mQnB4DZOoCdFQvFn+N1n3CzTZaMxz3CYjYn2A+Qhw==} requiresBuild: true + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + vue: + optional: true dependencies: '@web3modal/core': 4.0.9(react@18.2.0) '@web3modal/scaffold-utils': 4.0.9(react@18.2.0) @@ -6126,6 +6133,15 @@ packages: '@wagmi/connectors': '>=4.0.0' '@wagmi/core': '>=2.0.0' viem: '>=2.0.0' + peerDependenciesMeta: + '@web3modal/siwe': + optional: true + react: + optional: true + react-dom: + optional: true + vue: + optional: true dependencies: '@wagmi/connectors': 4.1.14(@wagmi/core@2.6.5)(react-dom@18.2.0)(react-native@0.73.4)(react@18.2.0)(typescript@5.3.3)(viem@2.7.11) '@wagmi/core': 2.6.5(react@18.2.0)(typescript@5.3.3)(viem@2.7.11) @@ -6516,15 +6532,15 @@ packages: engines: {node: '>=8.0.0'} dev: false - /autoprefixer@10.4.17(postcss@8.4.35): - resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} + /autoprefixer@10.4.18(postcss@8.4.35): + resolution: {integrity: sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001588 + caniuse-lite: 1.0.30001593 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -6730,7 +6746,7 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001588 + caniuse-lite: 1.0.30001593 electron-to-chromium: 1.4.676 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) @@ -6898,8 +6914,8 @@ packages: engines: {node: '>=10'} dev: false - /caniuse-lite@1.0.30001588: - resolution: {integrity: sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ==} + /caniuse-lite@1.0.30001593: + resolution: {integrity: sha512-UWM1zlo3cZfkpBysd7AS+z+v007q9G1+fLTUU42rQnY6t2axoogPW/xol6T7juU5EUoOhML4WgBIdG+9yYqAjQ==} /capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} @@ -8004,14 +8020,9 @@ packages: '@esbuild/win32-ia32': 0.19.12 '@esbuild/win32-x64': 0.19.12 - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} - dev: false /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -13878,7 +13889,7 @@ packages: browserslist: '>= 4.21.0' dependencies: browserslist: 4.23.0 - escalade: 3.1.1 + escalade: 3.1.2 picocolors: 1.0.0 /upper-case-first@2.0.2: