redo transient keyword pr (#1019)

This commit is contained in:
The Dark Jester
2025-05-19 10:27:19 +01:00
committed by GitHub
parent d995d9d37e
commit 89e9c2cbca
9 changed files with 91 additions and 160 deletions

View File

@@ -49,7 +49,7 @@
"hardhat-storage-layout": "0.1.7",
"hardhat-tracer": "2.8.2",
"node-gyp": "10.1.0",
"prettier-plugin-solidity": "1.3.1",
"prettier-plugin-solidity": "1.4.2",
"solhint": "5.0.5",
"yargs": "17.7.2"
},

View File

@@ -1,53 +0,0 @@
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.26;
/**
* @title Library that provides helper functions to interact with transient storage.
* @author ConsenSys Software Inc.
* @custom:security-contact security-report@linea.build
*/
library TransientStorageHelpers {
/**
* @notice Internal function that stores a uint256 value at a given key in the EVM's transient storage using the `tstore` opcode.
* @param _key The key in the EVM transient storage where the value should be stored.
* @param _value The uint256 value to be stored at the specified key in the EVM transient storage.
*/
function tstoreUint256(bytes32 _key, uint256 _value) internal {
assembly {
tstore(_key, _value)
}
}
/**
* @notice Internal function that retrieves a uint256 value from the EVM's transient storage using the `tload` opcode.
* @param _key The key in the EVM transient storage from which the value should be retrieved.
* @return value The uint256 value retrieved from the specified key in the EVM transient storage.
*/
function tloadUint256(bytes32 _key) internal view returns (uint256 value) {
assembly {
value := tload(_key)
}
}
/**
* @notice Internal function that stores an address at a given key in the EVM's transient storage using the `tstore` opcode.
* @param _key The key in the EVM transient storage where the value should be stored.
* @param _addr The address to be stored at the specified key in the EVM transient storage.
*/
function tstoreAddress(bytes32 _key, address _addr) internal {
assembly {
tstore(_key, _addr)
}
}
/**
* @notice Internal function that retrieves an address from the EVM's transient storage using the `tload` opcode.
* @param _key The key in the EVM transient storage from which the value should be retrieved.
* @return addr The address retrieved from the specified key in the EVM transient storage.
*/
function tloadAddress(bytes32 _key) internal view returns (address addr) {
assembly {
addr := tload(_key)
}
}
}

View File

@@ -7,7 +7,6 @@ import { L1MessageManager } from "./L1MessageManager.sol";
import { IL1MessageService } from "./interfaces/IL1MessageService.sol";
import { IGenericErrors } from "../../interfaces/IGenericErrors.sol";
import { SparseMerkleTreeVerifier } from "../libraries/SparseMerkleTreeVerifier.sol";
import { TransientStorageHelpers } from "../../libraries/TransientStorageHelpers.sol";
import { MessageHashing } from "../libraries/MessageHashing.sol";
/**
@@ -24,7 +23,6 @@ abstract contract L1MessageService is
{
using SparseMerkleTreeVerifier for *;
using MessageHashing for *;
using TransientStorageHelpers for *;
/// @dev This is currently not in use, but is reserved for future upgrades.
uint256 public systemMigrationBlock;
@@ -122,7 +120,7 @@ abstract contract L1MessageService is
revert InvalidMerkleProof();
}
TransientStorageHelpers.tstoreAddress(MESSAGE_SENDER_TRANSIENT_KEY, _params.from);
TRANSIENT_MESSAGE_SENDER = _params.from;
(bool callSuccess, bytes memory returnData) = _params.to.call{ value: _params.value }(_params.data);
if (!callSuccess) {
@@ -136,7 +134,7 @@ abstract contract L1MessageService is
}
}
TransientStorageHelpers.tstoreAddress(MESSAGE_SENDER_TRANSIENT_KEY, DEFAULT_MESSAGE_SENDER_TRANSIENT_VALUE);
TRANSIENT_MESSAGE_SENDER = DEFAULT_MESSAGE_SENDER_TRANSIENT_VALUE;
emit MessageClaimed(messageLeafHash);
}
@@ -147,6 +145,6 @@ abstract contract L1MessageService is
* @return originalSender The message sender address that is stored temporarily in the transient storage when claiming.
*/
function sender() external view returns (address originalSender) {
originalSender = TransientStorageHelpers.tloadAddress(MESSAGE_SENDER_TRANSIENT_KEY);
originalSender = TRANSIENT_MESSAGE_SENDER;
}
}

