Commit 89d01f2e authored by Mark Tyneway's avatar Mark Tyneway Committed by GitHub

contracts-bedrock: add semver to contracts (#2962)

* contracts-bedrock: add semver to L2 contracts

* contracts-periphery: add mkdirp for build

* deps: update and standardize some js deps

Without this commit, the build would fail due
to conflicting dependency versions

* deps: fix depcheck

* contracts-periphery: move semver into contracts-bedrock

* contracts-bedrock: use internal Semver contract

* contracts: add semver tag to natspec

* op-bindings: regenerate

* contracts-bedrock: snapshot

* contracts-bedrock: add semver to L1 contracts

* op-bindings: regenerate
parent 75089d0a
---
'@eth-optimism/contracts-bedrock': patch
---
Add semver to L2 contracts
---
'@eth-optimism/contracts-bedrock': patch
'@eth-optimism/contracts-periphery': patch
'@eth-optimism/fault-detector': patch
'@eth-optimism/hardhat-deploy-config': patch
---
Update dev deps
This diff is collapsed.
This diff is collapsed.
......@@ -2,4 +2,4 @@
// This file is a generated binding and any manual changes will be lost.
package bindings
var L1BlockDeployedBin = "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c806364ca23ef1161005b57806364ca23ef146100bc5780638381f58a146100e9578063b80777ea146100fd578063e591b2821461011d57600080fd5b8063042c2f571461008257806309bd5a60146100975780635cf24969146100b3575b600080fd5b6100956100903660046102a6565b61015d565b005b6100a060025481565b6040519081526020015b60405180910390f35b6100a060015481565b6003546100d09067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016100aa565b6000546100d09067ffffffffffffffff1681565b6000546100d09068010000000000000000900467ffffffffffffffff1681565b61013873deaddeaddeaddeaddeaddeaddeaddeaddead000181565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100aa565b3373deaddeaddeaddeaddeaddeaddeaddeaddead000114610204576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff9687167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090911617680100000000000000009587169590950294909417909355600191909155600255600380547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001691909216179055565b803567ffffffffffffffff811681146102a157600080fd5b919050565b600080600080600060a086880312156102be57600080fd5b6102c786610289565b94506102d560208701610289565b935060408601359250606086013591506102f160808701610289565b9050929550929590935056fea164736f6c634300080a000a"
var L1BlockDeployedBin = "0x608060405234801561001057600080fd5b50600436106100be5760003560e01c80638381f58a11610076578063c8b915311161005b578063c8b9153114610185578063e591b282146101ac578063f786becd146101ec57600080fd5b80638381f58a14610151578063b80777ea1461016557600080fd5b80635cf24969116100a75780635cf24969146100f457806364ca23ef146100fd5780636bf2606a1461012a57600080fd5b8063042c2f57146100c357806309bd5a60146100d8575b600080fd5b6100d66100d136600461035c565b610213565b005b6100e160025481565b6040519081526020015b60405180910390f35b6100e160015481565b6003546101119067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016100eb565b6100e17f000000000000000000000000000000000000000000000000000000000000000081565b6000546101119067ffffffffffffffff1681565b6000546101119068010000000000000000900467ffffffffffffffff1681565b6100e17f000000000000000000000000000000000000000000000000000000000000000081565b6101c773deaddeaddeaddeaddeaddeaddeaddeaddead000181565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100eb565b6100e17f000000000000000000000000000000000000000000000000000000000000000081565b3373deaddeaddeaddeaddeaddeaddeaddeaddead0001146102ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff9687167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090911617680100000000000000009587169590950294909417909355600191909155600255600380547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001691909216179055565b803567ffffffffffffffff8116811461035757600080fd5b919050565b600080600080600060a0868803121561037457600080fd5b61037d8661033f565b945061038b6020870161033f565b935060408601359250606086013591506103a76080870161033f565b9050929550929590935056fea164736f6c634300080a000a"
This diff is collapsed.
This diff is collapsed.
......@@ -2,4 +2,4 @@
// This file is a generated binding and any manual changes will be lost.
package bindings
var L2ToL1MessagePasserDeployedBin = "0x6080604052600436106100435760003560e01c806344df8e701461006c57806382e3702d14610081578063affed0e0146100c6578063c2b3e5ac146100ea57600080fd5b366100675761006533620186a0604051806020016040528060008152506100f8565b005b600080fd5b34801561007857600080fd5b506100656101ae565b34801561008d57600080fd5b506100b161009c366004610260565b60006020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156100d257600080fd5b506100dc60015481565b6040519081526020016100bd565b6100656100f83660046102a8565b600061010a60015433863487876101e6565b6000818152602081905260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915554905191925073ffffffffffffffffffffffffffffffffffffffff8616913391907f87bf7b546c8de873abb0db5b579ec131f8d0cf5b14f39933551cf9ced23a61369061019890349089908990610417565b60405180910390a4505060018054810190555050565b476101b881610225565b60405181907f7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f90600090a250565b60008686868686866040516020016102039695949392919061043f565b6040516020818303038152906040528051906020012090509695505050505050565b8060405161023290610254565b6040518091039082f090508015801561024f573d6000803e3d6000fd5b505050565b60088061049783390190565b60006020828403121561027257600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156102bd57600080fd5b833573ffffffffffffffffffffffffffffffffffffffff811681146102e157600080fd5b925060208401359150604084013567ffffffffffffffff8082111561030557600080fd5b818601915086601f83011261031957600080fd5b81358181111561032b5761032b610279565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561037157610371610279565b8160405282815289602084870101111561038a57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b818110156103d2576020818501810151868301820152016103b6565b818111156103e4576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b83815282602082015260606040820152600061043660608301846103ac565b95945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261048a60c08301846103ac565b9897505050505050505056fe608060405230fffea164736f6c634300080a000a"
var L2ToL1MessagePasserDeployedBin = "0x6080604052600436106100745760003560e01c8063affed0e01161004e578063affed0e014610139578063c2b3e5ac1461014f578063c8b9153114610162578063f786becd1461019657600080fd5b806344df8e701461009d5780636bf2606a146100b257806382e3702d146100f957600080fd5b366100985761009633620186a0604051806020016040528060008152506101ca565b005b600080fd5b3480156100a957600080fd5b50610096610280565b3480156100be57600080fd5b506100e67f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b34801561010557600080fd5b50610129610114366004610332565b60006020819052908152604090205460ff1681565b60405190151581526020016100f0565b34801561014557600080fd5b506100e660015481565b61009661015d36600461037a565b6101ca565b34801561016e57600080fd5b506100e67f000000000000000000000000000000000000000000000000000000000000000081565b3480156101a257600080fd5b506100e67f000000000000000000000000000000000000000000000000000000000000000081565b60006101dc60015433863487876102b8565b6000818152602081905260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915554905191925073ffffffffffffffffffffffffffffffffffffffff8616913391907f87bf7b546c8de873abb0db5b579ec131f8d0cf5b14f39933551cf9ced23a61369061026a903490899089906104e9565b60405180910390a4505060018054810190555050565b4761028a816102f7565b60405181907f7967de617a5ac1cc7eba2d6f37570a0135afa950d8bb77cdd35f0d0b4e85a16f90600090a250565b60008686868686866040516020016102d596959493929190610511565b6040516020818303038152906040528051906020012090509695505050505050565b8060405161030490610326565b6040518091039082f0905080158015610321573d6000803e3d6000fd5b505050565b60088061056983390190565b60006020828403121561034457600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561038f57600080fd5b833573ffffffffffffffffffffffffffffffffffffffff811681146103b357600080fd5b925060208401359150604084013567ffffffffffffffff808211156103d757600080fd5b818601915086601f8301126103eb57600080fd5b8135818111156103fd576103fd61034b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156104435761044361034b565b8160405282815289602084870101111561045c57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b818110156104a457602081850181015186830182015201610488565b818111156104b6576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b838152826020820152606060408201526000610508606083018461047e565b95945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261055c60c083018461047e565b9897505050505050505056fe608060405230fffea164736f6c634300080a000a"
This diff is collapsed.
This diff is collapsed.
......@@ -4,6 +4,7 @@ pragma solidity ^0.8.9;
import { PredeployAddresses } from "../libraries/PredeployAddresses.sol";
import { OptimismPortal } from "./OptimismPortal.sol";
import { CrossDomainMessenger } from "../universal/CrossDomainMessenger.sol";
import { Semver } from "../universal/Semver.sol";
/**
* @custom:proxied
......@@ -12,16 +13,18 @@ import { CrossDomainMessenger } from "../universal/CrossDomainMessenger.sol";
* for sending and receiving data on the L1 side. Users are encouraged to use this
* interface instead of interacting with lower-level contracts directly.
*/
contract L1CrossDomainMessenger is CrossDomainMessenger {
contract L1CrossDomainMessenger is CrossDomainMessenger, Semver {
/**
* @notice Address of the OptimismPortal.
*/
OptimismPortal public immutable portal;
/**
* @custom:semver 0.0.1
*
* @param _portal Address of the OptimismPortal contract on this network.
*/
constructor(OptimismPortal _portal) public {
constructor(OptimismPortal _portal) Semver(0, 0, 1) {
portal = _portal;
initialize();
}
......
......@@ -3,6 +3,7 @@ pragma solidity ^0.8.9;
import { PredeployAddresses } from "../libraries/PredeployAddresses.sol";
import { StandardBridge } from "../universal/StandardBridge.sol";
import { Semver } from "../universal/Semver.sol";
/**
* @custom:proxied
......@@ -11,7 +12,7 @@ import { StandardBridge } from "../universal/StandardBridge.sol";
* L2. ERC20 tokens deposited into L2 are escrowed within this contract until withdrawal.
* ETH is transferred to and escrowed within the OptimismPortal contract.
*/
contract L1StandardBridge is StandardBridge {
contract L1StandardBridge is StandardBridge, Semver {
/**
* @custom:legacy
* @notice Emitted whenever a deposit of ETH from L1 into L2 is initiated.
......@@ -87,7 +88,7 @@ contract L1StandardBridge is StandardBridge {
/**
* @param _messenger Address of the L1CrossDomainMessenger.
*/
constructor(address payable _messenger) public {
constructor(address payable _messenger) Semver(0, 0, 1) {
initialize(_messenger);
}
......
......@@ -4,6 +4,7 @@ pragma solidity 0.8.10;
import {
OwnableUpgradeable
} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import { Semver } from "../universal/Semver.sol";
/**
* @custom:proxied
......@@ -13,7 +14,7 @@ import {
* This contract should be deployed behind an upgradable proxy
*/
// slither-disable-next-line locked-ether
contract L2OutputOracle is OwnableUpgradeable {
contract L2OutputOracle is OwnableUpgradeable, Semver {
/**
* @notice OutputProposal represents a commitment to the L2 state.
* The timestamp is the L1 timestamp that the output root is posted.
......@@ -110,6 +111,8 @@ contract L2OutputOracle is OwnableUpgradeable {
}
/**
* @custom:semver 0.0.1
*
* @param _submissionInterval Interval in blocks at which checkpoints must be submitted.
* @param _genesisL2Output The initial L2 output of the L2 chain.
* @param _historicalTotalBlocks Number of blocks preceding this L2 chain.
......@@ -128,7 +131,7 @@ contract L2OutputOracle is OwnableUpgradeable {
uint256 _l2BlockTime,
address _sequencer,
address _owner
) {
) Semver(0, 0, 1) {
require(
_l2BlockTime < block.timestamp,
"Output Oracle: Initial L2 block time must be less than current time"
......
......@@ -7,6 +7,7 @@ import { L2OutputOracle } from "./L2OutputOracle.sol";
import { WithdrawalVerifier } from "../libraries/WithdrawalVerifier.sol";
import { AddressAliasHelper } from "../vendor/AddressAliasHelper.sol";
import { ResourceMetering } from "./ResourceMetering.sol";
import { Semver } from "../universal/Semver.sol";
/**
* @custom:proxied
......@@ -15,7 +16,7 @@ import { ResourceMetering } from "./ResourceMetering.sol";
* and L2. Messages sent directly to the OptimismPortal have no form of replayability.
* Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface.
*/
contract OptimismPortal is Initializable, ResourceMetering {
contract OptimismPortal is Initializable, ResourceMetering, Semver {
/**
* @notice Emitted when a transaction is deposited from L1 to L2. The parameters of this event
* are read by the rollup node and used to derive deposit transactions on L2.
......@@ -89,10 +90,12 @@ contract OptimismPortal is Initializable, ResourceMetering {
uint256[48] private __gap;
/**
* @custom:semver 0.0.1
*
* @param _l2Oracle Address of the L2OutputOracle contract.
* @param _finalizationPeriodSeconds Output finalization time in seconds.
*/
constructor(L2OutputOracle _l2Oracle, uint256 _finalizationPeriodSeconds) {
constructor(L2OutputOracle _l2Oracle, uint256 _finalizationPeriodSeconds) Semver(0, 0, 1) {
L2_ORACLE = _l2Oracle;
FINALIZATION_PERIOD_SECONDS = _finalizationPeriodSeconds;
......
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import { Semver } from "../universal/Semver.sol";
/**
* @custom:legacy
* @custom:proxied
......@@ -12,7 +14,7 @@ pragma solidity ^0.8.9;
* As of the Bedrock upgrade, the DeployerWhitelist is completely unused by the Optimism
* system and could, in theory, be removed entirely.
*/
contract DeployerWhitelist {
contract DeployerWhitelist is Semver {
/**
* @notice Emitted when the owner of this contract changes.
*
......@@ -47,6 +49,11 @@ contract DeployerWhitelist {
*/
mapping(address => bool) public whitelist;
/**
* @custom:semver 0.0.1
*/
constructor() Semver(0, 0, 1) {}
/**
* @notice Blocks functions to anyone except the contract owner.
*/
......
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;
import { Semver } from "../universal/Semver.sol";
import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
import { PredeployAddresses } from "../libraries/PredeployAddresses.sol";
import { L1Block } from "../L2/L1Block.sol";
......@@ -15,7 +16,7 @@ import { L1Block } from "../L2/L1Block.sol";
* contract exposes an API that is useful for knowing how large the L1 portion of their
* transaction fee will be.
*/
contract GasPriceOracle is Ownable {
contract GasPriceOracle is Ownable, Semver {
/**
* @custom:legacy
* @notice Spacer for backwards compatibility.
......@@ -44,9 +45,11 @@ contract GasPriceOracle is Ownable {
uint256 public decimals;
/**
* @custom:semver 0.0.1
*
* @param _owner Address that will initially own this contract.
*/
constructor(address _owner) Ownable() {
constructor(address _owner) Ownable() Semver(0, 0, 1) {
transferOwnership(_owner);
}
......
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;
import { Semver } from "../universal/Semver.sol";
/**
* @custom:proxied
* @custom:predeploy 0x4200000000000000000000000000000000000015
......@@ -10,7 +12,7 @@ pragma solidity 0.8.10;
* set by the "depositor" account, a special system address. Depositor account transactions
* are created by the protocol whenever we move to a new epoch.
*/
contract L1Block {
contract L1Block is Semver {
/**
* @notice Address of the special depositor account.
*/
......@@ -41,6 +43,11 @@ contract L1Block {
*/
uint64 public sequenceNumber;
/**
* @custom:semver 0.0.1
*/
constructor() Semver(0, 0, 1) {}
/**
* @notice Updates the L1 block values.
*
......
......@@ -3,6 +3,7 @@ pragma solidity 0.8.10;
import { L1Block } from "./L1Block.sol";
import { PredeployAddresses } from "../libraries/PredeployAddresses.sol";
import { Semver } from "../universal/Semver.sol";
/**
* @custom:legacy
......@@ -14,7 +15,12 @@ import { PredeployAddresses } from "../libraries/PredeployAddresses.sol";
* If you want to access the L1 block number going forward, you should use the L1Block
* contract instead.
*/
contract L1BlockNumber {
contract L1BlockNumber is Semver {
/**
* @custom:semver 0.0.1
*/
constructor() Semver(0, 0, 1) {}
/**
* @notice Returns the L1 block number.
*/
......
......@@ -4,6 +4,7 @@ pragma solidity ^0.8.9;
import { AddressAliasHelper } from "../vendor/AddressAliasHelper.sol";
import { PredeployAddresses } from "../libraries/PredeployAddresses.sol";
import { CrossDomainMessenger } from "../universal/CrossDomainMessenger.sol";
import { Semver } from "../universal/Semver.sol";
import { L2ToL1MessagePasser } from "./L2ToL1MessagePasser.sol";
/**
......@@ -14,11 +15,13 @@ import { L2ToL1MessagePasser } from "./L2ToL1MessagePasser.sol";
* L2 on the L2 side. Users are generally encouraged to use this contract instead of lower
* level message passing contracts.
*/
contract L2CrossDomainMessenger is CrossDomainMessenger {
contract L2CrossDomainMessenger is CrossDomainMessenger, Semver {
/**
* @custom:semver 0.0.1
*
* @param _l1CrossDomainMessenger Address of the L1CrossDomainMessenger contract.
*/
constructor(address _l1CrossDomainMessenger) {
constructor(address _l1CrossDomainMessenger) Semver(0, 0, 1) {
initialize(_l1CrossDomainMessenger);
}
......
......@@ -3,6 +3,7 @@ pragma solidity ^0.8.9;
import { PredeployAddresses } from "../libraries/PredeployAddresses.sol";
import { StandardBridge } from "../universal/StandardBridge.sol";
import { Semver } from "../universal/Semver.sol";
import { OptimismMintableERC20 } from "../universal/OptimismMintableERC20.sol";
/**
......@@ -17,7 +18,7 @@ import { OptimismMintableERC20 } from "../universal/OptimismMintableERC20.sol";
* tokens with blocklists.
* TODO: ensure that this has 1:1 backwards compatibility
*/
contract L2StandardBridge is StandardBridge {
contract L2StandardBridge is StandardBridge, Semver {
/**
* @custom:legacy
* @notice Emitted whenever a withdrawal from L2 to L1 is initiated.
......@@ -79,9 +80,11 @@ contract L2StandardBridge is StandardBridge {
);
/**
* @custom:semver 0.0.1
*
* @param _otherBridge Address of the L1StandardBridge.
*/
constructor(address payable _otherBridge) {
constructor(address payable _otherBridge) Semver(0, 0, 1) {
initialize(_otherBridge);
}
......
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import { WithdrawalVerifier } from "../libraries/WithdrawalVerifier.sol";
import { Burn } from "../libraries/Burn.sol";
import { Semver } from "../universal/Semver.sol";
import { WithdrawalVerifier } from "../libraries/WithdrawalVerifier.sol";
/**
* @custom:proxied
......@@ -12,7 +13,7 @@ import { Burn } from "../libraries/Burn.sol";
* L2 to L1 can be stored. The storage root of this contract is pulled up to the top level
* of the L2 output to reduce the cost of proving the existence of sent messages.
*/
contract L2ToL1MessagePasser {
contract L2ToL1MessagePasser is Semver {
/**
* @notice Emitted any time a withdrawal is initiated.
*
......@@ -54,6 +55,11 @@ contract L2ToL1MessagePasser {
*/
uint256 public nonce;
/**
* @custom:semver 0.0.1
*/
constructor() Semver(0, 0, 1) {}
/**
* @notice Allows users to withdraw ETH by sending directly to this contract.
*/
......
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import { PredeployAddresses } from "../libraries/PredeployAddresses.sol";
import { Semver } from "../universal/Semver.sol";
import { L2StandardBridge } from "./L2StandardBridge.sol";
import { PredeployAddresses } from "../libraries/PredeployAddresses.sol";
/**
* @custom:proxied
......@@ -11,7 +12,7 @@ import { L2StandardBridge } from "./L2StandardBridge.sol";
* @notice The SequencerFeeVault is the contract that holds any fees paid to the Sequencer during
* transaction processing and block production.
*/
contract SequencerFeeVault {
contract SequencerFeeVault is Semver {
/**
* @notice Minimum balance before a withdrawal can be triggered.
*/
......@@ -22,6 +23,11 @@ contract SequencerFeeVault {
*/
address public l1FeeWallet;
/**
* @custom:semver 0.0.1
*/
constructor() Semver(0, 0, 1) {}
/**
* @notice Allow the contract to receive ETH.
*/
......
......@@ -345,7 +345,7 @@ contract Bridge_Initializer is Messenger_Initializer {
abi.encode(true)
);
vm.startPrank(multisig);
proxy.setCode(type(L1StandardBridge).runtimeCode);
proxy.setCode(address(new L1StandardBridge(payable(address(L1Messenger)))).code);
vm.clearMockedCalls();
address L1Bridge_Impl = proxy.getImplementation();
vm.stopPrank();
......
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import { CommonTest } from "./CommonTest.t.sol";
import { Semver } from "../universal/Semver.sol";
import { Proxy } from "../universal/Proxy.sol";
/**
* @notice Test the Semver contract that is used for semantic versioning
* of various contracts.
*/
contract Semver_Test is CommonTest {
/**
* @notice Global semver contract deployed in setUp. This is used in
* the test cases.
*/
Semver semver;
/**
* @notice Deploy a Semver contract
*/
function setUp() external {
semver = new Semver(7, 8, 9);
}
/**
* @notice Test the getter of the major version
*/
function test_major() external {
assertEq(
semver.MAJOR_VERSION(),
7
);
}
/**
* @notice Test the getter of the minor version
*/
function test_minor() external {
assertEq(
semver.MINOR_VERSION(),
8
);
}
/**
* @notice Test the getter of the patch version
*/
function test_patch() external {
assertEq(
semver.PATCH_VERSION(),
9
);
}
/**
* @notice Since the versions are all immutable, they should
* be able to be accessed from behind a proxy without needing
* to initialize the contract.
*/
function test_behindProxy() external {
Proxy proxy = new Proxy(alice);
vm.prank(alice);
proxy.upgradeTo(address(semver));
assertEq(
Semver(address(proxy)).MAJOR_VERSION(),
7
);
assertEq(
Semver(address(proxy)).MINOR_VERSION(),
8
);
assertEq(
Semver(address(proxy)).PATCH_VERSION(),
9
);
}
}
......@@ -7,6 +7,7 @@ optimizer_runs = 999999
remappings = [
'@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/',
'@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/',
'@eth-optimism/contracts-periphery/=node_modules/@eth-optimism/contracts-periphery/contracts',
'excessively-safe-call/=node_modules/excessively-safe-call/',
'@rari-capital/solmate/=node_modules/@rari-capital/solmate',
'forge-std/=node_modules/forge-std/src',
......
......@@ -65,7 +65,7 @@
"hardhat-deploy": "^0.11.4",
"solhint": "^3.3.6",
"solhint-plugin-prettier": "^0.0.5",
"ts-node": "^10.1.0",
"ts-node": "^10.8.2",
"typechain": "^8.1.0",
"typescript": "^4.6.2"
}
......
......@@ -16,6 +16,7 @@ ignores: [
"eslint-plugin-jsdoc",
"eslint-plugin-prefer-arrow",
"eslint-plugin-react",
"mkdirp",
"@typescript-eslint/eslint-plugin",
"eslint-config-prettier",
"eslint-plugin-prettier",
......
......@@ -10,7 +10,7 @@ import {
import { IERC721 } from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import { Address } from "@openzeppelin/contracts/utils/Address.sol";
import { L2ERC721Bridge } from "../../L2/messaging/L2ERC721Bridge.sol";
import { Semver } from "../../universal/Semver.sol";
import { Semver } from "@eth-optimism/contracts-bedrock/contracts/universal/Semver.sol";
/**
* @title L1ERC721Bridge
......@@ -70,6 +70,8 @@ contract L1ERC721Bridge is Semver, CrossDomainEnabled, OwnableUpgradeable {
mapping(address => mapping(address => mapping(uint256 => bool))) public deposits;
/**
* @custom:semver 0.0.1
*
* @param _messenger Address of the CrossDomainMessenger on this network.
* @param _otherBridge Address of the ERC721 bridge on the other network.
*/
......
......@@ -11,7 +11,7 @@ import { ERC165Checker } from "@openzeppelin/contracts/utils/introspection/ERC16
import { Address } from "@openzeppelin/contracts/utils/Address.sol";
import { L1ERC721Bridge } from "../../L1/messaging/L1ERC721Bridge.sol";
import { IOptimismMintableERC721 } from "../../universal/op-erc721/IOptimismMintableERC721.sol";
import { Semver } from "../../universal/Semver.sol";
import { Semver } from "@eth-optimism/contracts-bedrock/contracts/universal/Semver.sol";
/**
* @title L2ERC721Bridge
......@@ -84,6 +84,8 @@ contract L2ERC721Bridge is Semver, CrossDomainEnabled, OwnableUpgradeable {
address public otherBridge;
/**
* @custom:semver 0.0.1
*
* @param _messenger Address of the CrossDomainMessenger on this network.
* @param _otherBridge Address of the ERC721 bridge on the other network.
*/
......
......@@ -5,7 +5,7 @@ import {
OwnableUpgradeable
} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import { OptimismMintableERC721 } from "./OptimismMintableERC721.sol";
import { Semver } from "../Semver.sol";
import { Semver } from "@eth-optimism/contracts-bedrock/contracts/universal/Semver.sol";
/**
* @title OptimismMintableERC721Factory
......@@ -36,6 +36,8 @@ contract OptimismMintableERC721Factory is Semver, OwnableUpgradeable {
mapping(address => bool) public isStandardOptimismMintableERC721;
/**
* @custom:semver 0.0.1
*
* @param _bridge Address of the ERC721 bridge on this network.
*/
constructor(address _bridge, uint256 _remoteChainId) Semver(0, 0, 1) {
......
......@@ -64,7 +64,7 @@
"@ethersproject/hardware-wallets": "^5.6.1",
"@nomiclabs/hardhat-ethers": "^2.0.2",
"@nomiclabs/hardhat-etherscan": "^3.0.3",
"@nomiclabs/hardhat-waffle": "^2.0.1",
"@nomiclabs/hardhat-waffle": "^2.0.3",
"@rari-capital/solmate": "https://github.com/rari-capital/solmate.git#eaaccf88ac5290299884437e1aee098a96583d54",
"@openzeppelin/contracts": "4.6.0",
"@openzeppelin/contracts-upgradeable": "4.6.0",
......@@ -76,7 +76,7 @@
"copyfiles": "^2.3.0",
"dotenv": "^10.0.0",
"ds-test": "https://github.com/dapphub/ds-test.git#9310e879db8ba3ea6d5c6489a579118fd264a3f5",
"ethereum-waffle": "^3.3.0",
"ethereum-waffle": "^3.4.4",
"ethers": "^5.6.8",
"forge-std": "https://github.com/foundry-rs/forge-std.git#62caef29b0f87a2c6aaaf634b2ca4c09b6867c92",
"hardhat": "^2.9.6",
......@@ -85,12 +85,13 @@
"istanbul": "^0.4.5",
"lint-staged": "11.0.0",
"mocha": "^10.0.0",
"mkdirp": "^1.0.4",
"node-fetch": "^2.6.7",
"prettier": "^2.3.1",
"prettier-plugin-solidity": "^1.0.0-beta.18",
"solhint": "^3.3.6",
"solhint-plugin-prettier": "^0.0.5",
"solidity-coverage": "^0.7.17",
"ts-node": "^10.0.0"
"ts-node": "^10.8.2"
}
}
......@@ -44,7 +44,7 @@
"ethers": "^5.6.8",
"hardhat": "^2.9.6",
"lodash": "^4.17.21",
"ts-node": "^10.7.0"
"ts-node": "^10.8.2"
},
"dependencies": {
"@eth-optimism/common-ts": "^0.6.0",
......
......@@ -33,7 +33,7 @@
},
"devDependencies": {
"ethers": "^5.6.8",
"ts-node": "^10.7.0",
"ts-node": "^10.8.2",
"hardhat": "^2.9.6"
}
}
......@@ -16862,10 +16862,10 @@ ts-interface-checker@^0.1.9:
resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
ts-mocha@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-8.0.0.tgz#962d0fa12eeb6468aa1a6b594bb3bbc818da3ef0"
integrity sha512-Kou1yxTlubLnD5C3unlCVO7nh0HERTezjoVhVw/M5S1SqoUec0WgllQvPk3vzPMc6by8m6xD1uR1yRf8lnVUbA==
ts-mocha@^10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-10.0.0.tgz#41a8d099ac90dbbc64b06976c5025ffaebc53cb9"
integrity sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==
dependencies:
ts-node "7.0.1"
optionalDependencies:
......@@ -16903,12 +16903,12 @@ ts-node@^10.0.0:
make-error "^1.1.1"
yn "3.1.1"
ts-node@^10.1.0:
version "10.8.0"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.0.tgz#3ceb5ac3e67ae8025c1950626aafbdecb55d82ce"
integrity sha512-/fNd5Qh+zTt8Vt1KbYZjRHCE9sI5i7nqfD/dzBBRDeVXZXS6kToW6R7tTU6Nd4XavFs0mAVCg29Q//ML7WsZYA==
ts-node@^10.7.0:
version "10.7.0"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.7.0.tgz#35d503d0fab3e2baa672a0e94f4b40653c2463f5"
integrity sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==
dependencies:
"@cspotcode/source-map-support" "^0.8.0"
"@cspotcode/source-map-support" "0.7.0"
"@tsconfig/node10" "^1.0.7"
"@tsconfig/node12" "^1.0.7"
"@tsconfig/node14" "^1.0.0"
......@@ -16919,15 +16919,15 @@ ts-node@^10.1.0:
create-require "^1.1.0"
diff "^4.0.1"
make-error "^1.1.1"
v8-compile-cache-lib "^3.0.1"
v8-compile-cache-lib "^3.0.0"
yn "3.1.1"
ts-node@^10.7.0:
version "10.7.0"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.7.0.tgz#35d503d0fab3e2baa672a0e94f4b40653c2463f5"
integrity sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==
ts-node@^10.8.2:
version "10.8.2"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.2.tgz#3185b75228cef116bf82ffe8762594f54b2a23f2"
integrity sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==
dependencies:
"@cspotcode/source-map-support" "0.7.0"
"@cspotcode/source-map-support" "^0.8.0"
"@tsconfig/node10" "^1.0.7"
"@tsconfig/node12" "^1.0.7"
"@tsconfig/node14" "^1.0.0"
......@@ -16938,7 +16938,7 @@ ts-node@^10.7.0:
create-require "^1.1.0"
diff "^4.0.1"
make-error "^1.1.1"
v8-compile-cache-lib "^3.0.0"
v8-compile-cache-lib "^3.0.1"
yn "3.1.1"
ts-node@^8.0.2:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment