feat: embed package version in deployed bytecode (#4518)

### Description

Embed NPM package version in all deployed contracts bytecode. Follows
[similar pattern to published CLI
version](3010e36ec9/typescript/cli/src/version.ts (L0-L1)).

Should not be conflated with `Mailbox.VERSION` used for message
encoding.

### Drive-by Changes

Unfixes solidity NPM package version from typescript packages

### Backward compatibility

No, only applies to new deployments or upgrades

### Testing

Tested [changeset
glob](https://changesets-docs.vercel.app/fixed-packages#using-glob-expressions)
```ts
console.log(micromatch(['@hyperlane-xyz/sdk', '@hyperlane-xyz/core', '@hyperlane-xyz/cli'], ['@hyperlane-xyz/!(core)|*']));
['@hyperlane-xyz/sdk', '@hyperlane-xyz/cli']
```

Added test that version function is on ABI
pull/4619/head
Yorke Rhodes 2 months ago committed by GitHub
parent e2b5a4c785
commit c5c217f8ea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      .changeset/config.json
  2. 5
      .changeset/silent-crabs-visit.md
  3. 16
      solidity/bytecodeversion.sh
  4. 4
      solidity/contracts/AttributeCheckpointFraud.sol
  5. 4
      solidity/contracts/CheckpointFraudProofs.sol
  6. 9
      solidity/contracts/Mailbox.sol
  7. 11
      solidity/contracts/PackageVersioned.sol
  8. 5
      solidity/contracts/avs/ECDSAStakeRegistry.sol
  9. 3
      solidity/contracts/avs/HyperlaneServiceManager.sol
  10. 3
      solidity/contracts/client/MailboxClient.sol
  11. 3
      solidity/contracts/hooks/igp/StorageGasOracle.sol
  12. 6
      solidity/contracts/hooks/libs/AbstractPostDispatchHook.sol
  13. 3
      solidity/contracts/isms/NoopIsm.sol
  14. 8
      solidity/contracts/isms/PausableIsm.sol
  15. 3
      solidity/contracts/isms/TrustedRelayerIsm.sol
  16. 3
      solidity/contracts/isms/aggregation/StaticAggregationIsm.sol
  17. 1
      solidity/contracts/isms/aggregation/StaticAggregationIsmFactory.sol
  18. 5
      solidity/contracts/isms/hook/AbstractMessageIdAuthorizedIsm.sol
  19. 3
      solidity/contracts/isms/multisig/AbstractMultisigIsm.sol
  20. 7
      solidity/contracts/isms/routing/DomainRoutingIsm.sol
  21. 3
      solidity/contracts/isms/routing/DomainRoutingIsmFactory.sol
  22. 3
      solidity/contracts/isms/routing/InterchainAccountIsm.sol
  23. 3
      solidity/contracts/libs/StaticAddressSetFactory.sol
  24. 3
      solidity/contracts/libs/StaticWeightedValidatorSetFactory.sol
  25. 12
      solidity/package.json
  26. 63
      solidity/test/exhaustiveversion.test.ts
  27. 277
      yarn.lock

@ -2,7 +2,7 @@
"$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [["@hyperlane-xyz/*"]],
"fixed": [["@hyperlane-xyz/!(core)|*"]],
"linked": [],
"access": "public",
"baseBranch": "main",

@ -0,0 +1,5 @@
---
'@hyperlane-xyz/core': minor
---
Embed NPM package version in bytecode constant

@ -0,0 +1,16 @@
#!/bin/bash
FILEPATH="contracts/PackageVersioned.sol"
TEMPFILE=$(mktemp)
# writes all but the last 2 lines to the temp file
head -n $(($(wc -l < $FILEPATH) - 2)) $FILEPATH > $TEMPFILE
# writes generated last 2 lines to the temp file
cat <<EOF >> $TEMPFILE
string public constant PACKAGE_VERSION = "$npm_package_version";
}
EOF
# overwrite the original file with the temp file
cat $TEMPFILE > $FILEPATH

@ -5,6 +5,7 @@ import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import {Address} from "@openzeppelin/contracts/utils/Address.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {PackageVersioned} from "contracts/PackageVersioned.sol";
import {TREE_DEPTH} from "./libs/Merkle.sol";
import {CheckpointLib, Checkpoint} from "./libs/CheckpointLib.sol";
import {CheckpointFraudProofs} from "./CheckpointFraudProofs.sol";
@ -26,7 +27,8 @@ struct Attribution {
* @title AttributeCheckpointFraud
* @dev The AttributeCheckpointFraud contract is used to attribute fraud to a specific ECDSA checkpoint signer.
*/
contract AttributeCheckpointFraud is Ownable {
contract AttributeCheckpointFraud is Ownable, PackageVersioned {
using CheckpointLib for Checkpoint;
using Address for address;

@ -9,12 +9,14 @@ import {MerkleLib, TREE_DEPTH} from "./libs/Merkle.sol";
import {MerkleTreeHook} from "./hooks/MerkleTreeHook.sol";
import {IMailbox} from "./interfaces/IMailbox.sol";
import {PackageVersioned} from "./PackageVersioned.sol";
struct StoredIndex {
uint32 index;
bool exists;
}
contract CheckpointFraudProofs {
contract CheckpointFraudProofs is PackageVersioned {
using CheckpointLib for Checkpoint;
using Address for address;

@ -10,12 +10,19 @@ import {IInterchainSecurityModule, ISpecifiesInterchainSecurityModule} from "./i
import {IPostDispatchHook} from "./interfaces/hooks/IPostDispatchHook.sol";
import {IMessageRecipient} from "./interfaces/IMessageRecipient.sol";
import {IMailbox} from "./interfaces/IMailbox.sol";
import {PackageVersioned} from "contracts/PackageVersioned.sol";
// ============ External Imports ============
import {Address} from "@openzeppelin/contracts/utils/Address.sol";
import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
contract Mailbox is IMailbox, Indexed, Versioned, OwnableUpgradeable {
contract Mailbox is
IMailbox,
Indexed,
Versioned,
OwnableUpgradeable,
PackageVersioned
{
// ============ Libraries ============
using Message for bytes;

@ -0,0 +1,11 @@
// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity >=0.6.11;
/**
* @title PackageVersioned
* @notice Package version getter for contracts
**/
abstract contract PackageVersioned {
// GENERATED CODE - DO NOT EDIT
string public constant PACKAGE_VERSION = "5.3.0";
}

@ -7,6 +7,8 @@ import {IDelegationManager} from "../interfaces/avs/vendored/IDelegationManager.
import {ISignatureUtils} from "../interfaces/avs/vendored/ISignatureUtils.sol";
import {IServiceManager} from "../interfaces/avs/vendored/IServiceManager.sol";
import {PackageVersioned} from "../PackageVersioned.sol";
import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import {CheckpointsUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/CheckpointsUpgradeable.sol";
import {SignatureCheckerUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/SignatureCheckerUpgradeable.sol";
@ -19,7 +21,8 @@ import {IERC1271Upgradeable} from "@openzeppelin/contracts-upgradeable/interface
contract ECDSAStakeRegistry is
IERC1271Upgradeable,
OwnableUpgradeable,
ECDSAStakeRegistryStorage
ECDSAStakeRegistryStorage,
PackageVersioned
{
using SignatureCheckerUpgradeable for address;
using CheckpointsUpgradeable for CheckpointsUpgradeable.History;

@ -19,8 +19,9 @@ import {IAVSDirectory} from "../interfaces/avs/vendored/IAVSDirectory.sol";
import {IRemoteChallenger} from "../interfaces/avs/IRemoteChallenger.sol";
import {ISlasher} from "../interfaces/avs/vendored/ISlasher.sol";
import {ECDSAServiceManagerBase} from "./ECDSAServiceManagerBase.sol";
import {PackageVersioned} from "contracts/PackageVersioned.sol";
contract HyperlaneServiceManager is ECDSAServiceManagerBase {
contract HyperlaneServiceManager is ECDSAServiceManagerBase, PackageVersioned {
// ============ Libraries ============
using EnumerableMapEnrollment for EnumerableMapEnrollment.AddressToEnrollmentMap;

@ -6,12 +6,13 @@ import {IMailbox} from "../interfaces/IMailbox.sol";
import {IPostDispatchHook} from "../interfaces/hooks/IPostDispatchHook.sol";
import {IInterchainSecurityModule} from "../interfaces/IInterchainSecurityModule.sol";
import {Message} from "../libs/Message.sol";
import {PackageVersioned} from "../PackageVersioned.sol";
// ============ External Imports ============
import {Address} from "@openzeppelin/contracts/utils/Address.sol";
import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
abstract contract MailboxClient is OwnableUpgradeable {
abstract contract MailboxClient is OwnableUpgradeable, PackageVersioned {
using Message for bytes;
IMailbox public immutable mailbox;

@ -3,6 +3,7 @@ pragma solidity >=0.8.0;
// ============ Internal Imports ============
import {IGasOracle} from "../../interfaces/IGasOracle.sol";
import {PackageVersioned} from "../../PackageVersioned.sol";
// ============ External Imports ============
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
@ -12,7 +13,7 @@ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
* @dev This contract is intended to be owned by an address that will
* update the stored remote gas data.
*/
contract StorageGasOracle is IGasOracle, Ownable {
contract StorageGasOracle is IGasOracle, Ownable, PackageVersioned {
// ============ Public Storage ============
/// @notice Keyed by remote domain, gas data on that remote domain.

@ -16,12 +16,16 @@ pragma solidity >=0.8.0;
// ============ Internal Imports ============
import {StandardHookMetadata} from "./StandardHookMetadata.sol";
import {IPostDispatchHook} from "../../interfaces/hooks/IPostDispatchHook.sol";
import {PackageVersioned} from "../../PackageVersioned.sol";
/**
* @title AbstractPostDispatch
* @notice Abstract post dispatch hook supporting the current global hook metadata variant.
*/
abstract contract AbstractPostDispatchHook is IPostDispatchHook {
abstract contract AbstractPostDispatchHook is
IPostDispatchHook,
PackageVersioned
{
using StandardHookMetadata for bytes;
// ============ External functions ============

@ -2,8 +2,9 @@
pragma solidity >=0.8.0;
import {IInterchainSecurityModule} from "../interfaces/IInterchainSecurityModule.sol";
import {PackageVersioned} from "contracts/PackageVersioned.sol";
contract NoopIsm is IInterchainSecurityModule {
contract NoopIsm is IInterchainSecurityModule, PackageVersioned {
uint8 public constant override moduleType = uint8(Types.NULL);
function verify(

@ -7,8 +7,14 @@ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
// ============ Internal Imports ============
import {IInterchainSecurityModule} from "../interfaces/IInterchainSecurityModule.sol";
import {PackageVersioned} from "contracts/PackageVersioned.sol";
contract PausableIsm is IInterchainSecurityModule, Ownable, Pausable {
contract PausableIsm is
IInterchainSecurityModule,
Ownable,
Pausable,
PackageVersioned
{
uint8 public constant override moduleType = uint8(Types.NULL);
constructor(address owner) Ownable() Pausable() {

@ -5,8 +5,9 @@ pragma solidity >=0.8.0;
import {IInterchainSecurityModule} from "../interfaces/IInterchainSecurityModule.sol";
import {Message} from "../libs/Message.sol";
import {Mailbox} from "../Mailbox.sol";
import {PackageVersioned} from "contracts/PackageVersioned.sol";
contract TrustedRelayerIsm is IInterchainSecurityModule {
contract TrustedRelayerIsm is IInterchainSecurityModule, PackageVersioned {
using Message for bytes;
uint8 public immutable moduleType = uint8(Types.NULL);

@ -5,13 +5,14 @@ pragma solidity >=0.8.0;
import {AbstractAggregationIsm} from "./AbstractAggregationIsm.sol";
import {AggregationIsmMetadata} from "../../isms/libs/AggregationIsmMetadata.sol";
import {MetaProxy} from "../../libs/MetaProxy.sol";
import {PackageVersioned} from "contracts/PackageVersioned.sol";
/**
* @title StaticAggregationIsm
* @notice Manages per-domain m-of-n ISM sets that are used to verify
* interchain messages.
*/
contract StaticAggregationIsm is AbstractAggregationIsm {
contract StaticAggregationIsm is AbstractAggregationIsm, PackageVersioned {
// ============ Public Functions ============
/**

@ -1,5 +1,6 @@
// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity >=0.8.0;
// ============ Internal Imports ============
import {StaticAggregationIsm} from "./StaticAggregationIsm.sol";
import {StaticThresholdAddressSetFactory} from "../../libs/StaticAddressSetFactory.sol";

@ -18,9 +18,9 @@ pragma solidity >=0.8.0;
import {IInterchainSecurityModule} from "../../interfaces/IInterchainSecurityModule.sol";
import {LibBit} from "../../libs/LibBit.sol";
import {Message} from "../../libs/Message.sol";
import {PackageVersioned} from "contracts/PackageVersioned.sol";
// ============ External Imports ============
import {Address} from "@openzeppelin/contracts/utils/Address.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
@ -31,7 +31,8 @@ import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Ini
*/
abstract contract AbstractMessageIdAuthorizedIsm is
IInterchainSecurityModule,
Initializable
Initializable,
PackageVersioned
{
using Address for address payable;
using LibBit for uint256;

@ -21,6 +21,7 @@ import {IInterchainSecurityModule} from "../../interfaces/IInterchainSecurityMod
import {IMultisigIsm} from "../../interfaces/isms/IMultisigIsm.sol";
import {Message} from "../../libs/Message.sol";
import {MerkleLib} from "../../libs/Merkle.sol";
import {PackageVersioned} from "../../PackageVersioned.sol";
/**
* @title AbstractMultisig
@ -29,7 +30,7 @@ import {MerkleLib} from "../../libs/Merkle.sol";
* for concrete implementations of `digest` and `signatureAt`.
* @dev See ./StaticMultisigIsm.sol for concrete implementations.
*/
abstract contract AbstractMultisig {
abstract contract AbstractMultisig is PackageVersioned {
/**
* @notice Returns the digest to be used for signature verification.
* @param _metadata ABI encoded module metadata

@ -12,11 +12,16 @@ import {IInterchainSecurityModule} from "../../interfaces/IInterchainSecurityMod
import {Message} from "../../libs/Message.sol";
import {TypeCasts} from "../../libs/TypeCasts.sol";
import {EnumerableMapExtended} from "../../libs/EnumerableMapExtended.sol";
import {PackageVersioned} from "../../PackageVersioned.sol";
/**
* @title DomainRoutingIsm
*/
contract DomainRoutingIsm is AbstractRoutingIsm, OwnableUpgradeable {
contract DomainRoutingIsm is
AbstractRoutingIsm,
OwnableUpgradeable,
PackageVersioned
{
using EnumerableMapExtended for EnumerableMapExtended.UintToBytes32Map;
using Message for bytes;
using TypeCasts for bytes32;

@ -6,8 +6,9 @@ import {DomainRoutingIsm} from "./DomainRoutingIsm.sol";
import {DefaultFallbackRoutingIsm} from "./DefaultFallbackRoutingIsm.sol";
import {IInterchainSecurityModule} from "../../interfaces/IInterchainSecurityModule.sol";
import {MinimalProxy} from "../../libs/MinimalProxy.sol";
import {PackageVersioned} from "../../PackageVersioned.sol";
abstract contract AbstractDomainRoutingIsmFactory {
abstract contract AbstractDomainRoutingIsmFactory is PackageVersioned {
/**
* @notice Emitted when a routing module is deployed
* @param module The deployed ISM

@ -6,11 +6,12 @@ import {IMailbox} from "../../interfaces/IMailbox.sol";
import {IInterchainSecurityModule} from "../../interfaces/IInterchainSecurityModule.sol";
import {Message} from "../../libs/Message.sol";
import {InterchainAccountMessage} from "../../middleware/libs/InterchainAccountMessage.sol";
import {PackageVersioned} from "../../PackageVersioned.sol";
/**
* @title InterchainAccountIsm
*/
contract InterchainAccountIsm is AbstractRoutingIsm {
contract InterchainAccountIsm is AbstractRoutingIsm, PackageVersioned {
IMailbox private immutable mailbox;
// ============ Constructor ============

@ -6,8 +6,9 @@ import {Create2} from "@openzeppelin/contracts/utils/Create2.sol";
// ============ Internal Imports ============
import {MetaProxy} from "./MetaProxy.sol";
import {PackageVersioned} from "../PackageVersioned.sol";
abstract contract StaticThresholdAddressSetFactory {
abstract contract StaticThresholdAddressSetFactory is PackageVersioned {
// ============ Immutables ============
address public immutable implementation;

@ -8,8 +8,9 @@ import {IStaticWeightedMultisigIsm} from "../interfaces/isms/IWeightedMultisigIs
// ============ Internal Imports ============
import {MetaProxy} from "./MetaProxy.sol";
import {PackageVersioned} from "../PackageVersioned.sol";
abstract contract StaticWeightedValidatorSetFactory {
abstract contract StaticWeightedValidatorSetFactory is PackageVersioned {
// ============ Immutables ============
address public immutable implementation;

@ -33,6 +33,7 @@
"solidity-coverage": "^0.8.3",
"ts-generator": "^0.1.1",
"ts-node": "^10.8.0",
"tsx": "^4.19.1",
"typechain": "patch:typechain@npm%3A8.3.2#~/.yarn/patches/typechain-npm-8.3.2-b02e27439e.patch",
"typescript": "5.3.3"
},
@ -63,7 +64,7 @@
],
"license": "Apache-2.0",
"scripts": {
"build": "yarn hardhat-esm compile && tsc && ./exportBuildArtifact.sh",
"build": "yarn version:bytecode && yarn hardhat-esm compile && tsc && ./exportBuildArtifact.sh",
"lint": "solhint contracts/**/*.sol",
"clean": "yarn hardhat-esm clean && rm -rf ./dist ./cache ./types ./coverage ./out ./forge-cache ./fixtures",
"coverage": "yarn fixtures && ./coverage.sh",
@ -71,14 +72,17 @@
"fixtures": "mkdir -p ./fixtures/aggregation ./fixtures/multisig",
"hardhat-esm": "NODE_OPTIONS='--experimental-loader ts-node/esm/transpile-only --no-warnings=ExperimentalWarning' hardhat --config hardhat.config.cts",
"prettier": "prettier --write ./contracts ./test",
"test": "yarn hardhat-esm test && yarn test:forge",
"test": "yarn version:exhaustive && yarn hardhat-esm test && yarn test:forge",
"test:hardhat": "yarn hardhat-esm test",
"test:forge": "yarn fixtures && forge test -vvv",
"test:ci": "yarn test:hardhat && yarn test:forge --no-match-test testFork",
"test:ci": "yarn version:changed && yarn test:hardhat && yarn test:forge --no-match-test testFork",
"gas": "forge snapshot",
"gas-ci": "yarn gas --check --tolerance 2 || (echo 'Manually update gas snapshot' && exit 1)",
"slither": "slither .",
"storage": "./storage.sh"
"storage": "./storage.sh",
"version:bytecode": "./bytecodeversion.sh",
"version:changed": "yarn version:bytecode && git diff --exit-code",
"version:exhaustive": "yarn tsx ./test/exhaustiveversion.test.ts"
},
"peerDependencies": {
"@ethersproject/abi": "*",

@ -0,0 +1,63 @@
import { CompilerOutputContract } from 'hardhat/types';
import { readFile, readdir } from 'node:fs/promises';
import { basename, join } from 'node:path';
const EXCLUDE_PATTERNS: RegExp[] = [
/\.dbg/g,
/interfaces\//g,
/libs\//g,
/Abstract/g,
/Test/g,
/Mock/g,
/Versioned/g,
// also abstract
/ECDSAServiceManagerBase/g,
/ECDSAStakeRegistryStorage/g,
];
const REQUIRED_METHOD = 'PACKAGE_VERSION';
// https://stackoverflow.com/questions/5827612/node-js-fs-readdir-recursive-directory-search
const walk = async (dirPath) =>
Promise.all(
await readdir(dirPath, { withFileTypes: true }).then((entries) =>
entries.map((entry) => {
const childPath = join(dirPath, entry.name);
return entry.isDirectory() ? walk(childPath) : childPath;
}),
),
);
const artifacts = (await walk('artifacts/contracts')).flat(
Number.POSITIVE_INFINITY,
);
const filtered = artifacts.filter((path: string) =>
EXCLUDE_PATTERNS.every((excluded) => path.match(excluded) === null),
);
const results = await Promise.all(
filtered.map(async (path) => {
const content = await readFile(path, 'utf-8');
const compilerOutput: CompilerOutputContract = JSON.parse(content);
return [
path,
compilerOutput.abi &&
compilerOutput.abi.some((elem) => elem.name === REQUIRED_METHOD),
];
}),
);
const missing = results.filter(([, included]) => !included);
if (missing.length > 0) {
console.error(
`Missing ${REQUIRED_METHOD} method in the following contracts:`,
);
const contracts = missing.map(([path]) =>
basename(path).replace('.json', ''),
);
console.error(contracts.map((contract) => ` - ${contract}`).join('\n'));
process.exit(1);
}
console.log('All contracts have the required method');

@ -5780,6 +5780,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/aix-ppc64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/aix-ppc64@npm:0.23.1"
conditions: os=aix & cpu=ppc64
languageName: node
linkType: hard
"@esbuild/android-arm64@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/android-arm64@npm:0.17.19"
@ -5808,6 +5815,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/android-arm64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/android-arm64@npm:0.23.1"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
"@esbuild/android-arm@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/android-arm@npm:0.17.19"
@ -5836,6 +5850,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/android-arm@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/android-arm@npm:0.23.1"
conditions: os=android & cpu=arm
languageName: node
linkType: hard
"@esbuild/android-x64@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/android-x64@npm:0.17.19"
@ -5864,6 +5885,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/android-x64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/android-x64@npm:0.23.1"
conditions: os=android & cpu=x64
languageName: node
linkType: hard
"@esbuild/darwin-arm64@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/darwin-arm64@npm:0.17.19"
@ -5892,6 +5920,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/darwin-arm64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/darwin-arm64@npm:0.23.1"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@esbuild/darwin-x64@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/darwin-x64@npm:0.17.19"
@ -5920,6 +5955,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/darwin-x64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/darwin-x64@npm:0.23.1"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@esbuild/freebsd-arm64@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/freebsd-arm64@npm:0.17.19"
@ -5948,6 +5990,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/freebsd-arm64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/freebsd-arm64@npm:0.23.1"
conditions: os=freebsd & cpu=arm64
languageName: node
linkType: hard
"@esbuild/freebsd-x64@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/freebsd-x64@npm:0.17.19"
@ -5976,6 +6025,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/freebsd-x64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/freebsd-x64@npm:0.23.1"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/linux-arm64@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/linux-arm64@npm:0.17.19"
@ -6004,6 +6060,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/linux-arm64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-arm64@npm:0.23.1"
conditions: os=linux & cpu=arm64
languageName: node
linkType: hard
"@esbuild/linux-arm@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/linux-arm@npm:0.17.19"
@ -6032,6 +6095,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/linux-arm@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-arm@npm:0.23.1"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@esbuild/linux-ia32@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/linux-ia32@npm:0.17.19"
@ -6060,6 +6130,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/linux-ia32@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-ia32@npm:0.23.1"
conditions: os=linux & cpu=ia32
languageName: node
linkType: hard
"@esbuild/linux-loong64@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/linux-loong64@npm:0.17.19"
@ -6088,6 +6165,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/linux-loong64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-loong64@npm:0.23.1"
conditions: os=linux & cpu=loong64
languageName: node
linkType: hard
"@esbuild/linux-mips64el@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/linux-mips64el@npm:0.17.19"
@ -6116,6 +6200,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/linux-mips64el@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-mips64el@npm:0.23.1"
conditions: os=linux & cpu=mips64el
languageName: node
linkType: hard
"@esbuild/linux-ppc64@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/linux-ppc64@npm:0.17.19"
@ -6144,6 +6235,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/linux-ppc64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-ppc64@npm:0.23.1"
conditions: os=linux & cpu=ppc64
languageName: node
linkType: hard
"@esbuild/linux-riscv64@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/linux-riscv64@npm:0.17.19"
@ -6172,6 +6270,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/linux-riscv64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-riscv64@npm:0.23.1"
conditions: os=linux & cpu=riscv64
languageName: node
linkType: hard
"@esbuild/linux-s390x@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/linux-s390x@npm:0.17.19"
@ -6200,6 +6305,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/linux-s390x@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-s390x@npm:0.23.1"
conditions: os=linux & cpu=s390x
languageName: node
linkType: hard
"@esbuild/linux-x64@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/linux-x64@npm:0.17.19"
@ -6228,6 +6340,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/linux-x64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/linux-x64@npm:0.23.1"
conditions: os=linux & cpu=x64
languageName: node
linkType: hard
"@esbuild/netbsd-x64@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/netbsd-x64@npm:0.17.19"
@ -6256,6 +6375,20 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/netbsd-x64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/netbsd-x64@npm:0.23.1"
conditions: os=netbsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/openbsd-arm64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/openbsd-arm64@npm:0.23.1"
conditions: os=openbsd & cpu=arm64
languageName: node
linkType: hard
"@esbuild/openbsd-x64@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/openbsd-x64@npm:0.17.19"
@ -6284,6 +6417,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/openbsd-x64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/openbsd-x64@npm:0.23.1"
conditions: os=openbsd & cpu=x64
languageName: node
linkType: hard
"@esbuild/sunos-x64@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/sunos-x64@npm:0.17.19"
@ -6312,6 +6452,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/sunos-x64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/sunos-x64@npm:0.23.1"
conditions: os=sunos & cpu=x64
languageName: node
linkType: hard
"@esbuild/win32-arm64@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/win32-arm64@npm:0.17.19"
@ -6340,6 +6487,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/win32-arm64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/win32-arm64@npm:0.23.1"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@esbuild/win32-ia32@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/win32-ia32@npm:0.17.19"
@ -6368,6 +6522,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/win32-ia32@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/win32-ia32@npm:0.23.1"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@esbuild/win32-x64@npm:0.17.19":
version: 0.17.19
resolution: "@esbuild/win32-x64@npm:0.17.19"
@ -6396,6 +6557,13 @@ __metadata:
languageName: node
linkType: hard
"@esbuild/win32-x64@npm:0.23.1":
version: 0.23.1
resolution: "@esbuild/win32-x64@npm:0.23.1"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0":
version: 4.4.0
resolution: "@eslint-community/eslint-utils@npm:4.4.0"
@ -7654,6 +7822,7 @@ __metadata:
solidity-coverage: "npm:^0.8.3"
ts-generator: "npm:^0.1.1"
ts-node: "npm:^10.8.0"
tsx: "npm:^4.19.1"
typechain: "patch:typechain@npm%3A8.3.2#~/.yarn/patches/typechain-npm-8.3.2-b02e27439e.patch"
typescript: "npm:5.3.3"
peerDependencies:
@ -18279,6 +18448,89 @@ __metadata:
languageName: node
linkType: hard
"esbuild@npm:~0.23.0":
version: 0.23.1
resolution: "esbuild@npm:0.23.1"
dependencies:
"@esbuild/aix-ppc64": "npm:0.23.1"
"@esbuild/android-arm": "npm:0.23.1"
"@esbuild/android-arm64": "npm:0.23.1"
"@esbuild/android-x64": "npm:0.23.1"
"@esbuild/darwin-arm64": "npm:0.23.1"
"@esbuild/darwin-x64": "npm:0.23.1"
"@esbuild/freebsd-arm64": "npm:0.23.1"
"@esbuild/freebsd-x64": "npm:0.23.1"
"@esbuild/linux-arm": "npm:0.23.1"
"@esbuild/linux-arm64": "npm:0.23.1"
"@esbuild/linux-ia32": "npm:0.23.1"
"@esbuild/linux-loong64": "npm:0.23.1"
"@esbuild/linux-mips64el": "npm:0.23.1"
"@esbuild/linux-ppc64": "npm:0.23.1"
"@esbuild/linux-riscv64": "npm:0.23.1"
"@esbuild/linux-s390x": "npm:0.23.1"
"@esbuild/linux-x64": "npm:0.23.1"
"@esbuild/netbsd-x64": "npm:0.23.1"
"@esbuild/openbsd-arm64": "npm:0.23.1"
"@esbuild/openbsd-x64": "npm:0.23.1"
"@esbuild/sunos-x64": "npm:0.23.1"
"@esbuild/win32-arm64": "npm:0.23.1"
"@esbuild/win32-ia32": "npm:0.23.1"
"@esbuild/win32-x64": "npm:0.23.1"
dependenciesMeta:
"@esbuild/aix-ppc64":
optional: true
"@esbuild/android-arm":
optional: true
"@esbuild/android-arm64":
optional: true
"@esbuild/android-x64":
optional: true
"@esbuild/darwin-arm64":
optional: true
"@esbuild/darwin-x64":
optional: true
"@esbuild/freebsd-arm64":
optional: true
"@esbuild/freebsd-x64":
optional: true
"@esbuild/linux-arm":
optional: true
"@esbuild/linux-arm64":
optional: true
"@esbuild/linux-ia32":
optional: true
"@esbuild/linux-loong64":
optional: true
"@esbuild/linux-mips64el":
optional: true
"@esbuild/linux-ppc64":
optional: true
"@esbuild/linux-riscv64":
optional: true
"@esbuild/linux-s390x":
optional: true
"@esbuild/linux-x64":
optional: true
"@esbuild/netbsd-x64":
optional: true
"@esbuild/openbsd-arm64":
optional: true
"@esbuild/openbsd-x64":
optional: true
"@esbuild/sunos-x64":
optional: true
"@esbuild/win32-arm64":
optional: true
"@esbuild/win32-ia32":
optional: true
"@esbuild/win32-x64":
optional: true
bin:
esbuild: bin/esbuild
checksum: f55fbd0bfb0f86ce67a6d2c6f6780729d536c330999ecb9f5a38d578fb9fda820acbbc67d6d1d377eed8fed50fc38f14ff9cb014f86dafab94269a7fb2177018
languageName: node
linkType: hard
"escalade@npm:^3.1.1":
version: 3.1.1
resolution: "escalade@npm:3.1.1"
@ -20100,6 +20352,15 @@ __metadata:
languageName: node
linkType: hard
"get-tsconfig@npm:^4.7.5":
version: 4.8.1
resolution: "get-tsconfig@npm:4.8.1"
dependencies:
resolve-pkg-maps: "npm:^1.0.0"
checksum: 3fb5a8ad57b9633eaea085d81661e9e5c9f78b35d8f8689eaf8b8b45a2a3ebf3b3422266d4d7df765e308cc1e6231648d114803ab3d018332e29916f2c1de036
languageName: node
linkType: hard
"getpass@npm:^0.1.1":
version: 0.1.7
resolution: "getpass@npm:0.1.7"
@ -29828,6 +30089,22 @@ __metadata:
languageName: node
linkType: hard
"tsx@npm:^4.19.1":
version: 4.19.1
resolution: "tsx@npm:4.19.1"
dependencies:
esbuild: "npm:~0.23.0"
fsevents: "npm:~2.3.3"
get-tsconfig: "npm:^4.7.5"
dependenciesMeta:
fsevents:
optional: true
bin:
tsx: dist/cli.mjs
checksum: 1f5f0b7c4107fc18f523e94c79204b043641aa328f721324795cc961826879035652a1f19fe29ba420465d9f4bacb0f47e08f0bd4b934684ab45727eca110311
languageName: node
linkType: hard
"tsx@npm:^4.7.1":
version: 4.7.1
resolution: "tsx@npm:4.7.1"

Loading…
Cancel
Save