View File

@@ -6,7 +6,6 @@ import { RateLimiter } from "../../../security/limiting/RateLimiter.sol";
import { L1MessageManagerV1 } from "./L1MessageManagerV1.sol";
import { TransientStorageReentrancyGuardUpgradeable } from "../../../security/reentrancy/TransientStorageReentrancyGuardUpgradeable.sol";
import { IMessageService } from "../../interfaces/IMessageService.sol";
import { TransientStorageHelpers } from "../../../libraries/TransientStorageHelpers.sol";
import { MessageHashing } from "../../libraries/MessageHashing.sol";
/**
@@ -23,6 +22,8 @@ abstract contract L1MessageServiceV1 is
{
using MessageHashing for *;
address transient TRANSIENT_MESSAGE_SENDER;
// @dev This is initialised to save user cost with existing slot.
uint256 public nextMessageNumber;
@@ -36,10 +37,6 @@ abstract contract L1MessageServiceV1 is
/// @dev adding these should not affect storage as they are constants and are stored in bytecode.
uint256 internal constant REFUND_OVERHEAD_IN_GAS = 48252;
/// @dev The transient storage key to set the message sender against while claiming.
bytes32 internal constant MESSAGE_SENDER_TRANSIENT_KEY =
bytes32(uint256(keccak256("eip1967.message.sender.transient.key")) - 1);
/// @notice The default value for the message sender reset to post claiming using the MESSAGE_SENDER_TRANSIENT_KEY.
address internal constant DEFAULT_MESSAGE_SENDER_TRANSIENT_VALUE = address(0);
@@ -49,12 +46,7 @@ abstract contract L1MessageServiceV1 is
* @param _to The recipient of the message and gas refund.
* @param _calldata The calldata of the message.
*/
modifier distributeFees(
uint256 _feeInWei,
address _to,
bytes calldata _calldata,
address _feeRecipient
) {
modifier distributeFees(uint256 _feeInWei, address _to, bytes calldata _calldata, address _feeRecipient) {
//pre-execution
uint256 startingGas = gasleft();
_;
@@ -120,7 +112,7 @@ abstract contract L1MessageServiceV1 is
_requireTypeAndGeneralNotPaused(PauseType.L2_L1);
/// @dev This is placed earlier to fix the stack issue by using these two earlier on.
TransientStorageHelpers.tstoreAddress(MESSAGE_SENDER_TRANSIENT_KEY, _from);
TRANSIENT_MESSAGE_SENDER = _from;
bytes32 messageHash = MessageHashing._hashMessage(_from, _to, _fee, _value, _nonce, _calldata);
@@ -141,7 +133,7 @@ abstract contract L1MessageServiceV1 is
}
}
TransientStorageHelpers.tstoreAddress(MESSAGE_SENDER_TRANSIENT_KEY, DEFAULT_MESSAGE_SENDER_TRANSIENT_VALUE);
TRANSIENT_MESSAGE_SENDER = DEFAULT_MESSAGE_SENDER_TRANSIENT_VALUE;
emit MessageClaimed(messageHash);
}

View File

