From d5f325ac0ea3bb39d8935711d0b2f6cd3eb926db Mon Sep 17 00:00:00 2001 From: yu23ki14 Date: Sat, 1 Feb 2025 15:03:58 +0900 Subject: [PATCH] tmp --- .../timeframe/HatsTimeFrameModule.sol | 8 ++ .../timeframe/IHatsTimeFrameModule.sol | 24 ++++ pkgs/subgraph/abis/HatsTimeFrameModule.json | 82 ++++++++++++++ pkgs/subgraph/config/sepolia.json | 9 +- pkgs/subgraph/package.json | 3 +- pkgs/subgraph/schema.graphql | 17 ++- pkgs/subgraph/src/bigbangMapping.ts | 45 ++++++++ pkgs/subgraph/src/fractionTokenMapping.ts | 98 ++++++++++++++++ pkgs/subgraph/src/helper/hat.ts | 8 ++ pkgs/subgraph/src/mapping.ts | 105 ------------------ pkgs/subgraph/subgraph.template.yaml | 2 +- yarn.lock | 41 +------ 12 files changed, 293 insertions(+), 149 deletions(-) create mode 100644 pkgs/subgraph/src/bigbangMapping.ts create mode 100644 pkgs/subgraph/src/fractionTokenMapping.ts create mode 100644 pkgs/subgraph/src/helper/hat.ts delete mode 100644 pkgs/subgraph/src/mapping.ts diff --git a/pkgs/contract/contracts/hatsmodules/timeframe/HatsTimeFrameModule.sol b/pkgs/contract/contracts/hatsmodules/timeframe/HatsTimeFrameModule.sol index 2e5fe78..70692c4 100644 --- a/pkgs/contract/contracts/hatsmodules/timeframe/HatsTimeFrameModule.sol +++ b/pkgs/contract/contracts/hatsmodules/timeframe/HatsTimeFrameModule.sol @@ -79,6 +79,8 @@ contract HatsTimeFrameModule is HatsModule, Ownable, IHatsTimeFrameModule { _setWoreTime(wearer, hatId, time); isActive[hatId][wearer] = true; HATS().mintHat(hatId, wearer); + + emit HatMinted(hatId, wearer, time == 0 ? block.timestamp : time); } /** @@ -99,6 +101,8 @@ contract HatsTimeFrameModule is HatsModule, Ownable, IHatsTimeFrameModule { totalActiveTime[hatId][wearer] += block.timestamp - woreTime[hatId][wearer]; + + emit HatDeactivated(hatId, wearer); } /** @@ -115,6 +119,8 @@ contract HatsTimeFrameModule is HatsModule, Ownable, IHatsTimeFrameModule { ); isActive[hatId][wearer] = true; woreTime[hatId][wearer] = block.timestamp; + + emit HatReactivated(hatId, wearer); } function renounce(uint256 hatId, address wearer) external { @@ -129,6 +135,8 @@ contract HatsTimeFrameModule is HatsModule, Ownable, IHatsTimeFrameModule { isActive[hatId][wearer] = false; deactivatedTime[hatId][wearer] = 0; totalActiveTime[hatId][wearer] = 0; + + emit HatRenounced(hatId, wearer); } /** diff --git a/pkgs/contract/contracts/hatsmodules/timeframe/IHatsTimeFrameModule.sol b/pkgs/contract/contracts/hatsmodules/timeframe/IHatsTimeFrameModule.sol index 9b16eff..bc74d87 100644 --- a/pkgs/contract/contracts/hatsmodules/timeframe/IHatsTimeFrameModule.sol +++ b/pkgs/contract/contracts/hatsmodules/timeframe/IHatsTimeFrameModule.sol @@ -65,4 +65,28 @@ interface IHatsTimeFrameModule { * @notice Emitted when hat creation authority is revoked */ event OperationAuthorityRevoked(address indexed authority); + + /** + * @notice Emitted when a hat is minted + */ + event HatMinted( + uint256 indexed hatId, + address indexed wearer, + uint256 timestamp + ); + + /** + * @notice Emitted when a hat is deactivated + */ + event HatDeactivated(uint256 indexed hatId, address indexed wearer); + + /** + * @notice Emitted when a hat is Reactivated + */ + event HatReactivated(uint256 indexed hatId, address indexed wearer); + + /** + * @notice Emitted when a hat is renounced + */ + event HatRenounced(uint256 indexed hatId, address indexed wearer); } diff --git a/pkgs/subgraph/abis/HatsTimeFrameModule.json b/pkgs/subgraph/abis/HatsTimeFrameModule.json index ef98a14..51e4075 100644 --- a/pkgs/subgraph/abis/HatsTimeFrameModule.json +++ b/pkgs/subgraph/abis/HatsTimeFrameModule.json @@ -47,6 +47,88 @@ "name": "OwnableUnauthorizedAccount", "type": "error" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "hatId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "wearer", + "type": "address" + } + ], + "name": "HatDeactivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "hatId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "wearer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "HatMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "hatId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "wearer", + "type": "address" + } + ], + "name": "HatReactivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "hatId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "wearer", + "type": "address" + } + ], + "name": "HatRenounced", + "type": "event" + }, { "anonymous": false, "inputs": [ diff --git a/pkgs/subgraph/config/sepolia.json b/pkgs/subgraph/config/sepolia.json index 06dda71..88c9e2e 100644 --- a/pkgs/subgraph/config/sepolia.json +++ b/pkgs/subgraph/config/sepolia.json @@ -5,6 +5,7 @@ { "address": "0x3E70d10aCdcC14B6C31DA26DcC195a6EDf1C2c16", "file": "BigBang", + "mappingFile": "bigbangMapping", "entities": [{ "name": "Executed" }], "handlers": [ { @@ -16,6 +17,7 @@ { "address": "0x54889278bf4F16ACAa3CC1402C987A6C42a5308B", "file": "FractionToken", + "mappingFile": "fractionTokenMapping", "entities": [{ "name": "InitialMint" }, { "name": "TransferSignle" }], "handlers": [ { @@ -51,7 +53,8 @@ "file": "HatsTimeFrameModule", "entities": [ { "name": "OperationAuthorityGranted" }, - { "name": "OperationAuthorityRevoked" } + { "name": "OperationAuthorityRevoked" }, + { "name": "HatMinted" } ], "handlers": [ { @@ -61,6 +64,10 @@ { "event": "OperationAuthorityRevoked(indexed address)", "handler": "handleOperationAuthorityRevoked" + }, + { + "event": "HatMinted(indexed uint256,indexed address,uint256)", + "handler": "handleHatMinted" } ] } diff --git a/pkgs/subgraph/package.json b/pkgs/subgraph/package.json index c3a8ba5..8900ced 100644 --- a/pkgs/subgraph/package.json +++ b/pkgs/subgraph/package.json @@ -19,8 +19,7 @@ "dependencies": { "@graphprotocol/graph-cli": "0.51.0", "@graphprotocol/graph-ts": "0.31.0", - "@hatsprotocol/sdk-v1-core": "^0.10.0", - "viem": "^2.21.55" + "@hatsprotocol/sdk-v1-core": "^0.10.0" }, "devDependencies": { "@types/node": "^22.10.2", diff --git a/pkgs/subgraph/schema.graphql b/pkgs/subgraph/schema.graphql index de12669..ff8d44d 100644 --- a/pkgs/subgraph/schema.graphql +++ b/pkgs/subgraph/schema.graphql @@ -59,9 +59,20 @@ type TransferFractionToken @entity { to: String! tokenId: BigInt! amount: BigInt! - workspaceId: ID! - hatId: BigInt! - wearer: String! + workspaceId: ID + hatId: BigInt + wearer: String blockTimestamp: BigInt! blockNumber: BigInt! } + +type BalanceOfFractionToken @entity { + id: ID! + owner: String! + tokenId: BigInt! + balance: BigInt! + workspaceId: ID + hatId: BigInt + wearer: String + updatedAt: BigInt! +} diff --git a/pkgs/subgraph/src/bigbangMapping.ts b/pkgs/subgraph/src/bigbangMapping.ts new file mode 100644 index 0000000..f39aa48 --- /dev/null +++ b/pkgs/subgraph/src/bigbangMapping.ts @@ -0,0 +1,45 @@ +import { Executed } from "../generated/BigBang/BigBang"; +import { + HatsHatCreatorModule, + HatsTimeFrameModule, + Workspace, +} from "../generated/schema"; +import { + HatsHatCreatorModule as HatsHatCreatorModuleTemplate, + HatsTimeFrameModule as HatsTimeFrameModuleTemplate, +} from "../generated/templates"; +import { hatIdToTreeId } from "./helper/hat"; + +export function handleExecuted(ev: Executed): void { + const treeId = hatIdToTreeId(ev.params.topHatId.toHexString()); + let workspace = new Workspace(treeId); + + workspace.topHatId = ev.params.topHatId; + workspace.creator = ev.params.creator.toHex(); + workspace.topHatId = ev.params.topHatId; + workspace.hatterHatId = ev.params.hatterHatId; + workspace.hatsTimeFrameModule = ev.params.hatsTimeFrameModule.toHex(); + workspace.hatsHatCreatorModule = ev.params.hatsHatCreatorModule.toHex(); + workspace.splitCreator = ev.params.splitCreator.toHex(); + workspace.blockTimestamp = ev.block.timestamp; + workspace.blockNumber = ev.block.number; + + workspace.save(); + + // Create new index from template for HatsModules + const newHatsHatCreatorModule = new HatsHatCreatorModule( + ev.params.hatsHatCreatorModule.toHex(), + ); + newHatsHatCreatorModule.workspaceId = treeId; + newHatsHatCreatorModule.save(); + + HatsHatCreatorModuleTemplate.create(ev.params.hatsHatCreatorModule); + + const newHatsTimeFrameModule = new HatsTimeFrameModule( + ev.params.hatsTimeFrameModule.toHex(), + ); + newHatsTimeFrameModule.workspaceId = treeId; + newHatsTimeFrameModule.save(); + + HatsTimeFrameModuleTemplate.create(ev.params.hatsTimeFrameModule); +} diff --git a/pkgs/subgraph/src/fractionTokenMapping.ts b/pkgs/subgraph/src/fractionTokenMapping.ts new file mode 100644 index 0000000..8b263cf --- /dev/null +++ b/pkgs/subgraph/src/fractionTokenMapping.ts @@ -0,0 +1,98 @@ +import { Address, BigInt as GraphBigInt } from "@graphprotocol/graph-ts"; +import { + InitialMint, + TransferSingle, +} from "../generated/FractionToken/FractionToken"; +import { + BalanceOfFractionToken, + InitializedFractionToken, + TransferFractionToken, +} from "../generated/schema"; +import { hatIdToTreeId } from "./helper/hat"; + +export function handleInitialMint(ev: InitialMint): void { + const initializedFractionToken = new InitializedFractionToken( + ev.params.tokenId.toHex(), + ); + const treeId = hatIdToTreeId(ev.params.hatId.toHexString()); + initializedFractionToken.hatId = ev.params.hatId; + initializedFractionToken.wearer = ev.params.wearer.toHex(); + initializedFractionToken.workspaceId = treeId; + initializedFractionToken.blockTimestamp = ev.block.timestamp; + initializedFractionToken.blockNumber = ev.block.number; + + initializedFractionToken.save(); +} + +export function handleTransferSingle(ev: TransferSingle): void { + const id = `${ev.transaction.hash.toHex()}${ev.params.id.toHex()}${ev.params.from.toHex()}${ev.params.to.toHex()}`; + const initializedFractionToken = InitializedFractionToken.load( + ev.params.id.toHex(), + ); + + // Save Transfer History + const transfer = new TransferFractionToken(id); + transfer.from = ev.params.from.toHex(); + transfer.to = ev.params.to.toHex(); + transfer.tokenId = ev.params.id; + transfer.amount = ev.params.value; + transfer.workspaceId = initializedFractionToken + ? initializedFractionToken.workspaceId + : ""; + transfer.hatId = initializedFractionToken + ? initializedFractionToken.hatId + : GraphBigInt.fromString("0"); + transfer.wearer = initializedFractionToken + ? initializedFractionToken.wearer + : ""; + transfer.blockNumber = ev.block.number; + transfer.blockTimestamp = ev.block.timestamp; + + // Update Balance of Tokens + updateBalance( + ev.params.id, + ev.params.from, + ev.params.value.neg(), + initializedFractionToken, + ev.block.timestamp, + ); + updateBalance( + ev.params.id, + ev.params.to, + ev.params.value, + initializedFractionToken, + ev.block.timestamp, + ); + + transfer.save(); +} + +function updateBalance( + tokenId: GraphBigInt, + account: Address, + amount: GraphBigInt, + initializedFractionToken: InitializedFractionToken | null, + timestamp: GraphBigInt, +): void { + let balance = BalanceOfFractionToken.load(`${tokenId}${account.toHex()}`); + + if (balance) { + balance.balance = balance.balance.plus(amount); + } else if (account.toHex() != "0x0000000000000000000000000000000000000000") { + balance = new BalanceOfFractionToken(`${tokenId}${account.toHex()}`); + balance.owner = account.toHex(); + balance.tokenId = tokenId; + balance.balance = amount; + balance.updatedAt = timestamp; + } + + if (balance && initializedFractionToken) { + balance.workspaceId = initializedFractionToken.workspaceId; + balance.hatId = initializedFractionToken.hatId; + balance.wearer = initializedFractionToken.wearer; + } + + if (balance) { + balance.save(); + } +} diff --git a/pkgs/subgraph/src/helper/hat.ts b/pkgs/subgraph/src/helper/hat.ts new file mode 100644 index 0000000..489c0fd --- /dev/null +++ b/pkgs/subgraph/src/helper/hat.ts @@ -0,0 +1,8 @@ +export function hatIdToTreeId(hatId: string): string { + const id = Number.parseInt( + `0x${hatId.slice(2).padStart(64, "0").substring(0, 8)}`, + ) + .toString() + .split(".")[0]; + return id; +} diff --git a/pkgs/subgraph/src/mapping.ts b/pkgs/subgraph/src/mapping.ts deleted file mode 100644 index 6ebc9eb..0000000 --- a/pkgs/subgraph/src/mapping.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { BigInt as GraphBigInt } from "@graphprotocol/graph-ts"; -import { Executed } from "../generated/BigBang/BigBang"; -import { - InitialMint, - TransferSingle, -} from "../generated/FractionToken/FractionToken"; -import { - HatsHatCreatorModule as HatsHatCreatorModuleTemplate, - HatsTimeFrameModule as HatsTimeFrameModuleTemplate, -} from "../generated/templates"; - -import { - HatsHatCreatorModule, - HatsTimeFrameModule, - InitializedFractionToken, - TransferFractionToken, - Workspace, -} from "../generated/schema"; - -function hatIdToTreeId(hatId: string): string { - const id = Number.parseInt( - `0x${hatId.slice(2).padStart(64, "0").substring(0, 8)}`, - ) - .toString() - .split(".")[0]; - return id; -} - -export function handleExecuted(ev: Executed): void { - const treeId = hatIdToTreeId(ev.params.topHatId.toHexString()); - let workspace = new Workspace(treeId); - - workspace.topHatId = ev.params.topHatId; - workspace.creator = ev.params.creator.toHex(); - workspace.topHatId = ev.params.topHatId; - workspace.hatterHatId = ev.params.hatterHatId; - workspace.hatsTimeFrameModule = ev.params.hatsTimeFrameModule.toHex(); - workspace.hatsHatCreatorModule = ev.params.hatsHatCreatorModule.toHex(); - workspace.splitCreator = ev.params.splitCreator.toHex(); - workspace.blockTimestamp = ev.block.timestamp; - workspace.blockNumber = ev.block.number; - - workspace.save(); - - // Create new index from template for HatsModules - const newHatsHatCreatorModule = new HatsHatCreatorModule( - ev.params.hatsHatCreatorModule.toHex(), - ); - newHatsHatCreatorModule.workspaceId = treeId; - newHatsHatCreatorModule.save(); - - HatsHatCreatorModuleTemplate.create(ev.params.hatsHatCreatorModule); - - const newHatsTimeFrameModule = new HatsTimeFrameModule( - ev.params.hatsTimeFrameModule.toHex(), - ); - newHatsTimeFrameModule.workspaceId = treeId; - newHatsTimeFrameModule.save(); - - HatsTimeFrameModuleTemplate.create(ev.params.hatsTimeFrameModule); -} - -export function handleInitialMint(ev: InitialMint): void { - const initializedFractionToken = new InitializedFractionToken( - ev.params.tokenId.toHex(), - ); - const treeId = hatIdToTreeId(ev.params.hatId.toHexString()); - initializedFractionToken.hatId = ev.params.hatId; - initializedFractionToken.wearer = ev.params.wearer.toHex(); - initializedFractionToken.workspaceId = treeId; - initializedFractionToken.blockTimestamp = ev.block.timestamp; - initializedFractionToken.blockNumber = ev.block.number; - - initializedFractionToken.save(); -} - -export function handleTransferSingle(ev: TransferSingle): void { - const id = - ev.transaction.hash.toHex() + - ev.params.id.toHex() + - ev.params.from.toHex() + - ev.params.to.toHex(); - const initializedFractionToken = InitializedFractionToken.load( - ev.params.id.toHex(), - ); - - const transfer = new TransferFractionToken(id); - transfer.from = ev.params.from.toHex(); - transfer.to = ev.params.to.toHex(); - transfer.tokenId = ev.params.id; - transfer.amount = ev.params.value; - transfer.workspaceId = ""; - transfer.hatId = GraphBigInt.fromString("0"); - transfer.wearer = ""; - transfer.blockNumber = ev.block.number; - transfer.blockTimestamp = ev.block.timestamp; - - if (initializedFractionToken) { - transfer.workspaceId = initializedFractionToken.workspaceId; - transfer.hatId = initializedFractionToken.hatId; - transfer.wearer = initializedFractionToken.wearer; - } - - transfer.save(); -} diff --git a/pkgs/subgraph/subgraph.template.yaml b/pkgs/subgraph/subgraph.template.yaml index eea4802..92c3ff6 100644 --- a/pkgs/subgraph/subgraph.template.yaml +++ b/pkgs/subgraph/subgraph.template.yaml @@ -28,7 +28,7 @@ dataSources: - event: {{event}} handler: {{handler}} {{/handlers}} - file: ./src/mapping.ts + file: ./src/{{mappingFile}}.ts {{/contracts}} templates: {{#hatsModuleContracts}} diff --git a/yarn.lock b/yarn.lock index 891de9a..42da61b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4016,7 +4016,7 @@ dependencies: "@noble/hashes" "1.5.0" -"@noble/curves@1.7.0", "@noble/curves@^1.1.0", "@noble/curves@^1.4.0", "@noble/curves@^1.4.2", "@noble/curves@^1.6.0", "@noble/curves@~1.7.0": +"@noble/curves@^1.1.0", "@noble/curves@^1.4.0", "@noble/curves@^1.4.2", "@noble/curves@^1.6.0", "@noble/curves@~1.7.0": version "1.7.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.7.0.tgz#0512360622439256df892f21d25b388f52505e45" integrity sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw== @@ -4048,7 +4048,7 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.0.tgz#d4bfb516ad6e7b5111c216a5cc7075f4cf19e6c5" integrity sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ== -"@noble/hashes@1.6.1", "@noble/hashes@^1.4.0", "@noble/hashes@^1.5.0", "@noble/hashes@~1.6.0": +"@noble/hashes@^1.4.0", "@noble/hashes@^1.5.0", "@noble/hashes@~1.6.0": version "1.6.1" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.1.tgz#df6e5943edcea504bac61395926d6fd67869a0d5" integrity sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w== @@ -5109,7 +5109,7 @@ "@noble/hashes" "~1.5.0" "@scure/base" "~1.1.7" -"@scure/bip32@1.6.0", "@scure/bip32@^1.5.0": +"@scure/bip32@^1.5.0": version "1.6.0" resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.6.0.tgz#6dbc6b4af7c9101b351f41231a879d8da47e0891" integrity sha512-82q1QfklrUUdXJzjuRU7iG7D7XiFx5PHYVS0+oeNKhyDLT7WPqs6pBcM2W5ZdwOwKCwoE1Vy1se+DHjcXwCYnA== @@ -5142,7 +5142,7 @@ "@noble/hashes" "~1.5.0" "@scure/base" "~1.1.8" -"@scure/bip39@1.5.0", "@scure/bip39@^1.4.0": +"@scure/bip39@^1.4.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.5.0.tgz#c8f9533dbd787641b047984356531d84485f19be" integrity sha512-Dop+ASYhnrwm9+HA/HwXg7j2ZqM6yk2fyLWb5znexjctFY3+E+eU8cIWI0Pql0Qx4hPZCijlGq4OL71g+Uz30A== @@ -7629,11 +7629,6 @@ abitype@1.0.6, abitype@^1.0.6: resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.6.tgz#76410903e1d88e34f1362746e2d407513c38565b" integrity sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A== -abitype@1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.7.tgz#876a0005d211e1c9132825d45bcee7b46416b284" - integrity sha512-ZfYYSktDQUwc2eduYu8C4wOs+RDPmnRYMh7zNfzeMtGGgb0U+6tLGjixUic6mXf5xKKCcgT5Qp6cv39tOARVFw== - abitype@^0.9.8: version "0.9.10" resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.9.10.tgz#fa6fa30a6465da98736f98b6c601a02ed49f6eec" @@ -17000,19 +16995,6 @@ ox@0.1.2: abitype "^1.0.6" eventemitter3 "5.0.1" -ox@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/ox/-/ox-0.6.0.tgz#ba8f89d68b5e8afe717c8a947ffacc0669ea155d" - integrity sha512-blUzTLidvUlshv0O02CnLFqBLidNzPoAZdIth894avUAotTuWziznv6IENv5idRuOSSP3dH8WzcYw84zVdu0Aw== - dependencies: - "@adraffy/ens-normalize" "^1.10.1" - "@noble/curves" "^1.6.0" - "@noble/hashes" "^1.5.0" - "@scure/bip32" "^1.5.0" - "@scure/bip39" "^1.4.0" - abitype "^1.0.6" - eventemitter3 "5.0.1" - p-cancelable@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" @@ -21405,21 +21387,6 @@ viem@^2.20.1, viem@^2.21.15, viem@^2.21.51, viem@^2.21.9: webauthn-p256 "0.0.10" ws "8.18.0" -viem@^2.21.55: - version "2.22.2" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.22.2.tgz#ec25affced2491ea3984cc8ce5d3d4b760ae85b1" - integrity sha512-HNATy2rwkQcC1JRYBJJujJTtVtDkWlQEB7GvAtn4GBXdbBROnjs8pGXwJAWhb/crErVk5yJ/Fh50yGtA9VZh8A== - dependencies: - "@noble/curves" "1.7.0" - "@noble/hashes" "1.6.1" - "@scure/bip32" "1.6.0" - "@scure/bip39" "1.5.0" - abitype "1.0.7" - isows "1.0.6" - ox "0.6.0" - webauthn-p256 "0.0.10" - ws "8.18.0" - vite-node@^1.2.0, vite-node@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.6.0.tgz#2c7e61129bfecc759478fa592754fd9704aaba7f"