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