@@ -173,12 +173,7 @@ abstract contract L2MessageServiceV1 is
* @param _to The recipient of the message and gas refund.
* @param _calldata The calldata of the message.
*/
modifier distributeFees(
uint256 _feeInWei,
address _to,
bytes calldata _calldata,
address _feeRecipient
) {
modifier distributeFees(uint256 _feeInWei, address _to, bytes calldata _calldata, address _feeRecipient) {
//pre-execution
uint256 startingGas = gasleft();
_;

View File

@@ -602,9 +602,7 @@ contract LineaRollup is AccessControlUpgradeable, ZkEvmV2, L1MessageService, Per
assembly {
for {
let i := _data.length
} gt(i, 0) {
} {
} gt(i, 0) {} {
i := sub(i, 0x20)
let chunk := calldataload(add(_data.offset, i))
if iszero(iszero(and(chunk, 0xFF00000000000000000000000000000000000000000000000000000000000000))) {

View File

@@ -1,19 +1,13 @@
// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.26;
import { TransientStorageHelpers } from "../../libraries/TransientStorageHelpers.sol";
/**
* @title Contract that helps prevent reentrant calls.
* @author ConsenSys Software Inc.
* @custom:security-contact security-report@linea.build
*/
abstract contract TransientStorageReentrancyGuardUpgradeable {
using TransientStorageHelpers for *;
bytes32 private constant REENTRANCY_GUARD_TRANSIENT_KEY =
bytes32(uint256(keccak256("eip1967.reentrancy.guard.transient.key")) - 1);
uint256 transient TRANSIENT_ENTERED;
uint256 private constant NOT_ENTERED = 0;
uint256 private constant ENTERED = 1;
@@ -22,29 +16,15 @@ abstract contract TransientStorageReentrancyGuardUpgradeable {
/// @dev This gap is used to not shift down the storage layout after removing the OpenZeppelin ReentrancyGuardUpgradeable contract.
uint256[50] private __gap_ReentrancyGuardUpgradeable;
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
/**
* @notice Checks reentrancy and if not reentrant sets the transient reentry flag.
* @dev This uses the TransientStorageHelpers library and REENTRANCY_GUARD_TRANSIENT_KEY.
*/
function _nonReentrantBefore() private {
if (TransientStorageHelpers.tloadUint256(REENTRANCY_GUARD_TRANSIENT_KEY) != NOT_ENTERED) {
modifier nonReentrant() {
if (TRANSIENT_ENTERED == ENTERED) {
revert ReentrantCall();
}
TransientStorageHelpers.tstoreUint256(REENTRANCY_GUARD_TRANSIENT_KEY, ENTERED);
}
/**
* @notice Clears reentry transient storage flag.
* @dev This uses the TransientStorageHelpers library and REENTRANCY_GUARD_TRANSIENT_KEY.
*/
function _nonReentrantAfter() private {
TransientStorageHelpers.tstoreUint256(REENTRANCY_GUARD_TRANSIENT_KEY, NOT_ENTERED);
TRANSIENT_ENTERED = ENTERED;
_;
TRANSIENT_ENTERED = NOT_ENTERED;
}
}

View File

@@ -1323,9 +1323,7 @@ contract PlonkVerifierDev {
mstore(add(mPtr, 0x80), e)
mstore(add(mPtr, 0xa0), R_MOD)
let check_staticcall := staticcall(gas(), MOD_EXP, mPtr, 0xc0, mPtr, 0x20)
if eq(check_staticcall, 0) {
}
if eq(check_staticcall, 0) {}
res := mload(mPtr)
}
}

123
pnpm-lock.yaml generated
View File

@@ -46,7 +46,7 @@ importers:
dependencies:
'@consensys/linea-sdk':
specifier: 0.3.0
version: 0.3.0(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))(utf-8-validate@5.0.10)
version: 0.3.0(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(utf-8-validate@5.0.10)
'@dynamic-labs/ethereum':
specifier: 4.10.2
version: 4.10.2(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@react-native-async-storage/async-storage@1.24.0(react-native@0.74.0(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.25.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2)
@@ -64,7 +64,7 @@ importers:
version: 2.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@layerswap/widget':
specifier: 0.1.16
version: 0.1.16(36cdbs6sbt4hnf6malkxxidv2e)
version: 0.1.16(dchqeo2awc4b35svq6c7pkgete)
'@lifi/widget':
specifier: 3.18.2
version: 3.18.2(6llx6mg3jnie75ujog4w6rkshe)
@@ -137,7 +137,7 @@ importers:
version: 8.1.0(typescript@5.4.5)
'@synthetixio/synpress':
specifier: 4.1.0
version: 4.1.0(@depay/solana-web3.js@1.27.0)(@depay/web3-blockchains@9.6.7)(@playwright/test@1.51.1)(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2)
version: 4.1.0(@depay/solana-web3.js@1.27.0)(@depay/web3-blockchains@9.6.7)(@playwright/test@1.51.1)(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2)
'@types/fs-extra':
specifier: 11.0.4
version: 11.0.4
@@ -254,8 +254,8 @@ importers:
specifier: 10.1.0
version: 10.1.0
prettier-plugin-solidity:
specifier: 1.3.1
version: 1.3.1(prettier@3.2.5)
specifier: 1.4.2
version: 1.4.2(prettier@3.2.5)
solhint:
specifier: 5.0.5
version: 5.0.5(typescript@5.4.5)
@@ -3843,9 +3843,6 @@ packages:
'@solidity-parser/parser@0.14.5':
resolution: {integrity: sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==}
'@solidity-parser/parser@0.17.0':
resolution: {integrity: sha512-Nko8R0/kUo391jsEHHxrGM07QFdnPGvlmox4rmH0kNiNAashItAilhy4Mv4pK5gQmW5f4sXAF58fwJbmlkGcVw==}
'@solidity-parser/parser@0.19.0':
resolution: {integrity: sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA==}
@@ -9125,9 +9122,9 @@ packages:
resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
engines: {node: '>=6.0.0'}
prettier-plugin-solidity@1.3.1:
resolution: {integrity: sha512-MN4OP5I2gHAzHZG1wcuJl0FsLS3c4Cc5494bbg+6oQWBPuEamjwDvmGfFMZ6NFzsh3Efd9UUxeT7ImgjNH4ozA==}
engines: {node: '>=16'}
prettier-plugin-solidity@1.4.2:
resolution: {integrity: sha512-VVD/4XlDjSzyPWWCPW8JEleFa8JNKFYac5kNlMjVXemQyQZKfpekPMhFZSePuXB6L+RixlFvWe20iacGjFYrLw==}
engines: {node: '>=18'}
peerDependencies:
prettier: '>=2.3.0'
@@ -9975,9 +9972,6 @@ packages:
solidity-ast@0.4.59:
resolution: {integrity: sha512-I+CX0wrYUN9jDfYtcgWSe+OAowaXy8/1YQy7NS4ni5IBDmIYBq7ZzaP/7QqouLjzZapmQtvGLqCaYgoUWqBo5g==}
solidity-comments-extractor@0.0.8:
resolution: {integrity: sha512-htM7Vn6LhHreR+EglVMd2s+sZhcXAirB1Zlyrv5zBuTxieCvjfnRpd7iZk75m/u6NOlEyQ94C6TWbBn2cY7w8g==}
solidity-coverage@0.8.16:
resolution: {integrity: sha512-qKqgm8TPpcnCK0HCDLJrjbOA2tQNEJY4dHX/LSSQ9iwYFS973MwjtgYn2Iv3vfCEQJTj5xtm4cuUMzlJsJSMbg==}
hasBin: true
@@ -12559,7 +12553,7 @@ snapshots:
'@colors/colors@1.6.0': {}
'@consensys/linea-sdk@0.3.0(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))(utf-8-validate@5.0.10)':
'@consensys/linea-sdk@0.3.0(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(utf-8-validate@5.0.10)':
dependencies:
better-sqlite3: 9.6.0
class-validator: 0.14.1
@@ -12567,8 +12561,8 @@ snapshots:
ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)
lru-cache: 10.4.3
pg: 8.13.1
typeorm: 0.3.20(better-sqlite3@9.6.0)(pg@8.13.1)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))
typeorm-naming-strategies: 4.1.0(typeorm@0.3.20(better-sqlite3@9.6.0)(pg@8.13.1)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5)))
typeorm: 0.3.20(better-sqlite3@9.6.0)(pg@8.13.1)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))
typeorm-naming-strategies: 4.1.0(typeorm@0.3.20(better-sqlite3@9.6.0)(pg@8.13.1)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)))
winston: 3.17.0
transitivePeerDependencies:
- '@google-cloud/spanner'
@@ -14001,7 +13995,7 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
'@layerswap/widget@0.1.16(36cdbs6sbt4hnf6malkxxidv2e)':
'@layerswap/widget@0.1.16(dchqeo2awc4b35svq6c7pkgete)':
dependencies:
'@headlessui/react': 2.1.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@metamask/jazzicon': 2.0.0
@@ -14034,7 +14028,7 @@ snapshots:
react-hot-toast: 2.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react-use-intercom: 5.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
swr: 2.3.3(react@18.3.1)
tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))
tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))
uuid: 9.0.1
viem: 2.25.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2)
wagmi: 2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.74.0(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.25.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2)
@@ -16285,8 +16279,6 @@ snapshots:
dependencies:
antlr4ts: 0.5.0-alpha.4
'@solidity-parser/parser@0.17.0': {}
'@solidity-parser/parser@0.19.0': {}
'@solidity-parser/parser@0.20.1': {}
@@ -16441,7 +16433,7 @@ snapshots:
- utf-8-validate
- zod
'@synthetixio/synpress-cache@0.0.12(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)':
'@synthetixio/synpress-cache@0.0.12(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)':
dependencies:
axios: 1.6.7
chalk: 5.3.0
@@ -16452,7 +16444,7 @@ snapshots:
gradient-string: 2.0.2
playwright-core: 1.51.1
progress: 2.0.3
tsup: 8.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)
tsup: 8.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)
unzip-crx-3: 0.2.0
unzipper: 0.10.14
zod: 3.22.4
@@ -16469,10 +16461,10 @@ snapshots:
dependencies:
'@playwright/test': 1.51.1
'@synthetixio/synpress-metamask@0.0.12(@playwright/test@1.51.1)(bufferutil@4.0.8)(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)':
'@synthetixio/synpress-metamask@0.0.12(@playwright/test@1.51.1)(bufferutil@4.0.8)(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)':
dependencies:
'@playwright/test': 1.51.1
'@synthetixio/synpress-cache': 0.0.12(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)
'@synthetixio/synpress-cache': 0.0.12(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)
'@synthetixio/synpress-core': 0.0.12(@playwright/test@1.51.1)
'@viem/anvil': 0.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10)
fs-extra: 11.2.0
@@ -16489,10 +16481,10 @@ snapshots:
- typescript
- utf-8-validate
'@synthetixio/synpress-phantom@0.0.12(@playwright/test@1.51.1)(bufferutil@4.0.8)(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)':
'@synthetixio/synpress-phantom@0.0.12(@playwright/test@1.51.1)(bufferutil@4.0.8)(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)':
dependencies:
'@playwright/test': 1.51.1
'@synthetixio/synpress-cache': 0.0.12(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)
'@synthetixio/synpress-cache': 0.0.12(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)
'@synthetixio/synpress-core': 0.0.12(@playwright/test@1.51.1)
'@viem/anvil': 0.0.7(bufferutil@4.0.8)(utf-8-validate@5.0.10)
fs-extra: 11.2.0
@@ -16509,14 +16501,14 @@ snapshots:
- typescript
- utf-8-validate
'@synthetixio/synpress@4.1.0(@depay/solana-web3.js@1.27.0)(@depay/web3-blockchains@9.6.7)(@playwright/test@1.51.1)(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2)':
'@synthetixio/synpress@4.1.0(@depay/solana-web3.js@1.27.0)(@depay/web3-blockchains@9.6.7)(@playwright/test@1.51.1)(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2)':
dependencies:
'@playwright/test': 1.51.1
'@synthetixio/ethereum-wallet-mock': 0.0.12(@depay/solana-web3.js@1.27.0)(@depay/web3-blockchains@9.6.7)(@playwright/test@1.51.1)(bufferutil@4.0.8)(ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2)
'@synthetixio/synpress-cache': 0.0.12(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)
'@synthetixio/synpress-cache': 0.0.12(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)
'@synthetixio/synpress-core': 0.0.12(@playwright/test@1.51.1)
'@synthetixio/synpress-metamask': 0.0.12(@playwright/test@1.51.1)(bufferutil@4.0.8)(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
'@synthetixio/synpress-phantom': 0.0.12(@playwright/test@1.51.1)(bufferutil@4.0.8)(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
'@synthetixio/synpress-metamask': 0.0.12(@playwright/test@1.51.1)(bufferutil@4.0.8)(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
'@synthetixio/synpress-phantom': 0.0.12(@playwright/test@1.51.1)(bufferutil@4.0.8)(playwright-core@1.51.1)(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)
transitivePeerDependencies:
- '@depay/solana-web3.js'
- '@depay/web3-blockchains'
@@ -17096,6 +17088,40 @@ snapshots:
- debug
- utf-8-validate
'@wagmi/connectors@5.7.12(@react-native-async-storage/async-storage@1.24.0(react-native@0.74.0(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.11)(@wagmi/core@2.16.7(@tanstack/query-core@5.71.5)(@types/react@18.3.11)(react@18.3.1)(typescript@5.4.5)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.25.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2)))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.25.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2)':
dependencies:
'@coinbase/wallet-sdk': 4.3.0
'@metamask/sdk': 0.32.0(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)
'@safe-global/safe-apps-provider': 0.18.5(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2)
'@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2)
'@wagmi/core': 2.16.7(@tanstack/query-core@5.71.5)(@types/react@18.3.11)(react@18.3.1)(typescript@5.4.5)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.25.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2))
'@walletconnect/ethereum-provider': 2.19.2(@react-native-async-storage/async-storage@1.24.0(react-native@0.74.0(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2)
cbw-sdk: '@coinbase/wallet-sdk@3.9.3'
viem: 2.25.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2)
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
- '@azure/data-tables'
- '@azure/identity'
- '@azure/keyvault-secrets'
- '@azure/storage-blob'
- '@capacitor/preferences'
- '@netlify/blobs'
- '@planetscale/database'
- '@react-native-async-storage/async-storage'
- '@types/react'
- '@upstash/redis'
- '@vercel/kv'
- bufferutil
- encoding
- ioredis
- react
- supports-color
- utf-8-validate
- zod
'@wagmi/connectors@5.7.12(@react-native-async-storage/async-storage@1.24.0(react-native@0.74.0(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.11)(@wagmi/core@2.16.7(@tanstack/query-core@5.71.5)(@types/react@18.3.11)(react@18.3.1)(typescript@5.4.5)(use-sync-external-store@1.5.0(react@18.3.1))(viem@2.25.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2)))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.25.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2)':
dependencies:
'@coinbase/wallet-sdk': 4.3.0
@@ -19619,7 +19645,7 @@ snapshots:
debug: 4.4.0(supports-color@8.1.1)
enhanced-resolve: 5.17.1
eslint: 8.57.0
eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0)
fast-glob: 3.3.2
get-tsconfig: 4.8.1
is-bun-module: 1.2.1
@@ -19632,7 +19658,7 @@ snapshots:
- eslint-import-resolver-webpack
- supports-color
eslint-module-utils@2.12.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0):
eslint-module-utils@2.12.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0):
dependencies:
debug: 3.2.7
optionalDependencies:
@@ -19654,7 +19680,7 @@ snapshots:
doctrine: 2.1.0
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.0))(eslint@8.57.0)
hasown: 2.0.2
is-core-module: 2.15.1
is-glob: 4.0.3
@@ -23235,13 +23261,13 @@ snapshots:
camelcase-css: 2.0.1
postcss: 8.5.3
postcss-load-config@4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5)):
postcss-load-config@4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)):
dependencies:
lilconfig: 3.1.3
yaml: 2.5.1
optionalDependencies:
postcss: 8.5.3
ts-node: 10.9.2(@types/node@22.7.5)(typescript@5.4.5)
ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.5)
postcss-nested@6.2.0(postcss@8.5.3):
dependencies:
@@ -23302,12 +23328,11 @@ snapshots:
dependencies:
fast-diff: 1.3.0
prettier-plugin-solidity@1.3.1(prettier@3.2.5):
prettier-plugin-solidity@1.4.2(prettier@3.2.5):
dependencies:
'@solidity-parser/parser': 0.17.0
'@solidity-parser/parser': 0.19.0
prettier: 3.2.5
semver: 7.6.3
solidity-comments-extractor: 0.0.8
prettier@2.8.8: {}
@@ -24378,8 +24403,6 @@ snapshots:
solidity-ast@0.4.59: {}
solidity-comments-extractor@0.0.8: {}
solidity-coverage@0.8.16(hardhat@2.24.0(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)):
dependencies:
'@ethersproject/abi': 5.7.0
@@ -24723,7 +24746,7 @@ snapshots:
string-width: 4.2.3
strip-ansi: 6.0.1
tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5)):
tailwindcss@3.4.17(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)):
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
@@ -24742,7 +24765,7 @@ snapshots:
postcss: 8.5.3
postcss-import: 15.1.0(postcss@8.5.3)
postcss-js: 4.0.1(postcss@8.5.3)
postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))
postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))
postcss-nested: 6.2.0(postcss@8.5.3)
postcss-selector-parser: 6.1.2
resolve: 1.22.8
@@ -25013,7 +25036,7 @@ snapshots:
tsort@0.0.1: {}
tsup@8.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))(typescript@5.4.5):
tsup@8.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))(typescript@5.4.5):
dependencies:
bundle-require: 4.2.1(esbuild@0.19.12)
cac: 6.7.14
@@ -25023,7 +25046,7 @@ snapshots:
execa: 5.1.1
globby: 11.1.0
joycon: 3.1.1
postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))
postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))
resolve-from: 5.0.0
rollup: 4.24.0
source-map: 0.8.0-beta.0
@@ -25135,9 +25158,9 @@ snapshots:
dependencies:
typeorm: 0.3.20(better-sqlite3@11.6.0)(pg@8.13.1)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))
typeorm-naming-strategies@4.1.0(typeorm@0.3.20(better-sqlite3@9.6.0)(pg@8.13.1)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))):
typeorm-naming-strategies@4.1.0(typeorm@0.3.20(better-sqlite3@9.6.0)(pg@8.13.1)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))):
dependencies:
typeorm: 0.3.20(better-sqlite3@9.6.0)(pg@8.13.1)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5))
typeorm: 0.3.20(better-sqlite3@9.6.0)(pg@8.13.1)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5))
typeorm@0.3.20(better-sqlite3@11.6.0)(pg@8.13.1)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5)):
dependencies:
@@ -25163,7 +25186,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
typeorm@0.3.20(better-sqlite3@9.6.0)(pg@8.13.1)(ts-node@10.9.2(@types/node@22.7.5)(typescript@5.4.5)):
typeorm@0.3.20(better-sqlite3@9.6.0)(pg@8.13.1)(ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5)):
dependencies:
'@sqltools/formatter': 1.2.5
app-root-path: 3.1.0
@@ -25183,7 +25206,7 @@ snapshots:
optionalDependencies:
better-sqlite3: 9.6.0
pg: 8.13.1
ts-node: 10.9.2(@types/node@22.7.5)(typescript@5.4.5)
ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.5)
transitivePeerDependencies:
- supports-color
@@ -25497,7 +25520,7 @@ snapshots:
wagmi@2.14.16(@react-native-async-storage/async-storage@1.24.0(react-native@0.74.0(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10)))(@tanstack/query-core@5.71.5)(@tanstack/react-query@5.71.5(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.25.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2):
dependencies:
'@tanstack/react-query': 5.71.5(react@18.3.1)
'@wagmi/connectors': 5.7.12(@react-native-async-storage/async-storage@1.24.0(react-native@0.74.0(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.11)(@wagmi/core@2.16.7(@tanstack/query-core@5.71.5)(@types/react@18.3.11)(react@18.3.1)(typescript@5.4.5)(use-sync-external-store@1.5.0(react@18.3.1))(viem@2.25.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2)))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.25.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2)
'@wagmi/connectors': 5.7.12(@react-native-async-storage/async-storage@1.24.0(react-native@0.74.0(@babel/core@7.25.7)(@babel/preset-env@7.25.7(@babel/core@7.25.7))(@types/react@18.3.11)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10)))(@types/react@18.3.11)(@wagmi/core@2.16.7(@tanstack/query-core@5.71.5)(@types/react@18.3.11)(react@18.3.1)(typescript@5.4.5)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.25.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2)))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(typescript@5.4.5)(utf-8-validate@5.0.10)(viem@2.25.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2)
'@wagmi/core': 2.16.7(@tanstack/query-core@5.71.5)(@types/react@18.3.11)(react@18.3.1)(typescript@5.4.5)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.25.0(bufferutil@4.0.8)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.24.2))
react: 18.3.1
use-sync-external-store: 1.4.0(react@18.3.1)