Commit 62749b31 authored by mergify[bot]'s avatar mergify[bot] Committed by GitHub

Merge branch 'develop' into dependabot/npm_and_yarn/vitest/coverage-istanbul-0.34.6

parents 8220c63f 1e207a90
queue_rules: queue_rules:
- name: urgent
queue_conditions:
- label = C-urgent
- name: default - name: default
conditions: [] queue_conditions: []
- name: lowpriority
queue_conditions:
- author=dependabot[bot]
pull_request_rules: pull_request_rules:
- name: Automatic merge on approval - name: Automatic merge on approval
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
package op_e2e package op_e2e
import ( import (
"context"
"math" "math"
"math/big" "math/big"
"testing" "testing"
"time"
"github.com/ethereum-optimism/optimism/op-bindings/bindings" "github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum-optimism/optimism/op-bindings/predeploys" "github.com/ethereum-optimism/optimism/op-bindings/predeploys"
"github.com/ethereum-optimism/optimism/op-e2e/e2eutils/geth" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/transactions"
"github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait"
"github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/derive"
"github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/ethereum-optimism/optimism/op-service/testlog"
"github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/accounts/abi/bind"
...@@ -41,14 +42,14 @@ func TestERC20BridgeDeposits(t *testing.T) { ...@@ -41,14 +42,14 @@ func TestERC20BridgeDeposits(t *testing.T) {
// Deploy WETH9 // Deploy WETH9
weth9Address, tx, WETH9, err := bindings.DeployWETH9(opts, l1Client) weth9Address, tx, WETH9, err := bindings.DeployWETH9(opts, l1Client)
require.NoError(t, err) require.NoError(t, err)
_, err = geth.WaitForTransaction(tx.Hash(), l1Client, 3*time.Duration(cfg.DeployConfig.L1BlockTime)*time.Second) _, err = wait.ForReceiptOK(context.Background(), l1Client, tx.Hash())
require.NoError(t, err, "Waiting for deposit tx on L1") require.NoError(t, err, "Waiting for deposit tx on L1")
// Get some WETH // Get some WETH
opts.Value = big.NewInt(params.Ether) opts.Value = big.NewInt(params.Ether)
tx, err = WETH9.Fallback(opts, []byte{}) tx, err = WETH9.Fallback(opts, []byte{})
require.NoError(t, err) require.NoError(t, err)
_, err = geth.WaitForTransaction(tx.Hash(), l1Client, 3*time.Duration(cfg.DeployConfig.L1BlockTime)*time.Second) _, err = wait.ForReceiptOK(context.Background(), l1Client, tx.Hash())
require.NoError(t, err) require.NoError(t, err)
opts.Value = nil opts.Value = nil
wethBalance, err := WETH9.BalanceOf(&bind.CallOpts{}, opts.From) wethBalance, err := WETH9.BalanceOf(&bind.CallOpts{}, opts.From)
...@@ -62,7 +63,7 @@ func TestERC20BridgeDeposits(t *testing.T) { ...@@ -62,7 +63,7 @@ func TestERC20BridgeDeposits(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
tx, err = optimismMintableTokenFactory.CreateOptimismMintableERC20(l2Opts, weth9Address, "L2-WETH", "L2-WETH") tx, err = optimismMintableTokenFactory.CreateOptimismMintableERC20(l2Opts, weth9Address, "L2-WETH", "L2-WETH")
require.NoError(t, err) require.NoError(t, err)
_, err = geth.WaitForTransaction(tx.Hash(), l2Client, 3*time.Duration(cfg.DeployConfig.L2BlockTime)*time.Second) _, err = wait.ForReceiptOK(context.Background(), l2Client, tx.Hash())
require.NoError(t, err) require.NoError(t, err)
// Get the deployment event to have access to the L2 WETH9 address // Get the deployment event to have access to the L2 WETH9 address
...@@ -77,15 +78,17 @@ func TestERC20BridgeDeposits(t *testing.T) { ...@@ -77,15 +78,17 @@ func TestERC20BridgeDeposits(t *testing.T) {
// Approve WETH9 with the bridge // Approve WETH9 with the bridge
tx, err = WETH9.Approve(opts, cfg.L1Deployments.L1StandardBridgeProxy, new(big.Int).SetUint64(math.MaxUint64)) tx, err = WETH9.Approve(opts, cfg.L1Deployments.L1StandardBridgeProxy, new(big.Int).SetUint64(math.MaxUint64))
require.NoError(t, err) require.NoError(t, err)
_, err = geth.WaitForTransaction(tx.Hash(), l1Client, 6*time.Duration(cfg.DeployConfig.L1BlockTime)*time.Second) _, err = wait.ForReceiptOK(context.Background(), l1Client, tx.Hash())
require.NoError(t, err) require.NoError(t, err)
// Bridge the WETH9 // Bridge the WETH9
l1StandardBridge, err := bindings.NewL1StandardBridge(cfg.L1Deployments.L1StandardBridgeProxy, l1Client) l1StandardBridge, err := bindings.NewL1StandardBridge(cfg.L1Deployments.L1StandardBridgeProxy, l1Client)
require.NoError(t, err) require.NoError(t, err)
tx, err = l1StandardBridge.BridgeERC20(opts, weth9Address, event.LocalToken, big.NewInt(100), 100000, []byte{}) tx, err = transactions.PadGasEstimate(opts, 1.1, func(opts *bind.TransactOpts) (*types.Transaction, error) {
return l1StandardBridge.BridgeERC20(opts, weth9Address, event.LocalToken, big.NewInt(100), 100000, []byte{})
})
require.NoError(t, err) require.NoError(t, err)
depositReceipt, err := geth.WaitForTransaction(tx.Hash(), l1Client, 3*time.Duration(cfg.DeployConfig.L1BlockTime)*time.Second) depositReceipt, err := wait.ForReceiptOK(context.Background(), l1Client, tx.Hash())
require.NoError(t, err) require.NoError(t, err)
t.Log("Deposit through L1StandardBridge", "gas used", depositReceipt.GasUsed) t.Log("Deposit through L1StandardBridge", "gas used", depositReceipt.GasUsed)
...@@ -104,7 +107,7 @@ func TestERC20BridgeDeposits(t *testing.T) { ...@@ -104,7 +107,7 @@ func TestERC20BridgeDeposits(t *testing.T) {
depositTx, err := derive.UnmarshalDepositLogEvent(&depositEvent.Raw) depositTx, err := derive.UnmarshalDepositLogEvent(&depositEvent.Raw)
require.NoError(t, err) require.NoError(t, err)
_, err = geth.WaitForTransaction(types.NewTx(depositTx).Hash(), l2Client, 3*time.Duration(cfg.DeployConfig.L2BlockTime)*time.Second) _, err = wait.ForReceiptOK(context.Background(), l2Client, types.NewTx(depositTx).Hash())
require.NoError(t, err) require.NoError(t, err)
// Ensure that the deposit went through // Ensure that the deposit went through
......
...@@ -55,7 +55,6 @@ func WaitForL1OriginOnL2(l1BlockNum uint64, client *ethclient.Client, timeout ti ...@@ -55,7 +55,6 @@ func WaitForL1OriginOnL2(l1BlockNum uint64, client *ethclient.Client, timeout ti
} }
func WaitForTransaction(hash common.Hash, client *ethclient.Client, timeout time.Duration) (*types.Receipt, error) { func WaitForTransaction(hash common.Hash, client *ethclient.Client, timeout time.Duration) (*types.Receipt, error) {
timeoutCh := time.After(timeout)
ticker := time.NewTicker(100 * time.Millisecond) ticker := time.NewTicker(100 * time.Millisecond)
defer ticker.Stop() defer ticker.Stop()
ctx, cancel := context.WithTimeout(context.Background(), timeout) ctx, cancel := context.WithTimeout(context.Background(), timeout)
...@@ -69,7 +68,7 @@ func WaitForTransaction(hash common.Hash, client *ethclient.Client, timeout time ...@@ -69,7 +68,7 @@ func WaitForTransaction(hash common.Hash, client *ethclient.Client, timeout time
} }
select { select {
case <-timeoutCh: case <-ctx.Done():
tip, err := client.BlockByNumber(context.Background(), nil) tip, err := client.BlockByNumber(context.Background(), nil)
if err != nil { if err != nil {
return nil, err return nil, err
......
...@@ -22,6 +22,8 @@ func ForReceiptFail(ctx context.Context, client *ethclient.Client, hash common.H ...@@ -22,6 +22,8 @@ func ForReceiptFail(ctx context.Context, client *ethclient.Client, hash common.H
} }
func ForReceipt(ctx context.Context, client *ethclient.Client, hash common.Hash, status uint64) (*types.Receipt, error) { func ForReceipt(ctx context.Context, client *ethclient.Client, hash common.Hash, status uint64) (*types.Receipt, error) {
ctx, cancel := context.WithTimeout(ctx, 2*time.Minute)
defer cancel()
ticker := time.NewTicker(100 * time.Millisecond) ticker := time.NewTicker(100 * time.Millisecond)
defer ticker.Stop() defer ticker.Stop()
for { for {
......
FROM ethereum/client-go:v1.13.1 FROM ethereum/client-go:v1.13.2
RUN apk add --no-cache jq RUN apk add --no-cache jq
......
...@@ -535,7 +535,7 @@ PreimageOracle_Test:test_loadKeccak256PreimagePart_outOfBoundsOffset_reverts() ( ...@@ -535,7 +535,7 @@ PreimageOracle_Test:test_loadKeccak256PreimagePart_outOfBoundsOffset_reverts() (
PreimageOracle_Test:test_loadKeccak256PreimagePart_succeeds() (gas: 76076) PreimageOracle_Test:test_loadKeccak256PreimagePart_succeeds() (gas: 76076)
PreimageOracle_Test:test_loadLocalData_onePart_succeeds() (gas: 75818) PreimageOracle_Test:test_loadLocalData_onePart_succeeds() (gas: 75818)
PreimageOracle_Test:test_loadLocalData_outOfBoundsOffset_reverts() (gas: 8803) PreimageOracle_Test:test_loadLocalData_outOfBoundsOffset_reverts() (gas: 8803)
ProtocolVersions_Initialize_Test:test_initialize_events_succeeds() (gas: 52175) ProtocolVersions_Initialize_Test:test_initialize_events_succeeds() (gas: 52181)
ProtocolVersions_Initialize_Test:test_initialize_values_succeeds() (gas: 32301) ProtocolVersions_Initialize_Test:test_initialize_values_succeeds() (gas: 32301)
ProtocolVersions_Setters_TestFail:test_setRecommended_notOwner_reverts() (gas: 15508) ProtocolVersions_Setters_TestFail:test_setRecommended_notOwner_reverts() (gas: 15508)
ProtocolVersions_Setters_TestFail:test_setRequired_notOwner_reverts() (gas: 15520) ProtocolVersions_Setters_TestFail:test_setRequired_notOwner_reverts() (gas: 15520)
...@@ -659,11 +659,14 @@ SequencerFeeVault_Test:test_withdraw_toL1_succeeds() (gas: 171675) ...@@ -659,11 +659,14 @@ SequencerFeeVault_Test:test_withdraw_toL1_succeeds() (gas: 171675)
SetPrevBaseFee_Test:test_setPrevBaseFee_succeeds() (gas: 11549) SetPrevBaseFee_Test:test_setPrevBaseFee_succeeds() (gas: 11549)
StandardBridge_Stateless_Test:test_isCorrectTokenPair_succeeds() (gas: 49936) StandardBridge_Stateless_Test:test_isCorrectTokenPair_succeeds() (gas: 49936)
StandardBridge_Stateless_Test:test_isOptimismMintableERC20_succeeds() (gas: 33072) StandardBridge_Stateless_Test:test_isOptimismMintableERC20_succeeds() (gas: 33072)
SystemConfig_Initialize_Test:test_initialize_events_succeeds() (gas: 71945) Storage_Roundtrip_Test:test_setGetAddress_succeeds(bytes32,address) (runs: 64, μ: 31799, ~: 31799)
SystemConfig_Initialize_Test:test_initialize_startBlockOverride_succeeds() (gas: 65127) Storage_Roundtrip_Test:test_setGetBytes32_succeeds(bytes32,bytes32) (runs: 64, μ: 31643, ~: 31643)
Storage_Roundtrip_Test:test_setGetUint_succeeds(bytes32,uint256) (runs: 64, μ: 30998, ~: 31620)
SystemConfig_Initialize_Test:test_initialize_events_succeeds() (gas: 71950)
SystemConfig_Initialize_Test:test_initialize_startBlockOverride_succeeds() (gas: 65132)
SystemConfig_Initialize_Test:test_initialize_values_succeeds() (gas: 64946) SystemConfig_Initialize_Test:test_initialize_values_succeeds() (gas: 64946)
SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 55589) SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 55589)
SystemConfig_Initialize_TestFail:test_initialize_startBlock_reverts() (gas: 78208) SystemConfig_Initialize_TestFail:test_initialize_startBlock_reverts() (gas: 78214)
SystemConfig_Setters_TestFail:test_setBatcherHash_notOwner_reverts() (gas: 15607) SystemConfig_Setters_TestFail:test_setBatcherHash_notOwner_reverts() (gas: 15607)
SystemConfig_Setters_TestFail:test_setGasConfig_notOwner_reverts() (gas: 15577) SystemConfig_Setters_TestFail:test_setGasConfig_notOwner_reverts() (gas: 15577)
SystemConfig_Setters_TestFail:test_setGasLimit_notOwner_reverts() (gas: 15676) SystemConfig_Setters_TestFail:test_setGasLimit_notOwner_reverts() (gas: 15676)
......
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
"src/L1/L1StandardBridge.sol": "0xdafe88c8b1255202eb674f4ebfb0dca791d2c87480c2c8d00cc46859671a5fa8", "src/L1/L1StandardBridge.sol": "0xdafe88c8b1255202eb674f4ebfb0dca791d2c87480c2c8d00cc46859671a5fa8",
"src/L1/L2OutputOracle.sol": "0xd263f43b79b6f1dca3a27f8bdbacf97deb1a3a95b7e1d395079700eecea65402", "src/L1/L2OutputOracle.sol": "0xd263f43b79b6f1dca3a27f8bdbacf97deb1a3a95b7e1d395079700eecea65402",
"src/L1/OptimismPortal.sol": "0x8fdab55ab7c18bb7e037f0719c749f2cf1b0ca2da17da4ea0d1a4c5e2243ac60", "src/L1/OptimismPortal.sol": "0x8fdab55ab7c18bb7e037f0719c749f2cf1b0ca2da17da4ea0d1a4c5e2243ac60",
"src/L1/ProtocolVersions.sol": "0x2f980d89b583936c7af5d71a1e2c73d026d895c1687abdd09815e4581032cee5", "src/L1/ProtocolVersions.sol": "0xc4f142ed9c195871ee21902245a9e2b902f8e38fcc77e6f61fb98f4d399031e4",
"src/L1/SystemConfig.sol": "0x4eb501cc372b135bf9c5ceaf66b1bf21a166c8accc5dbd55276c854f12955dd8", "src/L1/SystemConfig.sol": "0xf23f2c4425996c2719e1baddf468b328de724305f1852b59cd0b09c843075d63",
"src/L2/BaseFeeVault.sol": "0xc347c1aebe69178e72d2b1d3e700bbf84e39975319465bb85d69fd0d60fc1759", "src/L2/BaseFeeVault.sol": "0xc347c1aebe69178e72d2b1d3e700bbf84e39975319465bb85d69fd0d60fc1759",
"src/L2/GasPriceOracle.sol": "0x88efffbd40f8d012d700a5d7fde0d92266f65e9d7006cd8f034bacaa036d0eb2", "src/L2/GasPriceOracle.sol": "0x88efffbd40f8d012d700a5d7fde0d92266f65e9d7006cd8f034bacaa036d0eb2",
"src/L2/L1Block.sol": "0x1ed9aa36036ded00a0383692eca81a22f668d64e22af973559d2ccefc86825c0", "src/L2/L1Block.sol": "0x1ed9aa36036ded00a0383692eca81a22f668d64e22af973559d2ccefc86825c0",
......
...@@ -3,6 +3,7 @@ pragma solidity 0.8.15; ...@@ -3,6 +3,7 @@ pragma solidity 0.8.15;
import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import { ISemver } from "src/universal/ISemver.sol"; import { ISemver } from "src/universal/ISemver.sol";
import { Storage } from "src/libraries/Storage.sol";
/// @notice ProtocolVersion is a numeric identifier of the protocol version. /// @notice ProtocolVersion is a numeric identifier of the protocol version.
type ProtocolVersion is uint256; type ProtocolVersion is uint256;
...@@ -34,8 +35,8 @@ contract ProtocolVersions is OwnableUpgradeable, ISemver { ...@@ -34,8 +35,8 @@ contract ProtocolVersions is OwnableUpgradeable, ISemver {
event ConfigUpdate(uint256 indexed version, UpdateType indexed updateType, bytes data); event ConfigUpdate(uint256 indexed version, UpdateType indexed updateType, bytes data);
/// @notice Semantic version. /// @notice Semantic version.
/// @custom:semver 0.1.0 /// @custom:semver 0.2.0
string public constant version = "0.1.0"; string public constant version = "0.2.0";
/// @notice Constructs the ProtocolVersion contract. Cannot set /// @notice Constructs the ProtocolVersion contract. Cannot set
/// the owner to `address(0)` due to the Ownable contract's /// the owner to `address(0)` due to the Ownable contract's
...@@ -67,30 +68,10 @@ contract ProtocolVersions is OwnableUpgradeable, ISemver { ...@@ -67,30 +68,10 @@ contract ProtocolVersions is OwnableUpgradeable, ISemver {
_setRecommended(_recommended); _setRecommended(_recommended);
} }
/// @notice Returns a ProtocolVersion stored in an arbitrary storage slot.
/// These storage slots decouple the storage layout from solc's automation.
/// @param _slot The storage slot to retrieve the address from.
function _getProtocolVersion(bytes32 _slot) internal view returns (ProtocolVersion out_) {
assembly {
out_ := sload(_slot)
}
}
/// @notice Stores a ProtocolVersion in an arbitrary storage slot, `_slot`.
/// @param _version The protocol version to store
/// @param _slot The storage slot to store the address in.
/// @dev WARNING! This function must be used cautiously, as it allows for overwriting values
/// in arbitrary storage slots.
function _setProtocolVersion(ProtocolVersion _version, bytes32 _slot) internal {
assembly {
sstore(_slot, _version)
}
}
/// @notice High level getter for the required protocol version. /// @notice High level getter for the required protocol version.
/// @return out_ Required protocol version to sync to the head of the chain. /// @return out_ Required protocol version to sync to the head of the chain.
function required() external view returns (ProtocolVersion out_) { function required() external view returns (ProtocolVersion out_) {
out_ = _getProtocolVersion(REQUIRED_SLOT); out_ = ProtocolVersion.wrap(Storage.getUint(REQUIRED_SLOT));
} }
/// @notice Updates the required protocol version. Can only be called by the owner. /// @notice Updates the required protocol version. Can only be called by the owner.
...@@ -102,7 +83,7 @@ contract ProtocolVersions is OwnableUpgradeable, ISemver { ...@@ -102,7 +83,7 @@ contract ProtocolVersions is OwnableUpgradeable, ISemver {
/// @notice Internal function for updating the required protocol version. /// @notice Internal function for updating the required protocol version.
/// @param _required New required protocol version. /// @param _required New required protocol version.
function _setRequired(ProtocolVersion _required) internal { function _setRequired(ProtocolVersion _required) internal {
_setProtocolVersion(_required, REQUIRED_SLOT); Storage.setUint(REQUIRED_SLOT, ProtocolVersion.unwrap(_required));
bytes memory data = abi.encode(_required); bytes memory data = abi.encode(_required);
emit ConfigUpdate(VERSION, UpdateType.REQUIRED_PROTOCOL_VERSION, data); emit ConfigUpdate(VERSION, UpdateType.REQUIRED_PROTOCOL_VERSION, data);
...@@ -111,7 +92,7 @@ contract ProtocolVersions is OwnableUpgradeable, ISemver { ...@@ -111,7 +92,7 @@ contract ProtocolVersions is OwnableUpgradeable, ISemver {
/// @notice High level getter for the recommended protocol version. /// @notice High level getter for the recommended protocol version.
/// @return out_ Recommended protocol version to sync to the head of the chain. /// @return out_ Recommended protocol version to sync to the head of the chain.
function recommended() external view returns (ProtocolVersion out_) { function recommended() external view returns (ProtocolVersion out_) {
out_ = _getProtocolVersion(RECOMMENDED_SLOT); out_ = ProtocolVersion.wrap(Storage.getUint(RECOMMENDED_SLOT));
} }
/// @notice Updates the recommended protocol version. Can only be called by the owner. /// @notice Updates the recommended protocol version. Can only be called by the owner.
...@@ -123,7 +104,7 @@ contract ProtocolVersions is OwnableUpgradeable, ISemver { ...@@ -123,7 +104,7 @@ contract ProtocolVersions is OwnableUpgradeable, ISemver {
/// @notice Internal function for updating the recommended protocol version. /// @notice Internal function for updating the recommended protocol version.
/// @param _recommended New recommended protocol version. /// @param _recommended New recommended protocol version.
function _setRecommended(ProtocolVersion _recommended) internal { function _setRecommended(ProtocolVersion _recommended) internal {
_setProtocolVersion(_recommended, RECOMMENDED_SLOT); Storage.setUint(RECOMMENDED_SLOT, ProtocolVersion.unwrap(_recommended));
bytes memory data = abi.encode(_recommended); bytes memory data = abi.encode(_recommended);
emit ConfigUpdate(VERSION, UpdateType.RECOMMENDED_PROTOCOL_VERSION, data); emit ConfigUpdate(VERSION, UpdateType.RECOMMENDED_PROTOCOL_VERSION, data);
......
...@@ -4,6 +4,7 @@ pragma solidity 0.8.15; ...@@ -4,6 +4,7 @@ pragma solidity 0.8.15;
import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import { ISemver } from "src/universal/ISemver.sol"; import { ISemver } from "src/universal/ISemver.sol";
import { ResourceMetering } from "src/L1/ResourceMetering.sol"; import { ResourceMetering } from "src/L1/ResourceMetering.sol";
import { Storage } from "src/libraries/Storage.sol";
/// @title SystemConfig /// @title SystemConfig
/// @notice The SystemConfig contract is used to manage configuration of an Optimism network. /// @notice The SystemConfig contract is used to manage configuration of an Optimism network.
...@@ -99,8 +100,8 @@ contract SystemConfig is OwnableUpgradeable, ISemver { ...@@ -99,8 +100,8 @@ contract SystemConfig is OwnableUpgradeable, ISemver {
uint256 public startBlock; uint256 public startBlock;
/// @notice Semantic version. /// @notice Semantic version.
/// @custom:semver 1.7.1 /// @custom:semver 1.8.0
string public constant version = "1.7.1"; string public constant version = "1.8.0";
/// @notice Constructs the SystemConfig contract. Cannot set /// @notice Constructs the SystemConfig contract. Cannot set
/// the owner to `address(0)` due to the Ownable contract's /// the owner to `address(0)` due to the Ownable contract's
...@@ -174,13 +175,13 @@ contract SystemConfig is OwnableUpgradeable, ISemver { ...@@ -174,13 +175,13 @@ contract SystemConfig is OwnableUpgradeable, ISemver {
_setGasLimit(_gasLimit); _setGasLimit(_gasLimit);
_setUnsafeBlockSigner(_unsafeBlockSigner); _setUnsafeBlockSigner(_unsafeBlockSigner);
_setAddress(_batchInbox, BATCH_INBOX_SLOT); Storage.setAddress(BATCH_INBOX_SLOT, _batchInbox);
_setAddress(_addresses.l1CrossDomainMessenger, L1_CROSS_DOMAIN_MESSENGER_SLOT); Storage.setAddress(L1_CROSS_DOMAIN_MESSENGER_SLOT, _addresses.l1CrossDomainMessenger);
_setAddress(_addresses.l1ERC721Bridge, L1_ERC_721_BRIDGE_SLOT); Storage.setAddress(L1_ERC_721_BRIDGE_SLOT, _addresses.l1ERC721Bridge);
_setAddress(_addresses.l1StandardBridge, L1_STANDARD_BRIDGE_SLOT); Storage.setAddress(L1_STANDARD_BRIDGE_SLOT, _addresses.l1StandardBridge);
_setAddress(_addresses.l2OutputOracle, L2_OUTPUT_ORACLE_SLOT); Storage.setAddress(L2_OUTPUT_ORACLE_SLOT, _addresses.l2OutputOracle);
_setAddress(_addresses.optimismPortal, OPTIMISM_PORTAL_SLOT); Storage.setAddress(OPTIMISM_PORTAL_SLOT, _addresses.optimismPortal);
_setAddress(_addresses.optimismMintableERC20Factory, OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT); Storage.setAddress(OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT, _addresses.optimismMintableERC20Factory);
_setStartBlock(_startBlock); _setStartBlock(_startBlock);
...@@ -203,65 +204,43 @@ contract SystemConfig is OwnableUpgradeable, ISemver { ...@@ -203,65 +204,43 @@ contract SystemConfig is OwnableUpgradeable, ISemver {
/// key corresponding to this address. /// key corresponding to this address.
/// @return addr_ Address of the unsafe block signer. /// @return addr_ Address of the unsafe block signer.
// solhint-disable-next-line ordering // solhint-disable-next-line ordering
function unsafeBlockSigner() external view returns (address addr_) { function unsafeBlockSigner() public view returns (address addr_) {
addr_ = _getAddress(UNSAFE_BLOCK_SIGNER_SLOT); addr_ = Storage.getAddress(UNSAFE_BLOCK_SIGNER_SLOT);
}
/// @notice Stores an address in an arbitrary storage slot, `_slot`.
/// @param _addr The address to store
/// @param _slot The storage slot to store the address in.
/// @dev WARNING! This function must be used cautiously, as it allows for overwriting values
/// in arbitrary storage slots. Solc will add checks that the data passed as `_addr`
/// is 20 bytes or less.
function _setAddress(address _addr, bytes32 _slot) internal {
assembly {
sstore(_slot, _addr)
}
}
/// @notice Returns an address stored in an arbitrary storage slot.
/// These storage slots decouple the storage layout from
/// solc's automation.
/// @param _slot The storage slot to retrieve the address from.
function _getAddress(bytes32 _slot) internal view returns (address addr_) {
assembly {
addr_ := sload(_slot)
}
} }
/// @notice Getter for the L1CrossDomainMessenger address. /// @notice Getter for the L1CrossDomainMessenger address.
function l1CrossDomainMessenger() external view returns (address addr_) { function l1CrossDomainMessenger() external view returns (address addr_) {
addr_ = _getAddress(L1_CROSS_DOMAIN_MESSENGER_SLOT); addr_ = Storage.getAddress(L1_CROSS_DOMAIN_MESSENGER_SLOT);
} }
/// @notice Getter for the L1ERC721Bridge address. /// @notice Getter for the L1ERC721Bridge address.
function l1ERC721Bridge() external view returns (address addr_) { function l1ERC721Bridge() external view returns (address addr_) {
addr_ = _getAddress(L1_ERC_721_BRIDGE_SLOT); addr_ = Storage.getAddress(L1_ERC_721_BRIDGE_SLOT);
} }
/// @notice Getter for the L1StandardBridge address. /// @notice Getter for the L1StandardBridge address.
function l1StandardBridge() external view returns (address addr_) { function l1StandardBridge() external view returns (address addr_) {
addr_ = _getAddress(L1_STANDARD_BRIDGE_SLOT); addr_ = Storage.getAddress(L1_STANDARD_BRIDGE_SLOT);
} }
/// @notice Getter for the L2OutputOracle address. /// @notice Getter for the L2OutputOracle address.
function l2OutputOracle() external view returns (address addr_) { function l2OutputOracle() external view returns (address addr_) {
addr_ = _getAddress(L2_OUTPUT_ORACLE_SLOT); addr_ = Storage.getAddress(L2_OUTPUT_ORACLE_SLOT);
} }
/// @notice Getter for the OptimismPortal address. /// @notice Getter for the OptimismPortal address.
function optimismPortal() external view returns (address addr_) { function optimismPortal() external view returns (address addr_) {
addr_ = _getAddress(OPTIMISM_PORTAL_SLOT); addr_ = Storage.getAddress(OPTIMISM_PORTAL_SLOT);
} }
/// @notice Getter for the OptimismMintableERC20Factory address. /// @notice Getter for the OptimismMintableERC20Factory address.
function optimismMintableERC20Factory() external view returns (address addr_) { function optimismMintableERC20Factory() external view returns (address addr_) {
addr_ = _getAddress(OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT); addr_ = Storage.getAddress(OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT);
} }
/// @notice Getter for the BatchInbox address. /// @notice Getter for the BatchInbox address.
function batchInbox() external view returns (address addr_) { function batchInbox() external view returns (address addr_) {
addr_ = _getAddress(BATCH_INBOX_SLOT); addr_ = Storage.getAddress(BATCH_INBOX_SLOT);
} }
/// @notice Sets the start block in a backwards compatible way. Proxies /// @notice Sets the start block in a backwards compatible way. Proxies
...@@ -294,7 +273,7 @@ contract SystemConfig is OwnableUpgradeable, ISemver { ...@@ -294,7 +273,7 @@ contract SystemConfig is OwnableUpgradeable, ISemver {
/// @notice Updates the unsafe block signer address. /// @notice Updates the unsafe block signer address.
/// @param _unsafeBlockSigner New unsafe block signer address. /// @param _unsafeBlockSigner New unsafe block signer address.
function _setUnsafeBlockSigner(address _unsafeBlockSigner) internal { function _setUnsafeBlockSigner(address _unsafeBlockSigner) internal {
_setAddress(_unsafeBlockSigner, UNSAFE_BLOCK_SIGNER_SLOT); Storage.setAddress(UNSAFE_BLOCK_SIGNER_SLOT, _unsafeBlockSigner);
bytes memory data = abi.encode(_unsafeBlockSigner); bytes memory data = abi.encode(_unsafeBlockSigner);
emit ConfigUpdate(VERSION, UpdateType.UNSAFE_BLOCK_SIGNER, data); emit ConfigUpdate(VERSION, UpdateType.UNSAFE_BLOCK_SIGNER, data);
......
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @title Storage
/// @notice Storage handles reading and writing to arbitary storage locations
library Storage {
/// @notice Returns an address stored in an arbitrary storage slot.
/// These storage slots decouple the storage layout from
/// solc's automation.
/// @param _slot The storage slot to retrieve the address from.
function getAddress(bytes32 _slot) internal view returns (address addr_) {
assembly {
addr_ := sload(_slot)
}
}
/// @notice Stores an address in an arbitrary storage slot, `_slot`.
/// @param _slot The storage slot to store the address in.
/// @param _address The protocol version to store
/// @dev WARNING! This function must be used cautiously, as it allows for overwriting addresses
/// in arbitrary storage slots.
function setAddress(bytes32 _slot, address _address) internal {
assembly {
sstore(_slot, _address)
}
}
/// @notice Returns a uint256 stored in an arbitrary storage slot.
/// These storage slots decouple the storage layout from
/// solc's automation.
/// @param _slot The storage slot to retrieve the address from.
function getUint(bytes32 _slot) internal view returns (uint256 value_) {
assembly {
value_ := sload(_slot)
}
}
/// @notice Stores a value in an arbitrary storage slot, `_slot`.
/// @param _slot The storage slot to store the address in.
/// @param _value The protocol version to store
/// @dev WARNING! This function must be used cautiously, as it allows for overwriting values
/// in arbitrary storage slots.
function setUint(bytes32 _slot, uint256 _value) internal {
assembly {
sstore(_slot, _value)
}
}
/// @notice Returns a bytes32 stored in an arbitrary storage slot.
/// These storage slots decouple the storage layout from
/// solc's automation.
/// @param _slot The storage slot to retrieve the address from.
function getBytes32(bytes32 _slot) internal view returns (bytes32 value_) {
assembly {
value_ := sload(_slot)
}
}
/// @notice Stores a bytes32 value in an arbitrary storage slot, `_slot`.
/// @param _slot The storage slot to store the address in.
/// @param _value The protocol version to store
/// @dev WARNING! This function must be used cautiously, as it allows for overwriting values
/// in arbitrary storage slots.
function setBytes32(bytes32 _slot, bytes32 _value) internal {
assembly {
sstore(_slot, _value)
}
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
// Target contract
import { Storage } from "src/libraries/Storage.sol";
import { Test } from "forge-std/Test.sol";
import { console } from "forge-std/console.sol";
/// @title StorageWrapper
/// @notice StorageWrapper wraps the Storage library for testing purposes.
/// It exists to prevent storage collisions with the `Test` contract.
contract StorageWrapper {
function getAddress(bytes32 _slot) external view returns (address) {
return Storage.getAddress(_slot);
}
function setAddress(bytes32 _slot, address _address) external {
Storage.setAddress(_slot, _address);
}
function getUint(bytes32 _slot) external view returns (uint256) {
return Storage.getUint(_slot);
}
function setUint(bytes32 _slot, uint256 _value) external {
Storage.setUint(_slot, _value);
}
function getBytes32(bytes32 _slot) external view returns (bytes32) {
return Storage.getBytes32(_slot);
}
function setBytes32(bytes32 _slot, bytes32 _value) external {
Storage.setBytes32(_slot, _value);
}
}
contract Storage_Roundtrip_Test is Test {
StorageWrapper wrapper;
function setUp() external {
wrapper = new StorageWrapper();
}
function test_setGetUint_succeeds(bytes32 slot, uint256 num) external {
wrapper.setUint(slot, num);
assertEq(wrapper.getUint(slot), num);
assertEq(num, uint256(vm.load(address(wrapper), slot)));
}
function test_setGetAddress_succeeds(bytes32 slot, address addr) external {
wrapper.setAddress(slot, addr);
assertEq(wrapper.getAddress(slot), addr);
assertEq(addr, address(uint160(uint256(vm.load(address(wrapper), slot)))));
}
function test_setGetBytes32_succeeds(bytes32 slot, bytes32 hash) external {
wrapper.setBytes32(slot, hash);
assertEq(wrapper.getBytes32(slot), hash);
assertEq(hash, vm.load(address(wrapper), slot));
}
}
...@@ -80,6 +80,6 @@ ...@@ -80,6 +80,6 @@
"@testing-library/react": "^14.0.0", "@testing-library/react": "^14.0.0",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"viem": "^1.13.0" "viem": "^1.14.0"
} }
} }
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
"jsdom": "^22.1.0", "jsdom": "^22.1.0",
"tsup": "^7.2.0", "tsup": "^7.2.0",
"typescript": "^5.2.2", "typescript": "^5.2.2",
"viem": "^1.13.0", "viem": "^1.14.0",
"vite": "^4.4.6", "vite": "^4.4.6",
"vitest": "^0.34.2" "vitest": "^0.34.2"
}, },
......
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
"ts-node": "^10.9.1", "ts-node": "^10.9.1",
"typedoc": "^0.25.1", "typedoc": "^0.25.1",
"typescript": "^5.2.2", "typescript": "^5.2.2",
"viem": "^1.13.0", "viem": "^1.14.0",
"vitest": "^0.34.2", "vitest": "^0.34.2",
"zod": "^3.22.1" "zod": "^3.22.1"
}, },
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
"@vitest/coverage-istanbul": "^0.34.6", "@vitest/coverage-istanbul": "^0.34.6",
"tsup": "^7.2.0", "tsup": "^7.2.0",
"typescript": "^5.2.2", "typescript": "^5.2.2",
"viem": "^1.13.0", "viem": "^1.14.0",
"vite": "^4.4.9", "vite": "^4.4.9",
"vitest": "^0.34.1", "vitest": "^0.34.1",
"zod": "^3.22.0" "zod": "^3.22.0"
......
...@@ -292,11 +292,11 @@ importers: ...@@ -292,11 +292,11 @@ importers:
specifier: ^18.2.0 specifier: ^18.2.0
version: 18.2.0(react@18.2.0) version: 18.2.0(react@18.2.0)
viem: viem:
specifier: ^1.13.0 specifier: ^1.14.0
version: 1.13.0(typescript@5.2.2)(zod@3.22.0) version: 1.14.0(typescript@5.2.2)(zod@3.22.0)
wagmi: wagmi:
specifier: '>1.0.0' specifier: '>1.0.0'
version: 1.0.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(viem@1.13.0) version: 1.0.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(viem@1.14.0)
devDependencies: devDependencies:
'@eth-optimism/contracts-bedrock': '@eth-optimism/contracts-bedrock':
specifier: workspace:* specifier: workspace:*
...@@ -318,7 +318,7 @@ importers: ...@@ -318,7 +318,7 @@ importers:
version: 1.5.2(@wagmi/core@1.3.8)(typescript@5.2.2)(wagmi@1.0.1) version: 1.5.2(@wagmi/core@1.3.8)(typescript@5.2.2)(wagmi@1.0.1)
'@wagmi/core': '@wagmi/core':
specifier: ^1.3.8 specifier: ^1.3.8
version: 1.3.8(react@18.2.0)(typescript@5.2.2)(viem@1.13.0) version: 1.3.8(react@18.2.0)(typescript@5.2.2)(viem@1.14.0)
abitype: abitype:
specifier: ^0.9.3 specifier: ^0.9.3
version: 0.9.3(typescript@5.2.2) version: 0.9.3(typescript@5.2.2)
...@@ -432,8 +432,8 @@ importers: ...@@ -432,8 +432,8 @@ importers:
specifier: ^5.2.2 specifier: ^5.2.2
version: 5.2.2 version: 5.2.2
viem: viem:
specifier: ^1.13.0 specifier: ^1.14.0
version: 1.13.0(typescript@5.2.2)(zod@3.22.0) version: 1.14.0(typescript@5.2.2)(zod@3.22.0)
vite: vite:
specifier: ^4.4.6 specifier: ^4.4.6
version: 4.4.6(@types/node@20.6.3) version: 4.4.6(@types/node@20.6.3)
...@@ -523,8 +523,8 @@ importers: ...@@ -523,8 +523,8 @@ importers:
specifier: ^5.2.2 specifier: ^5.2.2
version: 5.2.2 version: 5.2.2
viem: viem:
specifier: ^1.13.0 specifier: ^1.14.0
version: 1.13.0(typescript@5.2.2)(zod@3.22.1) version: 1.14.0(typescript@5.2.2)(zod@3.22.1)
vitest: vitest:
specifier: ^0.34.2 specifier: ^0.34.2
version: 0.34.2(jsdom@22.1.0) version: 0.34.2(jsdom@22.1.0)
...@@ -563,8 +563,8 @@ importers: ...@@ -563,8 +563,8 @@ importers:
specifier: ^5.2.2 specifier: ^5.2.2
version: 5.2.2 version: 5.2.2
viem: viem:
specifier: ^1.13.0 specifier: ^1.14.0
version: 1.13.0(typescript@5.2.2)(zod@3.22.0) version: 1.14.0(typescript@5.2.2)(zod@3.22.0)
vite: vite:
specifier: ^4.4.9 specifier: ^4.4.9
version: 4.4.9(@types/node@20.6.3) version: 4.4.9(@types/node@20.6.3)
...@@ -3180,7 +3180,7 @@ packages: ...@@ -3180,7 +3180,7 @@ packages:
resolution: {integrity: sha512-gYw0ki/EAuV1oSyMxpqandHjnthZjYYy+YWpTAzf8BqfXM3ItcZLpjxfg+3+mXW8HIO+3jw6T9iiqEXsqHaMMw==} resolution: {integrity: sha512-gYw0ki/EAuV1oSyMxpqandHjnthZjYYy+YWpTAzf8BqfXM3ItcZLpjxfg+3+mXW8HIO+3jw6T9iiqEXsqHaMMw==}
dependencies: dependencies:
'@safe-global/safe-gateway-typescript-sdk': 3.7.3 '@safe-global/safe-gateway-typescript-sdk': 3.7.3
viem: 1.13.0(typescript@5.2.2)(zod@3.22.0) viem: 1.14.0(typescript@5.2.2)(zod@3.22.0)
transitivePeerDependencies: transitivePeerDependencies:
- bufferutil - bufferutil
- encoding - encoding
...@@ -4686,7 +4686,7 @@ packages: ...@@ -4686,7 +4686,7 @@ packages:
wagmi: wagmi:
optional: true optional: true
dependencies: dependencies:
'@wagmi/core': 1.3.8(react@18.2.0)(typescript@5.2.2)(viem@1.13.0) '@wagmi/core': 1.3.8(react@18.2.0)(typescript@5.2.2)(viem@1.14.0)
abitype: 0.8.7(typescript@5.2.2)(zod@3.22.1) abitype: 0.8.7(typescript@5.2.2)(zod@3.22.1)
abort-controller: 3.0.0 abort-controller: 3.0.0
bundle-require: 3.1.2(esbuild@0.16.17) bundle-require: 3.1.2(esbuild@0.16.17)
...@@ -4708,15 +4708,15 @@ packages: ...@@ -4708,15 +4708,15 @@ packages:
picocolors: 1.0.0 picocolors: 1.0.0
prettier: 2.8.8 prettier: 2.8.8
typescript: 5.2.2 typescript: 5.2.2
viem: 1.13.0(typescript@5.2.2)(zod@3.22.1) viem: 1.14.0(typescript@5.2.2)(zod@3.22.1)
wagmi: 1.0.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(viem@1.13.0) wagmi: 1.0.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(viem@1.14.0)
zod: 3.22.1 zod: 3.22.1
transitivePeerDependencies: transitivePeerDependencies:
- bufferutil - bufferutil
- utf-8-validate - utf-8-validate
dev: true dev: true
/@wagmi/connectors@1.0.1(@wagmi/chains@0.2.22)(react@18.2.0)(typescript@5.2.2)(viem@1.13.0): /@wagmi/connectors@1.0.1(@wagmi/chains@0.2.22)(react@18.2.0)(typescript@5.2.2)(viem@1.14.0):
resolution: {integrity: sha512-fl01vym19DE1uoE+MlASw5zo3Orr/YXlJRjOKLaKYtV+Q7jOLY4TwHgq7sEMs+JYOvFICFBEAlWNNxidr51AqQ==} resolution: {integrity: sha512-fl01vym19DE1uoE+MlASw5zo3Orr/YXlJRjOKLaKYtV+Q7jOLY4TwHgq7sEMs+JYOvFICFBEAlWNNxidr51AqQ==}
peerDependencies: peerDependencies:
'@wagmi/chains': '>=0.2.0' '@wagmi/chains': '>=0.2.0'
...@@ -4739,7 +4739,7 @@ packages: ...@@ -4739,7 +4739,7 @@ packages:
abitype: 0.8.1(typescript@5.2.2) abitype: 0.8.1(typescript@5.2.2)
eventemitter3: 4.0.7 eventemitter3: 4.0.7
typescript: 5.2.2 typescript: 5.2.2
viem: 1.13.0(typescript@5.2.2)(zod@3.22.0) viem: 1.14.0(typescript@5.2.2)(zod@3.22.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@react-native-async-storage/async-storage' - '@react-native-async-storage/async-storage'
- bufferutil - bufferutil
...@@ -4751,7 +4751,7 @@ packages: ...@@ -4751,7 +4751,7 @@ packages:
- utf-8-validate - utf-8-validate
- zod - zod
/@wagmi/connectors@2.6.6(@wagmi/chains@1.6.0)(react@18.2.0)(typescript@5.2.2)(viem@1.13.0): /@wagmi/connectors@2.6.6(@wagmi/chains@1.6.0)(react@18.2.0)(typescript@5.2.2)(viem@1.14.0):
resolution: {integrity: sha512-/o1c/TCivQs8DOAUOcQvY2UIt3p2mWOAHi39D0LC74+ncpXzLC5/gyaWU38qnTxPM8s/PmTmaWDgz+VhICXrag==} resolution: {integrity: sha512-/o1c/TCivQs8DOAUOcQvY2UIt3p2mWOAHi39D0LC74+ncpXzLC5/gyaWU38qnTxPM8s/PmTmaWDgz+VhICXrag==}
peerDependencies: peerDependencies:
'@wagmi/chains': '>=1.3.0' '@wagmi/chains': '>=1.3.0'
...@@ -4775,7 +4775,7 @@ packages: ...@@ -4775,7 +4775,7 @@ packages:
abitype: 0.8.7(typescript@5.2.2)(zod@3.22.1) abitype: 0.8.7(typescript@5.2.2)(zod@3.22.1)
eventemitter3: 4.0.7 eventemitter3: 4.0.7
typescript: 5.2.2 typescript: 5.2.2
viem: 1.13.0(typescript@5.2.2)(zod@3.22.0) viem: 1.14.0(typescript@5.2.2)(zod@3.22.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@react-native-async-storage/async-storage' - '@react-native-async-storage/async-storage'
- bufferutil - bufferutil
...@@ -4787,7 +4787,7 @@ packages: ...@@ -4787,7 +4787,7 @@ packages:
- zod - zod
dev: true dev: true
/@wagmi/core@1.0.1(react@18.2.0)(typescript@5.2.2)(viem@1.13.0): /@wagmi/core@1.0.1(react@18.2.0)(typescript@5.2.2)(viem@1.14.0):
resolution: {integrity: sha512-Zzg4Ob92QMF9NsC+z5/8JZjMn3NCCnwVWGJlv79qRX9mp5Ku40OzJNvqDnjcSGjshe6H0L/KtFZAqTlmu8lT7w==} resolution: {integrity: sha512-Zzg4Ob92QMF9NsC+z5/8JZjMn3NCCnwVWGJlv79qRX9mp5Ku40OzJNvqDnjcSGjshe6H0L/KtFZAqTlmu8lT7w==}
peerDependencies: peerDependencies:
typescript: '>=4.9.4' typescript: '>=4.9.4'
...@@ -4797,11 +4797,11 @@ packages: ...@@ -4797,11 +4797,11 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@wagmi/chains': 0.2.22(typescript@5.2.2) '@wagmi/chains': 0.2.22(typescript@5.2.2)
'@wagmi/connectors': 1.0.1(@wagmi/chains@0.2.22)(react@18.2.0)(typescript@5.2.2)(viem@1.13.0) '@wagmi/connectors': 1.0.1(@wagmi/chains@0.2.22)(react@18.2.0)(typescript@5.2.2)(viem@1.14.0)
abitype: 0.8.1(typescript@5.2.2) abitype: 0.8.1(typescript@5.2.2)
eventemitter3: 4.0.7 eventemitter3: 4.0.7
typescript: 5.2.2 typescript: 5.2.2
viem: 1.13.0(typescript@5.2.2)(zod@3.22.0) viem: 1.14.0(typescript@5.2.2)(zod@3.22.0)
zustand: 4.3.9(react@18.2.0) zustand: 4.3.9(react@18.2.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@react-native-async-storage/async-storage' - '@react-native-async-storage/async-storage'
...@@ -4815,7 +4815,7 @@ packages: ...@@ -4815,7 +4815,7 @@ packages:
- utf-8-validate - utf-8-validate
- zod - zod
/@wagmi/core@1.3.8(react@18.2.0)(typescript@5.2.2)(viem@1.13.0): /@wagmi/core@1.3.8(react@18.2.0)(typescript@5.2.2)(viem@1.14.0):
resolution: {integrity: sha512-OYSxikoMizqVnpSkFTwGE7PwFaz2k0PXteSiI0W2Mtk4j4sZzRFdP+9AWeDB6AYm0yU3WvgN1IATx0EEBKUe3w==} resolution: {integrity: sha512-OYSxikoMizqVnpSkFTwGE7PwFaz2k0PXteSiI0W2Mtk4j4sZzRFdP+9AWeDB6AYm0yU3WvgN1IATx0EEBKUe3w==}
peerDependencies: peerDependencies:
typescript: '>=5.0.4' typescript: '>=5.0.4'
...@@ -4825,11 +4825,11 @@ packages: ...@@ -4825,11 +4825,11 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@wagmi/chains': 1.6.0(typescript@5.2.2) '@wagmi/chains': 1.6.0(typescript@5.2.2)
'@wagmi/connectors': 2.6.6(@wagmi/chains@1.6.0)(react@18.2.0)(typescript@5.2.2)(viem@1.13.0) '@wagmi/connectors': 2.6.6(@wagmi/chains@1.6.0)(react@18.2.0)(typescript@5.2.2)(viem@1.14.0)
abitype: 0.8.7(typescript@5.2.2)(zod@3.22.1) abitype: 0.8.7(typescript@5.2.2)(zod@3.22.1)
eventemitter3: 4.0.7 eventemitter3: 4.0.7
typescript: 5.2.2 typescript: 5.2.2
viem: 1.13.0(typescript@5.2.2)(zod@3.22.0) viem: 1.14.0(typescript@5.2.2)(zod@3.22.0)
zustand: 4.3.9(react@18.2.0) zustand: 4.3.9(react@18.2.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@react-native-async-storage/async-storage' - '@react-native-async-storage/async-storage'
...@@ -14397,8 +14397,8 @@ packages: ...@@ -14397,8 +14397,8 @@ packages:
vfile-message: 2.0.4 vfile-message: 2.0.4
dev: true dev: true
/viem@1.13.0(typescript@5.2.2)(zod@3.22.0): /viem@1.14.0(typescript@5.2.2)(zod@3.22.0):
resolution: {integrity: sha512-Uwora7+hwEsSE+wT5IMIrFfwzrclV6X9XgcBvjfXHVEnWDVRrEGLUSAhJagfMYihcW+ZUREbE3n0hhRzW7pG9A==} resolution: {integrity: sha512-4d+4/H3lnbkSAbrpQ15i1nBA7hne06joLFy3L3m0ZpMc+g+Zr3D4nuSTyeiqbHAYs9m2P9Kjap0HlyGkehasgg==}
peerDependencies: peerDependencies:
typescript: '>=5.0.4' typescript: '>=5.0.4'
peerDependenciesMeta: peerDependenciesMeta:
...@@ -14420,8 +14420,8 @@ packages: ...@@ -14420,8 +14420,8 @@ packages:
- utf-8-validate - utf-8-validate
- zod - zod
/viem@1.13.0(typescript@5.2.2)(zod@3.22.1): /viem@1.14.0(typescript@5.2.2)(zod@3.22.1):
resolution: {integrity: sha512-Uwora7+hwEsSE+wT5IMIrFfwzrclV6X9XgcBvjfXHVEnWDVRrEGLUSAhJagfMYihcW+ZUREbE3n0hhRzW7pG9A==} resolution: {integrity: sha512-4d+4/H3lnbkSAbrpQ15i1nBA7hne06joLFy3L3m0ZpMc+g+Zr3D4nuSTyeiqbHAYs9m2P9Kjap0HlyGkehasgg==}
peerDependencies: peerDependencies:
typescript: '>=5.0.4' typescript: '>=5.0.4'
peerDependenciesMeta: peerDependenciesMeta:
...@@ -14793,7 +14793,7 @@ packages: ...@@ -14793,7 +14793,7 @@ packages:
xml-name-validator: 4.0.0 xml-name-validator: 4.0.0
dev: true dev: true
/wagmi@1.0.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(viem@1.13.0): /wagmi@1.0.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2)(viem@1.14.0):
resolution: {integrity: sha512-+2UkZG9eA3tKqXj1wvlvI8mL0Bcff7Tf5CKfUOyQsdKcY+J5rfwYYya25G+jja57umpHFtfxRaL7xDkNjehrRg==} resolution: {integrity: sha512-+2UkZG9eA3tKqXj1wvlvI8mL0Bcff7Tf5CKfUOyQsdKcY+J5rfwYYya25G+jja57umpHFtfxRaL7xDkNjehrRg==}
peerDependencies: peerDependencies:
react: '>=17.0.0' react: '>=17.0.0'
...@@ -14806,12 +14806,12 @@ packages: ...@@ -14806,12 +14806,12 @@ packages:
'@tanstack/query-sync-storage-persister': 4.29.25 '@tanstack/query-sync-storage-persister': 4.29.25
'@tanstack/react-query': 4.29.25(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-query': 4.29.25(react-dom@18.2.0)(react@18.2.0)
'@tanstack/react-query-persist-client': 4.29.25(@tanstack/react-query@4.29.25) '@tanstack/react-query-persist-client': 4.29.25(@tanstack/react-query@4.29.25)
'@wagmi/core': 1.0.1(react@18.2.0)(typescript@5.2.2)(viem@1.13.0) '@wagmi/core': 1.0.1(react@18.2.0)(typescript@5.2.2)(viem@1.14.0)
abitype: 0.8.1(typescript@5.2.2) abitype: 0.8.1(typescript@5.2.2)
react: 18.2.0 react: 18.2.0
typescript: 5.2.2 typescript: 5.2.2
use-sync-external-store: 1.2.0(react@18.2.0) use-sync-external-store: 1.2.0(react@18.2.0)
viem: 1.13.0(typescript@5.2.2)(zod@3.22.0) viem: 1.14.0(typescript@5.2.2)(zod@3.22.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@react-native-async-storage/async-storage' - '@react-native-async-storage/async-storage'
- bufferutil - bufferutil
......
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