From 5c3a0e3b7651036b4a3673eaa0052de86733ea4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 16 May 2025 14:33:04 -0300 Subject: [PATCH 1/8] feat: remove contract interfaces from package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- package.json | 3 +- packages/common-ts/package.json | 3 +- packages/common-ts/src/contracts/chain.ts | 47 ----- .../common-ts/src/contracts/index.test.ts | 25 --- packages/common-ts/src/contracts/index.ts | 190 ------------------ packages/common-ts/src/index.ts | 1 - yarn.lock | 22 +- 7 files changed, 4 insertions(+), 287 deletions(-) delete mode 100644 packages/common-ts/src/contracts/chain.ts delete mode 100644 packages/common-ts/src/contracts/index.test.ts delete mode 100644 packages/common-ts/src/contracts/index.ts diff --git a/package.json b/package.json index dc84f9b..90c2878 100644 --- a/package.json +++ b/package.json @@ -14,5 +14,6 @@ "devDependencies": { "@octokit/core": "^3.2.0", "lerna": "^4.0.0" - } + }, + "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610" } diff --git a/packages/common-ts/package.json b/packages/common-ts/package.json index 24f0465..bc17064 100644 --- a/packages/common-ts/package.json +++ b/packages/common-ts/package.json @@ -1,6 +1,6 @@ { "name": "@graphprotocol/common-ts", - "version": "2.0.11", + "version": "3.0.0", "description": "Common TypeScript library for Graph Protocol components", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -16,7 +16,6 @@ "test:watch": "jest --watch --passWithNoTests --detectOpenHandles --verbose" }, "dependencies": { - "@graphprotocol/contracts": "5.3.3", "@graphprotocol/pino-sentry-simple": "0.7.1", "@urql/core": "3.1.0", "@urql/exchange-execute": "2.1.0", diff --git a/packages/common-ts/src/contracts/chain.ts b/packages/common-ts/src/contracts/chain.ts deleted file mode 100644 index 235e2af..0000000 --- a/packages/common-ts/src/contracts/chain.ts +++ /dev/null @@ -1,47 +0,0 @@ -class MapWithGetKey extends Map { - getKey(value: K): K | undefined { - for (const [k, v] of this.entries()) { - if (v === value) { - return k - } - } - return - } -} - -// List of supported L1 <> L2 chain mappings -const chainMap = new MapWithGetKey([ - [1, 42161], // Ethereum Mainnet - Arbitrum One - [4, 421611], // Ethereum Rinkeby - Arbitrum Rinkeby - [5, 421613], // Ethereum Goerli - Arbitrum Goerli - [11155111, 421614], // Ethereum Sepolia - Arbitrum Sepolia - [1337, 412346], // Localhost - Arbitrum Localhost -]) - -export const l1Chains = Array.from(chainMap.keys()) -export const l2Chains = Array.from(chainMap.values()) -export const chains = [...l1Chains, ...l2Chains] - -export const isL1 = (chainId: number): boolean => l1Chains.includes(chainId) -export const isL2 = (chainId: number): boolean => l2Chains.includes(chainId) -export const isSupported = (chainId: number | undefined): boolean => - chainId !== undefined && chains.includes(chainId) - -export const l1ToL2 = (chainId: number): number | undefined => chainMap.get(chainId) -export const l2ToL1 = (chainId: number): number | undefined => chainMap.getKey(chainId) -export const counterpart = (chainId: number): number | undefined => { - if (!isSupported(chainId)) return - return isL1(chainId) ? l1ToL2(chainId) : l2ToL1(chainId) -} - -export default { - l1Chains, - l2Chains, - chains, - isL1, - isL2, - isSupported, - l1ToL2, - l2ToL1, - counterpart, -} diff --git a/packages/common-ts/src/contracts/index.test.ts b/packages/common-ts/src/contracts/index.test.ts deleted file mode 100644 index 26a3f8e..0000000 --- a/packages/common-ts/src/contracts/index.test.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Signer } from 'ethers' -import { connectContracts } from '.' -import * as DEPLOYED_CONTRACTS from '@graphprotocol/contracts/addresses.json' - -jest.mock('ethers') - -const mockSigner = jest.fn() as unknown as Signer - -describe('Contracts', () => { - // Test for each supported protocol network - test.each([1, 5, 42161, 421613, 421614, 11155111])( - 'Connect contracts with explicit addressBook provided [chainId: %p]', - chainId => { - const contracts = connectContracts(mockSigner, chainId, DEPLOYED_CONTRACTS) - expect(contracts).toBeDefined() - }, - ) - test.each([1, 5, 42161, 421613, 421614, 11155111])( - 'Connect contracts without explicit addressBook provided [chainId: %p]', - chainId => { - const contracts = connectContracts(mockSigner, chainId, undefined) - expect(contracts).toBeDefined() - }, - ) -}) diff --git a/packages/common-ts/src/contracts/index.ts b/packages/common-ts/src/contracts/index.ts deleted file mode 100644 index b136ce3..0000000 --- a/packages/common-ts/src/contracts/index.ts +++ /dev/null @@ -1,190 +0,0 @@ -import { providers, Signer } from 'ethers' -import graphChain from './chain' - -// Contract addresses -import * as DEPLOYED_CONTRACTS from '@graphprotocol/contracts/addresses.json' - -// Contract ABIs -import { Curation } from '@graphprotocol/contracts/dist/types/Curation' -import { DisputeManager } from '@graphprotocol/contracts/dist/types/DisputeManager' -import { EpochManager } from '@graphprotocol/contracts/dist/types/EpochManager' -import { GNS } from '@graphprotocol/contracts/dist/types/GNS' -import { RewardsManager } from '@graphprotocol/contracts/dist/types/RewardsManager' -import { ServiceRegistry } from '@graphprotocol/contracts/dist/types/ServiceRegistry' -import { IL1Staking } from '@graphprotocol/contracts/dist/types/IL1Staking' -import { IL2Staking } from '@graphprotocol/contracts/dist/types/IL2Staking' -import { GraphToken } from '@graphprotocol/contracts/dist/types/GraphToken' -import { Controller } from '@graphprotocol/contracts/dist/types/Controller' -import { AllocationExchange } from '@graphprotocol/contracts/dist/types/AllocationExchange' -import { GraphProxyAdmin } from '@graphprotocol/contracts/dist/types/GraphProxyAdmin' -import { SubgraphNFT } from '@graphprotocol/contracts/dist/types/SubgraphNFT' -import { GraphCurationToken } from '@graphprotocol/contracts/dist/types/GraphCurationToken' -import { L1GraphTokenGateway } from '@graphprotocol/contracts/dist/types/L1GraphTokenGateway' -import { BridgeEscrow } from '@graphprotocol/contracts/dist/types/BridgeEscrow' -import { L2GraphToken } from '@graphprotocol/contracts/dist/types/L2GraphToken' -import { L2GraphTokenGateway } from '@graphprotocol/contracts/dist/types/L2GraphTokenGateway' -import { L2Curation } from '@graphprotocol/contracts/dist/types/L2Curation' - -// Contract factories -import { Curation__factory } from '@graphprotocol/contracts/dist/types/factories/Curation__factory' -import { L2Curation__factory } from '@graphprotocol/contracts/dist/types/factories/L2Curation__factory' -import { DisputeManager__factory } from '@graphprotocol/contracts/dist/types/factories/DisputeManager__factory' -import { EpochManager__factory } from '@graphprotocol/contracts/dist/types/factories/EpochManager__factory' -import { GNS__factory } from '@graphprotocol/contracts/dist/types/factories/GNS__factory' -import { RewardsManager__factory } from '@graphprotocol/contracts/dist/types/factories/RewardsManager__factory' -import { ServiceRegistry__factory } from '@graphprotocol/contracts/dist/types/factories/ServiceRegistry__factory' -import { IL1Staking__factory } from '@graphprotocol/contracts/dist/types/factories/IL1Staking__factory' -import { IL2Staking__factory } from '@graphprotocol/contracts/dist/types/factories/IL2Staking__factory' -import { GraphToken__factory } from '@graphprotocol/contracts/dist/types/factories/GraphToken__factory' -import { Controller__factory } from '@graphprotocol/contracts/dist/types/factories/Controller__factory' -import { AllocationExchange__factory } from '@graphprotocol/contracts/dist/types/factories/AllocationExchange__factory' -import { GraphProxyAdmin__factory } from '@graphprotocol/contracts/dist/types/factories/GraphProxyAdmin__factory' -import { SubgraphNFT__factory } from '@graphprotocol/contracts/dist/types/factories/SubgraphNFT__factory' -import { GraphCurationToken__factory } from '@graphprotocol/contracts/dist/types/factories/GraphCurationToken__factory' -import { L1GraphTokenGateway__factory } from '@graphprotocol/contracts/dist/types/factories/L1GraphTokenGateway__factory' -import { BridgeEscrow__factory } from '@graphprotocol/contracts/dist/types/factories/BridgeEscrow__factory' -import { L2GraphToken__factory } from '@graphprotocol/contracts/dist/types/factories/L2GraphToken__factory' -import { L2GraphTokenGateway__factory } from '@graphprotocol/contracts/dist/types/factories/L2GraphTokenGateway__factory' - -export const GraphChain = graphChain - -export interface NetworkContracts { - curation: Curation | L2Curation - disputeManager: DisputeManager - epochManager: EpochManager - gns: GNS - rewardsManager: RewardsManager - serviceRegistry: ServiceRegistry - staking: IL1Staking | IL2Staking - token: GraphToken | L2GraphToken - controller: Controller - allocationExchange: AllocationExchange - graphProxyAdmin: GraphProxyAdmin - subgraphNFT: SubgraphNFT - graphCurationToken: GraphCurationToken - - // Only L1 - l1GraphTokenGateway?: L1GraphTokenGateway - bridgeEscrow?: BridgeEscrow - - // Only L2 - l2GraphTokenGateway?: L2GraphTokenGateway -} - -export type AddressBook = { [key: string]: { [key: string]: { address: string } } } - -export const connectContracts = async ( - providerOrSigner: providers.Provider | Signer, - chainId: number, - addressBook: AddressBook | undefined, -): Promise => { - const deployedContracts = addressBook - ? addressBook[`${chainId}`] - : // eslint-disable-next-line @typescript-eslint/no-explicit-any - (DEPLOYED_CONTRACTS as any)[`${chainId}`] - if (!deployedContracts) { - throw new Error(`chainId: '${chainId}' has no deployed contracts`) - } - - const getContractAddress = (contractName: string) => { - if (!deployedContracts[contractName]) { - throw new Error( - `Deployed contract '${contractName}' is undefined for chainId: '${chainId}'`, - ) - } - const address = deployedContracts[contractName].address - if (!address) { - throw new Error( - `Deployed contract '${contractName}' address is undefined for chainId: '${chainId}'`, - ) - } - return address - } - - const GraphTokenFactory = GraphChain.isL1(chainId) - ? GraphToken__factory - : L2GraphToken__factory - - const graphTokenAddress = GraphChain.isL1(chainId) - ? getContractAddress('GraphToken') - : getContractAddress('L2GraphToken') - - const staking = GraphChain.isL1(chainId) - ? IL1Staking__factory.connect(getContractAddress('L1Staking'), providerOrSigner) - : IL2Staking__factory.connect(getContractAddress('L2Staking'), providerOrSigner) - - const gns = GraphChain.isL1(chainId) - ? GNS__factory.connect(getContractAddress('L1GNS'), providerOrSigner) - : GNS__factory.connect(getContractAddress('L2GNS'), providerOrSigner) - - const curation = GraphChain.isL1(chainId) - ? Curation__factory.connect(getContractAddress('Curation'), providerOrSigner) - : L2Curation__factory.connect(getContractAddress('L2Curation'), providerOrSigner) - - const contracts: NetworkContracts = { - disputeManager: DisputeManager__factory.connect( - getContractAddress('DisputeManager'), - providerOrSigner, - ), - epochManager: EpochManager__factory.connect( - getContractAddress('EpochManager'), - providerOrSigner, - ), - gns, - curation, - rewardsManager: RewardsManager__factory.connect( - getContractAddress('RewardsManager'), - providerOrSigner, - ), - serviceRegistry: ServiceRegistry__factory.connect( - getContractAddress('ServiceRegistry'), - providerOrSigner, - ), - staking, - token: GraphTokenFactory.connect(graphTokenAddress, providerOrSigner), - controller: Controller__factory.connect( - getContractAddress('Controller'), - providerOrSigner, - ), - allocationExchange: AllocationExchange__factory.connect( - getContractAddress('AllocationExchange'), - providerOrSigner, - ), - graphProxyAdmin: GraphProxyAdmin__factory.connect( - getContractAddress('GraphProxyAdmin'), - providerOrSigner, - ), - subgraphNFT: SubgraphNFT__factory.connect( - getContractAddress('SubgraphNFT'), - providerOrSigner, - ), - graphCurationToken: GraphCurationToken__factory.connect( - getContractAddress('GraphCurationToken'), - providerOrSigner, - ), - } - - if (GraphChain.isL1(chainId)) { - if (deployedContracts.L1GraphTokenGateway) { - contracts.l1GraphTokenGateway = L1GraphTokenGateway__factory.connect( - getContractAddress('L1GraphTokenGateway'), - providerOrSigner, - ) - } - if (deployedContracts.BridgeEscrow) { - contracts.bridgeEscrow = BridgeEscrow__factory.connect( - getContractAddress('BridgeEscrow'), - providerOrSigner, - ) - } - } else if (GraphChain.isL2(chainId)) { - if (deployedContracts.L2GraphTokenGateway) { - contracts.l2GraphTokenGateway = L2GraphTokenGateway__factory.connect( - getContractAddress('L2GraphTokenGateway'), - providerOrSigner, - ) - } - } - - return contracts -} diff --git a/packages/common-ts/src/index.ts b/packages/common-ts/src/index.ts index d4edff3..1f1ac60 100644 --- a/packages/common-ts/src/index.ts +++ b/packages/common-ts/src/index.ts @@ -2,7 +2,6 @@ export * from './logging' export * from './metrics' export * from './database' export * from './attestations' -export * from './contracts' export * from './subgraph' export * from './subgraphs' export * from './grt' diff --git a/yarn.lock b/yarn.lock index a7b00dc..b47347b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -967,14 +967,6 @@ unist-util-remove-position "^4.0.0" unist-util-select "^4.0.0" -"@graphprotocol/contracts@5.3.3": - version "5.3.3" - resolved "https://registry.npmjs.org/@graphprotocol/contracts/-/contracts-5.3.3.tgz#89c383ce244d9ed6cf1146baafde379cbbdfdfe6" - integrity sha512-fmFSKr+VDinWWotj2q/Ztn92PppcRrYXeO/62gLgkLos/DcYa7bGWKbcOWyMUw0vsUvXxk6QAtr5o/LG3yQ1WQ== - dependencies: - console-table-printer "^2.11.1" - ethers "^5.6.0" - "@graphprotocol/pino-sentry-simple@0.7.1": version "0.7.1" resolved "https://registry.npmjs.org/@graphprotocol/pino-sentry-simple/-/pino-sentry-simple-0.7.1.tgz#ac08b978bfa33178b9e809f53ae0983ff5f724d8" @@ -3463,13 +3455,6 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -console-table-printer@^2.11.1: - version "2.11.1" - resolved "https://registry.yarnpkg.com/console-table-printer/-/console-table-printer-2.11.1.tgz#c2dfe56e6343ea5bcfa3701a4be29fe912dbd9c7" - integrity sha512-8LfFpbF/BczoxPwo2oltto5bph8bJkGOATXsg3E9ddMJOGnWJciKHldx2zDj5XIBflaKzPfVCjOTl6tMh7lErg== - dependencies: - simple-wcswidth "^1.0.1" - content-disposition@0.5.4: version "0.5.4" resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" @@ -4119,7 +4104,7 @@ etag@~1.8.1: resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -ethers@5.7.0, ethers@^5.6.0: +ethers@5.7.0: version "5.7.0" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.0.tgz#0055da174b9e076b242b8282638bc94e04b39835" integrity sha512-5Xhzp2ZQRi0Em+0OkOcRHxPzCfoBfgtOQA+RUylSkuHbhTEaQklnYi2hsWbRgs3ztJsXVXd9VKBcO1ScWL8YfA== @@ -7755,11 +7740,6 @@ signale@^1.4.0: figures "^2.0.0" pkg-conf "^2.1.0" -simple-wcswidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz#8ab18ac0ae342f9d9b629604e54d2aa1ecb018b2" - integrity sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg== - sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" From f4072740152343632f22b421538e2b194a9741be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 16 May 2025 14:54:59 -0300 Subject: [PATCH 2/8] chore: update to ethers v6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/common-ts/package.json | 2 +- .../src/attestations/attestations.test.ts | 12 +- .../src/attestations/attestations.ts | 44 +- packages/common-ts/src/attestations/eip712.ts | 10 +- packages/common-ts/src/grt/index.ts | 5 +- packages/common-ts/src/subgraphs/index.ts | 6 +- packages/common-ts/src/util/addresses.ts | 4 +- yarn.lock | 509 ++---------------- 8 files changed, 96 insertions(+), 496 deletions(-) diff --git a/packages/common-ts/package.json b/packages/common-ts/package.json index bc17064..0acd08f 100644 --- a/packages/common-ts/package.json +++ b/packages/common-ts/package.json @@ -23,7 +23,7 @@ "bs58": "5.0.0", "cors": "2.8.5", "cross-fetch": "4.0.0", - "ethers": "5.7.0", + "ethers": "6.13.5", "express": "4.18.2", "graphql": "16.8.0", "graphql-tag": "2.12.6", diff --git a/packages/common-ts/src/attestations/attestations.test.ts b/packages/common-ts/src/attestations/attestations.test.ts index 5817068..ff334ba 100644 --- a/packages/common-ts/src/attestations/attestations.test.ts +++ b/packages/common-ts/src/attestations/attestations.test.ts @@ -5,7 +5,7 @@ import { recoverAttestation, } from './attestations' import { Wallet } from 'ethers' -import { utils } from 'ethers' +import { hexlify } from 'ethers' import * as bs58 from 'bs58' describe('Attestations', () => { @@ -16,12 +16,12 @@ describe('Attestations', () => { const receipt = { requestCID: '0xd902c18a1b3590a3d2a8ae4439db376764fda153ca077e339d0427bf776bd463', responseCID: '0xbe0b5ae5f598fdf631133571d59ef16b443b2fe02e35ca2cb807158069009db9', - subgraphDeploymentID: utils.hexlify( + subgraphDeploymentID: hexlify( bs58.decode('QmTXzATwNfgGVukV1fX2T6xw9f6LAYRVWpsdXyRWzUR2H9').slice(2), ), } - const signer = Wallet.fromMnemonic(mnemonic) + const signer = Wallet.fromPhrase(mnemonic) const attestation = await createAttestation( signer.privateKey, 1, @@ -44,7 +44,7 @@ describe('Attestations', () => { const receipt = { requestCID: '0xd902c18a1b3590a3d2a8ae4439db376764fda153ca077e339d0427bf776bd463', responseCID: '0xbe0b5ae5f598fdf631133571d59ef16b443b2fe02e35ca2cb807158069009db9', - subgraphDeploymentID: utils.hexlify( + subgraphDeploymentID: hexlify( bs58.decode('QmTXzATwNfgGVukV1fX2T6xw9f6LAYRVWpsdXyRWzUR2H9').slice(2), ), } @@ -66,12 +66,12 @@ describe('Attestations', () => { const receipt = { requestCID: '0xd902c18a1b3590a3d2a8ae4439db376764fda153ca077e339d0427bf776bd463', responseCID: '0xbe0b5ae5f598fdf631133571d59ef16b443b2fe02e35ca2cb807158069009db9', - subgraphDeploymentID: utils.hexlify( + subgraphDeploymentID: hexlify( bs58.decode('QmTXzATwNfgGVukV1fX2T6xw9f6LAYRVWpsdXyRWzUR2H9').slice(2), ), } - const signer = Wallet.fromMnemonic(mnemonic) + const signer = Wallet.fromPhrase(mnemonic) const chainID = 1 const contractAddress = '0x0000000000000000000000000000000000000000' const attestation = await createAttestation( diff --git a/packages/common-ts/src/attestations/attestations.ts b/packages/common-ts/src/attestations/attestations.ts index 050401a..0a8364d 100644 --- a/packages/common-ts/src/attestations/attestations.ts +++ b/packages/common-ts/src/attestations/attestations.ts @@ -1,20 +1,22 @@ -import { utils } from 'ethers' -import * as eip712 from './eip712' - -const { - defaultAbiCoder: abi, - arrayify, +import { + AbiCoder, + getBytes, concat, hexlify, - splitSignature, - joinSignature, -} = utils + BytesLike, + keccak256, + SigningKey, + Signature, + recoverAddress, +} from 'ethers' +import * as eip712 from './eip712' const SIG_SIZE_BYTES = 161 const RECEIPT_SIZE_BYTES = 96 const RECEIPT_TYPE_HASH = eip712.typeHash( 'Receipt(bytes32 requestCID,bytes32 responseCID,bytes32 subgraphDeploymentID)', ) +const abi = AbiCoder.defaultAbiCoder() export interface Receipt { requestCID: string @@ -56,7 +58,7 @@ export const getDomainSeparator = ( } export const createAttestation = async ( - signer: utils.BytesLike, + signer: BytesLike, chainId: number, disputeManagerAddress: string, receipt: Receipt, @@ -65,9 +67,9 @@ export const createAttestation = async ( const domainSeparator = getDomainSeparator(chainId, disputeManagerAddress, version) const encodedReceipt = encodeReceipt(receipt) const message = eip712.encode(domainSeparator, encodedReceipt) - const messageHash = utils.keccak256(message) - const signingKey = new utils.SigningKey(signer) - const { r, s, v } = signingKey.signDigest(messageHash) + const messageHash = keccak256(message) + const signingKey = new SigningKey(signer) + const { r, s, v } = signingKey.sign(messageHash) return { requestCID: receipt.requestCID, @@ -80,18 +82,18 @@ export const createAttestation = async ( } export const encodeAttestation = (attestation: Attestation): string => { - const data = arrayify( + const data = getBytes( abi.encode( ['bytes32', 'bytes32', 'bytes32'], [attestation.requestCID, attestation.responseCID, attestation.subgraphDeploymentID], ), ) - const sig = joinSignature(attestation) + const sig = Signature.from(attestation).serialized return hexlify(concat([data, sig])) } export const decodeAttestation = (attestationData: string): Attestation => { - const attestationBytes = arrayify(attestationData) + const attestationBytes = getBytes(attestationData) if (attestationBytes.length !== SIG_SIZE_BYTES) { throw new Error('Invalid signature length') } @@ -100,8 +102,8 @@ export const decodeAttestation = (attestationData: string): Attestation => { ['bytes32', 'bytes32', 'bytes32'], attestationBytes, ) - const sig = splitSignature( - attestationBytes.slice(RECEIPT_SIZE_BYTES, RECEIPT_SIZE_BYTES + SIG_SIZE_BYTES), + const sig = Signature.from( + hexlify(attestationBytes.slice(RECEIPT_SIZE_BYTES, RECEIPT_SIZE_BYTES + SIG_SIZE_BYTES)) ) return { @@ -128,9 +130,9 @@ export const recoverAttestation = ( } const encodedReceipt = encodeReceipt(receipt) const message = eip712.encode(domainSeparator, encodedReceipt) - const messageHash = utils.keccak256(message) - return utils.recoverAddress( + const messageHash = keccak256(message) + return recoverAddress( messageHash, - joinSignature({ r: attestation.r, s: attestation.s, v: attestation.v }), + Signature.from({ r: attestation.r, s: attestation.s, v: attestation.v }).serialized, ) } diff --git a/packages/common-ts/src/attestations/eip712.ts b/packages/common-ts/src/attestations/eip712.ts index aeb5664..d2bb9cb 100644 --- a/packages/common-ts/src/attestations/eip712.ts +++ b/packages/common-ts/src/attestations/eip712.ts @@ -1,4 +1,4 @@ -import { utils } from 'ethers' +import { AbiCoder, keccak256, toUtf8Bytes } from 'ethers' // Hashes a type signature based on the `typeHash` defined on // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#definition-of-hashstruct. @@ -6,7 +6,7 @@ import { utils } from 'ethers' // The type signature is expected to follow the `encodeType` format described on // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md#definition-of-encodetype. export const typeHash = (typeSignature: string): string => - utils.keccak256(utils.toUtf8Bytes(typeSignature)) + keccak256(toUtf8Bytes(typeSignature)) // Encodes a list of values according to the given types. // @@ -21,14 +21,14 @@ const encodeData = (types: string[], values: any[]): string => { for (let i = 0; i < types.length; i++) { if (types[i] === 'string' || types[i] === 'bytes') { transformedTypes[i] = 'bytes32' - transformedValues[i] = utils.keccak256(utils.toUtf8Bytes(values[i])) + transformedValues[i] = keccak256(toUtf8Bytes(values[i])) } else { transformedTypes[i] = types[i] transformedValues[i] = values[i] } } - return utils.defaultAbiCoder.encode(transformedTypes, transformedValues) + return AbiCoder.defaultAbiCoder().encode(transformedTypes, transformedValues) } // Hashes a struct based on the hash of a type signature (see `typeHash`), @@ -37,7 +37,7 @@ const encodeData = (types: string[], values: any[]): string => { // NOTE: Does not support recursion yet. // eslint-disable-next-line @typescript-eslint/no-explicit-any export const hashStruct = (typeHash: string, types: string[], values: any[]): string => { - return utils.keccak256(encodeData(['bytes32', ...types], [typeHash, ...values])) + return keccak256(encodeData(['bytes32', ...types], [typeHash, ...values])) } const EIP712_DOMAIN_TYPE_HASH = typeHash( diff --git a/packages/common-ts/src/grt/index.ts b/packages/common-ts/src/grt/index.ts index 7537351..465fa61 100644 --- a/packages/common-ts/src/grt/index.ts +++ b/packages/common-ts/src/grt/index.ts @@ -1,6 +1,5 @@ -import { BigNumber, BigNumberish } from 'ethers' -import { parseUnits, formatUnits } from 'ethers/lib/utils' +import { BigNumberish, formatUnits, parseUnits } from 'ethers' export const formatGRT = (value: BigNumberish): string => formatUnits(value, 18) -export const parseGRT = (grt: string): BigNumber => parseUnits(grt, 18) +export const parseGRT = (grt: string): bigint => parseUnits(grt, 18) diff --git a/packages/common-ts/src/subgraphs/index.ts b/packages/common-ts/src/subgraphs/index.ts index bbd0754..165aaa2 100644 --- a/packages/common-ts/src/subgraphs/index.ts +++ b/packages/common-ts/src/subgraphs/index.ts @@ -1,4 +1,4 @@ -import { utils } from 'ethers' +import { hexlify, getBytes } from 'ethers' import base58 from 'bs58' export class SubgraphName { @@ -28,7 +28,7 @@ export class SubgraphDeploymentID { let value // Security: Input validation if (multiHashCheck.test(id)) { - value = utils.hexlify(base58.decode(id).slice(2)) + value = hexlify(base58.decode(id).slice(2)) } else if (bytes32Check.test(id)) { value = id } @@ -56,7 +56,7 @@ export class SubgraphDeploymentID { } get ipfsHash(): string { - return base58.encode([0x12, 0x20, ...utils.arrayify(this.value)]) + return base58.encode([0x12, 0x20, ...getBytes(this.value)]) } } diff --git a/packages/common-ts/src/util/addresses.ts b/packages/common-ts/src/util/addresses.ts index 04242ff..a5df930 100644 --- a/packages/common-ts/src/util/addresses.ts +++ b/packages/common-ts/src/util/addresses.ts @@ -1,4 +1,4 @@ -import { utils } from 'ethers' +import { getAddress } from 'ethers' /** * A normalized address in checksum format. @@ -9,4 +9,4 @@ export type Address = string & { _isAddress: void } * Converts an address to checksum format and returns a typed instance. */ export const toAddress = (s: Address | string): Address => - typeof s === 'string' ? (utils.getAddress(s) as Address) : s + typeof s === 'string' ? (getAddress(s) as Address) : s diff --git a/yarn.lock b/yarn.lock index b47347b..b527041 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30,6 +30,11 @@ tunnel "^0.0.6" undici "^5.25.4" +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + "@ampproject/remapping@^2.1.0": version "2.1.2" resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" @@ -544,348 +549,6 @@ resolved "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz#86f79756004a97fa4df866835093f1df3d03c333" integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w== -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/contracts@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/networks@5.7.0", "@ethersproject/networks@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.0.tgz#df72a392f1a63a57f87210515695a31a245845ad" - integrity sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.0.tgz#a885cfc7650a64385e7b03ac86fe9c2d4a9c2c63" - integrity sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/solidity@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@5.7.0", "@ethersproject/web@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.0.tgz#40850c05260edad8b54827923bbad23d96aac0bc" - integrity sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@fastify/busboy@^2.0.0": version "2.1.0" resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" @@ -1930,6 +1593,18 @@ npmlog "^4.1.2" write-file-atomic "^3.0.3" +"@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -2435,6 +2110,13 @@ resolved "https://registry.npmjs.org/@types/node/-/node-20.6.1.tgz#8b589bba9b2af0128796461a0979764562687e6f" integrity sha512-4LcJvuXQlv4lTHnxwyHQZ3uR9Zw2j7m1C9DfuwoTFQQP4Pmu04O6IfLYgMmHoOCt0nosItLLZAH+sOrRE0Bo8g== +"@types/node@22.7.5": + version "22.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + dependencies: + undici-types "~6.19.2" + "@types/normalize-package-data@^2.4.0": version "2.4.1" resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" @@ -2701,10 +2383,10 @@ add-stream@^1.0.0: resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== agent-base@6, agent-base@^6.0.2: version "6.0.2" @@ -2989,11 +2671,6 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - before-after-hook@^2.2.0: version "2.2.2" resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" @@ -3004,16 +2681,6 @@ bintrees@1.0.1: resolved "https://registry.npmjs.org/bintrees/-/bintrees-1.0.1.tgz#0e655c9b9c2435eaab68bf4027226d2b55a34524" integrity sha1-DmVcm5wkNeqraL9AJyJtK1WjRSQ= -bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - body-parser@1.20.1: version "1.20.1" resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" @@ -3084,11 +2751,6 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - browserslist@^4.17.5: version "4.20.2" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88" @@ -3876,19 +3538,6 @@ electron-to-chromium@^1.4.84: resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz#e7a3bfa9d745dd9b9e597616cb17283cc349781a" integrity sha512-ZYfpVLULm67K7CaaGP7DmjyeMY4naxsbTy+syVVxT6QHI1Ww8XbJjmr9fDckrhq44WzCrcC5kH3zGpdusxwwqg== -elliptic@6.5.4: - version "6.5.4" - resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - emittery@^0.13.1: version "0.13.1" resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" @@ -4104,41 +3753,18 @@ etag@~1.8.1: resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -ethers@5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.0.tgz#0055da174b9e076b242b8282638bc94e04b39835" - integrity sha512-5Xhzp2ZQRi0Em+0OkOcRHxPzCfoBfgtOQA+RUylSkuHbhTEaQklnYi2hsWbRgs3ztJsXVXd9VKBcO1ScWL8YfA== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.0" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.0" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.0" - "@ethersproject/wordlists" "5.7.0" +ethers@6.13.5: + version "6.13.5" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.5.tgz#8c1d6ac988ac08abc3c1d8fabbd4b8b602851ac4" + integrity sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "22.7.5" + aes-js "4.0.0-beta.5" + tslib "2.7.0" + ws "8.17.1" eventemitter3@^4.0.4: version "4.0.7" @@ -4726,14 +4352,6 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - helmet@7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/helmet/-/helmet-7.0.0.tgz#ac3011ba82fa2467f58075afa58a49427ba6212d" @@ -4744,15 +4362,6 @@ hexoid@^1.0.0: resolved "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -5620,11 +5229,6 @@ jest@29.7.0: import-local "^3.0.2" jest-cli "^29.7.0" -js-sha3@0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -6101,16 +5705,6 @@ min-indent@^1.0.0: resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -7598,11 +7192,6 @@ safe-stable-stringify@^2.1.0: resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -scrypt-js@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - "semver@2 || 3 || 4 || 5", semver@^5.6.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -8293,6 +7882,11 @@ ts-jest@29.1.1: semver "^7.5.3" yargs-parser "^21.0.1" +tslib@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -8417,6 +8011,11 @@ underscore@^1.13.1: resolved "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz#276cea1e8b9722a8dbed0100a407dda572125881" integrity sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g== +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + undici@^5.25.4: version "5.27.2" resolved "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz#a270c563aea5b46cc0df2550523638c95c5d4411" @@ -8833,10 +8432,10 @@ write-pkg@^4.0.0: type-fest "^0.4.1" write-json-file "^3.2.0" -ws@7.4.6: - version "7.4.6" - resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" From 29986e4623436632103630edc87b44e891b9c793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 16 May 2025 15:01:33 -0300 Subject: [PATCH 3/8] chore: revert version bump MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/common-ts/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/common-ts/package.json b/packages/common-ts/package.json index 0acd08f..28b5060 100644 --- a/packages/common-ts/package.json +++ b/packages/common-ts/package.json @@ -1,6 +1,6 @@ { "name": "@graphprotocol/common-ts", - "version": "3.0.0", + "version": "2.0.11", "description": "Common TypeScript library for Graph Protocol components", "main": "dist/index.js", "types": "dist/index.d.ts", From fdfb32ffc0b4b19f7bb7cfa8dad191a3b207e253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 16 May 2025 15:01:56 -0300 Subject: [PATCH 4/8] v3.0.0 --- lerna.json | 2 +- packages/common-ts/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 921dba4..d9293c2 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": [ "packages/common-ts" ], - "version": "2.0.7" + "version": "3.0.0" } diff --git a/packages/common-ts/package.json b/packages/common-ts/package.json index 28b5060..0acd08f 100644 --- a/packages/common-ts/package.json +++ b/packages/common-ts/package.json @@ -1,6 +1,6 @@ { "name": "@graphprotocol/common-ts", - "version": "2.0.11", + "version": "3.0.0", "description": "Common TypeScript library for Graph Protocol components", "main": "dist/index.js", "types": "dist/index.d.ts", From 4e4925efb7e949a85fe66bb0430e504316590434 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 16 May 2025 15:37:37 -0300 Subject: [PATCH 5/8] chore: add commify --- .../common-ts/src/attestations/attestations.ts | 4 +++- packages/common-ts/src/util/commify.ts | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 packages/common-ts/src/util/commify.ts diff --git a/packages/common-ts/src/attestations/attestations.ts b/packages/common-ts/src/attestations/attestations.ts index 0a8364d..37d1713 100644 --- a/packages/common-ts/src/attestations/attestations.ts +++ b/packages/common-ts/src/attestations/attestations.ts @@ -103,7 +103,9 @@ export const decodeAttestation = (attestationData: string): Attestation => { attestationBytes, ) const sig = Signature.from( - hexlify(attestationBytes.slice(RECEIPT_SIZE_BYTES, RECEIPT_SIZE_BYTES + SIG_SIZE_BYTES)) + hexlify( + attestationBytes.slice(RECEIPT_SIZE_BYTES, RECEIPT_SIZE_BYTES + SIG_SIZE_BYTES), + ), ) return { diff --git a/packages/common-ts/src/util/commify.ts b/packages/common-ts/src/util/commify.ts new file mode 100644 index 0000000..3bc5fca --- /dev/null +++ b/packages/common-ts/src/util/commify.ts @@ -0,0 +1,14 @@ +import "ethers" + +function commify(value: string): string { + const match = value.match(/^(-?)([0-9]*)(\.?)([0-9]*)$/); + if (!match || (!match[2] && !match[4])) { + throw new Error(`bad formatted number: ${ JSON.stringify(value) }`); + } + + const neg = match[1]; + const whole = BigInt(match[2] || 0).toLocaleString("en-us"); + const frac = match[4] ? (match[4].match(/^(.*?)0*$/)?.[1] || "0") : "0"; + + return `${ neg }${ whole }.${ frac }`; +} \ No newline at end of file From 82af95ee90909993c617e69b015268c2a8fef892 Mon Sep 17 00:00:00 2001 From: Miguel de Elias Date: Fri, 16 May 2025 15:54:45 -0300 Subject: [PATCH 6/8] fix: export commify --- packages/common-ts/src/util/commify.ts | 18 +++++++++--------- packages/common-ts/src/util/index.ts | 1 + 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/common-ts/src/util/commify.ts b/packages/common-ts/src/util/commify.ts index 3bc5fca..cc9ab0f 100644 --- a/packages/common-ts/src/util/commify.ts +++ b/packages/common-ts/src/util/commify.ts @@ -1,14 +1,14 @@ -import "ethers" +import 'ethers' -function commify(value: string): string { - const match = value.match(/^(-?)([0-9]*)(\.?)([0-9]*)$/); +export function commify(value: string): string { + const match = value.match(/^(-?)([0-9]*)(\.?)([0-9]*)$/) if (!match || (!match[2] && !match[4])) { - throw new Error(`bad formatted number: ${ JSON.stringify(value) }`); + throw new Error(`bad formatted number: ${JSON.stringify(value)}`) } - const neg = match[1]; - const whole = BigInt(match[2] || 0).toLocaleString("en-us"); - const frac = match[4] ? (match[4].match(/^(.*?)0*$/)?.[1] || "0") : "0"; + const neg = match[1] + const whole = BigInt(match[2] || 0).toLocaleString('en-us') + const frac = match[4] ? match[4].match(/^(.*?)0*$/)?.[1] || '0' : '0' - return `${ neg }${ whole }.${ frac }`; -} \ No newline at end of file + return `${neg}${whole}.${frac}` +} diff --git a/packages/common-ts/src/util/index.ts b/packages/common-ts/src/util/index.ts index d0613c5..6c503eb 100644 --- a/packages/common-ts/src/util/index.ts +++ b/packages/common-ts/src/util/index.ts @@ -2,3 +2,4 @@ export * from './equal' export * from './arrays' export * from './addresses' export * from './bytes' +export * from './commify' From 20fcf50d5ccf0664d9097ea75b7b3b4156929f58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 16 May 2025 18:22:03 -0300 Subject: [PATCH 7/8] chore: pin ethers version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Migone --- packages/common-ts/package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/common-ts/package.json b/packages/common-ts/package.json index 0acd08f..e0062df 100644 --- a/packages/common-ts/package.json +++ b/packages/common-ts/package.json @@ -23,7 +23,7 @@ "bs58": "5.0.0", "cors": "2.8.5", "cross-fetch": "4.0.0", - "ethers": "6.13.5", + "ethers": "6.13.7", "express": "4.18.2", "graphql": "16.8.0", "graphql-tag": "2.12.6", diff --git a/yarn.lock b/yarn.lock index b527041..b9c9101 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3753,10 +3753,10 @@ etag@~1.8.1: resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -ethers@6.13.5: - version "6.13.5" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.5.tgz#8c1d6ac988ac08abc3c1d8fabbd4b8b602851ac4" - integrity sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ== +ethers@6.13.7: + version "6.13.7" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.7.tgz#7457fcb32413b441a3ee6e9f4cd63bf782de6226" + integrity sha512-qbaJ0uIrjh+huP1Lad2f2QtzW5dcqSVjIzVH6yWB4dKoMuj2WqYz5aMeeQTCNpAKgTJBM5J9vcc2cYJ23UAimQ== dependencies: "@adraffy/ens-normalize" "1.10.1" "@noble/curves" "1.2.0" From c946100a0a1063d5e9fbc11d052b01b5a82786fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Migone?= Date: Fri, 16 May 2025 18:23:59 -0300 Subject: [PATCH 8/8] v3.0.1 --- lerna.json | 2 +- packages/common-ts/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index d9293c2..222fbf5 100644 --- a/lerna.json +++ b/lerna.json @@ -2,5 +2,5 @@ "packages": [ "packages/common-ts" ], - "version": "3.0.0" + "version": "3.0.1" } diff --git a/packages/common-ts/package.json b/packages/common-ts/package.json index e0062df..e7b7f14 100644 --- a/packages/common-ts/package.json +++ b/packages/common-ts/package.json @@ -1,6 +1,6 @@ { "name": "@graphprotocol/common-ts", - "version": "3.0.0", + "version": "3.0.1", "description": "Common TypeScript library for Graph Protocol components", "main": "dist/index.js", "types": "dist/index.d.ts",