From f7dacd34445be258649879a0ca5dce77a3ad3638 Mon Sep 17 00:00:00 2001 From: anson Date: Fri, 14 Nov 2025 17:02:35 +0000 Subject: [PATCH 01/15] feat(networks): add naga-proto naga naga-prod environment and contracts artifacts --- packages/contracts/dist/index.cjs | 8 + packages/contracts/dist/index.d.ts | 4 + packages/contracts/dist/index.js | 4 + packages/contracts/dist/prod/naga-proto.cjs | 16121 ++++++++++++++++ packages/contracts/dist/prod/naga-proto.js | 16119 +++++++++++++++ packages/contracts/dist/prod/naga-proto.json | 16119 +++++++++++++++ packages/contracts/dist/prod/naga-proto.ts | 16119 +++++++++++++++ packages/contracts/dist/prod/naga-staging.cjs | 709 +- packages/contracts/dist/prod/naga-staging.js | 709 +- .../contracts/dist/prod/naga-staging.json | 709 +- packages/contracts/dist/prod/naga-staging.ts | 709 +- packages/contracts/dist/prod/naga.cjs | 16121 ++++++++++++++++ packages/contracts/dist/prod/naga.js | 16119 +++++++++++++++ packages/contracts/dist/prod/naga.json | 16119 +++++++++++++++ packages/contracts/dist/prod/naga.ts | 16119 +++++++++++++++ .../contracts/dist/signatures/naga-proto.cjs | 3648 ++++ .../contracts/dist/signatures/naga-proto.d.ts | 3645 ++++ .../contracts/dist/signatures/naga-proto.js | 3644 ++++ .../dist/signatures/naga-staging.cjs | 34 +- .../dist/signatures/naga-staging.d.ts | 34 +- .../contracts/dist/signatures/naga-staging.js | 34 +- packages/contracts/dist/signatures/naga.cjs | 3648 ++++ packages/contracts/dist/signatures/naga.d.ts | 3645 ++++ packages/contracts/dist/signatures/naga.js | 3644 ++++ packages/contracts/package.json | 32 + packages/contracts/src/config/networks.ts | 6 + packages/contracts/src/sync.ts | 4 + packages/networks/src/chains/LitChain.ts | 67 + packages/networks/src/index.ts | 10 +- .../chain-manager/createChainManager.ts | 22 + .../vNaga/envs/naga-production/index.ts | 1 + .../naga-production/naga-production.env.ts | 58 + .../naga-production/naga-production.module.ts | 14 + .../chain-manager/createChainManager.ts | 22 + .../networks/vNaga/envs/naga-proto/index.ts | 1 + .../vNaga/envs/naga-proto/naga-proto.env.ts | 58 + .../envs/naga-proto/naga-proto.module.ts | 14 + packages/networks/src/networks/vNaga/index.ts | 8 + 38 files changed, 153196 insertions(+), 905 deletions(-) create mode 100644 packages/contracts/dist/prod/naga-proto.cjs create mode 100644 packages/contracts/dist/prod/naga-proto.js create mode 100644 packages/contracts/dist/prod/naga-proto.json create mode 100644 packages/contracts/dist/prod/naga-proto.ts create mode 100644 packages/contracts/dist/prod/naga.cjs create mode 100644 packages/contracts/dist/prod/naga.js create mode 100644 packages/contracts/dist/prod/naga.json create mode 100644 packages/contracts/dist/prod/naga.ts create mode 100644 packages/contracts/dist/signatures/naga-proto.cjs create mode 100644 packages/contracts/dist/signatures/naga-proto.d.ts create mode 100644 packages/contracts/dist/signatures/naga-proto.js create mode 100644 packages/contracts/dist/signatures/naga.cjs create mode 100644 packages/contracts/dist/signatures/naga.d.ts create mode 100644 packages/contracts/dist/signatures/naga.js create mode 100644 packages/networks/src/chains/LitChain.ts create mode 100644 packages/networks/src/networks/vNaga/envs/naga-production/chain-manager/createChainManager.ts create mode 100644 packages/networks/src/networks/vNaga/envs/naga-production/index.ts create mode 100644 packages/networks/src/networks/vNaga/envs/naga-production/naga-production.env.ts create mode 100644 packages/networks/src/networks/vNaga/envs/naga-production/naga-production.module.ts create mode 100644 packages/networks/src/networks/vNaga/envs/naga-proto/chain-manager/createChainManager.ts create mode 100644 packages/networks/src/networks/vNaga/envs/naga-proto/index.ts create mode 100644 packages/networks/src/networks/vNaga/envs/naga-proto/naga-proto.env.ts create mode 100644 packages/networks/src/networks/vNaga/envs/naga-proto/naga-proto.module.ts diff --git a/packages/contracts/dist/index.cjs b/packages/contracts/dist/index.cjs index 9c5f696b6..63dea86d6 100644 --- a/packages/contracts/dist/index.cjs +++ b/packages/contracts/dist/index.cjs @@ -9,6 +9,8 @@ const datilTest = require("./prod/datil-test.cjs"); const nagaDev = require("./prod/naga-dev.cjs"); const nagaTest = require("./prod/naga-test.cjs"); const nagaStaging = require("./prod/naga-staging.cjs"); +const nagaProto = require("./prod/naga-proto.cjs"); +const naga = require("./prod/naga.cjs"); const develop = require("./dev/develop.cjs"); const datilSignatures = require("./signatures/datil.cjs").signatures; @@ -17,6 +19,8 @@ const datilTestSignatures = require("./signatures/datil-test.cjs").signatures; const nagaDevSignatures = require("./signatures/naga-dev.cjs").signatures; const nagaTestSignatures = require("./signatures/naga-test.cjs").signatures; const nagaStagingSignatures = require("./signatures/naga-staging.cjs").signatures; +const nagaProtoSignatures = require("./signatures/naga-proto.cjs").signatures; +const nagaSignatures = require("./signatures/naga.cjs").signatures; const developSignatures = require("./signatures/develop.cjs").signatures; module.exports = { @@ -26,6 +30,8 @@ module.exports = { nagaDev, nagaTest, nagaStaging, + nagaProto, + naga, develop, datilSignatures, datilDevSignatures, @@ -33,5 +39,7 @@ module.exports = { nagaDevSignatures, nagaTestSignatures, nagaStagingSignatures, + nagaProtoSignatures, + nagaSignatures, developSignatures, }; diff --git a/packages/contracts/dist/index.d.ts b/packages/contracts/dist/index.d.ts index 8aa215fad..fb7d143f1 100644 --- a/packages/contracts/dist/index.d.ts +++ b/packages/contracts/dist/index.d.ts @@ -9,6 +9,8 @@ export { datilTest } from "./prod/datil-test"; export { nagaDev } from "./prod/naga-dev"; export { nagaTest } from "./prod/naga-test"; export { nagaStaging } from "./prod/naga-staging"; +export { nagaProto } from "./prod/naga-proto"; +export { naga } from "./prod/naga"; export { develop } from "./dev/develop"; export { signatures as datilSignatures } from "./signatures/datil"; @@ -17,4 +19,6 @@ export { signatures as datilTestSignatures } from "./signatures/datil-test"; export { signatures as nagaDevSignatures } from "./signatures/naga-dev"; export { signatures as nagaTestSignatures } from "./signatures/naga-test"; export { signatures as nagaStagingSignatures } from "./signatures/naga-staging"; +export { signatures as nagaProtoSignatures } from "./signatures/naga-proto"; +export { signatures as nagaSignatures } from "./signatures/naga"; export { signatures as developSignatures } from "./signatures/develop"; diff --git a/packages/contracts/dist/index.js b/packages/contracts/dist/index.js index 1ee521716..752e96da6 100644 --- a/packages/contracts/dist/index.js +++ b/packages/contracts/dist/index.js @@ -9,6 +9,8 @@ export { datilTest } from "./prod/datil-test.js"; export { nagaDev } from "./prod/naga-dev.js"; export { nagaTest } from "./prod/naga-test.js"; export { nagaStaging } from "./prod/naga-staging.js"; +export { nagaProto } from "./prod/naga-proto.js"; +export { naga } from "./prod/naga.js"; export { develop } from "./dev/develop.js"; export { signatures as datilSignatures } from "./signatures/datil.js"; @@ -17,4 +19,6 @@ export { signatures as datilTestSignatures } from "./signatures/datil-test.js"; export { signatures as nagaDevSignatures } from "./signatures/naga-dev.js"; export { signatures as nagaTestSignatures } from "./signatures/naga-test.js"; export { signatures as nagaStagingSignatures } from "./signatures/naga-staging.js"; +export { signatures as nagaProtoSignatures } from "./signatures/naga-proto.js"; +export { signatures as nagaSignatures } from "./signatures/naga.js"; export { signatures as developSignatures } from "./signatures/develop.js"; diff --git a/packages/contracts/dist/prod/naga-proto.cjs b/packages/contracts/dist/prod/naga-proto.cjs new file mode 100644 index 000000000..4c6c96025 --- /dev/null +++ b/packages/contracts/dist/prod/naga-proto.cjs @@ -0,0 +1,16121 @@ +"use strict"; + +module.exports = { + "data": [ + { + "name": "Staking", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x43b64F416cac52a7E60099E29F6477183bA172CB", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "RealmIdNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "getAllUnkickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getCurrentRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getShadowRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "isRecentValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInCurrentEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInCurrentOrNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "nodeAddressToStakerAddressAcrossRealms", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numRealms", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "validator_by_staker_address", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwnerOrDevopsAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "CannotModifyUnfrozen", + "type": "error" + }, + { + "inputs": [], + "name": "CannotMoveToLockedValidatorStateBeforeEpochEnds", + "type": "error" + }, + { + "inputs": [], + "name": "CannotStakeZero", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNewSharePrice", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSlashPercentage", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + } + ], + "name": "MinTimeLockNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochState", + "type": "error" + }, + { + "inputs": [], + "name": "NoEmptyStakingSlot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "StakeAmountNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + }, + { + "internalType": "address[]", + "name": "validatorsInNextEpoch", + "type": "address[]" + } + ], + "name": "ValidatorIsNotInNextEpoch", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "ClearOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "CountOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "DevopsAdminSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "EpochEndTimeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "EpochLengthSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "EpochTimeoutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newKickPenaltyPercent", + "type": "uint256" + } + ], + "name": "KickPenaltyPercentSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverContractAddress", + "type": "address" + } + ], + "name": "ResolverContractAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakerAddressClient", + "type": "address" + } + ], + "name": "StakeRecordCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Staked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "StateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorBanned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorKickedFromNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorRejoinedNextEpoch", + "type": "event" + }, + { + "inputs": [], + "name": "addRealm", + "outputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorStakerAddress", + "type": "address" + } + ], + "name": "adminKickValidatorInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "adminRejoinValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + } + ], + "name": "adminSetValidatorRegisterAttestedWalletDisabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsForCurrentEpoch", + "type": "address[]" + } + ], + "name": "adminSetValidatorsInCurrentEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsForNextEpoch", + "type": "address[]" + } + ], + "name": "adminSetValidatorsInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "source_realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "target_realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "target_validators", + "type": "address[]" + } + ], + "name": "adminSetupShadowSplicing", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "adminSlashValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "adminStakeForUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "adminUnfreezeForUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseRewardPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "emitClearOfflinePhaseData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "emitCountOfflinePhaseData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "increaseRewardPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "removeRealm", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setComplaintConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "keyTypes", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmax", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "k", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "enableStakeAutolock", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "profitMultiplier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "usdCostPerMonth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxEmissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStakeTimelock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minValidatorCountToClampMinimumThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThresholdToClampAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.GlobalConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newThreshold", + "type": "uint256" + } + ], + "name": "setDemeritRejoinThreshold", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "setDevopsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "setEpochEndTime", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "setEpochLength", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "setEpochState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "setEpochTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "timeoutMs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "memoryLimitMb", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCodeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxResponseLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxConsoleLogLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFetchCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxContractCallCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBroadcastAndCollectCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCallDepth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxRetries", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "asyncActionsEnabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.LitActionConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setLitActionConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newTimeout", + "type": "uint256" + } + ], + "name": "setPendingRejoinTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsToSet", + "type": "address[]" + } + ], + "name": "setPermittedValidators", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "name": "setPermittedValidatorsOn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setRealmConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newTotalSupply", + "type": "uint256" + } + ], + "name": "setTokenTotalSupplyStandIn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotContract", + "type": "error" + }, + { + "inputs": [], + "name": "CannotMigrateFromValidator", + "type": "error" + }, + { + "inputs": [], + "name": "CannotWithdrawFrozen", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentEpoch", + "type": "uint256" + } + ], + "name": "CheckpointAheadOfCurrentEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "InsufficientSelfStake", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidRatio", + "type": "error" + }, + { + "inputs": [], + "name": "NewTimeLockMustBeGreaterThanCurrent", + "type": "error" + }, + { + "inputs": [], + "name": "RewardsMustBeClaimed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "slahedAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "slashedRealmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "senderRealmId", + "type": "uint256" + } + ], + "name": "SlashingMustOccurInSameRealm", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumStake", + "type": "uint256" + } + ], + "name": "StakeMustBeGreaterThanMinimumStake", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + } + ], + "name": "StakeRecordNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "TimeLockNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "TooSoonToWithdraw", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } + ], + "name": "ValidatorNotRegistered", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "FixedCostRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "StakeRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "ValidatorCommissionClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "ValidatorRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "checkStakingAmounts", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimFixedCostRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimStakeRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimValidatorCommission", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getMaximumStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumSelfStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorCommission", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slope", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePriceAtLastUpdate", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "initial", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RewardEpoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpochView", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorCommission", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slope", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePriceAtLastUpdate", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "initial", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RewardEpoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "additionalAmount", + "type": "uint256" + } + ], + "name": "increaseStakeRecordAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "additionalTimeLock", + "type": "uint256" + } + ], + "name": "increaseStakeRecordTimelock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isInitial", + "type": "bool" + } + ], + "name": "initializeRewardEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorAddressToMigrateFrom", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddressToMigrateTo", + "type": "address" + } + ], + "name": "migrateStakeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "setValidatorCommissionRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "splitStakeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "unfreezeStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "exists", + "type": "bool" + }, + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "hashed", + "type": "bytes32" + } + ], + "name": "KeySetConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "KeySetConfigUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "deleteKeySet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "getKeySet", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "keySets", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "update", + "type": "tuple" + } + ], + "name": "setKeySet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "verifyKeySetCounts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ActiveValidatorsCannotLeave", + "type": "error" + }, + { + "inputs": [], + "name": "CannotKickBelowCurrentValidatorThreshold", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingAddress", + "type": "address" + } + ], + "name": "CannotRejoinBecauseBanned", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingAddress", + "type": "address" + } + ], + "name": "CannotRejoinUntilNextEpochBecauseKicked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + } + ], + "name": "CannotReuseCommsKeys", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "CannotVoteTwice", + "type": "error" + }, + { + "inputs": [], + "name": "CannotWithdrawZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "CouldNotMapNodeAddressToStakerAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidAttestedAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInActiveOrUnlockedOrPausedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInActiveOrUnlockedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochOrRestoreState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInReadyForNextEpochState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "MustBeValidatorInNextEpochToKick", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + } + ], + "name": "NotEnoughTimeElapsedForTimeoutSinceLastEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochEndTime", + "type": "uint256" + } + ], + "name": "NotEnoughTimeElapsedSinceLastEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "validatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + } + ], + "name": "NotEnoughValidatorsInNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentReadyValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextReadyValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCountToBeReady", + "type": "uint256" + } + ], + "name": "NotEnoughValidatorsReadyForNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receivedEpochNumber", + "type": "uint256" + } + ], + "name": "SignaledReadyForWrongEpochNumber", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "StakerAddressMismatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "yourBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "requestedWithdrawlAmount", + "type": "uint256" + } + ], + "name": "TryingToWithdrawMoreThanStaked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorAlreadyInNextValidatorSet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "existingRealmId", + "type": "uint256" + } + ], + "name": "ValidatorAlreadyInRealm", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorNotInNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "ValidatorNotPermitted", + "type": "error" + }, + { + "inputs": [], + "name": "ValidatorRegisterAttestedWalletDisabled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "valueName", + "type": "string" + } + ], + "name": "ValueMustBeNonzero", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "AdvancedEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "attestedPubKey", + "type": "tuple" + } + ], + "name": "AttestedWalletRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "ComplaintConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newTokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newKeyTypes", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinimumValidatorCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxConcurrentRequests", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPeerCheckingIntervalSecs", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignConcurrency", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "newRpcHealthcheckEnabled", + "type": "bool" + } + ], + "name": "ConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "ReadyForNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Recovered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToJoin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToLeave", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newDuration", + "type": "uint256" + } + ], + "name": "RewardsDurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newStakingTokenAddress", + "type": "address" + } + ], + "name": "StakingTokenSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "VotedToKickValidatorInNextEpoch", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "advanceEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "checkActiveOrUnlockedOrPausedState", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "exit", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "kickValidatorInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "lockValidatorsForNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "attestedPubKey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + } + ], + "name": "registerAttestedWallet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "requestToJoin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsForShadowSplicing", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "requestToLeave", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "requestToLeaveAsNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + } + ], + "name": "setIpPortNodeAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "signalReadyForNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "VersionRequirementsUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "checkVersion", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMaxVersion", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMaxVersionString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMinVersion", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMinVersionString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "setMaxVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "setMinVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "InvalidTimeLock", + "type": "error" + }, + { + "inputs": [], + "name": "NodeAddressNotFoundForStaker", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeWeight", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsInCurrentEpoch", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "actualEpochLength", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.RewardEpochGlobalStats", + "name": "globalStats", + "type": "tuple" + } + ], + "name": "calculateRewardsPerDay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateStakeWeight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + } + ], + "name": "complaintConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "countOfCurrentValidatorsReadyForNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "countOfNextValidatorsReadyForNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "currentValidatorCountForConsensus", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "epoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructs", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructsAndCounts", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllReserveValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + } + ], + "name": "getAttestedPubKey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + } + ], + "name": "getDelegatedStakersWithUnfreezingStakes", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } + ], + "name": "getDelegatedStakersWithUnfreezingStakesCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getKeyTypes", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getKickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getLastStakeRecord", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLitCirc", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLowestRewardEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "name": "getNodeAttestedPubKeyMappings", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "pubKey", + "type": "tuple" + } + ], + "internalType": "struct LibStakingStorage.PubKeyMapping[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getNodeDemerits", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "name": "getNodeStakerAddressMappings", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.AddressMapping[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getNonShadowValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getNonShadowValidatorsInCurrentEpochLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpochGlobalStats", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeWeight", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsInCurrentEpoch", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "actualEpochLength", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.RewardEpochGlobalStats", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getRewardEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getSelfStakeRecordCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getShadowValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecord", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecordCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecordsForUser", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getStakeWeightInEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "nodeCount", + "type": "uint256" + } + ], + "name": "getThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "stakeRecord", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getTimelockInEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenContractAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "stakeRecord", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getTokensStaked", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getTotalStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getTotalStakeByUser", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getUnfrozenStakeCountForUser", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getValidatorsDelegated", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsInCurrentEpoch", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsInNextEpoch", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "stakerAddresses", + "type": "address[]" + } + ], + "name": "getValidatorsStructs", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsStructsInCurrentEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsStructsInNextEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + }, + { + "internalType": "address", + "name": "validatorToBeKickedStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "voterStakerAddress", + "type": "address" + } + ], + "name": "getVotingStatusToKickValidator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "keyTypes", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmax", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "k", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "enableStakeAutolock", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "profitMultiplier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "usdCostPerMonth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxEmissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStakeTimelock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minValidatorCountToClampMinimumThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThresholdToClampAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.GlobalConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveShadowValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isActiveValidatorByNodeAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "isActiveValidatorByNodeAddressForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveValidatorForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "isReadyForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddresses", + "type": "address" + } + ], + "name": "isRecentValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "isValidatorBanned", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + } + ], + "name": "kickPenaltyPercentByReason", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "litActionsConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timeoutMs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "memoryLimitMb", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCodeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxResponseLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxConsoleLogLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFetchCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxContractCallCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBroadcastAndCollectCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCallDepth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxRetries", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "asyncActionsEnabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.LitActionConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxTimeLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minSelfStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minTimeLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "nextValidatorCountForConsensus", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "nodeAddressToStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + } + ], + "name": "operatorAddressToStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "permittedRealmsForValidator", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "permittedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "base", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "exponent", + "type": "uint256" + } + ], + "name": "pow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "readyForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "realmConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "shouldKickValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "stakerToValidatorsTheyStakedTo", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "state", + "outputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "stakerInCurrentValidatorSet", + "type": "bool" + } + ], + "name": "validatorSelfStakeWillExpire", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "validators", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "Multisender", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0xC73DCD75AE2c17A0BbAF28c47b1725B0284A5F31", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + } + ], + "name": "sendEth", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + }, + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + } + ], + "name": "sendTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + }, + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountPerRecipient", + "type": "uint256" + } + ], + "name": "sendTokensExact", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + } + ], + "name": "withdrawTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "LITToken", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x5E8db2E7af793f4095c4843C8cBD87C5D8604838", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cap", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fromDelegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "toDelegate", + "type": "address" + } + ], + "name": "DelegateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "previousBalance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newBalance", + "type": "uint256" + } + ], + "name": "DelegateVotesChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CLOCK_MODE", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint32", + "name": "pos", + "type": "uint32" + } + ], + "name": "checkpoints", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "fromBlock", + "type": "uint32" + }, + { + "internalType": "uint224", + "name": "votes", + "type": "uint224" + } + ], + "internalType": "struct ERC20Votes.Checkpoint", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clock", + "outputs": [ + { + "internalType": "uint48", + "name": "", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "delegateBySig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "delegates", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "numCheckpoints", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PubkeyRouter", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0xFdC09086E184Cb812D37566B09751CcbCA6a2205", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "KeySetNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "curveType", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "name": "RootKeyMiscount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "PubkeyRoutingDataSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct IPubkeyRouter.RootKey", + "name": "rootKey", + "type": "tuple" + } + ], + "name": "RootKeySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ToggleEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "adminResetRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "rootKeys", + "type": "tuple[]" + } + ], + "name": "adminSetRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "signedMessage", + "type": "bytes" + } + ], + "name": "checkNodeSignatures", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "deriveEthAddressFromPubkey", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "ethAddressToPkpId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "getDerivedPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "getRootKeys", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRoutingData", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "isRouted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "pubkeys", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "setRoutingData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "setRoutingDataAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "voteForRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPNFT", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x9bB7c5504E12aBBCec35DF786769BBA292Cc4C0B", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "FreeMintSignerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "MintCostSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "PKPMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrew", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "name": "claimAndMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "exists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "freeMintSigner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNextDerivedKeyId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerAddress", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftMetadataAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpPermissionsAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRouterAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mintCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "mintGrantAndBurnNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "mintNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "prefixed", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "redeemedFreeMintIds", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "setFreeMintSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "setMintCost", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPHelper", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x835585944fB37d14C317cc6cd4864570cFcFab9E", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_resolver", + "type": "address" + }, + { + "internalType": "enum ContractResolver.Env", + "name": "_env", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterialV2", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypesV2", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "contract ContractResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "env", + "outputs": [ + { + "internalType": "enum ContractResolver.Env", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainWalletRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPKPNftMetdataAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpPermissionsAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressesScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.MintNextAndAddAuthMethodsWithTypesParams", + "name": "params", + "type": "tuple" + } + ], + "name": "mintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "string[]", + "name": "nftMetadata", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddDomainWalletMetadata", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removePkpMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string[]", + "name": "nftMetadata", + "type": "string[]" + } + ], + "name": "setPkpMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPPermissions", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x23A1aAB688EEe1d66FB45719ac527c2A0B036ed6", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "RootHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod", + "name": "authMethod", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "addPermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypesToAdd", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIdsToAdd", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeysToAdd", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopesToAdd", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypesToRemove", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIdsToRemove", + "type": "bytes[]" + } + ], + "name": "batchAddRemoveAuthMethods", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getAuthMethodId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getPKPPubKeysByAuthMethod", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedActions", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maxScopeId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethodScopes", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethods", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRouterAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getTokenIdsForAuthMethod", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getUserPubkeyForAuthMethod", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "isPermittedAction", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "isPermittedAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "isPermittedAuthMethod", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "isPermittedAuthMethodScopePresent", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "removePermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "removePermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "removePermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "removePermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "setRootHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + } + ], + "name": "verifyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bool[]", + "name": "proofFlags", + "type": "bool[]" + }, + { + "internalType": "bytes32[]", + "name": "leaves", + "type": "bytes32[]" + } + ], + "name": "verifyStates", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPNFTMetadata", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x7866b6379Cb2B7e68Bb942dF3A3ACe9C25773874", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_resolver", + "type": "address" + }, + { + "internalType": "enum ContractResolver.Env", + "name": "_env", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "buffer", + "type": "bytes" + } + ], + "name": "bytesToHex", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "contract ContractResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "env", + "outputs": [ + { + "internalType": "enum ContractResolver.Env", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removeProfileForPkp", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removeUrlForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "imgUrl", + "type": "string" + } + ], + "name": "setProfileForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + } + ], + "name": "setUrlForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubKey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "Allowlist", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x111F4990037333512d6F04e4ed30463fe7235dE0", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "ItemAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "ItemNotAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "allowAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "allowedItems", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "isAllowed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_allowAll", + "type": "bool" + } + ], + "name": "setAllowAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "setAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "setNotAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PaymentDelegation", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x58bA8Eb59E5A88ED690E47a8D37DCdB7d3aea490", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "restriction", + "type": "tuple" + } + ], + "name": "RestrictionSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "delegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "delegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPayers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "getPayersAndRestrictions", + "outputs": [ + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction[][]", + "name": "", + "type": "tuple[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getRestriction", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getUsers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "r", + "type": "tuple" + } + ], + "name": "setRestriction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "undelegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "undelegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "Ledger", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0xf69e2D0Fa6a7F24d65De4F972c1a3000d55CA175", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "AmountMustBePositive", + "type": "error" + }, + { + "inputs": [], + "name": "ArrayLengthsMustMatch", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientWithdrawAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeNonzero", + "type": "error" + }, + { + "inputs": [], + "name": "NodeNotStakingNode", + "type": "error" + }, + { + "inputs": [], + "name": "PercentageMustBeLessThan100", + "type": "error" + }, + { + "inputs": [], + "name": "SessionAlreadyUsed", + "type": "error" + }, + { + "inputs": [], + "name": "ValueExceedsUint128MaxLimit", + "type": "error" + }, + { + "inputs": [], + "name": "WithdrawalDelayNotPassed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "batch_id", + "type": "uint256" + } + ], + "name": "BatchCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositForUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FoundationRewardsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "LitFoundationSplitPercentageSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "RewardWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdrawRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "UserCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "UserWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "WithdrawRequest", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "balance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "chargeUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + }, + { + "internalType": "int256[]", + "name": "amounts", + "type": "int256[]" + }, + { + "internalType": "uint64", + "name": "batchId", + "type": "uint64" + } + ], + "name": "chargeUsers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "depositForUser", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestRewardWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "litFoundationRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "litFoundationSplitPercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "requestRewardWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "requestWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "rewardBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "setLitFoundationSplitPercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "setRewardWithdrawDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "setUserWithdrawDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "stableBalance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "userWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawFoundationRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PriceFeed", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x7cD9b8A17733bcb85683009f6Fcaf5B920c249EE", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeNonzero", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "BaseNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "MaxNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakingAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newPrices", + "type": "uint256[]" + } + ], + "name": "UsageSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "baseNetworkPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLitActionPriceConfigs", + "outputs": [ + { + "components": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.LitActionPriceConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNodeCapacityConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "pkpSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "encSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "litActionMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signSessionKeyMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "globalMaxCapacity", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeCapacityConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "getNodesForRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "validator", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "prices", + "type": "uint256[]" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeInfoAndPrices[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "maxNetworkPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "node", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "price", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodePriceData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + } + ], + "name": "prices", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodePriceData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setBaseNetworkPrices", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "new_price", + "type": "uint256" + } + ], + "name": "setLitActionPriceConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.LitActionPriceConfig[]", + "name": "configs", + "type": "tuple[]" + } + ], + "name": "setLitActionPriceConfigs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setMaxNetworkPrices", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "pkpSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "encSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "litActionMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signSessionKeyMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "globalMaxCapacity", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeCapacityConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setNodeCapacityConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setUsage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + } + ], + "name": "usagePercentToPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "usagePercentToPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + } + ], + "config": { + "chainId": "175188", + "rpcUrl": "https://yellowstone-rpc.litprotocol.com", + "chainName": "yellowstone", + "litNodeDomainName": "127.0.0.1", + "litNodePort": 7470, + "rocketPort": 7470 + } +}; \ No newline at end of file diff --git a/packages/contracts/dist/prod/naga-proto.js b/packages/contracts/dist/prod/naga-proto.js new file mode 100644 index 000000000..86aeb4e54 --- /dev/null +++ b/packages/contracts/dist/prod/naga-proto.js @@ -0,0 +1,16119 @@ +export const nagaProto = { + "data": [ + { + "name": "Staking", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x43b64F416cac52a7E60099E29F6477183bA172CB", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "RealmIdNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "getAllUnkickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getCurrentRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getShadowRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "isRecentValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInCurrentEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInCurrentOrNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "nodeAddressToStakerAddressAcrossRealms", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numRealms", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "validator_by_staker_address", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwnerOrDevopsAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "CannotModifyUnfrozen", + "type": "error" + }, + { + "inputs": [], + "name": "CannotMoveToLockedValidatorStateBeforeEpochEnds", + "type": "error" + }, + { + "inputs": [], + "name": "CannotStakeZero", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNewSharePrice", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSlashPercentage", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + } + ], + "name": "MinTimeLockNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochState", + "type": "error" + }, + { + "inputs": [], + "name": "NoEmptyStakingSlot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "StakeAmountNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + }, + { + "internalType": "address[]", + "name": "validatorsInNextEpoch", + "type": "address[]" + } + ], + "name": "ValidatorIsNotInNextEpoch", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "ClearOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "CountOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "DevopsAdminSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "EpochEndTimeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "EpochLengthSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "EpochTimeoutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newKickPenaltyPercent", + "type": "uint256" + } + ], + "name": "KickPenaltyPercentSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverContractAddress", + "type": "address" + } + ], + "name": "ResolverContractAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakerAddressClient", + "type": "address" + } + ], + "name": "StakeRecordCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Staked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "StateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorBanned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorKickedFromNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorRejoinedNextEpoch", + "type": "event" + }, + { + "inputs": [], + "name": "addRealm", + "outputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorStakerAddress", + "type": "address" + } + ], + "name": "adminKickValidatorInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "adminRejoinValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + } + ], + "name": "adminSetValidatorRegisterAttestedWalletDisabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsForCurrentEpoch", + "type": "address[]" + } + ], + "name": "adminSetValidatorsInCurrentEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsForNextEpoch", + "type": "address[]" + } + ], + "name": "adminSetValidatorsInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "source_realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "target_realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "target_validators", + "type": "address[]" + } + ], + "name": "adminSetupShadowSplicing", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "adminSlashValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "adminStakeForUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "adminUnfreezeForUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseRewardPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "emitClearOfflinePhaseData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "emitCountOfflinePhaseData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "increaseRewardPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "removeRealm", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setComplaintConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "keyTypes", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmax", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "k", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "enableStakeAutolock", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "profitMultiplier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "usdCostPerMonth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxEmissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStakeTimelock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minValidatorCountToClampMinimumThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThresholdToClampAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.GlobalConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newThreshold", + "type": "uint256" + } + ], + "name": "setDemeritRejoinThreshold", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "setDevopsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "setEpochEndTime", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "setEpochLength", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "setEpochState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "setEpochTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "timeoutMs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "memoryLimitMb", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCodeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxResponseLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxConsoleLogLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFetchCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxContractCallCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBroadcastAndCollectCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCallDepth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxRetries", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "asyncActionsEnabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.LitActionConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setLitActionConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newTimeout", + "type": "uint256" + } + ], + "name": "setPendingRejoinTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsToSet", + "type": "address[]" + } + ], + "name": "setPermittedValidators", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "name": "setPermittedValidatorsOn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setRealmConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newTotalSupply", + "type": "uint256" + } + ], + "name": "setTokenTotalSupplyStandIn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotContract", + "type": "error" + }, + { + "inputs": [], + "name": "CannotMigrateFromValidator", + "type": "error" + }, + { + "inputs": [], + "name": "CannotWithdrawFrozen", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentEpoch", + "type": "uint256" + } + ], + "name": "CheckpointAheadOfCurrentEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "InsufficientSelfStake", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidRatio", + "type": "error" + }, + { + "inputs": [], + "name": "NewTimeLockMustBeGreaterThanCurrent", + "type": "error" + }, + { + "inputs": [], + "name": "RewardsMustBeClaimed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "slahedAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "slashedRealmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "senderRealmId", + "type": "uint256" + } + ], + "name": "SlashingMustOccurInSameRealm", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumStake", + "type": "uint256" + } + ], + "name": "StakeMustBeGreaterThanMinimumStake", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + } + ], + "name": "StakeRecordNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "TimeLockNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "TooSoonToWithdraw", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } + ], + "name": "ValidatorNotRegistered", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "FixedCostRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "StakeRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "ValidatorCommissionClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "ValidatorRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "checkStakingAmounts", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimFixedCostRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimStakeRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimValidatorCommission", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getMaximumStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumSelfStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorCommission", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slope", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePriceAtLastUpdate", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "initial", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RewardEpoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpochView", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorCommission", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slope", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePriceAtLastUpdate", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "initial", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RewardEpoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "additionalAmount", + "type": "uint256" + } + ], + "name": "increaseStakeRecordAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "additionalTimeLock", + "type": "uint256" + } + ], + "name": "increaseStakeRecordTimelock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isInitial", + "type": "bool" + } + ], + "name": "initializeRewardEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorAddressToMigrateFrom", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddressToMigrateTo", + "type": "address" + } + ], + "name": "migrateStakeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "setValidatorCommissionRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "splitStakeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "unfreezeStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "exists", + "type": "bool" + }, + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "hashed", + "type": "bytes32" + } + ], + "name": "KeySetConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "KeySetConfigUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "deleteKeySet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "getKeySet", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "keySets", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "update", + "type": "tuple" + } + ], + "name": "setKeySet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "verifyKeySetCounts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ActiveValidatorsCannotLeave", + "type": "error" + }, + { + "inputs": [], + "name": "CannotKickBelowCurrentValidatorThreshold", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingAddress", + "type": "address" + } + ], + "name": "CannotRejoinBecauseBanned", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingAddress", + "type": "address" + } + ], + "name": "CannotRejoinUntilNextEpochBecauseKicked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + } + ], + "name": "CannotReuseCommsKeys", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "CannotVoteTwice", + "type": "error" + }, + { + "inputs": [], + "name": "CannotWithdrawZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "CouldNotMapNodeAddressToStakerAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidAttestedAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInActiveOrUnlockedOrPausedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInActiveOrUnlockedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochOrRestoreState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInReadyForNextEpochState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "MustBeValidatorInNextEpochToKick", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + } + ], + "name": "NotEnoughTimeElapsedForTimeoutSinceLastEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochEndTime", + "type": "uint256" + } + ], + "name": "NotEnoughTimeElapsedSinceLastEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "validatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + } + ], + "name": "NotEnoughValidatorsInNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentReadyValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextReadyValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCountToBeReady", + "type": "uint256" + } + ], + "name": "NotEnoughValidatorsReadyForNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receivedEpochNumber", + "type": "uint256" + } + ], + "name": "SignaledReadyForWrongEpochNumber", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "StakerAddressMismatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "yourBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "requestedWithdrawlAmount", + "type": "uint256" + } + ], + "name": "TryingToWithdrawMoreThanStaked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorAlreadyInNextValidatorSet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "existingRealmId", + "type": "uint256" + } + ], + "name": "ValidatorAlreadyInRealm", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorNotInNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "ValidatorNotPermitted", + "type": "error" + }, + { + "inputs": [], + "name": "ValidatorRegisterAttestedWalletDisabled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "valueName", + "type": "string" + } + ], + "name": "ValueMustBeNonzero", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "AdvancedEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "attestedPubKey", + "type": "tuple" + } + ], + "name": "AttestedWalletRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "ComplaintConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newTokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newKeyTypes", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinimumValidatorCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxConcurrentRequests", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPeerCheckingIntervalSecs", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignConcurrency", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "newRpcHealthcheckEnabled", + "type": "bool" + } + ], + "name": "ConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "ReadyForNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Recovered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToJoin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToLeave", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newDuration", + "type": "uint256" + } + ], + "name": "RewardsDurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newStakingTokenAddress", + "type": "address" + } + ], + "name": "StakingTokenSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "VotedToKickValidatorInNextEpoch", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "advanceEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "checkActiveOrUnlockedOrPausedState", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "exit", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "kickValidatorInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "lockValidatorsForNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "attestedPubKey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + } + ], + "name": "registerAttestedWallet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "requestToJoin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsForShadowSplicing", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "requestToLeave", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "requestToLeaveAsNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + } + ], + "name": "setIpPortNodeAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "signalReadyForNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "VersionRequirementsUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "checkVersion", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMaxVersion", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMaxVersionString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMinVersion", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMinVersionString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "setMaxVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "setMinVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "InvalidTimeLock", + "type": "error" + }, + { + "inputs": [], + "name": "NodeAddressNotFoundForStaker", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeWeight", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsInCurrentEpoch", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "actualEpochLength", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.RewardEpochGlobalStats", + "name": "globalStats", + "type": "tuple" + } + ], + "name": "calculateRewardsPerDay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateStakeWeight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + } + ], + "name": "complaintConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "countOfCurrentValidatorsReadyForNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "countOfNextValidatorsReadyForNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "currentValidatorCountForConsensus", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "epoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructs", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructsAndCounts", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllReserveValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + } + ], + "name": "getAttestedPubKey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + } + ], + "name": "getDelegatedStakersWithUnfreezingStakes", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } + ], + "name": "getDelegatedStakersWithUnfreezingStakesCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getKeyTypes", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getKickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getLastStakeRecord", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLitCirc", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLowestRewardEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "name": "getNodeAttestedPubKeyMappings", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "pubKey", + "type": "tuple" + } + ], + "internalType": "struct LibStakingStorage.PubKeyMapping[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getNodeDemerits", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "name": "getNodeStakerAddressMappings", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.AddressMapping[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getNonShadowValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getNonShadowValidatorsInCurrentEpochLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpochGlobalStats", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeWeight", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsInCurrentEpoch", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "actualEpochLength", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.RewardEpochGlobalStats", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getRewardEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getSelfStakeRecordCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getShadowValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecord", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecordCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecordsForUser", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getStakeWeightInEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "nodeCount", + "type": "uint256" + } + ], + "name": "getThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "stakeRecord", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getTimelockInEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenContractAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "stakeRecord", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getTokensStaked", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getTotalStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getTotalStakeByUser", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getUnfrozenStakeCountForUser", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getValidatorsDelegated", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsInCurrentEpoch", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsInNextEpoch", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "stakerAddresses", + "type": "address[]" + } + ], + "name": "getValidatorsStructs", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsStructsInCurrentEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsStructsInNextEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + }, + { + "internalType": "address", + "name": "validatorToBeKickedStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "voterStakerAddress", + "type": "address" + } + ], + "name": "getVotingStatusToKickValidator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "keyTypes", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmax", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "k", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "enableStakeAutolock", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "profitMultiplier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "usdCostPerMonth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxEmissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStakeTimelock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minValidatorCountToClampMinimumThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThresholdToClampAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.GlobalConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveShadowValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isActiveValidatorByNodeAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "isActiveValidatorByNodeAddressForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveValidatorForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "isReadyForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddresses", + "type": "address" + } + ], + "name": "isRecentValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "isValidatorBanned", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + } + ], + "name": "kickPenaltyPercentByReason", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "litActionsConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timeoutMs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "memoryLimitMb", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCodeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxResponseLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxConsoleLogLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFetchCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxContractCallCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBroadcastAndCollectCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCallDepth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxRetries", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "asyncActionsEnabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.LitActionConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxTimeLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minSelfStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minTimeLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "nextValidatorCountForConsensus", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "nodeAddressToStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + } + ], + "name": "operatorAddressToStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "permittedRealmsForValidator", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "permittedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "base", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "exponent", + "type": "uint256" + } + ], + "name": "pow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "readyForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "realmConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "shouldKickValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "stakerToValidatorsTheyStakedTo", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "state", + "outputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "stakerInCurrentValidatorSet", + "type": "bool" + } + ], + "name": "validatorSelfStakeWillExpire", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "validators", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "Multisender", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0xC73DCD75AE2c17A0BbAF28c47b1725B0284A5F31", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + } + ], + "name": "sendEth", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + }, + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + } + ], + "name": "sendTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + }, + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountPerRecipient", + "type": "uint256" + } + ], + "name": "sendTokensExact", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + } + ], + "name": "withdrawTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "LITToken", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x5E8db2E7af793f4095c4843C8cBD87C5D8604838", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cap", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fromDelegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "toDelegate", + "type": "address" + } + ], + "name": "DelegateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "previousBalance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newBalance", + "type": "uint256" + } + ], + "name": "DelegateVotesChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CLOCK_MODE", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint32", + "name": "pos", + "type": "uint32" + } + ], + "name": "checkpoints", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "fromBlock", + "type": "uint32" + }, + { + "internalType": "uint224", + "name": "votes", + "type": "uint224" + } + ], + "internalType": "struct ERC20Votes.Checkpoint", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clock", + "outputs": [ + { + "internalType": "uint48", + "name": "", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "delegateBySig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "delegates", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "numCheckpoints", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PubkeyRouter", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0xFdC09086E184Cb812D37566B09751CcbCA6a2205", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "KeySetNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "curveType", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "name": "RootKeyMiscount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "PubkeyRoutingDataSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct IPubkeyRouter.RootKey", + "name": "rootKey", + "type": "tuple" + } + ], + "name": "RootKeySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ToggleEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "adminResetRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "rootKeys", + "type": "tuple[]" + } + ], + "name": "adminSetRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "signedMessage", + "type": "bytes" + } + ], + "name": "checkNodeSignatures", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "deriveEthAddressFromPubkey", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "ethAddressToPkpId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "getDerivedPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "getRootKeys", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRoutingData", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "isRouted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "pubkeys", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "setRoutingData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "setRoutingDataAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "voteForRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPNFT", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x9bB7c5504E12aBBCec35DF786769BBA292Cc4C0B", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "FreeMintSignerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "MintCostSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "PKPMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrew", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "name": "claimAndMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "exists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "freeMintSigner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNextDerivedKeyId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerAddress", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftMetadataAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpPermissionsAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRouterAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mintCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "mintGrantAndBurnNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "mintNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "prefixed", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "redeemedFreeMintIds", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "setFreeMintSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "setMintCost", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPHelper", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x835585944fB37d14C317cc6cd4864570cFcFab9E", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_resolver", + "type": "address" + }, + { + "internalType": "enum ContractResolver.Env", + "name": "_env", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterialV2", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypesV2", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "contract ContractResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "env", + "outputs": [ + { + "internalType": "enum ContractResolver.Env", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainWalletRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPKPNftMetdataAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpPermissionsAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressesScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.MintNextAndAddAuthMethodsWithTypesParams", + "name": "params", + "type": "tuple" + } + ], + "name": "mintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "string[]", + "name": "nftMetadata", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddDomainWalletMetadata", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removePkpMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string[]", + "name": "nftMetadata", + "type": "string[]" + } + ], + "name": "setPkpMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPPermissions", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x23A1aAB688EEe1d66FB45719ac527c2A0B036ed6", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "RootHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod", + "name": "authMethod", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "addPermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypesToAdd", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIdsToAdd", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeysToAdd", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopesToAdd", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypesToRemove", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIdsToRemove", + "type": "bytes[]" + } + ], + "name": "batchAddRemoveAuthMethods", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getAuthMethodId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getPKPPubKeysByAuthMethod", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedActions", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maxScopeId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethodScopes", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethods", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRouterAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getTokenIdsForAuthMethod", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getUserPubkeyForAuthMethod", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "isPermittedAction", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "isPermittedAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "isPermittedAuthMethod", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "isPermittedAuthMethodScopePresent", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "removePermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "removePermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "removePermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "removePermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "setRootHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + } + ], + "name": "verifyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bool[]", + "name": "proofFlags", + "type": "bool[]" + }, + { + "internalType": "bytes32[]", + "name": "leaves", + "type": "bytes32[]" + } + ], + "name": "verifyStates", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPNFTMetadata", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x7866b6379Cb2B7e68Bb942dF3A3ACe9C25773874", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_resolver", + "type": "address" + }, + { + "internalType": "enum ContractResolver.Env", + "name": "_env", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "buffer", + "type": "bytes" + } + ], + "name": "bytesToHex", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "contract ContractResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "env", + "outputs": [ + { + "internalType": "enum ContractResolver.Env", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removeProfileForPkp", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removeUrlForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "imgUrl", + "type": "string" + } + ], + "name": "setProfileForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + } + ], + "name": "setUrlForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubKey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "Allowlist", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x111F4990037333512d6F04e4ed30463fe7235dE0", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "ItemAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "ItemNotAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "allowAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "allowedItems", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "isAllowed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_allowAll", + "type": "bool" + } + ], + "name": "setAllowAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "setAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "setNotAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PaymentDelegation", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x58bA8Eb59E5A88ED690E47a8D37DCdB7d3aea490", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "restriction", + "type": "tuple" + } + ], + "name": "RestrictionSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "delegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "delegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPayers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "getPayersAndRestrictions", + "outputs": [ + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction[][]", + "name": "", + "type": "tuple[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getRestriction", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getUsers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "r", + "type": "tuple" + } + ], + "name": "setRestriction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "undelegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "undelegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "Ledger", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0xf69e2D0Fa6a7F24d65De4F972c1a3000d55CA175", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "AmountMustBePositive", + "type": "error" + }, + { + "inputs": [], + "name": "ArrayLengthsMustMatch", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientWithdrawAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeNonzero", + "type": "error" + }, + { + "inputs": [], + "name": "NodeNotStakingNode", + "type": "error" + }, + { + "inputs": [], + "name": "PercentageMustBeLessThan100", + "type": "error" + }, + { + "inputs": [], + "name": "SessionAlreadyUsed", + "type": "error" + }, + { + "inputs": [], + "name": "ValueExceedsUint128MaxLimit", + "type": "error" + }, + { + "inputs": [], + "name": "WithdrawalDelayNotPassed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "batch_id", + "type": "uint256" + } + ], + "name": "BatchCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositForUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FoundationRewardsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "LitFoundationSplitPercentageSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "RewardWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdrawRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "UserCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "UserWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "WithdrawRequest", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "balance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "chargeUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + }, + { + "internalType": "int256[]", + "name": "amounts", + "type": "int256[]" + }, + { + "internalType": "uint64", + "name": "batchId", + "type": "uint64" + } + ], + "name": "chargeUsers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "depositForUser", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestRewardWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "litFoundationRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "litFoundationSplitPercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "requestRewardWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "requestWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "rewardBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "setLitFoundationSplitPercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "setRewardWithdrawDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "setUserWithdrawDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "stableBalance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "userWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawFoundationRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PriceFeed", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x7cD9b8A17733bcb85683009f6Fcaf5B920c249EE", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeNonzero", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "BaseNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "MaxNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakingAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newPrices", + "type": "uint256[]" + } + ], + "name": "UsageSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "baseNetworkPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLitActionPriceConfigs", + "outputs": [ + { + "components": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.LitActionPriceConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNodeCapacityConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "pkpSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "encSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "litActionMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signSessionKeyMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "globalMaxCapacity", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeCapacityConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "getNodesForRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "validator", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "prices", + "type": "uint256[]" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeInfoAndPrices[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "maxNetworkPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "node", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "price", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodePriceData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + } + ], + "name": "prices", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodePriceData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setBaseNetworkPrices", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "new_price", + "type": "uint256" + } + ], + "name": "setLitActionPriceConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.LitActionPriceConfig[]", + "name": "configs", + "type": "tuple[]" + } + ], + "name": "setLitActionPriceConfigs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setMaxNetworkPrices", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "pkpSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "encSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "litActionMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signSessionKeyMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "globalMaxCapacity", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeCapacityConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setNodeCapacityConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setUsage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + } + ], + "name": "usagePercentToPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "usagePercentToPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + } + ], + "config": { + "chainId": "175188", + "rpcUrl": "https://yellowstone-rpc.litprotocol.com", + "chainName": "yellowstone", + "litNodeDomainName": "127.0.0.1", + "litNodePort": 7470, + "rocketPort": 7470 + } +}; \ No newline at end of file diff --git a/packages/contracts/dist/prod/naga-proto.json b/packages/contracts/dist/prod/naga-proto.json new file mode 100644 index 000000000..229aa3491 --- /dev/null +++ b/packages/contracts/dist/prod/naga-proto.json @@ -0,0 +1,16119 @@ +{ + "data": [ + { + "name": "Staking", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x43b64F416cac52a7E60099E29F6477183bA172CB", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "RealmIdNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "getAllUnkickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getCurrentRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getShadowRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "isRecentValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInCurrentEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInCurrentOrNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "nodeAddressToStakerAddressAcrossRealms", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numRealms", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "validator_by_staker_address", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwnerOrDevopsAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "CannotModifyUnfrozen", + "type": "error" + }, + { + "inputs": [], + "name": "CannotMoveToLockedValidatorStateBeforeEpochEnds", + "type": "error" + }, + { + "inputs": [], + "name": "CannotStakeZero", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNewSharePrice", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSlashPercentage", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + } + ], + "name": "MinTimeLockNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochState", + "type": "error" + }, + { + "inputs": [], + "name": "NoEmptyStakingSlot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "StakeAmountNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + }, + { + "internalType": "address[]", + "name": "validatorsInNextEpoch", + "type": "address[]" + } + ], + "name": "ValidatorIsNotInNextEpoch", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "ClearOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "CountOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "DevopsAdminSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "EpochEndTimeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "EpochLengthSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "EpochTimeoutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newKickPenaltyPercent", + "type": "uint256" + } + ], + "name": "KickPenaltyPercentSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverContractAddress", + "type": "address" + } + ], + "name": "ResolverContractAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakerAddressClient", + "type": "address" + } + ], + "name": "StakeRecordCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Staked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "StateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorBanned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorKickedFromNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorRejoinedNextEpoch", + "type": "event" + }, + { + "inputs": [], + "name": "addRealm", + "outputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorStakerAddress", + "type": "address" + } + ], + "name": "adminKickValidatorInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "adminRejoinValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + } + ], + "name": "adminSetValidatorRegisterAttestedWalletDisabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsForCurrentEpoch", + "type": "address[]" + } + ], + "name": "adminSetValidatorsInCurrentEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsForNextEpoch", + "type": "address[]" + } + ], + "name": "adminSetValidatorsInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "source_realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "target_realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "target_validators", + "type": "address[]" + } + ], + "name": "adminSetupShadowSplicing", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "adminSlashValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "adminStakeForUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "adminUnfreezeForUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseRewardPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "emitClearOfflinePhaseData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "emitCountOfflinePhaseData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "increaseRewardPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "removeRealm", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setComplaintConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "keyTypes", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmax", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "k", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "enableStakeAutolock", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "profitMultiplier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "usdCostPerMonth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxEmissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStakeTimelock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minValidatorCountToClampMinimumThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThresholdToClampAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.GlobalConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newThreshold", + "type": "uint256" + } + ], + "name": "setDemeritRejoinThreshold", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "setDevopsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "setEpochEndTime", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "setEpochLength", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "setEpochState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "setEpochTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "timeoutMs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "memoryLimitMb", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCodeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxResponseLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxConsoleLogLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFetchCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxContractCallCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBroadcastAndCollectCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCallDepth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxRetries", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "asyncActionsEnabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.LitActionConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setLitActionConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newTimeout", + "type": "uint256" + } + ], + "name": "setPendingRejoinTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsToSet", + "type": "address[]" + } + ], + "name": "setPermittedValidators", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "name": "setPermittedValidatorsOn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setRealmConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newTotalSupply", + "type": "uint256" + } + ], + "name": "setTokenTotalSupplyStandIn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotContract", + "type": "error" + }, + { + "inputs": [], + "name": "CannotMigrateFromValidator", + "type": "error" + }, + { + "inputs": [], + "name": "CannotWithdrawFrozen", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentEpoch", + "type": "uint256" + } + ], + "name": "CheckpointAheadOfCurrentEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "InsufficientSelfStake", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidRatio", + "type": "error" + }, + { + "inputs": [], + "name": "NewTimeLockMustBeGreaterThanCurrent", + "type": "error" + }, + { + "inputs": [], + "name": "RewardsMustBeClaimed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "slahedAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "slashedRealmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "senderRealmId", + "type": "uint256" + } + ], + "name": "SlashingMustOccurInSameRealm", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumStake", + "type": "uint256" + } + ], + "name": "StakeMustBeGreaterThanMinimumStake", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + } + ], + "name": "StakeRecordNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "TimeLockNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "TooSoonToWithdraw", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } + ], + "name": "ValidatorNotRegistered", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "FixedCostRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "StakeRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "ValidatorCommissionClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "ValidatorRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "checkStakingAmounts", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimFixedCostRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimStakeRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimValidatorCommission", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getMaximumStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumSelfStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorCommission", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slope", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePriceAtLastUpdate", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "initial", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RewardEpoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpochView", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorCommission", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slope", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePriceAtLastUpdate", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "initial", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RewardEpoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "additionalAmount", + "type": "uint256" + } + ], + "name": "increaseStakeRecordAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "additionalTimeLock", + "type": "uint256" + } + ], + "name": "increaseStakeRecordTimelock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isInitial", + "type": "bool" + } + ], + "name": "initializeRewardEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorAddressToMigrateFrom", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddressToMigrateTo", + "type": "address" + } + ], + "name": "migrateStakeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "setValidatorCommissionRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "splitStakeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "unfreezeStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "exists", + "type": "bool" + }, + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "hashed", + "type": "bytes32" + } + ], + "name": "KeySetConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "KeySetConfigUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "deleteKeySet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "getKeySet", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "keySets", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "update", + "type": "tuple" + } + ], + "name": "setKeySet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "verifyKeySetCounts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ActiveValidatorsCannotLeave", + "type": "error" + }, + { + "inputs": [], + "name": "CannotKickBelowCurrentValidatorThreshold", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingAddress", + "type": "address" + } + ], + "name": "CannotRejoinBecauseBanned", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingAddress", + "type": "address" + } + ], + "name": "CannotRejoinUntilNextEpochBecauseKicked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + } + ], + "name": "CannotReuseCommsKeys", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "CannotVoteTwice", + "type": "error" + }, + { + "inputs": [], + "name": "CannotWithdrawZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "CouldNotMapNodeAddressToStakerAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidAttestedAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInActiveOrUnlockedOrPausedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInActiveOrUnlockedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochOrRestoreState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInReadyForNextEpochState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "MustBeValidatorInNextEpochToKick", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + } + ], + "name": "NotEnoughTimeElapsedForTimeoutSinceLastEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochEndTime", + "type": "uint256" + } + ], + "name": "NotEnoughTimeElapsedSinceLastEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "validatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + } + ], + "name": "NotEnoughValidatorsInNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentReadyValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextReadyValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCountToBeReady", + "type": "uint256" + } + ], + "name": "NotEnoughValidatorsReadyForNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receivedEpochNumber", + "type": "uint256" + } + ], + "name": "SignaledReadyForWrongEpochNumber", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "StakerAddressMismatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "yourBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "requestedWithdrawlAmount", + "type": "uint256" + } + ], + "name": "TryingToWithdrawMoreThanStaked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorAlreadyInNextValidatorSet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "existingRealmId", + "type": "uint256" + } + ], + "name": "ValidatorAlreadyInRealm", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorNotInNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "ValidatorNotPermitted", + "type": "error" + }, + { + "inputs": [], + "name": "ValidatorRegisterAttestedWalletDisabled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "valueName", + "type": "string" + } + ], + "name": "ValueMustBeNonzero", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "AdvancedEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "attestedPubKey", + "type": "tuple" + } + ], + "name": "AttestedWalletRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "ComplaintConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newTokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newKeyTypes", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinimumValidatorCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxConcurrentRequests", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPeerCheckingIntervalSecs", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignConcurrency", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "newRpcHealthcheckEnabled", + "type": "bool" + } + ], + "name": "ConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "ReadyForNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Recovered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToJoin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToLeave", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newDuration", + "type": "uint256" + } + ], + "name": "RewardsDurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newStakingTokenAddress", + "type": "address" + } + ], + "name": "StakingTokenSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "VotedToKickValidatorInNextEpoch", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "advanceEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "checkActiveOrUnlockedOrPausedState", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "exit", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "kickValidatorInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "lockValidatorsForNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "attestedPubKey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + } + ], + "name": "registerAttestedWallet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "requestToJoin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsForShadowSplicing", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "requestToLeave", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "requestToLeaveAsNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + } + ], + "name": "setIpPortNodeAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "signalReadyForNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "VersionRequirementsUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "checkVersion", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMaxVersion", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMaxVersionString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMinVersion", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMinVersionString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "setMaxVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "setMinVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "InvalidTimeLock", + "type": "error" + }, + { + "inputs": [], + "name": "NodeAddressNotFoundForStaker", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeWeight", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsInCurrentEpoch", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "actualEpochLength", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.RewardEpochGlobalStats", + "name": "globalStats", + "type": "tuple" + } + ], + "name": "calculateRewardsPerDay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateStakeWeight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + } + ], + "name": "complaintConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "countOfCurrentValidatorsReadyForNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "countOfNextValidatorsReadyForNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "currentValidatorCountForConsensus", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "epoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructs", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructsAndCounts", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllReserveValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + } + ], + "name": "getAttestedPubKey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + } + ], + "name": "getDelegatedStakersWithUnfreezingStakes", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } + ], + "name": "getDelegatedStakersWithUnfreezingStakesCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getKeyTypes", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getKickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getLastStakeRecord", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLitCirc", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLowestRewardEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "name": "getNodeAttestedPubKeyMappings", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "pubKey", + "type": "tuple" + } + ], + "internalType": "struct LibStakingStorage.PubKeyMapping[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getNodeDemerits", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "name": "getNodeStakerAddressMappings", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.AddressMapping[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getNonShadowValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getNonShadowValidatorsInCurrentEpochLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpochGlobalStats", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeWeight", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsInCurrentEpoch", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "actualEpochLength", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.RewardEpochGlobalStats", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getRewardEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getSelfStakeRecordCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getShadowValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecord", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecordCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecordsForUser", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getStakeWeightInEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "nodeCount", + "type": "uint256" + } + ], + "name": "getThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "stakeRecord", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getTimelockInEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenContractAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "stakeRecord", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getTokensStaked", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getTotalStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getTotalStakeByUser", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getUnfrozenStakeCountForUser", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getValidatorsDelegated", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsInCurrentEpoch", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsInNextEpoch", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "stakerAddresses", + "type": "address[]" + } + ], + "name": "getValidatorsStructs", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsStructsInCurrentEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsStructsInNextEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + }, + { + "internalType": "address", + "name": "validatorToBeKickedStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "voterStakerAddress", + "type": "address" + } + ], + "name": "getVotingStatusToKickValidator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "keyTypes", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmax", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "k", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "enableStakeAutolock", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "profitMultiplier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "usdCostPerMonth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxEmissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStakeTimelock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minValidatorCountToClampMinimumThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThresholdToClampAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.GlobalConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveShadowValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isActiveValidatorByNodeAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "isActiveValidatorByNodeAddressForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveValidatorForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "isReadyForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddresses", + "type": "address" + } + ], + "name": "isRecentValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "isValidatorBanned", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + } + ], + "name": "kickPenaltyPercentByReason", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "litActionsConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timeoutMs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "memoryLimitMb", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCodeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxResponseLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxConsoleLogLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFetchCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxContractCallCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBroadcastAndCollectCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCallDepth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxRetries", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "asyncActionsEnabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.LitActionConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxTimeLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minSelfStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minTimeLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "nextValidatorCountForConsensus", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "nodeAddressToStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + } + ], + "name": "operatorAddressToStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "permittedRealmsForValidator", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "permittedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "base", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "exponent", + "type": "uint256" + } + ], + "name": "pow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "readyForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "realmConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "shouldKickValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "stakerToValidatorsTheyStakedTo", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "state", + "outputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "stakerInCurrentValidatorSet", + "type": "bool" + } + ], + "name": "validatorSelfStakeWillExpire", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "validators", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "Multisender", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0xC73DCD75AE2c17A0BbAF28c47b1725B0284A5F31", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + } + ], + "name": "sendEth", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + }, + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + } + ], + "name": "sendTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + }, + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountPerRecipient", + "type": "uint256" + } + ], + "name": "sendTokensExact", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + } + ], + "name": "withdrawTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "LITToken", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x5E8db2E7af793f4095c4843C8cBD87C5D8604838", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cap", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fromDelegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "toDelegate", + "type": "address" + } + ], + "name": "DelegateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "previousBalance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newBalance", + "type": "uint256" + } + ], + "name": "DelegateVotesChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CLOCK_MODE", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint32", + "name": "pos", + "type": "uint32" + } + ], + "name": "checkpoints", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "fromBlock", + "type": "uint32" + }, + { + "internalType": "uint224", + "name": "votes", + "type": "uint224" + } + ], + "internalType": "struct ERC20Votes.Checkpoint", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clock", + "outputs": [ + { + "internalType": "uint48", + "name": "", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "delegateBySig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "delegates", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "numCheckpoints", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PubkeyRouter", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0xFdC09086E184Cb812D37566B09751CcbCA6a2205", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "KeySetNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "curveType", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "name": "RootKeyMiscount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "PubkeyRoutingDataSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct IPubkeyRouter.RootKey", + "name": "rootKey", + "type": "tuple" + } + ], + "name": "RootKeySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ToggleEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "adminResetRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "rootKeys", + "type": "tuple[]" + } + ], + "name": "adminSetRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "signedMessage", + "type": "bytes" + } + ], + "name": "checkNodeSignatures", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "deriveEthAddressFromPubkey", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "ethAddressToPkpId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "getDerivedPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "getRootKeys", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRoutingData", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "isRouted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "pubkeys", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "setRoutingData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "setRoutingDataAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "voteForRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPNFT", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x9bB7c5504E12aBBCec35DF786769BBA292Cc4C0B", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "FreeMintSignerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "MintCostSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "PKPMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrew", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "name": "claimAndMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "exists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "freeMintSigner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNextDerivedKeyId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerAddress", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftMetadataAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpPermissionsAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRouterAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mintCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "mintGrantAndBurnNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "mintNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "prefixed", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "redeemedFreeMintIds", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "setFreeMintSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "setMintCost", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPHelper", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x835585944fB37d14C317cc6cd4864570cFcFab9E", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_resolver", + "type": "address" + }, + { + "internalType": "enum ContractResolver.Env", + "name": "_env", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterialV2", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypesV2", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "contract ContractResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "env", + "outputs": [ + { + "internalType": "enum ContractResolver.Env", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainWalletRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPKPNftMetdataAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpPermissionsAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressesScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.MintNextAndAddAuthMethodsWithTypesParams", + "name": "params", + "type": "tuple" + } + ], + "name": "mintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "string[]", + "name": "nftMetadata", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddDomainWalletMetadata", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removePkpMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string[]", + "name": "nftMetadata", + "type": "string[]" + } + ], + "name": "setPkpMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPPermissions", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x23A1aAB688EEe1d66FB45719ac527c2A0B036ed6", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "RootHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod", + "name": "authMethod", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "addPermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypesToAdd", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIdsToAdd", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeysToAdd", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopesToAdd", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypesToRemove", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIdsToRemove", + "type": "bytes[]" + } + ], + "name": "batchAddRemoveAuthMethods", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getAuthMethodId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getPKPPubKeysByAuthMethod", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedActions", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maxScopeId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethodScopes", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethods", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRouterAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getTokenIdsForAuthMethod", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getUserPubkeyForAuthMethod", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "isPermittedAction", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "isPermittedAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "isPermittedAuthMethod", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "isPermittedAuthMethodScopePresent", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "removePermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "removePermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "removePermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "removePermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "setRootHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + } + ], + "name": "verifyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bool[]", + "name": "proofFlags", + "type": "bool[]" + }, + { + "internalType": "bytes32[]", + "name": "leaves", + "type": "bytes32[]" + } + ], + "name": "verifyStates", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPNFTMetadata", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x7866b6379Cb2B7e68Bb942dF3A3ACe9C25773874", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_resolver", + "type": "address" + }, + { + "internalType": "enum ContractResolver.Env", + "name": "_env", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "buffer", + "type": "bytes" + } + ], + "name": "bytesToHex", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "contract ContractResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "env", + "outputs": [ + { + "internalType": "enum ContractResolver.Env", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removeProfileForPkp", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removeUrlForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "imgUrl", + "type": "string" + } + ], + "name": "setProfileForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + } + ], + "name": "setUrlForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubKey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "Allowlist", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x111F4990037333512d6F04e4ed30463fe7235dE0", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "ItemAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "ItemNotAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "allowAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "allowedItems", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "isAllowed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_allowAll", + "type": "bool" + } + ], + "name": "setAllowAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "setAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "setNotAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PaymentDelegation", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x58bA8Eb59E5A88ED690E47a8D37DCdB7d3aea490", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "restriction", + "type": "tuple" + } + ], + "name": "RestrictionSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "delegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "delegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPayers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "getPayersAndRestrictions", + "outputs": [ + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction[][]", + "name": "", + "type": "tuple[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getRestriction", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getUsers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "r", + "type": "tuple" + } + ], + "name": "setRestriction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "undelegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "undelegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "Ledger", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0xf69e2D0Fa6a7F24d65De4F972c1a3000d55CA175", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "AmountMustBePositive", + "type": "error" + }, + { + "inputs": [], + "name": "ArrayLengthsMustMatch", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientWithdrawAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeNonzero", + "type": "error" + }, + { + "inputs": [], + "name": "NodeNotStakingNode", + "type": "error" + }, + { + "inputs": [], + "name": "PercentageMustBeLessThan100", + "type": "error" + }, + { + "inputs": [], + "name": "SessionAlreadyUsed", + "type": "error" + }, + { + "inputs": [], + "name": "ValueExceedsUint128MaxLimit", + "type": "error" + }, + { + "inputs": [], + "name": "WithdrawalDelayNotPassed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "batch_id", + "type": "uint256" + } + ], + "name": "BatchCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositForUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FoundationRewardsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "LitFoundationSplitPercentageSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "RewardWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdrawRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "UserCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "UserWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "WithdrawRequest", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "balance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "chargeUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + }, + { + "internalType": "int256[]", + "name": "amounts", + "type": "int256[]" + }, + { + "internalType": "uint64", + "name": "batchId", + "type": "uint64" + } + ], + "name": "chargeUsers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "depositForUser", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestRewardWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "litFoundationRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "litFoundationSplitPercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "requestRewardWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "requestWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "rewardBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "setLitFoundationSplitPercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "setRewardWithdrawDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "setUserWithdrawDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "stableBalance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "userWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawFoundationRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PriceFeed", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x7cD9b8A17733bcb85683009f6Fcaf5B920c249EE", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeNonzero", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "BaseNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "MaxNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakingAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newPrices", + "type": "uint256[]" + } + ], + "name": "UsageSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "baseNetworkPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLitActionPriceConfigs", + "outputs": [ + { + "components": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.LitActionPriceConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNodeCapacityConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "pkpSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "encSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "litActionMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signSessionKeyMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "globalMaxCapacity", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeCapacityConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "getNodesForRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "validator", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "prices", + "type": "uint256[]" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeInfoAndPrices[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "maxNetworkPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "node", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "price", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodePriceData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + } + ], + "name": "prices", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodePriceData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setBaseNetworkPrices", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "new_price", + "type": "uint256" + } + ], + "name": "setLitActionPriceConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.LitActionPriceConfig[]", + "name": "configs", + "type": "tuple[]" + } + ], + "name": "setLitActionPriceConfigs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setMaxNetworkPrices", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "pkpSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "encSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "litActionMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signSessionKeyMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "globalMaxCapacity", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeCapacityConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setNodeCapacityConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setUsage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + } + ], + "name": "usagePercentToPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "usagePercentToPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + } + ], + "config": { + "chainId": "175188", + "rpcUrl": "https://yellowstone-rpc.litprotocol.com", + "chainName": "yellowstone", + "litNodeDomainName": "127.0.0.1", + "litNodePort": 7470, + "rocketPort": 7470 + } +} \ No newline at end of file diff --git a/packages/contracts/dist/prod/naga-proto.ts b/packages/contracts/dist/prod/naga-proto.ts new file mode 100644 index 000000000..fb7ab5588 --- /dev/null +++ b/packages/contracts/dist/prod/naga-proto.ts @@ -0,0 +1,16119 @@ +export const nagaProto = { + "data": [ + { + "name": "Staking", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x43b64F416cac52a7E60099E29F6477183bA172CB", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "RealmIdNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "getAllUnkickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getCurrentRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getShadowRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "isRecentValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInCurrentEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInCurrentOrNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "nodeAddressToStakerAddressAcrossRealms", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numRealms", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "validator_by_staker_address", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwnerOrDevopsAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "CannotModifyUnfrozen", + "type": "error" + }, + { + "inputs": [], + "name": "CannotMoveToLockedValidatorStateBeforeEpochEnds", + "type": "error" + }, + { + "inputs": [], + "name": "CannotStakeZero", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNewSharePrice", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSlashPercentage", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + } + ], + "name": "MinTimeLockNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochState", + "type": "error" + }, + { + "inputs": [], + "name": "NoEmptyStakingSlot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "StakeAmountNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + }, + { + "internalType": "address[]", + "name": "validatorsInNextEpoch", + "type": "address[]" + } + ], + "name": "ValidatorIsNotInNextEpoch", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "ClearOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "CountOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "DevopsAdminSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "EpochEndTimeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "EpochLengthSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "EpochTimeoutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newKickPenaltyPercent", + "type": "uint256" + } + ], + "name": "KickPenaltyPercentSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverContractAddress", + "type": "address" + } + ], + "name": "ResolverContractAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakerAddressClient", + "type": "address" + } + ], + "name": "StakeRecordCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Staked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "StateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorBanned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorKickedFromNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorRejoinedNextEpoch", + "type": "event" + }, + { + "inputs": [], + "name": "addRealm", + "outputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorStakerAddress", + "type": "address" + } + ], + "name": "adminKickValidatorInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "adminRejoinValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + } + ], + "name": "adminSetValidatorRegisterAttestedWalletDisabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsForCurrentEpoch", + "type": "address[]" + } + ], + "name": "adminSetValidatorsInCurrentEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsForNextEpoch", + "type": "address[]" + } + ], + "name": "adminSetValidatorsInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "source_realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "target_realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "target_validators", + "type": "address[]" + } + ], + "name": "adminSetupShadowSplicing", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "adminSlashValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "adminStakeForUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "adminUnfreezeForUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseRewardPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "emitClearOfflinePhaseData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "emitCountOfflinePhaseData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "increaseRewardPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "removeRealm", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setComplaintConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "keyTypes", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmax", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "k", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "enableStakeAutolock", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "profitMultiplier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "usdCostPerMonth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxEmissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStakeTimelock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minValidatorCountToClampMinimumThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThresholdToClampAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.GlobalConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newThreshold", + "type": "uint256" + } + ], + "name": "setDemeritRejoinThreshold", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "setDevopsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "setEpochEndTime", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "setEpochLength", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "setEpochState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "setEpochTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "timeoutMs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "memoryLimitMb", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCodeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxResponseLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxConsoleLogLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFetchCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxContractCallCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBroadcastAndCollectCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCallDepth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxRetries", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "asyncActionsEnabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.LitActionConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setLitActionConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newTimeout", + "type": "uint256" + } + ], + "name": "setPendingRejoinTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsToSet", + "type": "address[]" + } + ], + "name": "setPermittedValidators", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "name": "setPermittedValidatorsOn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setRealmConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newTotalSupply", + "type": "uint256" + } + ], + "name": "setTokenTotalSupplyStandIn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotContract", + "type": "error" + }, + { + "inputs": [], + "name": "CannotMigrateFromValidator", + "type": "error" + }, + { + "inputs": [], + "name": "CannotWithdrawFrozen", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentEpoch", + "type": "uint256" + } + ], + "name": "CheckpointAheadOfCurrentEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "InsufficientSelfStake", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidRatio", + "type": "error" + }, + { + "inputs": [], + "name": "NewTimeLockMustBeGreaterThanCurrent", + "type": "error" + }, + { + "inputs": [], + "name": "RewardsMustBeClaimed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "slahedAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "slashedRealmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "senderRealmId", + "type": "uint256" + } + ], + "name": "SlashingMustOccurInSameRealm", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumStake", + "type": "uint256" + } + ], + "name": "StakeMustBeGreaterThanMinimumStake", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + } + ], + "name": "StakeRecordNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "TimeLockNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "TooSoonToWithdraw", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } + ], + "name": "ValidatorNotRegistered", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "FixedCostRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "StakeRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "ValidatorCommissionClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "ValidatorRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "checkStakingAmounts", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimFixedCostRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimStakeRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimValidatorCommission", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getMaximumStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumSelfStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorCommission", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slope", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePriceAtLastUpdate", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "initial", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RewardEpoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpochView", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorCommission", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slope", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePriceAtLastUpdate", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "initial", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RewardEpoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "additionalAmount", + "type": "uint256" + } + ], + "name": "increaseStakeRecordAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "additionalTimeLock", + "type": "uint256" + } + ], + "name": "increaseStakeRecordTimelock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isInitial", + "type": "bool" + } + ], + "name": "initializeRewardEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorAddressToMigrateFrom", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddressToMigrateTo", + "type": "address" + } + ], + "name": "migrateStakeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "setValidatorCommissionRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "splitStakeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "unfreezeStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "exists", + "type": "bool" + }, + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "hashed", + "type": "bytes32" + } + ], + "name": "KeySetConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "KeySetConfigUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "deleteKeySet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "getKeySet", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "keySets", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "update", + "type": "tuple" + } + ], + "name": "setKeySet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "verifyKeySetCounts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ActiveValidatorsCannotLeave", + "type": "error" + }, + { + "inputs": [], + "name": "CannotKickBelowCurrentValidatorThreshold", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingAddress", + "type": "address" + } + ], + "name": "CannotRejoinBecauseBanned", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingAddress", + "type": "address" + } + ], + "name": "CannotRejoinUntilNextEpochBecauseKicked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + } + ], + "name": "CannotReuseCommsKeys", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "CannotVoteTwice", + "type": "error" + }, + { + "inputs": [], + "name": "CannotWithdrawZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "CouldNotMapNodeAddressToStakerAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidAttestedAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInActiveOrUnlockedOrPausedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInActiveOrUnlockedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochOrRestoreState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInReadyForNextEpochState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "MustBeValidatorInNextEpochToKick", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + } + ], + "name": "NotEnoughTimeElapsedForTimeoutSinceLastEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochEndTime", + "type": "uint256" + } + ], + "name": "NotEnoughTimeElapsedSinceLastEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "validatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + } + ], + "name": "NotEnoughValidatorsInNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentReadyValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextReadyValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCountToBeReady", + "type": "uint256" + } + ], + "name": "NotEnoughValidatorsReadyForNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receivedEpochNumber", + "type": "uint256" + } + ], + "name": "SignaledReadyForWrongEpochNumber", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "StakerAddressMismatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "yourBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "requestedWithdrawlAmount", + "type": "uint256" + } + ], + "name": "TryingToWithdrawMoreThanStaked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorAlreadyInNextValidatorSet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "existingRealmId", + "type": "uint256" + } + ], + "name": "ValidatorAlreadyInRealm", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorNotInNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "ValidatorNotPermitted", + "type": "error" + }, + { + "inputs": [], + "name": "ValidatorRegisterAttestedWalletDisabled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "valueName", + "type": "string" + } + ], + "name": "ValueMustBeNonzero", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "AdvancedEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "attestedPubKey", + "type": "tuple" + } + ], + "name": "AttestedWalletRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "ComplaintConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newTokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newKeyTypes", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinimumValidatorCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxConcurrentRequests", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPeerCheckingIntervalSecs", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignConcurrency", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "newRpcHealthcheckEnabled", + "type": "bool" + } + ], + "name": "ConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "ReadyForNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Recovered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToJoin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToLeave", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newDuration", + "type": "uint256" + } + ], + "name": "RewardsDurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newStakingTokenAddress", + "type": "address" + } + ], + "name": "StakingTokenSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "VotedToKickValidatorInNextEpoch", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "advanceEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "checkActiveOrUnlockedOrPausedState", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "exit", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "kickValidatorInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "lockValidatorsForNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "attestedPubKey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + } + ], + "name": "registerAttestedWallet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "requestToJoin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsForShadowSplicing", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "requestToLeave", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "requestToLeaveAsNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + } + ], + "name": "setIpPortNodeAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "signalReadyForNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "VersionRequirementsUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "checkVersion", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMaxVersion", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMaxVersionString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMinVersion", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMinVersionString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "setMaxVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "setMinVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "InvalidTimeLock", + "type": "error" + }, + { + "inputs": [], + "name": "NodeAddressNotFoundForStaker", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeWeight", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsInCurrentEpoch", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "actualEpochLength", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.RewardEpochGlobalStats", + "name": "globalStats", + "type": "tuple" + } + ], + "name": "calculateRewardsPerDay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateStakeWeight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + } + ], + "name": "complaintConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "countOfCurrentValidatorsReadyForNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "countOfNextValidatorsReadyForNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "currentValidatorCountForConsensus", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "epoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructs", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructsAndCounts", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllReserveValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + } + ], + "name": "getAttestedPubKey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + } + ], + "name": "getDelegatedStakersWithUnfreezingStakes", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } + ], + "name": "getDelegatedStakersWithUnfreezingStakesCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getKeyTypes", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getKickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getLastStakeRecord", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLitCirc", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLowestRewardEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "name": "getNodeAttestedPubKeyMappings", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "pubKey", + "type": "tuple" + } + ], + "internalType": "struct LibStakingStorage.PubKeyMapping[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getNodeDemerits", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "name": "getNodeStakerAddressMappings", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.AddressMapping[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getNonShadowValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getNonShadowValidatorsInCurrentEpochLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpochGlobalStats", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeWeight", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsInCurrentEpoch", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "actualEpochLength", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.RewardEpochGlobalStats", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getRewardEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getSelfStakeRecordCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getShadowValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecord", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecordCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecordsForUser", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getStakeWeightInEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "nodeCount", + "type": "uint256" + } + ], + "name": "getThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "stakeRecord", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getTimelockInEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenContractAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "stakeRecord", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getTokensStaked", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getTotalStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getTotalStakeByUser", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getUnfrozenStakeCountForUser", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getValidatorsDelegated", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsInCurrentEpoch", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsInNextEpoch", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "stakerAddresses", + "type": "address[]" + } + ], + "name": "getValidatorsStructs", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsStructsInCurrentEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsStructsInNextEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + }, + { + "internalType": "address", + "name": "validatorToBeKickedStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "voterStakerAddress", + "type": "address" + } + ], + "name": "getVotingStatusToKickValidator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "keyTypes", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmax", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "k", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "enableStakeAutolock", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "profitMultiplier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "usdCostPerMonth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxEmissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStakeTimelock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minValidatorCountToClampMinimumThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThresholdToClampAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.GlobalConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveShadowValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isActiveValidatorByNodeAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "isActiveValidatorByNodeAddressForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveValidatorForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "isReadyForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddresses", + "type": "address" + } + ], + "name": "isRecentValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "isValidatorBanned", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + } + ], + "name": "kickPenaltyPercentByReason", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "litActionsConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timeoutMs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "memoryLimitMb", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCodeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxResponseLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxConsoleLogLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFetchCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxContractCallCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBroadcastAndCollectCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCallDepth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxRetries", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "asyncActionsEnabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.LitActionConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxTimeLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minSelfStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minTimeLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "nextValidatorCountForConsensus", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "nodeAddressToStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + } + ], + "name": "operatorAddressToStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "permittedRealmsForValidator", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "permittedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "base", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "exponent", + "type": "uint256" + } + ], + "name": "pow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "readyForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "realmConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "shouldKickValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "stakerToValidatorsTheyStakedTo", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "state", + "outputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "stakerInCurrentValidatorSet", + "type": "bool" + } + ], + "name": "validatorSelfStakeWillExpire", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "validators", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "Multisender", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0xC73DCD75AE2c17A0BbAF28c47b1725B0284A5F31", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + } + ], + "name": "sendEth", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + }, + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + } + ], + "name": "sendTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + }, + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountPerRecipient", + "type": "uint256" + } + ], + "name": "sendTokensExact", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + } + ], + "name": "withdrawTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "LITToken", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x5E8db2E7af793f4095c4843C8cBD87C5D8604838", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cap", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fromDelegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "toDelegate", + "type": "address" + } + ], + "name": "DelegateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "previousBalance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newBalance", + "type": "uint256" + } + ], + "name": "DelegateVotesChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CLOCK_MODE", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint32", + "name": "pos", + "type": "uint32" + } + ], + "name": "checkpoints", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "fromBlock", + "type": "uint32" + }, + { + "internalType": "uint224", + "name": "votes", + "type": "uint224" + } + ], + "internalType": "struct ERC20Votes.Checkpoint", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clock", + "outputs": [ + { + "internalType": "uint48", + "name": "", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "delegateBySig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "delegates", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "numCheckpoints", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PubkeyRouter", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0xFdC09086E184Cb812D37566B09751CcbCA6a2205", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "KeySetNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "curveType", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "name": "RootKeyMiscount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "PubkeyRoutingDataSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct IPubkeyRouter.RootKey", + "name": "rootKey", + "type": "tuple" + } + ], + "name": "RootKeySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ToggleEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "adminResetRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "rootKeys", + "type": "tuple[]" + } + ], + "name": "adminSetRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "signedMessage", + "type": "bytes" + } + ], + "name": "checkNodeSignatures", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "deriveEthAddressFromPubkey", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "ethAddressToPkpId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "getDerivedPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "getRootKeys", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRoutingData", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "isRouted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "pubkeys", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "setRoutingData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "setRoutingDataAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "voteForRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPNFT", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x9bB7c5504E12aBBCec35DF786769BBA292Cc4C0B", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "FreeMintSignerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "MintCostSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "PKPMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrew", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "name": "claimAndMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "exists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "freeMintSigner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNextDerivedKeyId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerAddress", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftMetadataAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpPermissionsAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRouterAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mintCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "mintGrantAndBurnNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "mintNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "prefixed", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "redeemedFreeMintIds", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "setFreeMintSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "setMintCost", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPHelper", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x835585944fB37d14C317cc6cd4864570cFcFab9E", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_resolver", + "type": "address" + }, + { + "internalType": "enum ContractResolver.Env", + "name": "_env", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterialV2", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypesV2", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "contract ContractResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "env", + "outputs": [ + { + "internalType": "enum ContractResolver.Env", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainWalletRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPKPNftMetdataAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpPermissionsAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressesScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.MintNextAndAddAuthMethodsWithTypesParams", + "name": "params", + "type": "tuple" + } + ], + "name": "mintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "string[]", + "name": "nftMetadata", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddDomainWalletMetadata", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removePkpMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string[]", + "name": "nftMetadata", + "type": "string[]" + } + ], + "name": "setPkpMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPPermissions", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x23A1aAB688EEe1d66FB45719ac527c2A0B036ed6", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "RootHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod", + "name": "authMethod", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "addPermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypesToAdd", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIdsToAdd", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeysToAdd", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopesToAdd", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypesToRemove", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIdsToRemove", + "type": "bytes[]" + } + ], + "name": "batchAddRemoveAuthMethods", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getAuthMethodId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getPKPPubKeysByAuthMethod", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedActions", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maxScopeId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethodScopes", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethods", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRouterAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getTokenIdsForAuthMethod", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getUserPubkeyForAuthMethod", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "isPermittedAction", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "isPermittedAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "isPermittedAuthMethod", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "isPermittedAuthMethodScopePresent", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "removePermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "removePermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "removePermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "removePermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "setRootHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + } + ], + "name": "verifyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bool[]", + "name": "proofFlags", + "type": "bool[]" + }, + { + "internalType": "bytes32[]", + "name": "leaves", + "type": "bytes32[]" + } + ], + "name": "verifyStates", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPNFTMetadata", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x7866b6379Cb2B7e68Bb942dF3A3ACe9C25773874", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_resolver", + "type": "address" + }, + { + "internalType": "enum ContractResolver.Env", + "name": "_env", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "buffer", + "type": "bytes" + } + ], + "name": "bytesToHex", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "contract ContractResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "env", + "outputs": [ + { + "internalType": "enum ContractResolver.Env", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removeProfileForPkp", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removeUrlForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "imgUrl", + "type": "string" + } + ], + "name": "setProfileForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + } + ], + "name": "setUrlForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubKey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "Allowlist", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x111F4990037333512d6F04e4ed30463fe7235dE0", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "ItemAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "ItemNotAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "allowAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "allowedItems", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "isAllowed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_allowAll", + "type": "bool" + } + ], + "name": "setAllowAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "setAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "setNotAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PaymentDelegation", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x58bA8Eb59E5A88ED690E47a8D37DCdB7d3aea490", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "restriction", + "type": "tuple" + } + ], + "name": "RestrictionSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "delegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "delegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPayers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "getPayersAndRestrictions", + "outputs": [ + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction[][]", + "name": "", + "type": "tuple[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getRestriction", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getUsers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "r", + "type": "tuple" + } + ], + "name": "setRestriction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "undelegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "undelegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "Ledger", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0xf69e2D0Fa6a7F24d65De4F972c1a3000d55CA175", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "AmountMustBePositive", + "type": "error" + }, + { + "inputs": [], + "name": "ArrayLengthsMustMatch", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientWithdrawAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeNonzero", + "type": "error" + }, + { + "inputs": [], + "name": "NodeNotStakingNode", + "type": "error" + }, + { + "inputs": [], + "name": "PercentageMustBeLessThan100", + "type": "error" + }, + { + "inputs": [], + "name": "SessionAlreadyUsed", + "type": "error" + }, + { + "inputs": [], + "name": "ValueExceedsUint128MaxLimit", + "type": "error" + }, + { + "inputs": [], + "name": "WithdrawalDelayNotPassed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "batch_id", + "type": "uint256" + } + ], + "name": "BatchCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositForUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FoundationRewardsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "LitFoundationSplitPercentageSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "RewardWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdrawRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "UserCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "UserWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "WithdrawRequest", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "balance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "chargeUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + }, + { + "internalType": "int256[]", + "name": "amounts", + "type": "int256[]" + }, + { + "internalType": "uint64", + "name": "batchId", + "type": "uint64" + } + ], + "name": "chargeUsers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "depositForUser", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestRewardWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "litFoundationRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "litFoundationSplitPercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "requestRewardWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "requestWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "rewardBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "setLitFoundationSplitPercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "setRewardWithdrawDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "setUserWithdrawDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "stableBalance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "userWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawFoundationRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PriceFeed", + "contracts": [ + { + "network": "naga-proto", + "address_hash": "0x7cD9b8A17733bcb85683009f6Fcaf5B920c249EE", + "inserted_at": "2025-11-13T21:55:15Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeNonzero", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "BaseNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "MaxNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakingAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newPrices", + "type": "uint256[]" + } + ], + "name": "UsageSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "baseNetworkPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLitActionPriceConfigs", + "outputs": [ + { + "components": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.LitActionPriceConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNodeCapacityConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "pkpSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "encSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "litActionMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signSessionKeyMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "globalMaxCapacity", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeCapacityConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "getNodesForRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "validator", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "prices", + "type": "uint256[]" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeInfoAndPrices[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "maxNetworkPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "node", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "price", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodePriceData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + } + ], + "name": "prices", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodePriceData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setBaseNetworkPrices", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "new_price", + "type": "uint256" + } + ], + "name": "setLitActionPriceConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.LitActionPriceConfig[]", + "name": "configs", + "type": "tuple[]" + } + ], + "name": "setLitActionPriceConfigs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setMaxNetworkPrices", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "pkpSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "encSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "litActionMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signSessionKeyMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "globalMaxCapacity", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeCapacityConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setNodeCapacityConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setUsage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + } + ], + "name": "usagePercentToPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "usagePercentToPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + } + ], + "config": { + "chainId": "175188", + "rpcUrl": "https://yellowstone-rpc.litprotocol.com", + "chainName": "yellowstone", + "litNodeDomainName": "127.0.0.1", + "litNodePort": 7470, + "rocketPort": 7470 + } +} as const; \ No newline at end of file diff --git a/packages/contracts/dist/prod/naga-staging.cjs b/packages/contracts/dist/prod/naga-staging.cjs index 7cb2af8bd..a37f96ca0 100644 --- a/packages/contracts/dist/prod/naga-staging.cjs +++ b/packages/contracts/dist/prod/naga-staging.cjs @@ -7,8 +7,8 @@ module.exports = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x781C6d227dA4D058890208B68DDA1da8f6EBbE54", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x9b8Ed3FD964Bc38dDc32CF637439e230CD50e3Dd", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -716,6 +716,11 @@ module.exports = { "name": "CannotModifyUnfrozen", "type": "error" }, + { + "inputs": [], + "name": "CannotMoveToLockedValidatorStateBeforeEpochEnds", + "type": "error" + }, { "inputs": [], "name": "CannotStakeZero", @@ -1433,6 +1438,11 @@ module.exports = { "internalType": "uint256", "name": "minThresholdToClampAt", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.GlobalConfig", @@ -2633,6 +2643,132 @@ module.exports = { "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "getKeySet", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "keySets", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -2693,6 +2829,47 @@ module.exports = { "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "verifyKeySetCounts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "ActiveValidatorsCannotLeave", @@ -3309,6 +3486,19 @@ module.exports = { "name": "StakingTokenSet", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -3373,25 +3563,6 @@ module.exports = { "stateMutability": "pure", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "attestedAddress", - "type": "address" - } - ], - "name": "getAttestedPubKey", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -4094,6 +4265,11 @@ module.exports = { "internalType": "uint256", "name": "startTime", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.Epoch", @@ -4285,6 +4461,11 @@ module.exports = { "internalType": "uint256", "name": "startTime", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.Epoch", @@ -4442,6 +4623,25 @@ module.exports = { "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + } + ], + "name": "getAttestedPubKey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -4490,72 +4690,6 @@ module.exports = { "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "string", - "name": "identifier", - "type": "string" - } - ], - "name": "getKeySet", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "minimumThreshold", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "monetaryValue", - "type": "uint32" - }, - { - "internalType": "bool", - "name": "completeIsolation", - "type": "bool" - }, - { - "internalType": "string", - "name": "identifier", - "type": "string" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - }, - { - "internalType": "uint256[]", - "name": "realms", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "curves", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "counts", - "type": "uint256[]" - }, - { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" - } - ], - "internalType": "struct LibStakingStorage.KeySetConfig", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "getKeyTypes", @@ -5962,6 +6096,11 @@ module.exports = { "internalType": "uint256", "name": "minThresholdToClampAt", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.GlobalConfig", @@ -6142,73 +6281,13 @@ module.exports = { "name": "validator", "type": "address" } - ], - "name": "isValidatorBanned", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "keySets", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "minimumThreshold", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "monetaryValue", - "type": "uint32" - }, - { - "internalType": "bool", - "name": "completeIsolation", - "type": "bool" - }, - { - "internalType": "string", - "name": "identifier", - "type": "string" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - }, - { - "internalType": "uint256[]", - "name": "realms", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "curves", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "counts", - "type": "uint256[]" - }, - { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" - } - ], - "internalType": "struct LibStakingStorage.KeySetConfig[]", + ], + "name": "isValidatorBanned", + "outputs": [ + { + "internalType": "bool", "name": "", - "type": "tuple[]" + "type": "bool" } ], "stateMutability": "view", @@ -6784,47 +6863,6 @@ module.exports = { ], "stateMutability": "view", "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "identifier", - "type": "string" - }, - { - "components": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "internalType": "struct IPubkeyRouter.RootKey[]", - "name": "newRootKeys", - "type": "tuple[]" - } - ], - "name": "verifyKeySetCounts", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" } ] } @@ -6835,8 +6873,8 @@ module.exports = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x2001821a222713becB50B5976691AD723D6b640c", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0xbD866A743E52825E6FeEF341fc857ad5A1d28ed2", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "anonymous": false, @@ -6974,7 +7012,7 @@ module.exports = { { "network": "naga-staging", "address_hash": "0x5E8db2E7af793f4095c4843C8cBD87C5D8604838", - "inserted_at": "2025-09-17T01:07:56Z", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -8027,8 +8065,8 @@ module.exports = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x280E5c534629FBdD4dC61c85695143B6ACc4790b", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0xE37847746012c756d5D91d37B311eeB8e59684e9", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -8781,6 +8819,78 @@ module.exports = { "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "getPkpNftAddress", @@ -9089,8 +9199,8 @@ module.exports = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x991d56EdC98a0DAeb93E91F70588598f79875701", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x92d2a4Acb70E498a486E0523AD42fF3F6d3D3642", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -9835,6 +9945,170 @@ module.exports = { "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerAddress", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "getPkpNftMetadataAddress", @@ -10353,8 +10627,8 @@ module.exports = { "contracts": [ { "network": "naga-staging", - "address_hash": "0xe51357Cc58E8a718423CBa09b87879Ff7B18d279", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0xe97fFbc4eDa5CdF70375D4b8f87e476D40b628EC", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -11368,8 +11642,8 @@ module.exports = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x5632B35374DD73205B5aeBBcA3ecB02B3dc8B5fe", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x1E382ef3957218423C6e1a992a4cE6294861cC93", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -12703,8 +12977,8 @@ module.exports = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x3346125bdaE8FDda08aaf14A67A7DdE465e8b7A6", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0xA5c9163C3E127b5F956CE3e1b1D7429988aF2248", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -12867,8 +13141,8 @@ module.exports = { "contracts": [ { "network": "naga-staging", - "address_hash": "0xab292EC22a0b596F115725607Ada3F28980eAB36", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x7a286929c167e6FA0298C05Dec2433F4723Eb86C", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [], @@ -13104,8 +13378,8 @@ module.exports = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x700DB831292541C640c5Dbb9AaE1697faE188513", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x13fC0864A37B38D3C2A7d5E9C08D5124B9Cec4bF", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -13740,8 +14014,8 @@ module.exports = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x658F5ED32aE5EFBf79F7Ba36A9FA770FeA7662c8", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x23Be686cAFCe69C5Fb075E2be7a4505598E338E8", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -14796,8 +15070,8 @@ module.exports = { "contracts": [ { "network": "naga-staging", - "address_hash": "0xB76744dC73AFC416e8cDbB7023ca89C862B86F05", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x651d3282E1F083036Bb136dBbe7df17aCC39A330", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -15195,11 +15469,6 @@ module.exports = { "name": "CallerNotOwner", "type": "error" }, - { - "inputs": [], - "name": "MustBeLessThan100", - "type": "error" - }, { "inputs": [], "name": "MustBeNonzero", diff --git a/packages/contracts/dist/prod/naga-staging.js b/packages/contracts/dist/prod/naga-staging.js index 7b94e7aa6..a2c26875b 100644 --- a/packages/contracts/dist/prod/naga-staging.js +++ b/packages/contracts/dist/prod/naga-staging.js @@ -5,8 +5,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x781C6d227dA4D058890208B68DDA1da8f6EBbE54", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x9b8Ed3FD964Bc38dDc32CF637439e230CD50e3Dd", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -714,6 +714,11 @@ export const nagaStaging = { "name": "CannotModifyUnfrozen", "type": "error" }, + { + "inputs": [], + "name": "CannotMoveToLockedValidatorStateBeforeEpochEnds", + "type": "error" + }, { "inputs": [], "name": "CannotStakeZero", @@ -1431,6 +1436,11 @@ export const nagaStaging = { "internalType": "uint256", "name": "minThresholdToClampAt", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.GlobalConfig", @@ -2631,6 +2641,132 @@ export const nagaStaging = { "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "getKeySet", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "keySets", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -2691,6 +2827,47 @@ export const nagaStaging = { "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "verifyKeySetCounts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "ActiveValidatorsCannotLeave", @@ -3307,6 +3484,19 @@ export const nagaStaging = { "name": "StakingTokenSet", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -3371,25 +3561,6 @@ export const nagaStaging = { "stateMutability": "pure", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "attestedAddress", - "type": "address" - } - ], - "name": "getAttestedPubKey", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -4092,6 +4263,11 @@ export const nagaStaging = { "internalType": "uint256", "name": "startTime", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.Epoch", @@ -4283,6 +4459,11 @@ export const nagaStaging = { "internalType": "uint256", "name": "startTime", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.Epoch", @@ -4440,6 +4621,25 @@ export const nagaStaging = { "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + } + ], + "name": "getAttestedPubKey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -4488,72 +4688,6 @@ export const nagaStaging = { "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "string", - "name": "identifier", - "type": "string" - } - ], - "name": "getKeySet", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "minimumThreshold", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "monetaryValue", - "type": "uint32" - }, - { - "internalType": "bool", - "name": "completeIsolation", - "type": "bool" - }, - { - "internalType": "string", - "name": "identifier", - "type": "string" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - }, - { - "internalType": "uint256[]", - "name": "realms", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "curves", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "counts", - "type": "uint256[]" - }, - { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" - } - ], - "internalType": "struct LibStakingStorage.KeySetConfig", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "getKeyTypes", @@ -5960,6 +6094,11 @@ export const nagaStaging = { "internalType": "uint256", "name": "minThresholdToClampAt", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.GlobalConfig", @@ -6140,73 +6279,13 @@ export const nagaStaging = { "name": "validator", "type": "address" } - ], - "name": "isValidatorBanned", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "keySets", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "minimumThreshold", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "monetaryValue", - "type": "uint32" - }, - { - "internalType": "bool", - "name": "completeIsolation", - "type": "bool" - }, - { - "internalType": "string", - "name": "identifier", - "type": "string" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - }, - { - "internalType": "uint256[]", - "name": "realms", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "curves", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "counts", - "type": "uint256[]" - }, - { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" - } - ], - "internalType": "struct LibStakingStorage.KeySetConfig[]", + ], + "name": "isValidatorBanned", + "outputs": [ + { + "internalType": "bool", "name": "", - "type": "tuple[]" + "type": "bool" } ], "stateMutability": "view", @@ -6782,47 +6861,6 @@ export const nagaStaging = { ], "stateMutability": "view", "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "identifier", - "type": "string" - }, - { - "components": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "internalType": "struct IPubkeyRouter.RootKey[]", - "name": "newRootKeys", - "type": "tuple[]" - } - ], - "name": "verifyKeySetCounts", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" } ] } @@ -6833,8 +6871,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x2001821a222713becB50B5976691AD723D6b640c", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0xbD866A743E52825E6FeEF341fc857ad5A1d28ed2", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "anonymous": false, @@ -6972,7 +7010,7 @@ export const nagaStaging = { { "network": "naga-staging", "address_hash": "0x5E8db2E7af793f4095c4843C8cBD87C5D8604838", - "inserted_at": "2025-09-17T01:07:56Z", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -8025,8 +8063,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x280E5c534629FBdD4dC61c85695143B6ACc4790b", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0xE37847746012c756d5D91d37B311eeB8e59684e9", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -8779,6 +8817,78 @@ export const nagaStaging = { "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "getPkpNftAddress", @@ -9087,8 +9197,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x991d56EdC98a0DAeb93E91F70588598f79875701", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x92d2a4Acb70E498a486E0523AD42fF3F6d3D3642", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -9833,6 +9943,170 @@ export const nagaStaging = { "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerAddress", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "getPkpNftMetadataAddress", @@ -10351,8 +10625,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0xe51357Cc58E8a718423CBa09b87879Ff7B18d279", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0xe97fFbc4eDa5CdF70375D4b8f87e476D40b628EC", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -11366,8 +11640,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x5632B35374DD73205B5aeBBcA3ecB02B3dc8B5fe", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x1E382ef3957218423C6e1a992a4cE6294861cC93", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -12701,8 +12975,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x3346125bdaE8FDda08aaf14A67A7DdE465e8b7A6", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0xA5c9163C3E127b5F956CE3e1b1D7429988aF2248", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -12865,8 +13139,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0xab292EC22a0b596F115725607Ada3F28980eAB36", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x7a286929c167e6FA0298C05Dec2433F4723Eb86C", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [], @@ -13102,8 +13376,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x700DB831292541C640c5Dbb9AaE1697faE188513", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x13fC0864A37B38D3C2A7d5E9C08D5124B9Cec4bF", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -13738,8 +14012,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x658F5ED32aE5EFBf79F7Ba36A9FA770FeA7662c8", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x23Be686cAFCe69C5Fb075E2be7a4505598E338E8", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -14794,8 +15068,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0xB76744dC73AFC416e8cDbB7023ca89C862B86F05", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x651d3282E1F083036Bb136dBbe7df17aCC39A330", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -15193,11 +15467,6 @@ export const nagaStaging = { "name": "CallerNotOwner", "type": "error" }, - { - "inputs": [], - "name": "MustBeLessThan100", - "type": "error" - }, { "inputs": [], "name": "MustBeNonzero", diff --git a/packages/contracts/dist/prod/naga-staging.json b/packages/contracts/dist/prod/naga-staging.json index 311336f02..2759f9248 100644 --- a/packages/contracts/dist/prod/naga-staging.json +++ b/packages/contracts/dist/prod/naga-staging.json @@ -5,8 +5,8 @@ "contracts": [ { "network": "naga-staging", - "address_hash": "0x781C6d227dA4D058890208B68DDA1da8f6EBbE54", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x9b8Ed3FD964Bc38dDc32CF637439e230CD50e3Dd", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -714,6 +714,11 @@ "name": "CannotModifyUnfrozen", "type": "error" }, + { + "inputs": [], + "name": "CannotMoveToLockedValidatorStateBeforeEpochEnds", + "type": "error" + }, { "inputs": [], "name": "CannotStakeZero", @@ -1431,6 +1436,11 @@ "internalType": "uint256", "name": "minThresholdToClampAt", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.GlobalConfig", @@ -2631,6 +2641,132 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "getKeySet", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "keySets", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -2691,6 +2827,47 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "verifyKeySetCounts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "ActiveValidatorsCannotLeave", @@ -3307,6 +3484,19 @@ "name": "StakingTokenSet", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -3371,25 +3561,6 @@ "stateMutability": "pure", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "attestedAddress", - "type": "address" - } - ], - "name": "getAttestedPubKey", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -4092,6 +4263,11 @@ "internalType": "uint256", "name": "startTime", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.Epoch", @@ -4283,6 +4459,11 @@ "internalType": "uint256", "name": "startTime", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.Epoch", @@ -4440,6 +4621,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + } + ], + "name": "getAttestedPubKey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -4488,72 +4688,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "string", - "name": "identifier", - "type": "string" - } - ], - "name": "getKeySet", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "minimumThreshold", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "monetaryValue", - "type": "uint32" - }, - { - "internalType": "bool", - "name": "completeIsolation", - "type": "bool" - }, - { - "internalType": "string", - "name": "identifier", - "type": "string" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - }, - { - "internalType": "uint256[]", - "name": "realms", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "curves", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "counts", - "type": "uint256[]" - }, - { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" - } - ], - "internalType": "struct LibStakingStorage.KeySetConfig", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "getKeyTypes", @@ -5960,6 +6094,11 @@ "internalType": "uint256", "name": "minThresholdToClampAt", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.GlobalConfig", @@ -6140,73 +6279,13 @@ "name": "validator", "type": "address" } - ], - "name": "isValidatorBanned", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "keySets", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "minimumThreshold", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "monetaryValue", - "type": "uint32" - }, - { - "internalType": "bool", - "name": "completeIsolation", - "type": "bool" - }, - { - "internalType": "string", - "name": "identifier", - "type": "string" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - }, - { - "internalType": "uint256[]", - "name": "realms", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "curves", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "counts", - "type": "uint256[]" - }, - { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" - } - ], - "internalType": "struct LibStakingStorage.KeySetConfig[]", + ], + "name": "isValidatorBanned", + "outputs": [ + { + "internalType": "bool", "name": "", - "type": "tuple[]" + "type": "bool" } ], "stateMutability": "view", @@ -6782,47 +6861,6 @@ ], "stateMutability": "view", "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "identifier", - "type": "string" - }, - { - "components": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "internalType": "struct IPubkeyRouter.RootKey[]", - "name": "newRootKeys", - "type": "tuple[]" - } - ], - "name": "verifyKeySetCounts", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" } ] } @@ -6833,8 +6871,8 @@ "contracts": [ { "network": "naga-staging", - "address_hash": "0x2001821a222713becB50B5976691AD723D6b640c", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0xbD866A743E52825E6FeEF341fc857ad5A1d28ed2", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "anonymous": false, @@ -6972,7 +7010,7 @@ { "network": "naga-staging", "address_hash": "0x5E8db2E7af793f4095c4843C8cBD87C5D8604838", - "inserted_at": "2025-09-17T01:07:56Z", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -8025,8 +8063,8 @@ "contracts": [ { "network": "naga-staging", - "address_hash": "0x280E5c534629FBdD4dC61c85695143B6ACc4790b", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0xE37847746012c756d5D91d37B311eeB8e59684e9", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -8779,6 +8817,78 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "getPkpNftAddress", @@ -9087,8 +9197,8 @@ "contracts": [ { "network": "naga-staging", - "address_hash": "0x991d56EdC98a0DAeb93E91F70588598f79875701", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x92d2a4Acb70E498a486E0523AD42fF3F6d3D3642", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -9833,6 +9943,170 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerAddress", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "getPkpNftMetadataAddress", @@ -10351,8 +10625,8 @@ "contracts": [ { "network": "naga-staging", - "address_hash": "0xe51357Cc58E8a718423CBa09b87879Ff7B18d279", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0xe97fFbc4eDa5CdF70375D4b8f87e476D40b628EC", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -11366,8 +11640,8 @@ "contracts": [ { "network": "naga-staging", - "address_hash": "0x5632B35374DD73205B5aeBBcA3ecB02B3dc8B5fe", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x1E382ef3957218423C6e1a992a4cE6294861cC93", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -12701,8 +12975,8 @@ "contracts": [ { "network": "naga-staging", - "address_hash": "0x3346125bdaE8FDda08aaf14A67A7DdE465e8b7A6", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0xA5c9163C3E127b5F956CE3e1b1D7429988aF2248", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -12865,8 +13139,8 @@ "contracts": [ { "network": "naga-staging", - "address_hash": "0xab292EC22a0b596F115725607Ada3F28980eAB36", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x7a286929c167e6FA0298C05Dec2433F4723Eb86C", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [], @@ -13102,8 +13376,8 @@ "contracts": [ { "network": "naga-staging", - "address_hash": "0x700DB831292541C640c5Dbb9AaE1697faE188513", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x13fC0864A37B38D3C2A7d5E9C08D5124B9Cec4bF", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -13738,8 +14012,8 @@ "contracts": [ { "network": "naga-staging", - "address_hash": "0x658F5ED32aE5EFBf79F7Ba36A9FA770FeA7662c8", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x23Be686cAFCe69C5Fb075E2be7a4505598E338E8", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -14794,8 +15068,8 @@ "contracts": [ { "network": "naga-staging", - "address_hash": "0xB76744dC73AFC416e8cDbB7023ca89C862B86F05", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x651d3282E1F083036Bb136dBbe7df17aCC39A330", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -15193,11 +15467,6 @@ "name": "CallerNotOwner", "type": "error" }, - { - "inputs": [], - "name": "MustBeLessThan100", - "type": "error" - }, { "inputs": [], "name": "MustBeNonzero", diff --git a/packages/contracts/dist/prod/naga-staging.ts b/packages/contracts/dist/prod/naga-staging.ts index 6f4367047..c5ae737d7 100644 --- a/packages/contracts/dist/prod/naga-staging.ts +++ b/packages/contracts/dist/prod/naga-staging.ts @@ -5,8 +5,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x781C6d227dA4D058890208B68DDA1da8f6EBbE54", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x9b8Ed3FD964Bc38dDc32CF637439e230CD50e3Dd", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -714,6 +714,11 @@ export const nagaStaging = { "name": "CannotModifyUnfrozen", "type": "error" }, + { + "inputs": [], + "name": "CannotMoveToLockedValidatorStateBeforeEpochEnds", + "type": "error" + }, { "inputs": [], "name": "CannotStakeZero", @@ -1431,6 +1436,11 @@ export const nagaStaging = { "internalType": "uint256", "name": "minThresholdToClampAt", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.GlobalConfig", @@ -2631,6 +2641,132 @@ export const nagaStaging = { "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "getKeySet", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "keySets", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -2691,6 +2827,47 @@ export const nagaStaging = { "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "verifyKeySetCounts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "ActiveValidatorsCannotLeave", @@ -3307,6 +3484,19 @@ export const nagaStaging = { "name": "StakingTokenSet", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -3371,25 +3561,6 @@ export const nagaStaging = { "stateMutability": "pure", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "attestedAddress", - "type": "address" - } - ], - "name": "getAttestedPubKey", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -4092,6 +4263,11 @@ export const nagaStaging = { "internalType": "uint256", "name": "startTime", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.Epoch", @@ -4283,6 +4459,11 @@ export const nagaStaging = { "internalType": "uint256", "name": "startTime", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.Epoch", @@ -4440,6 +4621,25 @@ export const nagaStaging = { "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + } + ], + "name": "getAttestedPubKey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -4488,72 +4688,6 @@ export const nagaStaging = { "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "string", - "name": "identifier", - "type": "string" - } - ], - "name": "getKeySet", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "minimumThreshold", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "monetaryValue", - "type": "uint32" - }, - { - "internalType": "bool", - "name": "completeIsolation", - "type": "bool" - }, - { - "internalType": "string", - "name": "identifier", - "type": "string" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - }, - { - "internalType": "uint256[]", - "name": "realms", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "curves", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "counts", - "type": "uint256[]" - }, - { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" - } - ], - "internalType": "struct LibStakingStorage.KeySetConfig", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "getKeyTypes", @@ -5960,6 +6094,11 @@ export const nagaStaging = { "internalType": "uint256", "name": "minThresholdToClampAt", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.GlobalConfig", @@ -6140,73 +6279,13 @@ export const nagaStaging = { "name": "validator", "type": "address" } - ], - "name": "isValidatorBanned", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "keySets", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "minimumThreshold", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "monetaryValue", - "type": "uint32" - }, - { - "internalType": "bool", - "name": "completeIsolation", - "type": "bool" - }, - { - "internalType": "string", - "name": "identifier", - "type": "string" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - }, - { - "internalType": "uint256[]", - "name": "realms", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "curves", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "counts", - "type": "uint256[]" - }, - { - "internalType": "address[]", - "name": "recoveryPartyMembers", - "type": "address[]" - } - ], - "internalType": "struct LibStakingStorage.KeySetConfig[]", + ], + "name": "isValidatorBanned", + "outputs": [ + { + "internalType": "bool", "name": "", - "type": "tuple[]" + "type": "bool" } ], "stateMutability": "view", @@ -6782,47 +6861,6 @@ export const nagaStaging = { ], "stateMutability": "view", "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "identifier", - "type": "string" - }, - { - "components": [ - { - "internalType": "bytes", - "name": "pubkey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "internalType": "struct IPubkeyRouter.RootKey[]", - "name": "newRootKeys", - "type": "tuple[]" - } - ], - "name": "verifyKeySetCounts", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" } ] } @@ -6833,8 +6871,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x2001821a222713becB50B5976691AD723D6b640c", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0xbD866A743E52825E6FeEF341fc857ad5A1d28ed2", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "anonymous": false, @@ -6972,7 +7010,7 @@ export const nagaStaging = { { "network": "naga-staging", "address_hash": "0x5E8db2E7af793f4095c4843C8cBD87C5D8604838", - "inserted_at": "2025-09-17T01:07:56Z", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -8025,8 +8063,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x280E5c534629FBdD4dC61c85695143B6ACc4790b", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0xE37847746012c756d5D91d37B311eeB8e59684e9", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -8779,6 +8817,78 @@ export const nagaStaging = { "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "getPkpNftAddress", @@ -9087,8 +9197,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x991d56EdC98a0DAeb93E91F70588598f79875701", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x92d2a4Acb70E498a486E0523AD42fF3F6d3D3642", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -9833,6 +9943,170 @@ export const nagaStaging = { "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerAddress", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "getPkpNftMetadataAddress", @@ -10351,8 +10625,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0xe51357Cc58E8a718423CBa09b87879Ff7B18d279", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0xe97fFbc4eDa5CdF70375D4b8f87e476D40b628EC", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -11366,8 +11640,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x5632B35374DD73205B5aeBBcA3ecB02B3dc8B5fe", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x1E382ef3957218423C6e1a992a4cE6294861cC93", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -12701,8 +12975,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x3346125bdaE8FDda08aaf14A67A7DdE465e8b7A6", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0xA5c9163C3E127b5F956CE3e1b1D7429988aF2248", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -12865,8 +13139,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0xab292EC22a0b596F115725607Ada3F28980eAB36", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x7a286929c167e6FA0298C05Dec2433F4723Eb86C", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [], @@ -13102,8 +13376,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x700DB831292541C640c5Dbb9AaE1697faE188513", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x13fC0864A37B38D3C2A7d5E9C08D5124B9Cec4bF", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -13738,8 +14012,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0x658F5ED32aE5EFBf79F7Ba36A9FA770FeA7662c8", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x23Be686cAFCe69C5Fb075E2be7a4505598E338E8", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -14794,8 +15068,8 @@ export const nagaStaging = { "contracts": [ { "network": "naga-staging", - "address_hash": "0xB76744dC73AFC416e8cDbB7023ca89C862B86F05", - "inserted_at": "2025-09-17T01:07:56Z", + "address_hash": "0x651d3282E1F083036Bb136dBbe7df17aCC39A330", + "inserted_at": "2025-11-04T01:39:03Z", "ABI": [ { "inputs": [ @@ -15193,11 +15467,6 @@ export const nagaStaging = { "name": "CallerNotOwner", "type": "error" }, - { - "inputs": [], - "name": "MustBeLessThan100", - "type": "error" - }, { "inputs": [], "name": "MustBeNonzero", diff --git a/packages/contracts/dist/prod/naga.cjs b/packages/contracts/dist/prod/naga.cjs new file mode 100644 index 000000000..a82ba563a --- /dev/null +++ b/packages/contracts/dist/prod/naga.cjs @@ -0,0 +1,16121 @@ +"use strict"; + +module.exports = { + "data": [ + { + "name": "Staking", + "contracts": [ + { + "network": "naga", + "address_hash": "0x8a861B3640c1ff058CCB109ba11CA3224d228159", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "RealmIdNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "getAllUnkickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getCurrentRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getShadowRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "isRecentValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInCurrentEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInCurrentOrNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "nodeAddressToStakerAddressAcrossRealms", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numRealms", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "validator_by_staker_address", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwnerOrDevopsAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "CannotModifyUnfrozen", + "type": "error" + }, + { + "inputs": [], + "name": "CannotMoveToLockedValidatorStateBeforeEpochEnds", + "type": "error" + }, + { + "inputs": [], + "name": "CannotStakeZero", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNewSharePrice", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSlashPercentage", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + } + ], + "name": "MinTimeLockNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochState", + "type": "error" + }, + { + "inputs": [], + "name": "NoEmptyStakingSlot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "StakeAmountNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + }, + { + "internalType": "address[]", + "name": "validatorsInNextEpoch", + "type": "address[]" + } + ], + "name": "ValidatorIsNotInNextEpoch", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "ClearOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "CountOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "DevopsAdminSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "EpochEndTimeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "EpochLengthSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "EpochTimeoutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newKickPenaltyPercent", + "type": "uint256" + } + ], + "name": "KickPenaltyPercentSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverContractAddress", + "type": "address" + } + ], + "name": "ResolverContractAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakerAddressClient", + "type": "address" + } + ], + "name": "StakeRecordCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Staked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "StateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorBanned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorKickedFromNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorRejoinedNextEpoch", + "type": "event" + }, + { + "inputs": [], + "name": "addRealm", + "outputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorStakerAddress", + "type": "address" + } + ], + "name": "adminKickValidatorInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "adminRejoinValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + } + ], + "name": "adminSetValidatorRegisterAttestedWalletDisabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsForCurrentEpoch", + "type": "address[]" + } + ], + "name": "adminSetValidatorsInCurrentEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsForNextEpoch", + "type": "address[]" + } + ], + "name": "adminSetValidatorsInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "source_realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "target_realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "target_validators", + "type": "address[]" + } + ], + "name": "adminSetupShadowSplicing", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "adminSlashValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "adminStakeForUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "adminUnfreezeForUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseRewardPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "emitClearOfflinePhaseData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "emitCountOfflinePhaseData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "increaseRewardPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "removeRealm", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setComplaintConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "keyTypes", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmax", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "k", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "enableStakeAutolock", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "profitMultiplier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "usdCostPerMonth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxEmissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStakeTimelock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minValidatorCountToClampMinimumThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThresholdToClampAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.GlobalConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newThreshold", + "type": "uint256" + } + ], + "name": "setDemeritRejoinThreshold", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "setDevopsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "setEpochEndTime", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "setEpochLength", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "setEpochState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "setEpochTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "timeoutMs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "memoryLimitMb", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCodeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxResponseLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxConsoleLogLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFetchCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxContractCallCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBroadcastAndCollectCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCallDepth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxRetries", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "asyncActionsEnabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.LitActionConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setLitActionConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newTimeout", + "type": "uint256" + } + ], + "name": "setPendingRejoinTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsToSet", + "type": "address[]" + } + ], + "name": "setPermittedValidators", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "name": "setPermittedValidatorsOn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setRealmConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newTotalSupply", + "type": "uint256" + } + ], + "name": "setTokenTotalSupplyStandIn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotContract", + "type": "error" + }, + { + "inputs": [], + "name": "CannotMigrateFromValidator", + "type": "error" + }, + { + "inputs": [], + "name": "CannotWithdrawFrozen", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentEpoch", + "type": "uint256" + } + ], + "name": "CheckpointAheadOfCurrentEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "InsufficientSelfStake", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidRatio", + "type": "error" + }, + { + "inputs": [], + "name": "NewTimeLockMustBeGreaterThanCurrent", + "type": "error" + }, + { + "inputs": [], + "name": "RewardsMustBeClaimed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "slahedAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "slashedRealmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "senderRealmId", + "type": "uint256" + } + ], + "name": "SlashingMustOccurInSameRealm", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumStake", + "type": "uint256" + } + ], + "name": "StakeMustBeGreaterThanMinimumStake", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + } + ], + "name": "StakeRecordNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "TimeLockNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "TooSoonToWithdraw", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } + ], + "name": "ValidatorNotRegistered", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "FixedCostRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "StakeRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "ValidatorCommissionClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "ValidatorRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "checkStakingAmounts", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimFixedCostRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimStakeRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimValidatorCommission", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getMaximumStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumSelfStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorCommission", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slope", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePriceAtLastUpdate", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "initial", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RewardEpoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpochView", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorCommission", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slope", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePriceAtLastUpdate", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "initial", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RewardEpoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "additionalAmount", + "type": "uint256" + } + ], + "name": "increaseStakeRecordAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "additionalTimeLock", + "type": "uint256" + } + ], + "name": "increaseStakeRecordTimelock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isInitial", + "type": "bool" + } + ], + "name": "initializeRewardEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorAddressToMigrateFrom", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddressToMigrateTo", + "type": "address" + } + ], + "name": "migrateStakeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "setValidatorCommissionRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "splitStakeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "unfreezeStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "exists", + "type": "bool" + }, + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "hashed", + "type": "bytes32" + } + ], + "name": "KeySetConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "KeySetConfigUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "deleteKeySet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "getKeySet", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "keySets", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "update", + "type": "tuple" + } + ], + "name": "setKeySet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "verifyKeySetCounts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ActiveValidatorsCannotLeave", + "type": "error" + }, + { + "inputs": [], + "name": "CannotKickBelowCurrentValidatorThreshold", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingAddress", + "type": "address" + } + ], + "name": "CannotRejoinBecauseBanned", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingAddress", + "type": "address" + } + ], + "name": "CannotRejoinUntilNextEpochBecauseKicked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + } + ], + "name": "CannotReuseCommsKeys", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "CannotVoteTwice", + "type": "error" + }, + { + "inputs": [], + "name": "CannotWithdrawZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "CouldNotMapNodeAddressToStakerAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidAttestedAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInActiveOrUnlockedOrPausedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInActiveOrUnlockedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochOrRestoreState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInReadyForNextEpochState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "MustBeValidatorInNextEpochToKick", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + } + ], + "name": "NotEnoughTimeElapsedForTimeoutSinceLastEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochEndTime", + "type": "uint256" + } + ], + "name": "NotEnoughTimeElapsedSinceLastEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "validatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + } + ], + "name": "NotEnoughValidatorsInNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentReadyValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextReadyValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCountToBeReady", + "type": "uint256" + } + ], + "name": "NotEnoughValidatorsReadyForNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receivedEpochNumber", + "type": "uint256" + } + ], + "name": "SignaledReadyForWrongEpochNumber", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "StakerAddressMismatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "yourBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "requestedWithdrawlAmount", + "type": "uint256" + } + ], + "name": "TryingToWithdrawMoreThanStaked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorAlreadyInNextValidatorSet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "existingRealmId", + "type": "uint256" + } + ], + "name": "ValidatorAlreadyInRealm", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorNotInNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "ValidatorNotPermitted", + "type": "error" + }, + { + "inputs": [], + "name": "ValidatorRegisterAttestedWalletDisabled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "valueName", + "type": "string" + } + ], + "name": "ValueMustBeNonzero", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "AdvancedEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "attestedPubKey", + "type": "tuple" + } + ], + "name": "AttestedWalletRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "ComplaintConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newTokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newKeyTypes", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinimumValidatorCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxConcurrentRequests", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPeerCheckingIntervalSecs", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignConcurrency", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "newRpcHealthcheckEnabled", + "type": "bool" + } + ], + "name": "ConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "ReadyForNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Recovered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToJoin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToLeave", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newDuration", + "type": "uint256" + } + ], + "name": "RewardsDurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newStakingTokenAddress", + "type": "address" + } + ], + "name": "StakingTokenSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "VotedToKickValidatorInNextEpoch", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "advanceEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "checkActiveOrUnlockedOrPausedState", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "exit", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "kickValidatorInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "lockValidatorsForNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "attestedPubKey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + } + ], + "name": "registerAttestedWallet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "requestToJoin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsForShadowSplicing", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "requestToLeave", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "requestToLeaveAsNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + } + ], + "name": "setIpPortNodeAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "signalReadyForNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "VersionRequirementsUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "checkVersion", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMaxVersion", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMaxVersionString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMinVersion", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMinVersionString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "setMaxVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "setMinVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "InvalidTimeLock", + "type": "error" + }, + { + "inputs": [], + "name": "NodeAddressNotFoundForStaker", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeWeight", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsInCurrentEpoch", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "actualEpochLength", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.RewardEpochGlobalStats", + "name": "globalStats", + "type": "tuple" + } + ], + "name": "calculateRewardsPerDay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateStakeWeight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + } + ], + "name": "complaintConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "countOfCurrentValidatorsReadyForNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "countOfNextValidatorsReadyForNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "currentValidatorCountForConsensus", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "epoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructs", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructsAndCounts", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllReserveValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + } + ], + "name": "getAttestedPubKey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + } + ], + "name": "getDelegatedStakersWithUnfreezingStakes", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } + ], + "name": "getDelegatedStakersWithUnfreezingStakesCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getKeyTypes", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getKickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getLastStakeRecord", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLitCirc", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLowestRewardEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "name": "getNodeAttestedPubKeyMappings", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "pubKey", + "type": "tuple" + } + ], + "internalType": "struct LibStakingStorage.PubKeyMapping[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getNodeDemerits", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "name": "getNodeStakerAddressMappings", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.AddressMapping[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getNonShadowValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getNonShadowValidatorsInCurrentEpochLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpochGlobalStats", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeWeight", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsInCurrentEpoch", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "actualEpochLength", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.RewardEpochGlobalStats", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getRewardEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getSelfStakeRecordCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getShadowValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecord", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecordCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecordsForUser", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getStakeWeightInEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "nodeCount", + "type": "uint256" + } + ], + "name": "getThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "stakeRecord", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getTimelockInEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenContractAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "stakeRecord", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getTokensStaked", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getTotalStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getTotalStakeByUser", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getUnfrozenStakeCountForUser", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getValidatorsDelegated", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsInCurrentEpoch", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsInNextEpoch", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "stakerAddresses", + "type": "address[]" + } + ], + "name": "getValidatorsStructs", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsStructsInCurrentEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsStructsInNextEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + }, + { + "internalType": "address", + "name": "validatorToBeKickedStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "voterStakerAddress", + "type": "address" + } + ], + "name": "getVotingStatusToKickValidator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "keyTypes", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmax", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "k", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "enableStakeAutolock", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "profitMultiplier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "usdCostPerMonth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxEmissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStakeTimelock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minValidatorCountToClampMinimumThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThresholdToClampAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.GlobalConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveShadowValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isActiveValidatorByNodeAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "isActiveValidatorByNodeAddressForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveValidatorForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "isReadyForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddresses", + "type": "address" + } + ], + "name": "isRecentValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "isValidatorBanned", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + } + ], + "name": "kickPenaltyPercentByReason", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "litActionsConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timeoutMs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "memoryLimitMb", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCodeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxResponseLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxConsoleLogLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFetchCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxContractCallCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBroadcastAndCollectCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCallDepth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxRetries", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "asyncActionsEnabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.LitActionConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxTimeLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minSelfStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minTimeLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "nextValidatorCountForConsensus", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "nodeAddressToStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + } + ], + "name": "operatorAddressToStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "permittedRealmsForValidator", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "permittedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "base", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "exponent", + "type": "uint256" + } + ], + "name": "pow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "readyForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "realmConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "shouldKickValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "stakerToValidatorsTheyStakedTo", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "state", + "outputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "stakerInCurrentValidatorSet", + "type": "bool" + } + ], + "name": "validatorSelfStakeWillExpire", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "validators", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "Multisender", + "contracts": [ + { + "network": "naga", + "address_hash": "0x12a165660141EBc78cFcb79D88E0aDBAf2e107F0", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + } + ], + "name": "sendEth", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + }, + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + } + ], + "name": "sendTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + }, + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountPerRecipient", + "type": "uint256" + } + ], + "name": "sendTokensExact", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + } + ], + "name": "withdrawTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "LITToken", + "contracts": [ + { + "network": "naga", + "address_hash": "0x0996A48f8cc3c7c52Caf10d34c804eF5C9E7748B", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cap", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fromDelegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "toDelegate", + "type": "address" + } + ], + "name": "DelegateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "previousBalance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newBalance", + "type": "uint256" + } + ], + "name": "DelegateVotesChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CLOCK_MODE", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint32", + "name": "pos", + "type": "uint32" + } + ], + "name": "checkpoints", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "fromBlock", + "type": "uint32" + }, + { + "internalType": "uint224", + "name": "votes", + "type": "uint224" + } + ], + "internalType": "struct ERC20Votes.Checkpoint", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clock", + "outputs": [ + { + "internalType": "uint48", + "name": "", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "delegateBySig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "delegates", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "numCheckpoints", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PubkeyRouter", + "contracts": [ + { + "network": "naga", + "address_hash": "0x5655D71832f6f2AFD72c3012a60144f5572897F1", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "KeySetNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "curveType", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "name": "RootKeyMiscount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "PubkeyRoutingDataSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct IPubkeyRouter.RootKey", + "name": "rootKey", + "type": "tuple" + } + ], + "name": "RootKeySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ToggleEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "adminResetRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "rootKeys", + "type": "tuple[]" + } + ], + "name": "adminSetRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "signedMessage", + "type": "bytes" + } + ], + "name": "checkNodeSignatures", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "deriveEthAddressFromPubkey", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "ethAddressToPkpId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "getDerivedPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "getRootKeys", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRoutingData", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "isRouted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "pubkeys", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "setRoutingData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "setRoutingDataAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "voteForRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPNFT", + "contracts": [ + { + "network": "naga", + "address_hash": "0x11eBfFeab32f6cb5775BeF83E09124B9322E4026", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "FreeMintSignerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "MintCostSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "PKPMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrew", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "name": "claimAndMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "exists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "freeMintSigner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNextDerivedKeyId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerAddress", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftMetadataAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpPermissionsAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRouterAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mintCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "mintGrantAndBurnNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "mintNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "prefixed", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "redeemedFreeMintIds", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "setFreeMintSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "setMintCost", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPHelper", + "contracts": [ + { + "network": "naga", + "address_hash": "0xAe666c3080AA5Dd935574099c18E1eD779FFB231", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_resolver", + "type": "address" + }, + { + "internalType": "enum ContractResolver.Env", + "name": "_env", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterialV2", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypesV2", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "contract ContractResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "env", + "outputs": [ + { + "internalType": "enum ContractResolver.Env", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainWalletRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPKPNftMetdataAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpPermissionsAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressesScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.MintNextAndAddAuthMethodsWithTypesParams", + "name": "params", + "type": "tuple" + } + ], + "name": "mintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "string[]", + "name": "nftMetadata", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddDomainWalletMetadata", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removePkpMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string[]", + "name": "nftMetadata", + "type": "string[]" + } + ], + "name": "setPkpMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPPermissions", + "contracts": [ + { + "network": "naga", + "address_hash": "0xEB1F9A8567bC01b8cfa9d6e7078bEf587D908342", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "RootHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod", + "name": "authMethod", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "addPermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypesToAdd", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIdsToAdd", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeysToAdd", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopesToAdd", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypesToRemove", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIdsToRemove", + "type": "bytes[]" + } + ], + "name": "batchAddRemoveAuthMethods", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getAuthMethodId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getPKPPubKeysByAuthMethod", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedActions", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maxScopeId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethodScopes", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethods", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRouterAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getTokenIdsForAuthMethod", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getUserPubkeyForAuthMethod", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "isPermittedAction", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "isPermittedAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "isPermittedAuthMethod", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "isPermittedAuthMethodScopePresent", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "removePermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "removePermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "removePermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "removePermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "setRootHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + } + ], + "name": "verifyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bool[]", + "name": "proofFlags", + "type": "bool[]" + }, + { + "internalType": "bytes32[]", + "name": "leaves", + "type": "bytes32[]" + } + ], + "name": "verifyStates", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPNFTMetadata", + "contracts": [ + { + "network": "naga", + "address_hash": "0x20DC21B64c59807A491f6739B2B9d39bb304Fb9d", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_resolver", + "type": "address" + }, + { + "internalType": "enum ContractResolver.Env", + "name": "_env", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "buffer", + "type": "bytes" + } + ], + "name": "bytesToHex", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "contract ContractResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "env", + "outputs": [ + { + "internalType": "enum ContractResolver.Env", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removeProfileForPkp", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removeUrlForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "imgUrl", + "type": "string" + } + ], + "name": "setProfileForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + } + ], + "name": "setUrlForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubKey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "Allowlist", + "contracts": [ + { + "network": "naga", + "address_hash": "0x094CF9F8BBfc633AB2Eb8CdbBE8552a172fAdD80", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "ItemAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "ItemNotAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "allowAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "allowedItems", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "isAllowed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_allowAll", + "type": "bool" + } + ], + "name": "setAllowAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "setAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "setNotAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PaymentDelegation", + "contracts": [ + { + "network": "naga", + "address_hash": "0x5EF658cB6ab3C3BfB75C8293B9a6C8ccb0b96C3c", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "restriction", + "type": "tuple" + } + ], + "name": "RestrictionSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "delegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "delegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPayers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "getPayersAndRestrictions", + "outputs": [ + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction[][]", + "name": "", + "type": "tuple[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getRestriction", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getUsers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "r", + "type": "tuple" + } + ], + "name": "setRestriction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "undelegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "undelegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "Ledger", + "contracts": [ + { + "network": "naga", + "address_hash": "0x9BD023448d2D3b2D73fe61E4d7859007F6dA372c", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "AmountMustBePositive", + "type": "error" + }, + { + "inputs": [], + "name": "ArrayLengthsMustMatch", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientWithdrawAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeNonzero", + "type": "error" + }, + { + "inputs": [], + "name": "NodeNotStakingNode", + "type": "error" + }, + { + "inputs": [], + "name": "PercentageMustBeLessThan100", + "type": "error" + }, + { + "inputs": [], + "name": "SessionAlreadyUsed", + "type": "error" + }, + { + "inputs": [], + "name": "ValueExceedsUint128MaxLimit", + "type": "error" + }, + { + "inputs": [], + "name": "WithdrawalDelayNotPassed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "batch_id", + "type": "uint256" + } + ], + "name": "BatchCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositForUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FoundationRewardsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "LitFoundationSplitPercentageSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "RewardWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdrawRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "UserCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "UserWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "WithdrawRequest", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "balance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "chargeUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + }, + { + "internalType": "int256[]", + "name": "amounts", + "type": "int256[]" + }, + { + "internalType": "uint64", + "name": "batchId", + "type": "uint64" + } + ], + "name": "chargeUsers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "depositForUser", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestRewardWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "litFoundationRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "litFoundationSplitPercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "requestRewardWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "requestWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "rewardBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "setLitFoundationSplitPercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "setRewardWithdrawDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "setUserWithdrawDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "stableBalance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "userWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawFoundationRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PriceFeed", + "contracts": [ + { + "network": "naga", + "address_hash": "0x88F5535Fa6dA5C225a3C06489fE4e3405b87608C", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeNonzero", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "BaseNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "MaxNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakingAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newPrices", + "type": "uint256[]" + } + ], + "name": "UsageSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "baseNetworkPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLitActionPriceConfigs", + "outputs": [ + { + "components": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.LitActionPriceConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNodeCapacityConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "pkpSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "encSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "litActionMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signSessionKeyMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "globalMaxCapacity", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeCapacityConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "getNodesForRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "validator", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "prices", + "type": "uint256[]" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeInfoAndPrices[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "maxNetworkPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "node", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "price", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodePriceData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + } + ], + "name": "prices", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodePriceData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setBaseNetworkPrices", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "new_price", + "type": "uint256" + } + ], + "name": "setLitActionPriceConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.LitActionPriceConfig[]", + "name": "configs", + "type": "tuple[]" + } + ], + "name": "setLitActionPriceConfigs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setMaxNetworkPrices", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "pkpSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "encSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "litActionMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signSessionKeyMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "globalMaxCapacity", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeCapacityConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setNodeCapacityConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setUsage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + } + ], + "name": "usagePercentToPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "usagePercentToPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + } + ], + "config": { + "chainId": "175200", + "rpcUrl": "https://lit-chain-rpc.litprotocol.com", + "chainName": "litMainnet", + "litNodeDomainName": "127.0.0.1", + "litNodePort": 7470, + "rocketPort": 7470 + } +}; \ No newline at end of file diff --git a/packages/contracts/dist/prod/naga.js b/packages/contracts/dist/prod/naga.js new file mode 100644 index 000000000..d40adcfcd --- /dev/null +++ b/packages/contracts/dist/prod/naga.js @@ -0,0 +1,16119 @@ +export const naga = { + "data": [ + { + "name": "Staking", + "contracts": [ + { + "network": "naga", + "address_hash": "0x8a861B3640c1ff058CCB109ba11CA3224d228159", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "RealmIdNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "getAllUnkickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getCurrentRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getShadowRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "isRecentValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInCurrentEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInCurrentOrNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "nodeAddressToStakerAddressAcrossRealms", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numRealms", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "validator_by_staker_address", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwnerOrDevopsAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "CannotModifyUnfrozen", + "type": "error" + }, + { + "inputs": [], + "name": "CannotMoveToLockedValidatorStateBeforeEpochEnds", + "type": "error" + }, + { + "inputs": [], + "name": "CannotStakeZero", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNewSharePrice", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSlashPercentage", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + } + ], + "name": "MinTimeLockNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochState", + "type": "error" + }, + { + "inputs": [], + "name": "NoEmptyStakingSlot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "StakeAmountNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + }, + { + "internalType": "address[]", + "name": "validatorsInNextEpoch", + "type": "address[]" + } + ], + "name": "ValidatorIsNotInNextEpoch", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "ClearOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "CountOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "DevopsAdminSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "EpochEndTimeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "EpochLengthSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "EpochTimeoutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newKickPenaltyPercent", + "type": "uint256" + } + ], + "name": "KickPenaltyPercentSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverContractAddress", + "type": "address" + } + ], + "name": "ResolverContractAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakerAddressClient", + "type": "address" + } + ], + "name": "StakeRecordCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Staked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "StateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorBanned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorKickedFromNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorRejoinedNextEpoch", + "type": "event" + }, + { + "inputs": [], + "name": "addRealm", + "outputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorStakerAddress", + "type": "address" + } + ], + "name": "adminKickValidatorInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "adminRejoinValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + } + ], + "name": "adminSetValidatorRegisterAttestedWalletDisabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsForCurrentEpoch", + "type": "address[]" + } + ], + "name": "adminSetValidatorsInCurrentEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsForNextEpoch", + "type": "address[]" + } + ], + "name": "adminSetValidatorsInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "source_realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "target_realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "target_validators", + "type": "address[]" + } + ], + "name": "adminSetupShadowSplicing", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "adminSlashValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "adminStakeForUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "adminUnfreezeForUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseRewardPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "emitClearOfflinePhaseData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "emitCountOfflinePhaseData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "increaseRewardPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "removeRealm", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setComplaintConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "keyTypes", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmax", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "k", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "enableStakeAutolock", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "profitMultiplier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "usdCostPerMonth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxEmissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStakeTimelock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minValidatorCountToClampMinimumThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThresholdToClampAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.GlobalConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newThreshold", + "type": "uint256" + } + ], + "name": "setDemeritRejoinThreshold", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "setDevopsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "setEpochEndTime", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "setEpochLength", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "setEpochState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "setEpochTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "timeoutMs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "memoryLimitMb", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCodeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxResponseLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxConsoleLogLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFetchCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxContractCallCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBroadcastAndCollectCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCallDepth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxRetries", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "asyncActionsEnabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.LitActionConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setLitActionConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newTimeout", + "type": "uint256" + } + ], + "name": "setPendingRejoinTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsToSet", + "type": "address[]" + } + ], + "name": "setPermittedValidators", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "name": "setPermittedValidatorsOn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setRealmConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newTotalSupply", + "type": "uint256" + } + ], + "name": "setTokenTotalSupplyStandIn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotContract", + "type": "error" + }, + { + "inputs": [], + "name": "CannotMigrateFromValidator", + "type": "error" + }, + { + "inputs": [], + "name": "CannotWithdrawFrozen", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentEpoch", + "type": "uint256" + } + ], + "name": "CheckpointAheadOfCurrentEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "InsufficientSelfStake", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidRatio", + "type": "error" + }, + { + "inputs": [], + "name": "NewTimeLockMustBeGreaterThanCurrent", + "type": "error" + }, + { + "inputs": [], + "name": "RewardsMustBeClaimed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "slahedAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "slashedRealmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "senderRealmId", + "type": "uint256" + } + ], + "name": "SlashingMustOccurInSameRealm", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumStake", + "type": "uint256" + } + ], + "name": "StakeMustBeGreaterThanMinimumStake", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + } + ], + "name": "StakeRecordNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "TimeLockNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "TooSoonToWithdraw", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } + ], + "name": "ValidatorNotRegistered", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "FixedCostRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "StakeRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "ValidatorCommissionClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "ValidatorRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "checkStakingAmounts", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimFixedCostRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimStakeRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimValidatorCommission", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getMaximumStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumSelfStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorCommission", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slope", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePriceAtLastUpdate", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "initial", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RewardEpoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpochView", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorCommission", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slope", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePriceAtLastUpdate", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "initial", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RewardEpoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "additionalAmount", + "type": "uint256" + } + ], + "name": "increaseStakeRecordAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "additionalTimeLock", + "type": "uint256" + } + ], + "name": "increaseStakeRecordTimelock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isInitial", + "type": "bool" + } + ], + "name": "initializeRewardEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorAddressToMigrateFrom", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddressToMigrateTo", + "type": "address" + } + ], + "name": "migrateStakeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "setValidatorCommissionRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "splitStakeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "unfreezeStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "exists", + "type": "bool" + }, + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "hashed", + "type": "bytes32" + } + ], + "name": "KeySetConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "KeySetConfigUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "deleteKeySet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "getKeySet", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "keySets", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "update", + "type": "tuple" + } + ], + "name": "setKeySet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "verifyKeySetCounts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ActiveValidatorsCannotLeave", + "type": "error" + }, + { + "inputs": [], + "name": "CannotKickBelowCurrentValidatorThreshold", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingAddress", + "type": "address" + } + ], + "name": "CannotRejoinBecauseBanned", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingAddress", + "type": "address" + } + ], + "name": "CannotRejoinUntilNextEpochBecauseKicked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + } + ], + "name": "CannotReuseCommsKeys", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "CannotVoteTwice", + "type": "error" + }, + { + "inputs": [], + "name": "CannotWithdrawZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "CouldNotMapNodeAddressToStakerAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidAttestedAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInActiveOrUnlockedOrPausedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInActiveOrUnlockedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochOrRestoreState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInReadyForNextEpochState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "MustBeValidatorInNextEpochToKick", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + } + ], + "name": "NotEnoughTimeElapsedForTimeoutSinceLastEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochEndTime", + "type": "uint256" + } + ], + "name": "NotEnoughTimeElapsedSinceLastEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "validatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + } + ], + "name": "NotEnoughValidatorsInNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentReadyValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextReadyValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCountToBeReady", + "type": "uint256" + } + ], + "name": "NotEnoughValidatorsReadyForNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receivedEpochNumber", + "type": "uint256" + } + ], + "name": "SignaledReadyForWrongEpochNumber", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "StakerAddressMismatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "yourBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "requestedWithdrawlAmount", + "type": "uint256" + } + ], + "name": "TryingToWithdrawMoreThanStaked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorAlreadyInNextValidatorSet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "existingRealmId", + "type": "uint256" + } + ], + "name": "ValidatorAlreadyInRealm", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorNotInNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "ValidatorNotPermitted", + "type": "error" + }, + { + "inputs": [], + "name": "ValidatorRegisterAttestedWalletDisabled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "valueName", + "type": "string" + } + ], + "name": "ValueMustBeNonzero", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "AdvancedEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "attestedPubKey", + "type": "tuple" + } + ], + "name": "AttestedWalletRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "ComplaintConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newTokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newKeyTypes", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinimumValidatorCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxConcurrentRequests", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPeerCheckingIntervalSecs", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignConcurrency", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "newRpcHealthcheckEnabled", + "type": "bool" + } + ], + "name": "ConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "ReadyForNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Recovered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToJoin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToLeave", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newDuration", + "type": "uint256" + } + ], + "name": "RewardsDurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newStakingTokenAddress", + "type": "address" + } + ], + "name": "StakingTokenSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "VotedToKickValidatorInNextEpoch", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "advanceEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "checkActiveOrUnlockedOrPausedState", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "exit", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "kickValidatorInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "lockValidatorsForNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "attestedPubKey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + } + ], + "name": "registerAttestedWallet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "requestToJoin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsForShadowSplicing", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "requestToLeave", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "requestToLeaveAsNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + } + ], + "name": "setIpPortNodeAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "signalReadyForNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "VersionRequirementsUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "checkVersion", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMaxVersion", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMaxVersionString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMinVersion", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMinVersionString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "setMaxVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "setMinVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "InvalidTimeLock", + "type": "error" + }, + { + "inputs": [], + "name": "NodeAddressNotFoundForStaker", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeWeight", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsInCurrentEpoch", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "actualEpochLength", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.RewardEpochGlobalStats", + "name": "globalStats", + "type": "tuple" + } + ], + "name": "calculateRewardsPerDay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateStakeWeight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + } + ], + "name": "complaintConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "countOfCurrentValidatorsReadyForNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "countOfNextValidatorsReadyForNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "currentValidatorCountForConsensus", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "epoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructs", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructsAndCounts", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllReserveValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + } + ], + "name": "getAttestedPubKey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + } + ], + "name": "getDelegatedStakersWithUnfreezingStakes", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } + ], + "name": "getDelegatedStakersWithUnfreezingStakesCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getKeyTypes", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getKickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getLastStakeRecord", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLitCirc", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLowestRewardEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "name": "getNodeAttestedPubKeyMappings", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "pubKey", + "type": "tuple" + } + ], + "internalType": "struct LibStakingStorage.PubKeyMapping[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getNodeDemerits", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "name": "getNodeStakerAddressMappings", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.AddressMapping[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getNonShadowValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getNonShadowValidatorsInCurrentEpochLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpochGlobalStats", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeWeight", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsInCurrentEpoch", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "actualEpochLength", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.RewardEpochGlobalStats", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getRewardEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getSelfStakeRecordCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getShadowValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecord", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecordCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecordsForUser", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getStakeWeightInEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "nodeCount", + "type": "uint256" + } + ], + "name": "getThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "stakeRecord", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getTimelockInEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenContractAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "stakeRecord", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getTokensStaked", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getTotalStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getTotalStakeByUser", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getUnfrozenStakeCountForUser", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getValidatorsDelegated", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsInCurrentEpoch", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsInNextEpoch", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "stakerAddresses", + "type": "address[]" + } + ], + "name": "getValidatorsStructs", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsStructsInCurrentEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsStructsInNextEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + }, + { + "internalType": "address", + "name": "validatorToBeKickedStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "voterStakerAddress", + "type": "address" + } + ], + "name": "getVotingStatusToKickValidator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "keyTypes", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmax", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "k", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "enableStakeAutolock", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "profitMultiplier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "usdCostPerMonth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxEmissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStakeTimelock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minValidatorCountToClampMinimumThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThresholdToClampAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.GlobalConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveShadowValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isActiveValidatorByNodeAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "isActiveValidatorByNodeAddressForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveValidatorForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "isReadyForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddresses", + "type": "address" + } + ], + "name": "isRecentValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "isValidatorBanned", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + } + ], + "name": "kickPenaltyPercentByReason", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "litActionsConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timeoutMs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "memoryLimitMb", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCodeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxResponseLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxConsoleLogLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFetchCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxContractCallCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBroadcastAndCollectCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCallDepth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxRetries", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "asyncActionsEnabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.LitActionConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxTimeLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minSelfStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minTimeLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "nextValidatorCountForConsensus", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "nodeAddressToStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + } + ], + "name": "operatorAddressToStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "permittedRealmsForValidator", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "permittedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "base", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "exponent", + "type": "uint256" + } + ], + "name": "pow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "readyForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "realmConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "shouldKickValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "stakerToValidatorsTheyStakedTo", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "state", + "outputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "stakerInCurrentValidatorSet", + "type": "bool" + } + ], + "name": "validatorSelfStakeWillExpire", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "validators", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "Multisender", + "contracts": [ + { + "network": "naga", + "address_hash": "0x12a165660141EBc78cFcb79D88E0aDBAf2e107F0", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + } + ], + "name": "sendEth", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + }, + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + } + ], + "name": "sendTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + }, + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountPerRecipient", + "type": "uint256" + } + ], + "name": "sendTokensExact", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + } + ], + "name": "withdrawTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "LITToken", + "contracts": [ + { + "network": "naga", + "address_hash": "0x0996A48f8cc3c7c52Caf10d34c804eF5C9E7748B", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cap", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fromDelegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "toDelegate", + "type": "address" + } + ], + "name": "DelegateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "previousBalance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newBalance", + "type": "uint256" + } + ], + "name": "DelegateVotesChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CLOCK_MODE", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint32", + "name": "pos", + "type": "uint32" + } + ], + "name": "checkpoints", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "fromBlock", + "type": "uint32" + }, + { + "internalType": "uint224", + "name": "votes", + "type": "uint224" + } + ], + "internalType": "struct ERC20Votes.Checkpoint", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clock", + "outputs": [ + { + "internalType": "uint48", + "name": "", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "delegateBySig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "delegates", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "numCheckpoints", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PubkeyRouter", + "contracts": [ + { + "network": "naga", + "address_hash": "0x5655D71832f6f2AFD72c3012a60144f5572897F1", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "KeySetNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "curveType", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "name": "RootKeyMiscount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "PubkeyRoutingDataSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct IPubkeyRouter.RootKey", + "name": "rootKey", + "type": "tuple" + } + ], + "name": "RootKeySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ToggleEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "adminResetRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "rootKeys", + "type": "tuple[]" + } + ], + "name": "adminSetRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "signedMessage", + "type": "bytes" + } + ], + "name": "checkNodeSignatures", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "deriveEthAddressFromPubkey", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "ethAddressToPkpId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "getDerivedPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "getRootKeys", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRoutingData", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "isRouted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "pubkeys", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "setRoutingData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "setRoutingDataAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "voteForRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPNFT", + "contracts": [ + { + "network": "naga", + "address_hash": "0x11eBfFeab32f6cb5775BeF83E09124B9322E4026", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "FreeMintSignerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "MintCostSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "PKPMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrew", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "name": "claimAndMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "exists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "freeMintSigner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNextDerivedKeyId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerAddress", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftMetadataAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpPermissionsAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRouterAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mintCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "mintGrantAndBurnNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "mintNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "prefixed", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "redeemedFreeMintIds", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "setFreeMintSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "setMintCost", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPHelper", + "contracts": [ + { + "network": "naga", + "address_hash": "0xAe666c3080AA5Dd935574099c18E1eD779FFB231", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_resolver", + "type": "address" + }, + { + "internalType": "enum ContractResolver.Env", + "name": "_env", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterialV2", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypesV2", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "contract ContractResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "env", + "outputs": [ + { + "internalType": "enum ContractResolver.Env", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainWalletRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPKPNftMetdataAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpPermissionsAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressesScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.MintNextAndAddAuthMethodsWithTypesParams", + "name": "params", + "type": "tuple" + } + ], + "name": "mintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "string[]", + "name": "nftMetadata", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddDomainWalletMetadata", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removePkpMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string[]", + "name": "nftMetadata", + "type": "string[]" + } + ], + "name": "setPkpMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPPermissions", + "contracts": [ + { + "network": "naga", + "address_hash": "0xEB1F9A8567bC01b8cfa9d6e7078bEf587D908342", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "RootHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod", + "name": "authMethod", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "addPermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypesToAdd", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIdsToAdd", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeysToAdd", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopesToAdd", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypesToRemove", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIdsToRemove", + "type": "bytes[]" + } + ], + "name": "batchAddRemoveAuthMethods", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getAuthMethodId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getPKPPubKeysByAuthMethod", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedActions", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maxScopeId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethodScopes", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethods", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRouterAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getTokenIdsForAuthMethod", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getUserPubkeyForAuthMethod", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "isPermittedAction", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "isPermittedAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "isPermittedAuthMethod", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "isPermittedAuthMethodScopePresent", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "removePermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "removePermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "removePermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "removePermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "setRootHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + } + ], + "name": "verifyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bool[]", + "name": "proofFlags", + "type": "bool[]" + }, + { + "internalType": "bytes32[]", + "name": "leaves", + "type": "bytes32[]" + } + ], + "name": "verifyStates", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPNFTMetadata", + "contracts": [ + { + "network": "naga", + "address_hash": "0x20DC21B64c59807A491f6739B2B9d39bb304Fb9d", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_resolver", + "type": "address" + }, + { + "internalType": "enum ContractResolver.Env", + "name": "_env", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "buffer", + "type": "bytes" + } + ], + "name": "bytesToHex", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "contract ContractResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "env", + "outputs": [ + { + "internalType": "enum ContractResolver.Env", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removeProfileForPkp", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removeUrlForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "imgUrl", + "type": "string" + } + ], + "name": "setProfileForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + } + ], + "name": "setUrlForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubKey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "Allowlist", + "contracts": [ + { + "network": "naga", + "address_hash": "0x094CF9F8BBfc633AB2Eb8CdbBE8552a172fAdD80", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "ItemAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "ItemNotAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "allowAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "allowedItems", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "isAllowed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_allowAll", + "type": "bool" + } + ], + "name": "setAllowAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "setAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "setNotAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PaymentDelegation", + "contracts": [ + { + "network": "naga", + "address_hash": "0x5EF658cB6ab3C3BfB75C8293B9a6C8ccb0b96C3c", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "restriction", + "type": "tuple" + } + ], + "name": "RestrictionSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "delegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "delegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPayers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "getPayersAndRestrictions", + "outputs": [ + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction[][]", + "name": "", + "type": "tuple[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getRestriction", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getUsers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "r", + "type": "tuple" + } + ], + "name": "setRestriction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "undelegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "undelegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "Ledger", + "contracts": [ + { + "network": "naga", + "address_hash": "0x9BD023448d2D3b2D73fe61E4d7859007F6dA372c", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "AmountMustBePositive", + "type": "error" + }, + { + "inputs": [], + "name": "ArrayLengthsMustMatch", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientWithdrawAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeNonzero", + "type": "error" + }, + { + "inputs": [], + "name": "NodeNotStakingNode", + "type": "error" + }, + { + "inputs": [], + "name": "PercentageMustBeLessThan100", + "type": "error" + }, + { + "inputs": [], + "name": "SessionAlreadyUsed", + "type": "error" + }, + { + "inputs": [], + "name": "ValueExceedsUint128MaxLimit", + "type": "error" + }, + { + "inputs": [], + "name": "WithdrawalDelayNotPassed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "batch_id", + "type": "uint256" + } + ], + "name": "BatchCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositForUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FoundationRewardsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "LitFoundationSplitPercentageSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "RewardWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdrawRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "UserCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "UserWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "WithdrawRequest", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "balance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "chargeUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + }, + { + "internalType": "int256[]", + "name": "amounts", + "type": "int256[]" + }, + { + "internalType": "uint64", + "name": "batchId", + "type": "uint64" + } + ], + "name": "chargeUsers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "depositForUser", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestRewardWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "litFoundationRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "litFoundationSplitPercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "requestRewardWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "requestWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "rewardBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "setLitFoundationSplitPercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "setRewardWithdrawDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "setUserWithdrawDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "stableBalance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "userWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawFoundationRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PriceFeed", + "contracts": [ + { + "network": "naga", + "address_hash": "0x88F5535Fa6dA5C225a3C06489fE4e3405b87608C", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeNonzero", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "BaseNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "MaxNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakingAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newPrices", + "type": "uint256[]" + } + ], + "name": "UsageSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "baseNetworkPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLitActionPriceConfigs", + "outputs": [ + { + "components": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.LitActionPriceConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNodeCapacityConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "pkpSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "encSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "litActionMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signSessionKeyMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "globalMaxCapacity", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeCapacityConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "getNodesForRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "validator", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "prices", + "type": "uint256[]" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeInfoAndPrices[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "maxNetworkPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "node", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "price", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodePriceData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + } + ], + "name": "prices", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodePriceData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setBaseNetworkPrices", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "new_price", + "type": "uint256" + } + ], + "name": "setLitActionPriceConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.LitActionPriceConfig[]", + "name": "configs", + "type": "tuple[]" + } + ], + "name": "setLitActionPriceConfigs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setMaxNetworkPrices", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "pkpSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "encSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "litActionMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signSessionKeyMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "globalMaxCapacity", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeCapacityConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setNodeCapacityConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setUsage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + } + ], + "name": "usagePercentToPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "usagePercentToPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + } + ], + "config": { + "chainId": "175200", + "rpcUrl": "https://lit-chain-rpc.litprotocol.com", + "chainName": "litMainnet", + "litNodeDomainName": "127.0.0.1", + "litNodePort": 7470, + "rocketPort": 7470 + } +}; \ No newline at end of file diff --git a/packages/contracts/dist/prod/naga.json b/packages/contracts/dist/prod/naga.json new file mode 100644 index 000000000..e12d1a204 --- /dev/null +++ b/packages/contracts/dist/prod/naga.json @@ -0,0 +1,16119 @@ +{ + "data": [ + { + "name": "Staking", + "contracts": [ + { + "network": "naga", + "address_hash": "0x8a861B3640c1ff058CCB109ba11CA3224d228159", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "RealmIdNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "getAllUnkickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getCurrentRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getShadowRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "isRecentValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInCurrentEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInCurrentOrNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "nodeAddressToStakerAddressAcrossRealms", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numRealms", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "validator_by_staker_address", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwnerOrDevopsAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "CannotModifyUnfrozen", + "type": "error" + }, + { + "inputs": [], + "name": "CannotMoveToLockedValidatorStateBeforeEpochEnds", + "type": "error" + }, + { + "inputs": [], + "name": "CannotStakeZero", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNewSharePrice", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSlashPercentage", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + } + ], + "name": "MinTimeLockNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochState", + "type": "error" + }, + { + "inputs": [], + "name": "NoEmptyStakingSlot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "StakeAmountNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + }, + { + "internalType": "address[]", + "name": "validatorsInNextEpoch", + "type": "address[]" + } + ], + "name": "ValidatorIsNotInNextEpoch", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "ClearOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "CountOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "DevopsAdminSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "EpochEndTimeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "EpochLengthSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "EpochTimeoutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newKickPenaltyPercent", + "type": "uint256" + } + ], + "name": "KickPenaltyPercentSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverContractAddress", + "type": "address" + } + ], + "name": "ResolverContractAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakerAddressClient", + "type": "address" + } + ], + "name": "StakeRecordCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Staked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "StateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorBanned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorKickedFromNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorRejoinedNextEpoch", + "type": "event" + }, + { + "inputs": [], + "name": "addRealm", + "outputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorStakerAddress", + "type": "address" + } + ], + "name": "adminKickValidatorInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "adminRejoinValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + } + ], + "name": "adminSetValidatorRegisterAttestedWalletDisabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsForCurrentEpoch", + "type": "address[]" + } + ], + "name": "adminSetValidatorsInCurrentEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsForNextEpoch", + "type": "address[]" + } + ], + "name": "adminSetValidatorsInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "source_realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "target_realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "target_validators", + "type": "address[]" + } + ], + "name": "adminSetupShadowSplicing", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "adminSlashValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "adminStakeForUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "adminUnfreezeForUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseRewardPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "emitClearOfflinePhaseData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "emitCountOfflinePhaseData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "increaseRewardPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "removeRealm", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setComplaintConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "keyTypes", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmax", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "k", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "enableStakeAutolock", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "profitMultiplier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "usdCostPerMonth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxEmissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStakeTimelock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minValidatorCountToClampMinimumThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThresholdToClampAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.GlobalConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newThreshold", + "type": "uint256" + } + ], + "name": "setDemeritRejoinThreshold", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "setDevopsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "setEpochEndTime", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "setEpochLength", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "setEpochState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "setEpochTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "timeoutMs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "memoryLimitMb", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCodeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxResponseLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxConsoleLogLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFetchCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxContractCallCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBroadcastAndCollectCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCallDepth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxRetries", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "asyncActionsEnabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.LitActionConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setLitActionConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newTimeout", + "type": "uint256" + } + ], + "name": "setPendingRejoinTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsToSet", + "type": "address[]" + } + ], + "name": "setPermittedValidators", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "name": "setPermittedValidatorsOn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setRealmConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newTotalSupply", + "type": "uint256" + } + ], + "name": "setTokenTotalSupplyStandIn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotContract", + "type": "error" + }, + { + "inputs": [], + "name": "CannotMigrateFromValidator", + "type": "error" + }, + { + "inputs": [], + "name": "CannotWithdrawFrozen", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentEpoch", + "type": "uint256" + } + ], + "name": "CheckpointAheadOfCurrentEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "InsufficientSelfStake", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidRatio", + "type": "error" + }, + { + "inputs": [], + "name": "NewTimeLockMustBeGreaterThanCurrent", + "type": "error" + }, + { + "inputs": [], + "name": "RewardsMustBeClaimed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "slahedAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "slashedRealmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "senderRealmId", + "type": "uint256" + } + ], + "name": "SlashingMustOccurInSameRealm", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumStake", + "type": "uint256" + } + ], + "name": "StakeMustBeGreaterThanMinimumStake", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + } + ], + "name": "StakeRecordNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "TimeLockNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "TooSoonToWithdraw", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } + ], + "name": "ValidatorNotRegistered", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "FixedCostRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "StakeRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "ValidatorCommissionClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "ValidatorRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "checkStakingAmounts", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimFixedCostRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimStakeRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimValidatorCommission", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getMaximumStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumSelfStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorCommission", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slope", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePriceAtLastUpdate", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "initial", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RewardEpoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpochView", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorCommission", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slope", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePriceAtLastUpdate", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "initial", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RewardEpoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "additionalAmount", + "type": "uint256" + } + ], + "name": "increaseStakeRecordAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "additionalTimeLock", + "type": "uint256" + } + ], + "name": "increaseStakeRecordTimelock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isInitial", + "type": "bool" + } + ], + "name": "initializeRewardEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorAddressToMigrateFrom", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddressToMigrateTo", + "type": "address" + } + ], + "name": "migrateStakeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "setValidatorCommissionRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "splitStakeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "unfreezeStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "exists", + "type": "bool" + }, + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "hashed", + "type": "bytes32" + } + ], + "name": "KeySetConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "KeySetConfigUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "deleteKeySet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "getKeySet", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "keySets", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "update", + "type": "tuple" + } + ], + "name": "setKeySet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "verifyKeySetCounts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ActiveValidatorsCannotLeave", + "type": "error" + }, + { + "inputs": [], + "name": "CannotKickBelowCurrentValidatorThreshold", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingAddress", + "type": "address" + } + ], + "name": "CannotRejoinBecauseBanned", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingAddress", + "type": "address" + } + ], + "name": "CannotRejoinUntilNextEpochBecauseKicked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + } + ], + "name": "CannotReuseCommsKeys", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "CannotVoteTwice", + "type": "error" + }, + { + "inputs": [], + "name": "CannotWithdrawZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "CouldNotMapNodeAddressToStakerAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidAttestedAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInActiveOrUnlockedOrPausedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInActiveOrUnlockedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochOrRestoreState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInReadyForNextEpochState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "MustBeValidatorInNextEpochToKick", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + } + ], + "name": "NotEnoughTimeElapsedForTimeoutSinceLastEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochEndTime", + "type": "uint256" + } + ], + "name": "NotEnoughTimeElapsedSinceLastEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "validatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + } + ], + "name": "NotEnoughValidatorsInNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentReadyValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextReadyValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCountToBeReady", + "type": "uint256" + } + ], + "name": "NotEnoughValidatorsReadyForNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receivedEpochNumber", + "type": "uint256" + } + ], + "name": "SignaledReadyForWrongEpochNumber", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "StakerAddressMismatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "yourBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "requestedWithdrawlAmount", + "type": "uint256" + } + ], + "name": "TryingToWithdrawMoreThanStaked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorAlreadyInNextValidatorSet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "existingRealmId", + "type": "uint256" + } + ], + "name": "ValidatorAlreadyInRealm", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorNotInNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "ValidatorNotPermitted", + "type": "error" + }, + { + "inputs": [], + "name": "ValidatorRegisterAttestedWalletDisabled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "valueName", + "type": "string" + } + ], + "name": "ValueMustBeNonzero", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "AdvancedEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "attestedPubKey", + "type": "tuple" + } + ], + "name": "AttestedWalletRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "ComplaintConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newTokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newKeyTypes", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinimumValidatorCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxConcurrentRequests", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPeerCheckingIntervalSecs", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignConcurrency", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "newRpcHealthcheckEnabled", + "type": "bool" + } + ], + "name": "ConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "ReadyForNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Recovered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToJoin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToLeave", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newDuration", + "type": "uint256" + } + ], + "name": "RewardsDurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newStakingTokenAddress", + "type": "address" + } + ], + "name": "StakingTokenSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "VotedToKickValidatorInNextEpoch", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "advanceEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "checkActiveOrUnlockedOrPausedState", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "exit", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "kickValidatorInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "lockValidatorsForNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "attestedPubKey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + } + ], + "name": "registerAttestedWallet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "requestToJoin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsForShadowSplicing", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "requestToLeave", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "requestToLeaveAsNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + } + ], + "name": "setIpPortNodeAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "signalReadyForNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "VersionRequirementsUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "checkVersion", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMaxVersion", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMaxVersionString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMinVersion", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMinVersionString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "setMaxVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "setMinVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "InvalidTimeLock", + "type": "error" + }, + { + "inputs": [], + "name": "NodeAddressNotFoundForStaker", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeWeight", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsInCurrentEpoch", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "actualEpochLength", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.RewardEpochGlobalStats", + "name": "globalStats", + "type": "tuple" + } + ], + "name": "calculateRewardsPerDay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateStakeWeight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + } + ], + "name": "complaintConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "countOfCurrentValidatorsReadyForNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "countOfNextValidatorsReadyForNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "currentValidatorCountForConsensus", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "epoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructs", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructsAndCounts", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllReserveValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + } + ], + "name": "getAttestedPubKey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + } + ], + "name": "getDelegatedStakersWithUnfreezingStakes", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } + ], + "name": "getDelegatedStakersWithUnfreezingStakesCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getKeyTypes", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getKickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getLastStakeRecord", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLitCirc", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLowestRewardEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "name": "getNodeAttestedPubKeyMappings", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "pubKey", + "type": "tuple" + } + ], + "internalType": "struct LibStakingStorage.PubKeyMapping[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getNodeDemerits", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "name": "getNodeStakerAddressMappings", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.AddressMapping[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getNonShadowValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getNonShadowValidatorsInCurrentEpochLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpochGlobalStats", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeWeight", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsInCurrentEpoch", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "actualEpochLength", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.RewardEpochGlobalStats", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getRewardEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getSelfStakeRecordCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getShadowValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecord", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecordCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecordsForUser", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getStakeWeightInEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "nodeCount", + "type": "uint256" + } + ], + "name": "getThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "stakeRecord", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getTimelockInEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenContractAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "stakeRecord", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getTokensStaked", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getTotalStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getTotalStakeByUser", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getUnfrozenStakeCountForUser", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getValidatorsDelegated", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsInCurrentEpoch", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsInNextEpoch", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "stakerAddresses", + "type": "address[]" + } + ], + "name": "getValidatorsStructs", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsStructsInCurrentEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsStructsInNextEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + }, + { + "internalType": "address", + "name": "validatorToBeKickedStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "voterStakerAddress", + "type": "address" + } + ], + "name": "getVotingStatusToKickValidator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "keyTypes", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmax", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "k", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "enableStakeAutolock", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "profitMultiplier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "usdCostPerMonth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxEmissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStakeTimelock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minValidatorCountToClampMinimumThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThresholdToClampAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.GlobalConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveShadowValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isActiveValidatorByNodeAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "isActiveValidatorByNodeAddressForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveValidatorForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "isReadyForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddresses", + "type": "address" + } + ], + "name": "isRecentValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "isValidatorBanned", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + } + ], + "name": "kickPenaltyPercentByReason", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "litActionsConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timeoutMs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "memoryLimitMb", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCodeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxResponseLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxConsoleLogLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFetchCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxContractCallCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBroadcastAndCollectCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCallDepth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxRetries", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "asyncActionsEnabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.LitActionConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxTimeLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minSelfStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minTimeLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "nextValidatorCountForConsensus", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "nodeAddressToStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + } + ], + "name": "operatorAddressToStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "permittedRealmsForValidator", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "permittedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "base", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "exponent", + "type": "uint256" + } + ], + "name": "pow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "readyForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "realmConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "shouldKickValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "stakerToValidatorsTheyStakedTo", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "state", + "outputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "stakerInCurrentValidatorSet", + "type": "bool" + } + ], + "name": "validatorSelfStakeWillExpire", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "validators", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "Multisender", + "contracts": [ + { + "network": "naga", + "address_hash": "0x12a165660141EBc78cFcb79D88E0aDBAf2e107F0", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + } + ], + "name": "sendEth", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + }, + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + } + ], + "name": "sendTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + }, + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountPerRecipient", + "type": "uint256" + } + ], + "name": "sendTokensExact", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + } + ], + "name": "withdrawTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "LITToken", + "contracts": [ + { + "network": "naga", + "address_hash": "0x0996A48f8cc3c7c52Caf10d34c804eF5C9E7748B", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cap", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fromDelegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "toDelegate", + "type": "address" + } + ], + "name": "DelegateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "previousBalance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newBalance", + "type": "uint256" + } + ], + "name": "DelegateVotesChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CLOCK_MODE", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint32", + "name": "pos", + "type": "uint32" + } + ], + "name": "checkpoints", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "fromBlock", + "type": "uint32" + }, + { + "internalType": "uint224", + "name": "votes", + "type": "uint224" + } + ], + "internalType": "struct ERC20Votes.Checkpoint", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clock", + "outputs": [ + { + "internalType": "uint48", + "name": "", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "delegateBySig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "delegates", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "numCheckpoints", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PubkeyRouter", + "contracts": [ + { + "network": "naga", + "address_hash": "0x5655D71832f6f2AFD72c3012a60144f5572897F1", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "KeySetNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "curveType", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "name": "RootKeyMiscount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "PubkeyRoutingDataSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct IPubkeyRouter.RootKey", + "name": "rootKey", + "type": "tuple" + } + ], + "name": "RootKeySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ToggleEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "adminResetRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "rootKeys", + "type": "tuple[]" + } + ], + "name": "adminSetRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "signedMessage", + "type": "bytes" + } + ], + "name": "checkNodeSignatures", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "deriveEthAddressFromPubkey", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "ethAddressToPkpId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "getDerivedPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "getRootKeys", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRoutingData", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "isRouted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "pubkeys", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "setRoutingData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "setRoutingDataAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "voteForRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPNFT", + "contracts": [ + { + "network": "naga", + "address_hash": "0x11eBfFeab32f6cb5775BeF83E09124B9322E4026", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "FreeMintSignerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "MintCostSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "PKPMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrew", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "name": "claimAndMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "exists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "freeMintSigner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNextDerivedKeyId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerAddress", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftMetadataAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpPermissionsAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRouterAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mintCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "mintGrantAndBurnNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "mintNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "prefixed", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "redeemedFreeMintIds", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "setFreeMintSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "setMintCost", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPHelper", + "contracts": [ + { + "network": "naga", + "address_hash": "0xAe666c3080AA5Dd935574099c18E1eD779FFB231", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_resolver", + "type": "address" + }, + { + "internalType": "enum ContractResolver.Env", + "name": "_env", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterialV2", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypesV2", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "contract ContractResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "env", + "outputs": [ + { + "internalType": "enum ContractResolver.Env", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainWalletRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPKPNftMetdataAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpPermissionsAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressesScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.MintNextAndAddAuthMethodsWithTypesParams", + "name": "params", + "type": "tuple" + } + ], + "name": "mintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "string[]", + "name": "nftMetadata", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddDomainWalletMetadata", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removePkpMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string[]", + "name": "nftMetadata", + "type": "string[]" + } + ], + "name": "setPkpMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPPermissions", + "contracts": [ + { + "network": "naga", + "address_hash": "0xEB1F9A8567bC01b8cfa9d6e7078bEf587D908342", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "RootHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod", + "name": "authMethod", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "addPermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypesToAdd", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIdsToAdd", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeysToAdd", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopesToAdd", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypesToRemove", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIdsToRemove", + "type": "bytes[]" + } + ], + "name": "batchAddRemoveAuthMethods", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getAuthMethodId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getPKPPubKeysByAuthMethod", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedActions", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maxScopeId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethodScopes", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethods", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRouterAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getTokenIdsForAuthMethod", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getUserPubkeyForAuthMethod", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "isPermittedAction", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "isPermittedAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "isPermittedAuthMethod", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "isPermittedAuthMethodScopePresent", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "removePermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "removePermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "removePermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "removePermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "setRootHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + } + ], + "name": "verifyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bool[]", + "name": "proofFlags", + "type": "bool[]" + }, + { + "internalType": "bytes32[]", + "name": "leaves", + "type": "bytes32[]" + } + ], + "name": "verifyStates", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPNFTMetadata", + "contracts": [ + { + "network": "naga", + "address_hash": "0x20DC21B64c59807A491f6739B2B9d39bb304Fb9d", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_resolver", + "type": "address" + }, + { + "internalType": "enum ContractResolver.Env", + "name": "_env", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "buffer", + "type": "bytes" + } + ], + "name": "bytesToHex", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "contract ContractResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "env", + "outputs": [ + { + "internalType": "enum ContractResolver.Env", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removeProfileForPkp", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removeUrlForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "imgUrl", + "type": "string" + } + ], + "name": "setProfileForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + } + ], + "name": "setUrlForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubKey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "Allowlist", + "contracts": [ + { + "network": "naga", + "address_hash": "0x094CF9F8BBfc633AB2Eb8CdbBE8552a172fAdD80", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "ItemAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "ItemNotAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "allowAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "allowedItems", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "isAllowed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_allowAll", + "type": "bool" + } + ], + "name": "setAllowAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "setAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "setNotAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PaymentDelegation", + "contracts": [ + { + "network": "naga", + "address_hash": "0x5EF658cB6ab3C3BfB75C8293B9a6C8ccb0b96C3c", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "restriction", + "type": "tuple" + } + ], + "name": "RestrictionSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "delegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "delegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPayers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "getPayersAndRestrictions", + "outputs": [ + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction[][]", + "name": "", + "type": "tuple[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getRestriction", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getUsers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "r", + "type": "tuple" + } + ], + "name": "setRestriction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "undelegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "undelegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "Ledger", + "contracts": [ + { + "network": "naga", + "address_hash": "0x9BD023448d2D3b2D73fe61E4d7859007F6dA372c", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "AmountMustBePositive", + "type": "error" + }, + { + "inputs": [], + "name": "ArrayLengthsMustMatch", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientWithdrawAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeNonzero", + "type": "error" + }, + { + "inputs": [], + "name": "NodeNotStakingNode", + "type": "error" + }, + { + "inputs": [], + "name": "PercentageMustBeLessThan100", + "type": "error" + }, + { + "inputs": [], + "name": "SessionAlreadyUsed", + "type": "error" + }, + { + "inputs": [], + "name": "ValueExceedsUint128MaxLimit", + "type": "error" + }, + { + "inputs": [], + "name": "WithdrawalDelayNotPassed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "batch_id", + "type": "uint256" + } + ], + "name": "BatchCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositForUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FoundationRewardsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "LitFoundationSplitPercentageSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "RewardWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdrawRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "UserCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "UserWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "WithdrawRequest", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "balance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "chargeUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + }, + { + "internalType": "int256[]", + "name": "amounts", + "type": "int256[]" + }, + { + "internalType": "uint64", + "name": "batchId", + "type": "uint64" + } + ], + "name": "chargeUsers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "depositForUser", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestRewardWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "litFoundationRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "litFoundationSplitPercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "requestRewardWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "requestWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "rewardBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "setLitFoundationSplitPercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "setRewardWithdrawDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "setUserWithdrawDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "stableBalance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "userWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawFoundationRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PriceFeed", + "contracts": [ + { + "network": "naga", + "address_hash": "0x88F5535Fa6dA5C225a3C06489fE4e3405b87608C", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeNonzero", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "BaseNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "MaxNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakingAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newPrices", + "type": "uint256[]" + } + ], + "name": "UsageSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "baseNetworkPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLitActionPriceConfigs", + "outputs": [ + { + "components": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.LitActionPriceConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNodeCapacityConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "pkpSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "encSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "litActionMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signSessionKeyMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "globalMaxCapacity", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeCapacityConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "getNodesForRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "validator", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "prices", + "type": "uint256[]" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeInfoAndPrices[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "maxNetworkPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "node", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "price", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodePriceData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + } + ], + "name": "prices", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodePriceData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setBaseNetworkPrices", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "new_price", + "type": "uint256" + } + ], + "name": "setLitActionPriceConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.LitActionPriceConfig[]", + "name": "configs", + "type": "tuple[]" + } + ], + "name": "setLitActionPriceConfigs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setMaxNetworkPrices", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "pkpSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "encSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "litActionMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signSessionKeyMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "globalMaxCapacity", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeCapacityConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setNodeCapacityConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setUsage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + } + ], + "name": "usagePercentToPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "usagePercentToPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + } + ], + "config": { + "chainId": "175200", + "rpcUrl": "https://lit-chain-rpc.litprotocol.com", + "chainName": "litMainnet", + "litNodeDomainName": "127.0.0.1", + "litNodePort": 7470, + "rocketPort": 7470 + } +} \ No newline at end of file diff --git a/packages/contracts/dist/prod/naga.ts b/packages/contracts/dist/prod/naga.ts new file mode 100644 index 000000000..604bdc6c2 --- /dev/null +++ b/packages/contracts/dist/prod/naga.ts @@ -0,0 +1,16119 @@ +export const naga = { + "data": [ + { + "name": "Staking", + "contracts": [ + { + "network": "naga", + "address_hash": "0x8a861B3640c1ff058CCB109ba11CA3224d228159", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "RealmIdNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "getAllUnkickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getCurrentRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getShadowRealmIdForStakerAddress", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "isRecentValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInCurrentEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInCurrentOrNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isValidatorInNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "nodeAddressToStakerAddressAcrossRealms", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numRealms", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "validator_by_staker_address", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwnerOrDevopsAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "CannotModifyUnfrozen", + "type": "error" + }, + { + "inputs": [], + "name": "CannotMoveToLockedValidatorStateBeforeEpochEnds", + "type": "error" + }, + { + "inputs": [], + "name": "CannotStakeZero", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidNewSharePrice", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSlashPercentage", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + } + ], + "name": "MinTimeLockNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochState", + "type": "error" + }, + { + "inputs": [], + "name": "NoEmptyStakingSlot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "StakeAmountNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + }, + { + "internalType": "address[]", + "name": "validatorsInNextEpoch", + "type": "address[]" + } + ], + "name": "ValidatorIsNotInNextEpoch", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "ClearOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "CountOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "DevopsAdminSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "EpochEndTimeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "EpochLengthSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "EpochTimeoutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newKickPenaltyPercent", + "type": "uint256" + } + ], + "name": "KickPenaltyPercentSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverContractAddress", + "type": "address" + } + ], + "name": "ResolverContractAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakerAddressClient", + "type": "address" + } + ], + "name": "StakeRecordCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Staked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "StateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorBanned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorKickedFromNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorRejoinedNextEpoch", + "type": "event" + }, + { + "inputs": [], + "name": "addRealm", + "outputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorStakerAddress", + "type": "address" + } + ], + "name": "adminKickValidatorInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "adminRejoinValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + } + ], + "name": "adminSetValidatorRegisterAttestedWalletDisabled", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsForCurrentEpoch", + "type": "address[]" + } + ], + "name": "adminSetValidatorsInCurrentEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsForNextEpoch", + "type": "address[]" + } + ], + "name": "adminSetValidatorsInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "source_realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "target_realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "target_validators", + "type": "address[]" + } + ], + "name": "adminSetupShadowSplicing", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "adminSlashValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "adminStakeForUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "adminUnfreezeForUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseRewardPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "emitClearOfflinePhaseData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "emitCountOfflinePhaseData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "increaseRewardPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "removeRealm", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setComplaintConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "keyTypes", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmax", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "k", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "enableStakeAutolock", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "profitMultiplier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "usdCostPerMonth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxEmissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStakeTimelock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minValidatorCountToClampMinimumThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThresholdToClampAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.GlobalConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newThreshold", + "type": "uint256" + } + ], + "name": "setDemeritRejoinThreshold", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "setDevopsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "setEpochEndTime", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "setEpochLength", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "setEpochState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "setEpochTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "timeoutMs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "memoryLimitMb", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCodeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxResponseLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxConsoleLogLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFetchCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxContractCallCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBroadcastAndCollectCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCallDepth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxRetries", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "asyncActionsEnabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.LitActionConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setLitActionConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newTimeout", + "type": "uint256" + } + ], + "name": "setPendingRejoinTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsToSet", + "type": "address[]" + } + ], + "name": "setPermittedValidators", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "name": "setPermittedValidatorsOn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "newConfig", + "type": "tuple" + } + ], + "name": "setRealmConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newTotalSupply", + "type": "uint256" + } + ], + "name": "setTokenTotalSupplyStandIn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotContract", + "type": "error" + }, + { + "inputs": [], + "name": "CannotMigrateFromValidator", + "type": "error" + }, + { + "inputs": [], + "name": "CannotWithdrawFrozen", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentEpoch", + "type": "uint256" + } + ], + "name": "CheckpointAheadOfCurrentEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "InsufficientSelfStake", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidRatio", + "type": "error" + }, + { + "inputs": [], + "name": "NewTimeLockMustBeGreaterThanCurrent", + "type": "error" + }, + { + "inputs": [], + "name": "RewardsMustBeClaimed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "slahedAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "slashedRealmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "senderRealmId", + "type": "uint256" + } + ], + "name": "SlashingMustOccurInSameRealm", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakedAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumStake", + "type": "uint256" + } + ], + "name": "StakeMustBeGreaterThanMinimumStake", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + } + ], + "name": "StakeRecordNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "TimeLockNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "TooSoonToWithdraw", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } + ], + "name": "ValidatorNotRegistered", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "FixedCostRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "StakeRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "ValidatorCommissionClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "ValidatorRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "checkStakingAmounts", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimFixedCostRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimStakeRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxNumberOfEpochsToClaim", + "type": "uint256" + } + ], + "name": "claimValidatorCommission", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getMaximumStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumSelfStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorCommission", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slope", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePriceAtLastUpdate", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "initial", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RewardEpoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpochView", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochEnd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStakeRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorCommission", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slope", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "validatorSharePriceAtLastUpdate", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "initial", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RewardEpoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "additionalAmount", + "type": "uint256" + } + ], + "name": "increaseStakeRecordAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "additionalTimeLock", + "type": "uint256" + } + ], + "name": "increaseStakeRecordTimelock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isInitial", + "type": "bool" + } + ], + "name": "initializeRewardEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorAddressToMigrateFrom", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddressToMigrateTo", + "type": "address" + } + ], + "name": "migrateStakeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "setValidatorCommissionRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "splitStakeRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "stake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeId", + "type": "uint256" + } + ], + "name": "unfreezeStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeRecordId", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "exists", + "type": "bool" + }, + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "hashed", + "type": "bytes32" + } + ], + "name": "KeySetConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "KeySetConfigUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "deleteKeySet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "getKeySet", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "keySets", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "minimumThreshold", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "monetaryValue", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "completeIsolation", + "type": "bool" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "realms", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "curves", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "counts", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "recoveryPartyMembers", + "type": "address[]" + } + ], + "internalType": "struct LibStakingStorage.KeySetConfig", + "name": "update", + "type": "tuple" + } + ], + "name": "setKeySet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "verifyKeySetCounts", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ActiveValidatorsCannotLeave", + "type": "error" + }, + { + "inputs": [], + "name": "CannotKickBelowCurrentValidatorThreshold", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingAddress", + "type": "address" + } + ], + "name": "CannotRejoinBecauseBanned", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingAddress", + "type": "address" + } + ], + "name": "CannotRejoinUntilNextEpochBecauseKicked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + } + ], + "name": "CannotReuseCommsKeys", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "CannotVoteTwice", + "type": "error" + }, + { + "inputs": [], + "name": "CannotWithdrawZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "CouldNotMapNodeAddressToStakerAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidAttestedAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInActiveOrUnlockedOrPausedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInActiveOrUnlockedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedOrReadyForNextEpochOrRestoreState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInNextValidatorSetLockedState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "MustBeInReadyForNextEpochState", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "MustBeValidatorInNextEpochToKick", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + } + ], + "name": "NotEnoughTimeElapsedForTimeoutSinceLastEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochEndTime", + "type": "uint256" + } + ], + "name": "NotEnoughTimeElapsedSinceLastEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "validatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + } + ], + "name": "NotEnoughValidatorsInNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentReadyValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextReadyValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCountToBeReady", + "type": "uint256" + } + ], + "name": "NotEnoughValidatorsReadyForNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receivedEpochNumber", + "type": "uint256" + } + ], + "name": "SignaledReadyForWrongEpochNumber", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "senderAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "StakerAddressMismatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "yourBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "requestedWithdrawlAmount", + "type": "uint256" + } + ], + "name": "TryingToWithdrawMoreThanStaked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorAlreadyInNextValidatorSet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "existingRealmId", + "type": "uint256" + } + ], + "name": "ValidatorAlreadyInRealm", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorNotInNextEpoch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "ValidatorNotPermitted", + "type": "error" + }, + { + "inputs": [], + "name": "ValidatorRegisterAttestedWalletDisabled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "valueName", + "type": "string" + } + ], + "name": "ValueMustBeNonzero", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "AdvancedEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "attestedPubKey", + "type": "tuple" + } + ], + "name": "AttestedWalletRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "ComplaintConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newTokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newKeyTypes", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinimumValidatorCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxConcurrentRequests", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPeerCheckingIntervalSecs", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignConcurrency", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "newRpcHealthcheckEnabled", + "type": "bool" + } + ], + "name": "ConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "ReadyForNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Recovered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToJoin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToLeave", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newDuration", + "type": "uint256" + } + ], + "name": "RewardsDurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newStakingTokenAddress", + "type": "address" + } + ], + "name": "StakingTokenSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "VotedToKickValidatorInNextEpoch", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "advanceEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "state", + "type": "uint8" + } + ], + "name": "checkActiveOrUnlockedOrPausedState", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "exit", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "kickValidatorInNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "lockValidatorsForNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "attestedPubKey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + } + ], + "name": "registerAttestedWallet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "requestToJoin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsForShadowSplicing", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "requestToJoinAsNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "requestToLeave", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "requestToLeaveAsNode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + } + ], + "name": "setIpPortNodeAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "signalReadyForNextEpoch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "VersionRequirementsUpdated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "checkVersion", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMaxVersion", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMaxVersionString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMinVersion", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getMinVersionString", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "setMaxVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "setMinVersion", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "InvalidTimeLock", + "type": "error" + }, + { + "inputs": [], + "name": "NodeAddressNotFoundForStaker", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeWeight", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsInCurrentEpoch", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "actualEpochLength", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.RewardEpochGlobalStats", + "name": "globalStats", + "type": "tuple" + } + ], + "name": "calculateRewardsPerDay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateStakeWeight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + } + ], + "name": "complaintConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "countOfCurrentValidatorsReadyForNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "countOfNextValidatorsReadyForNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "currentValidatorCountForConsensus", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "epoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructs", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructsAndCounts", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllReserveValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attestedAddress", + "type": "address" + } + ], + "name": "getAttestedPubKey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + } + ], + "name": "getDelegatedStakersWithUnfreezingStakes", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validatorAddress", + "type": "address" + } + ], + "name": "getDelegatedStakersWithUnfreezingStakesCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getKeyTypes", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getKickedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getLastStakeRecord", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLitCirc", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLowestRewardEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "name": "getNodeAttestedPubKeyMappings", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "pubKey", + "type": "tuple" + } + ], + "internalType": "struct LibStakingStorage.PubKeyMapping[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getNodeDemerits", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "addresses", + "type": "address[]" + } + ], + "name": "getNodeStakerAddressMappings", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.AddressMapping[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getNonShadowValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getNonShadowValidatorsInCurrentEpochLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "getRewardEpochGlobalStats", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "stakeWeight", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "validatorsInCurrentEpoch", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "actualEpochLength", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.RewardEpochGlobalStats", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getRewardEpochNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getSelfStakeRecordCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getShadowValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecord", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecordCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getStakeRecordsForUser", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getStakeWeightInEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "nodeCount", + "type": "uint256" + } + ], + "name": "getThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "stakeRecord", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getTimelockInEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenContractAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "unfreezeStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastUpdateTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialSharePrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "loaded", + "type": "bool" + }, + { + "internalType": "bool", + "name": "frozen", + "type": "bool" + }, + { + "internalType": "address", + "name": "attributionAddress", + "type": "address" + } + ], + "internalType": "struct LibStakingStorage.StakeRecord", + "name": "stakeRecord", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + } + ], + "name": "getTokensStaked", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "getTotalStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getTotalStakeByUser", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "operatorStakerAddress", + "type": "address" + } + ], + "name": "getUnfrozenStakeCountForUser", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getValidatorsDelegated", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsInCurrentEpoch", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsInNextEpoch", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "stakerAddresses", + "type": "address[]" + } + ], + "name": "getValidatorsStructs", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsStructsInCurrentEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getValidatorsStructsInNextEpoch", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + }, + { + "internalType": "address", + "name": "validatorToBeKickedStakerAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "voterStakerAddress", + "type": "address" + } + ], + "name": "getVotingStatusToKickValidator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "keyTypes", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minimumValidatorCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minTimeLock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bmax", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "k", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "p", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "enableStakeAutolock", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "profitMultiplier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "usdCostPerMonth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxEmissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStake", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minSelfStakeTimelock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minValidatorCountToClampMinimumThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minThresholdToClampAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "voteToAdvanceTimeOut", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.GlobalConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveShadowValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isActiveValidatorByNodeAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "isActiveValidatorByNodeAddressForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "isActiveValidatorForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "isReadyForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddresses", + "type": "address" + } + ], + "name": "isRecentValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "isValidatorBanned", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "reason", + "type": "uint256" + } + ], + "name": "kickPenaltyPercentByReason", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "litActionsConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timeoutMs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "memoryLimitMb", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCodeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxResponseLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxConsoleLogLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxFetchCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxContractCallCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBroadcastAndCollectCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCallDepth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxRetries", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "asyncActionsEnabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.LitActionConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxTimeLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minSelfStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minStake", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minTimeLock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "nextValidatorCountForConsensus", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + } + ], + "name": "nodeAddressToStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + } + ], + "name": "operatorAddressToStakerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "validator", + "type": "address" + } + ], + "name": "permittedRealmsForValidator", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "permittedValidators", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "base", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "exponent", + "type": "uint256" + } + ], + "name": "pow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "readyForNextEpoch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "realmConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "maxConcurrentRequests", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPresignCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "peerCheckingIntervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPresignConcurrency", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "rpcHealthcheckEnabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minEpochForRewards", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "permittedValidatorsOn", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.RealmConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "shouldKickValidator", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "stakerToValidatorsTheyStakedTo", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "state", + "outputs": [ + { + "internalType": "enum LibStakingStorage.States", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "bool", + "name": "stakerInCurrentValidatorSet", + "type": "bool" + } + ], + "name": "validatorSelfStakeWillExpire", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "validators", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "Multisender", + "contracts": [ + { + "network": "naga", + "address_hash": "0x12a165660141EBc78cFcb79D88E0aDBAf2e107F0", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + } + ], + "name": "sendEth", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + }, + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + } + ], + "name": "sendTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_recipients", + "type": "address[]" + }, + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountPerRecipient", + "type": "uint256" + } + ], + "name": "sendTokensExact", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenContract", + "type": "address" + } + ], + "name": "withdrawTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "LITToken", + "contracts": [ + { + "network": "naga", + "address_hash": "0x0996A48f8cc3c7c52Caf10d34c804eF5C9E7748B", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cap", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fromDelegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "toDelegate", + "type": "address" + } + ], + "name": "DelegateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "previousBalance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newBalance", + "type": "uint256" + } + ], + "name": "DelegateVotesChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "CLOCK_MODE", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint32", + "name": "pos", + "type": "uint32" + } + ], + "name": "checkpoints", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "fromBlock", + "type": "uint32" + }, + { + "internalType": "uint224", + "name": "votes", + "type": "uint224" + } + ], + "internalType": "struct ERC20Votes.Checkpoint", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clock", + "outputs": [ + { + "internalType": "uint48", + "name": "", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "delegateBySig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "delegates", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timepoint", + "type": "uint256" + } + ], + "name": "getPastVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "numCheckpoints", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PubkeyRouter", + "contracts": [ + { + "network": "naga", + "address_hash": "0x5655D71832f6f2AFD72c3012a60144f5572897F1", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "KeySetNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "curveType", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "name": "RootKeyMiscount", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "PubkeyRoutingDataSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct IPubkeyRouter.RootKey", + "name": "rootKey", + "type": "tuple" + } + ], + "name": "RootKeySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ToggleEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "adminResetRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "rootKeys", + "type": "tuple[]" + } + ], + "name": "adminSetRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "signedMessage", + "type": "bytes" + } + ], + "name": "checkNodeSignatures", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "deriveEthAddressFromPubkey", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "ethAddressToPkpId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "getDerivedPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "getRootKeys", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRoutingData", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "isRouted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "pubkeys", + "outputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PubkeyRoutingData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "setRoutingData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "setRoutingDataAsAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "internalType": "struct IPubkeyRouter.RootKey[]", + "name": "newRootKeys", + "type": "tuple[]" + } + ], + "name": "voteForRootKeys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPNFT", + "contracts": [ + { + "network": "naga", + "address_hash": "0x11eBfFeab32f6cb5775BeF83E09124B9322E4026", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "FreeMintSignerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "MintCostSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "PKPMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrew", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "name": "claimAndMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "exists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "freeMintSigner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNextDerivedKeyId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "ethAddresses", + "type": "address[]" + } + ], + "name": "getPkpInfoFromEthAddresses", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerAddress", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageIndex", + "type": "uint256" + } + ], + "name": "getPkpInfoFromOwnerTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "getPkpInfoFromTokenIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "internalType": "struct LibPubkeyRouterStorage.PkpInfo[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftMetadataAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpPermissionsAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRouterAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mintCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "mintGrantAndBurnNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "mintNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "prefixed", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "redeemedFreeMintIds", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "setFreeMintSigner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "setMintCost", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPHelper", + "contracts": [ + { + "network": "naga", + "address_hash": "0xAe666c3080AA5Dd935574099c18E1eD779FFB231", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_resolver", + "type": "address" + }, + { + "internalType": "enum ContractResolver.Env", + "name": "_env", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterialV2", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypesV2", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "contract ContractResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "env", + "outputs": [ + { + "internalType": "enum ContractResolver.Env", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainWalletRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPKPNftMetdataAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpPermissionsAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressesScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.MintNextAndAddAuthMethodsWithTypesParams", + "name": "params", + "type": "tuple" + } + ], + "name": "mintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "string[]", + "name": "nftMetadata", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddDomainWalletMetadata", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removePkpMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string[]", + "name": "nftMetadata", + "type": "string[]" + } + ], + "name": "setPkpMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPPermissions", + "contracts": [ + { + "network": "naga", + "address_hash": "0xEB1F9A8567bC01b8cfa9d6e7078bEf587D908342", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "RootHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod", + "name": "authMethod", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "addPermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypesToAdd", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIdsToAdd", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeysToAdd", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopesToAdd", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypesToRemove", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIdsToRemove", + "type": "bytes[]" + } + ], + "name": "batchAddRemoveAuthMethods", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getAuthMethodId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getPKPPubKeysByAuthMethod", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedActions", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maxScopeId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethodScopes", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethods", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPkpNftAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRouterAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getTokenIdsForAuthMethod", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getUserPubkeyForAuthMethod", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "isPermittedAction", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "isPermittedAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "isPermittedAuthMethod", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "isPermittedAuthMethodScopePresent", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "removePermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "removePermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "removePermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "removePermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "setContractResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "setRootHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + } + ], + "name": "verifyState", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "proof", + "type": "bytes32[]" + }, + { + "internalType": "bool[]", + "name": "proofFlags", + "type": "bool[]" + }, + { + "internalType": "bytes32[]", + "name": "leaves", + "type": "bytes32[]" + } + ], + "name": "verifyStates", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "PKPNFTMetadata", + "contracts": [ + { + "network": "naga", + "address_hash": "0x20DC21B64c59807A491f6739B2B9d39bb304Fb9d", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_resolver", + "type": "address" + }, + { + "internalType": "enum ContractResolver.Env", + "name": "_env", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "buffer", + "type": "bytes" + } + ], + "name": "bytesToHex", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "contractResolver", + "outputs": [ + { + "internalType": "contract ContractResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "env", + "outputs": [ + { + "internalType": "enum ContractResolver.Env", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removeProfileForPkp", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "removeUrlForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "imgUrl", + "type": "string" + } + ], + "name": "setProfileForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + } + ], + "name": "setUrlForPKP", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "pubKey", + "type": "bytes" + }, + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + }, + { + "name": "Allowlist", + "contracts": [ + { + "network": "naga", + "address_hash": "0x094CF9F8BBfc633AB2Eb8CdbBE8552a172fAdD80", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "ItemAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "ItemNotAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "allowAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "allowedItems", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "isAllowed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_allowAll", + "type": "bool" + } + ], + "name": "setAllowAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "setAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "setNotAllowed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PaymentDelegation", + "contracts": [ + { + "network": "naga", + "address_hash": "0x5EF658cB6ab3C3BfB75C8293B9a6C8ccb0b96C3c", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "restriction", + "type": "tuple" + } + ], + "name": "RestrictionSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "delegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "delegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPayers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "getPayersAndRestrictions", + "outputs": [ + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction[][]", + "name": "", + "type": "tuple[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getRestriction", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getUsers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "r", + "type": "tuple" + } + ], + "name": "setRestriction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "undelegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "undelegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "Ledger", + "contracts": [ + { + "network": "naga", + "address_hash": "0x9BD023448d2D3b2D73fe61E4d7859007F6dA372c", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "AmountMustBePositive", + "type": "error" + }, + { + "inputs": [], + "name": "ArrayLengthsMustMatch", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientWithdrawAmount", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeNonzero", + "type": "error" + }, + { + "inputs": [], + "name": "NodeNotStakingNode", + "type": "error" + }, + { + "inputs": [], + "name": "PercentageMustBeLessThan100", + "type": "error" + }, + { + "inputs": [], + "name": "SessionAlreadyUsed", + "type": "error" + }, + { + "inputs": [], + "name": "ValueExceedsUint128MaxLimit", + "type": "error" + }, + { + "inputs": [], + "name": "WithdrawalDelayNotPassed", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "batch_id", + "type": "uint256" + } + ], + "name": "BatchCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositForUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FoundationRewardsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "LitFoundationSplitPercentageSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "RewardWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdrawRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "UserCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "UserWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "WithdrawRequest", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "balance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "chargeUser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + }, + { + "internalType": "int256[]", + "name": "amounts", + "type": "int256[]" + }, + { + "internalType": "uint64", + "name": "batchId", + "type": "uint64" + } + ], + "name": "chargeUsers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "depositForUser", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestRewardWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "litFoundationRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "litFoundationSplitPercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "requestRewardWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "requestWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "rewardBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "setLitFoundationSplitPercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "setRewardWithdrawDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "setUserWithdrawDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "stableBalance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "userWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawFoundationRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + } + ] + }, + { + "name": "PriceFeed", + "contracts": [ + { + "network": "naga", + "address_hash": "0x88F5535Fa6dA5C225a3C06489fE4e3405b87608C", + "inserted_at": "2025-10-29T22:25:19Z", + "ABI": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotAddFunctionToDiamondThatAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotAddSelectorsToZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveFunctionThatDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotRemoveImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionThatDoesNotExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "_selectors", + "type": "bytes4[]" + } + ], + "name": "CannotReplaceFunctionsFromFacetWithZeroAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "CannotReplaceImmutableFunction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_action", + "type": "uint8" + } + ], + "name": "IncorrectFacetCutAction", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initializationContractAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "InitializationFunctionReverted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_contractAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "_message", + "type": "string" + } + ], + "name": "NoBytecodeAtAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "NoSelectorsProvidedForFacetForCut", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + } + ], + "name": "NotContractOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facetAddress", + "type": "address" + } + ], + "name": "RemoveFacetAddressMustBeZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_facetFunctionSelectors", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "owner_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "MustBeNonzero", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "BaseNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "MaxNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakingAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newPrices", + "type": "uint256[]" + } + ], + "name": "UsageSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "baseNetworkPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLitActionPriceConfigs", + "outputs": [ + { + "components": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.LitActionPriceConfig[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNodeCapacityConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "pkpSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "encSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "litActionMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signSessionKeyMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "globalMaxCapacity", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeCapacityConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "getNodesForRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "validator", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "prices", + "type": "uint256[]" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeInfoAndPrices[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStakingAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTrustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "maxNetworkPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "node", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "price", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodePriceData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + } + ], + "name": "prices", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodePriceData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setBaseNetworkPrices", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "new_price", + "type": "uint256" + } + ], + "name": "setLitActionPriceConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum LibPriceFeedStorage.LitActionPriceComponent", + "name": "priceComponent", + "type": "uint8" + }, + { + "internalType": "enum LibPriceFeedStorage.NodePriceMeasurement", + "name": "priceMeasurement", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.LitActionPriceConfig[]", + "name": "configs", + "type": "tuple[]" + } + ], + "name": "setLitActionPriceConfigs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setMaxNetworkPrices", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "pkpSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "encSignMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "litActionMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "signSessionKeyMaxConcurrency", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "globalMaxCapacity", + "type": "uint256" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeCapacityConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setNodeCapacityConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "setUsage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "productId", + "type": "uint256" + } + ], + "name": "usagePercentToPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "usagePercentToPrices", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ] + } + ] + } + ], + "config": { + "chainId": "175200", + "rpcUrl": "https://lit-chain-rpc.litprotocol.com", + "chainName": "litMainnet", + "litNodeDomainName": "127.0.0.1", + "litNodePort": 7470, + "rocketPort": 7470 + } +} as const; \ No newline at end of file diff --git a/packages/contracts/dist/signatures/naga-proto.cjs b/packages/contracts/dist/signatures/naga-proto.cjs new file mode 100644 index 000000000..bc31c0708 --- /dev/null +++ b/packages/contracts/dist/signatures/naga-proto.cjs @@ -0,0 +1,3648 @@ +/** + * Generated Contract Method Signatures for naga-proto + * This file is auto-generated. DO NOT EDIT UNLESS YOU KNOW WHAT YOU'RE DOING. + */ + +const signatures = { + "Staking": { + "address": "0x43b64F416cac52a7E60099E29F6477183bA172CB", + "methods": { + "getActiveUnkickedValidatorStructsAndCounts": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructsAndCounts", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "ClearOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "CountOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "DevopsAdminSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "EpochEndTimeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "EpochLengthSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "EpochTimeoutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newKickPenaltyPercent", + "type": "uint256" + } + ], + "name": "KickPenaltyPercentSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverContractAddress", + "type": "address" + } + ], + "name": "ResolverContractAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakerAddressClient", + "type": "address" + } + ], + "name": "StakeRecordCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Staked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "StateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorBanned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorKickedFromNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorRejoinedNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "FixedCostRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "StakeRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "ValidatorCommissionClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "ValidatorRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "exists", + "type": "bool" + }, + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "hashed", + "type": "bytes32" + } + ], + "name": "KeySetConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "KeySetConfigUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "AdvancedEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "attestedPubKey", + "type": "tuple" + } + ], + "name": "AttestedWalletRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "ComplaintConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newTokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newKeyTypes", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinimumValidatorCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxConcurrentRequests", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPeerCheckingIntervalSecs", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignConcurrency", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "newRpcHealthcheckEnabled", + "type": "bool" + } + ], + "name": "ConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "ReadyForNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Recovered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToJoin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToLeave", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newDuration", + "type": "uint256" + } + ], + "name": "RewardsDurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newStakingTokenAddress", + "type": "address" + } + ], + "name": "StakingTokenSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "VotedToKickValidatorInNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "VersionRequirementsUpdated", + "type": "event" + } + ] + }, + "PubkeyRouter": { + "address": "0xFdC09086E184Cb812D37566B09751CcbCA6a2205", + "methods": { + "deriveEthAddressFromPubkey": { + "inputs": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "deriveEthAddressFromPubkey", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + "ethAddressToPkpId": { + "inputs": [ + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "ethAddressToPkpId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getDerivedPubkey": { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "getDerivedPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getEthAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPubkey": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "PubkeyRoutingDataSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct IPubkeyRouter.RootKey", + "name": "rootKey", + "type": "tuple" + } + ], + "name": "RootKeySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ToggleEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + } + ] + }, + "PKPNFT": { + "address": "0x9bB7c5504E12aBBCec35DF786769BBA292Cc4C0B", + "methods": { + "claimAndMint": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "name": "claimAndMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "mintCost": { + "inputs": [], + "name": "mintCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "mintNext": { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "mintNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "safeTransferFrom": { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "tokenOfOwnerByIndex": { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "FreeMintSignerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "MintCostSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "PKPMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrew", + "type": "event" + } + ] + }, + "PKPHelper": { + "address": "0x835585944fB37d14C317cc6cd4864570cFcFab9E", + "methods": { + "claimAndMintNextAndAddAuthMethodsWithTypes": { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "mintNextAndAddAuthMethods": { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + } + ] + }, + "PKPPermissions": { + "address": "0x23A1aAB688EEe1d66FB45719ac527c2A0B036ed6", + "methods": { + "addPermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod", + "name": "authMethod", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAuthMethodScope": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "addPermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "getPermittedActions": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedActions", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAddresses": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAuthMethodScopes": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maxScopeId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethodScopes", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAuthMethods": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethods", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getTokenIdsForAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getTokenIdsForAuthMethod", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "isPermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "isPermittedAction", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + "isPermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "isPermittedAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + "removePermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "removePermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "removePermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "removePermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAuthMethodScope": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "removePermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "RootHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + } + ] + }, + "PaymentDelegation": { + "address": "0x58bA8Eb59E5A88ED690E47a8D37DCdB7d3aea490", + "methods": { + "delegatePayments": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "delegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "delegatePaymentsBatch": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "delegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "getPayers": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPayers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPayersAndRestrictions": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "getPayersAndRestrictions", + "outputs": [ + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction[][]", + "name": "", + "type": "tuple[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getRestriction": { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getRestriction", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getUsers": { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getUsers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "setRestriction": { + "inputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "r", + "type": "tuple" + } + ], + "name": "setRestriction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "undelegatePayments": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "undelegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "undelegatePaymentsBatch": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "undelegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "restriction", + "type": "tuple" + } + ], + "name": "RestrictionSet", + "type": "event" + } + ] + }, + "Ledger": { + "address": "0xf69e2D0Fa6a7F24d65De4F972c1a3000d55CA175", + "methods": { + "withdraw": { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "balance": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "balance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "deposit": { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + "depositForUser": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "depositForUser", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + "latestWithdrawRequest": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + "requestWithdraw": { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "requestWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "stableBalance": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "stableBalance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "userWithdrawDelay": { + "inputs": [], + "name": "userWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "batch_id", + "type": "uint256" + } + ], + "name": "BatchCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositForUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FoundationRewardsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "LitFoundationSplitPercentageSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "RewardWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdrawRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "UserCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "UserWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "WithdrawRequest", + "type": "event" + } + ] + }, + "PriceFeed": { + "address": "0x7cD9b8A17733bcb85683009f6Fcaf5B920c249EE", + "methods": { + "getNodesForRequest": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "getNodesForRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "validator", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "prices", + "type": "uint256[]" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeInfoAndPrices[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "BaseNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "MaxNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakingAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newPrices", + "type": "uint256[]" + } + ], + "name": "UsageSet", + "type": "event" + } + ] + } +}; + +module.exports = { + signatures +}; diff --git a/packages/contracts/dist/signatures/naga-proto.d.ts b/packages/contracts/dist/signatures/naga-proto.d.ts new file mode 100644 index 000000000..f9034c847 --- /dev/null +++ b/packages/contracts/dist/signatures/naga-proto.d.ts @@ -0,0 +1,3645 @@ +/** + * Generated Contract Method Signatures for naga-proto + * This file is auto-generated. DO NOT EDIT UNLESS YOU KNOW WHAT YOU'RE DOING. + */ + +export const signatures = { + "Staking": { + "address": "0x43b64F416cac52a7E60099E29F6477183bA172CB", + "methods": { + "getActiveUnkickedValidatorStructsAndCounts": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructsAndCounts", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "ClearOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "CountOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "DevopsAdminSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "EpochEndTimeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "EpochLengthSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "EpochTimeoutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newKickPenaltyPercent", + "type": "uint256" + } + ], + "name": "KickPenaltyPercentSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverContractAddress", + "type": "address" + } + ], + "name": "ResolverContractAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakerAddressClient", + "type": "address" + } + ], + "name": "StakeRecordCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Staked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "StateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorBanned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorKickedFromNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorRejoinedNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "FixedCostRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "StakeRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "ValidatorCommissionClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "ValidatorRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "exists", + "type": "bool" + }, + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "hashed", + "type": "bytes32" + } + ], + "name": "KeySetConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "KeySetConfigUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "AdvancedEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "attestedPubKey", + "type": "tuple" + } + ], + "name": "AttestedWalletRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "ComplaintConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newTokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newKeyTypes", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinimumValidatorCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxConcurrentRequests", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPeerCheckingIntervalSecs", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignConcurrency", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "newRpcHealthcheckEnabled", + "type": "bool" + } + ], + "name": "ConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "ReadyForNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Recovered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToJoin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToLeave", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newDuration", + "type": "uint256" + } + ], + "name": "RewardsDurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newStakingTokenAddress", + "type": "address" + } + ], + "name": "StakingTokenSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "VotedToKickValidatorInNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "VersionRequirementsUpdated", + "type": "event" + } + ] + }, + "PubkeyRouter": { + "address": "0xFdC09086E184Cb812D37566B09751CcbCA6a2205", + "methods": { + "deriveEthAddressFromPubkey": { + "inputs": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "deriveEthAddressFromPubkey", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + "ethAddressToPkpId": { + "inputs": [ + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "ethAddressToPkpId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getDerivedPubkey": { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "getDerivedPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getEthAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPubkey": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "PubkeyRoutingDataSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct IPubkeyRouter.RootKey", + "name": "rootKey", + "type": "tuple" + } + ], + "name": "RootKeySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ToggleEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + } + ] + }, + "PKPNFT": { + "address": "0x9bB7c5504E12aBBCec35DF786769BBA292Cc4C0B", + "methods": { + "claimAndMint": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "name": "claimAndMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "mintCost": { + "inputs": [], + "name": "mintCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "mintNext": { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "mintNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "safeTransferFrom": { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "tokenOfOwnerByIndex": { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "FreeMintSignerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "MintCostSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "PKPMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrew", + "type": "event" + } + ] + }, + "PKPHelper": { + "address": "0x835585944fB37d14C317cc6cd4864570cFcFab9E", + "methods": { + "claimAndMintNextAndAddAuthMethodsWithTypes": { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "mintNextAndAddAuthMethods": { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + } + ] + }, + "PKPPermissions": { + "address": "0x23A1aAB688EEe1d66FB45719ac527c2A0B036ed6", + "methods": { + "addPermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod", + "name": "authMethod", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAuthMethodScope": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "addPermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "getPermittedActions": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedActions", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAddresses": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAuthMethodScopes": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maxScopeId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethodScopes", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAuthMethods": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethods", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getTokenIdsForAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getTokenIdsForAuthMethod", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "isPermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "isPermittedAction", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + "isPermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "isPermittedAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + "removePermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "removePermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "removePermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "removePermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAuthMethodScope": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "removePermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "RootHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + } + ] + }, + "PaymentDelegation": { + "address": "0x58bA8Eb59E5A88ED690E47a8D37DCdB7d3aea490", + "methods": { + "delegatePayments": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "delegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "delegatePaymentsBatch": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "delegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "getPayers": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPayers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPayersAndRestrictions": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "getPayersAndRestrictions", + "outputs": [ + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction[][]", + "name": "", + "type": "tuple[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getRestriction": { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getRestriction", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getUsers": { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getUsers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "setRestriction": { + "inputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "r", + "type": "tuple" + } + ], + "name": "setRestriction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "undelegatePayments": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "undelegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "undelegatePaymentsBatch": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "undelegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "restriction", + "type": "tuple" + } + ], + "name": "RestrictionSet", + "type": "event" + } + ] + }, + "Ledger": { + "address": "0xf69e2D0Fa6a7F24d65De4F972c1a3000d55CA175", + "methods": { + "withdraw": { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "balance": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "balance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "deposit": { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + "depositForUser": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "depositForUser", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + "latestWithdrawRequest": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + "requestWithdraw": { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "requestWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "stableBalance": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "stableBalance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "userWithdrawDelay": { + "inputs": [], + "name": "userWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "batch_id", + "type": "uint256" + } + ], + "name": "BatchCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositForUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FoundationRewardsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "LitFoundationSplitPercentageSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "RewardWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdrawRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "UserCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "UserWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "WithdrawRequest", + "type": "event" + } + ] + }, + "PriceFeed": { + "address": "0x7cD9b8A17733bcb85683009f6Fcaf5B920c249EE", + "methods": { + "getNodesForRequest": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "getNodesForRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "validator", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "prices", + "type": "uint256[]" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeInfoAndPrices[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "BaseNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "MaxNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakingAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newPrices", + "type": "uint256[]" + } + ], + "name": "UsageSet", + "type": "event" + } + ] + } +} as const; +export type Signatures = typeof signatures; diff --git a/packages/contracts/dist/signatures/naga-proto.js b/packages/contracts/dist/signatures/naga-proto.js new file mode 100644 index 000000000..976aee8a5 --- /dev/null +++ b/packages/contracts/dist/signatures/naga-proto.js @@ -0,0 +1,3644 @@ +/** + * Generated Contract Method Signatures for naga-proto + * This file is auto-generated. DO NOT EDIT UNLESS YOU KNOW WHAT YOU'RE DOING. + */ + +export const signatures = { + "Staking": { + "address": "0x43b64F416cac52a7E60099E29F6477183bA172CB", + "methods": { + "getActiveUnkickedValidatorStructsAndCounts": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructsAndCounts", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "ClearOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "CountOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "DevopsAdminSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "EpochEndTimeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "EpochLengthSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "EpochTimeoutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newKickPenaltyPercent", + "type": "uint256" + } + ], + "name": "KickPenaltyPercentSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverContractAddress", + "type": "address" + } + ], + "name": "ResolverContractAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakerAddressClient", + "type": "address" + } + ], + "name": "StakeRecordCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Staked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "StateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorBanned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorKickedFromNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorRejoinedNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "FixedCostRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "StakeRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "ValidatorCommissionClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "ValidatorRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "exists", + "type": "bool" + }, + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "hashed", + "type": "bytes32" + } + ], + "name": "KeySetConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "KeySetConfigUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "AdvancedEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "attestedPubKey", + "type": "tuple" + } + ], + "name": "AttestedWalletRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "ComplaintConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newTokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newKeyTypes", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinimumValidatorCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxConcurrentRequests", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPeerCheckingIntervalSecs", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignConcurrency", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "newRpcHealthcheckEnabled", + "type": "bool" + } + ], + "name": "ConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "ReadyForNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Recovered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToJoin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToLeave", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newDuration", + "type": "uint256" + } + ], + "name": "RewardsDurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newStakingTokenAddress", + "type": "address" + } + ], + "name": "StakingTokenSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "VotedToKickValidatorInNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "VersionRequirementsUpdated", + "type": "event" + } + ] + }, + "PubkeyRouter": { + "address": "0xFdC09086E184Cb812D37566B09751CcbCA6a2205", + "methods": { + "deriveEthAddressFromPubkey": { + "inputs": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "deriveEthAddressFromPubkey", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + "ethAddressToPkpId": { + "inputs": [ + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "ethAddressToPkpId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getDerivedPubkey": { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "getDerivedPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getEthAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPubkey": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "PubkeyRoutingDataSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct IPubkeyRouter.RootKey", + "name": "rootKey", + "type": "tuple" + } + ], + "name": "RootKeySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ToggleEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + } + ] + }, + "PKPNFT": { + "address": "0x9bB7c5504E12aBBCec35DF786769BBA292Cc4C0B", + "methods": { + "claimAndMint": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "name": "claimAndMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "mintCost": { + "inputs": [], + "name": "mintCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "mintNext": { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "mintNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "safeTransferFrom": { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "tokenOfOwnerByIndex": { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "FreeMintSignerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "MintCostSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "PKPMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrew", + "type": "event" + } + ] + }, + "PKPHelper": { + "address": "0x835585944fB37d14C317cc6cd4864570cFcFab9E", + "methods": { + "claimAndMintNextAndAddAuthMethodsWithTypes": { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "mintNextAndAddAuthMethods": { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + } + ] + }, + "PKPPermissions": { + "address": "0x23A1aAB688EEe1d66FB45719ac527c2A0B036ed6", + "methods": { + "addPermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod", + "name": "authMethod", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAuthMethodScope": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "addPermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "getPermittedActions": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedActions", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAddresses": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAuthMethodScopes": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maxScopeId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethodScopes", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAuthMethods": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethods", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getTokenIdsForAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getTokenIdsForAuthMethod", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "isPermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "isPermittedAction", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + "isPermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "isPermittedAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + "removePermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "removePermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "removePermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "removePermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAuthMethodScope": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "removePermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "RootHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + } + ] + }, + "PaymentDelegation": { + "address": "0x58bA8Eb59E5A88ED690E47a8D37DCdB7d3aea490", + "methods": { + "delegatePayments": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "delegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "delegatePaymentsBatch": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "delegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "getPayers": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPayers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPayersAndRestrictions": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "getPayersAndRestrictions", + "outputs": [ + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction[][]", + "name": "", + "type": "tuple[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getRestriction": { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getRestriction", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getUsers": { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getUsers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "setRestriction": { + "inputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "r", + "type": "tuple" + } + ], + "name": "setRestriction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "undelegatePayments": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "undelegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "undelegatePaymentsBatch": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "undelegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "restriction", + "type": "tuple" + } + ], + "name": "RestrictionSet", + "type": "event" + } + ] + }, + "Ledger": { + "address": "0xf69e2D0Fa6a7F24d65De4F972c1a3000d55CA175", + "methods": { + "withdraw": { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "balance": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "balance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "deposit": { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + "depositForUser": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "depositForUser", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + "latestWithdrawRequest": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + "requestWithdraw": { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "requestWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "stableBalance": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "stableBalance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "userWithdrawDelay": { + "inputs": [], + "name": "userWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "batch_id", + "type": "uint256" + } + ], + "name": "BatchCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositForUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FoundationRewardsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "LitFoundationSplitPercentageSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "RewardWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdrawRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "UserCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "UserWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "WithdrawRequest", + "type": "event" + } + ] + }, + "PriceFeed": { + "address": "0x7cD9b8A17733bcb85683009f6Fcaf5B920c249EE", + "methods": { + "getNodesForRequest": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "getNodesForRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "validator", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "prices", + "type": "uint256[]" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeInfoAndPrices[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "BaseNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "MaxNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakingAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newPrices", + "type": "uint256[]" + } + ], + "name": "UsageSet", + "type": "event" + } + ] + } +}; diff --git a/packages/contracts/dist/signatures/naga-staging.cjs b/packages/contracts/dist/signatures/naga-staging.cjs index 2aa12ebd5..3b4f3c5df 100644 --- a/packages/contracts/dist/signatures/naga-staging.cjs +++ b/packages/contracts/dist/signatures/naga-staging.cjs @@ -5,7 +5,7 @@ const signatures = { "Staking": { - "address": "0x781C6d227dA4D058890208B68DDA1da8f6EBbE54", + "address": "0x9b8Ed3FD964Bc38dDc32CF637439e230CD50e3Dd", "methods": { "getActiveUnkickedValidatorStructsAndCounts": { "inputs": [ @@ -58,6 +58,11 @@ const signatures = { "internalType": "uint256", "name": "startTime", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.Epoch", @@ -956,6 +961,19 @@ const signatures = { "name": "StakingTokenSet", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -1032,7 +1050,7 @@ const signatures = { ] }, "PubkeyRouter": { - "address": "0x280E5c534629FBdD4dC61c85695143B6ACc4790b", + "address": "0xE37847746012c756d5D91d37B311eeB8e59684e9", "methods": { "deriveEthAddressFromPubkey": { "inputs": [ @@ -1343,7 +1361,7 @@ const signatures = { ] }, "PKPNFT": { - "address": "0x991d56EdC98a0DAeb93E91F70588598f79875701", + "address": "0x92d2a4Acb70E498a486E0523AD42fF3F6d3D3642", "methods": { "claimAndMint": { "inputs": [ @@ -1733,7 +1751,7 @@ const signatures = { ] }, "PKPHelper": { - "address": "0xe51357Cc58E8a718423CBa09b87879Ff7B18d279", + "address": "0xe97fFbc4eDa5CdF70375D4b8f87e476D40b628EC", "methods": { "claimAndMintNextAndAddAuthMethodsWithTypes": { "inputs": [ @@ -2016,7 +2034,7 @@ const signatures = { ] }, "PKPPermissions": { - "address": "0x5632B35374DD73205B5aeBBcA3ecB02B3dc8B5fe", + "address": "0x1E382ef3957218423C6e1a992a4cE6294861cC93", "methods": { "addPermittedAction": { "inputs": [ @@ -2634,7 +2652,7 @@ const signatures = { ] }, "PaymentDelegation": { - "address": "0x700DB831292541C640c5Dbb9AaE1697faE188513", + "address": "0x13fC0864A37B38D3C2A7d5E9C08D5124B9Cec4bF", "methods": { "delegatePayments": { "inputs": [ @@ -2935,7 +2953,7 @@ const signatures = { ] }, "Ledger": { - "address": "0x658F5ED32aE5EFBf79F7Ba36A9FA770FeA7662c8", + "address": "0x23Be686cAFCe69C5Fb075E2be7a4505598E338E8", "methods": { "withdraw": { "inputs": [ @@ -3354,7 +3372,7 @@ const signatures = { ] }, "PriceFeed": { - "address": "0xB76744dC73AFC416e8cDbB7023ca89C862B86F05", + "address": "0x651d3282E1F083036Bb136dBbe7df17aCC39A330", "methods": { "getNodesForRequest": { "inputs": [ diff --git a/packages/contracts/dist/signatures/naga-staging.d.ts b/packages/contracts/dist/signatures/naga-staging.d.ts index 139c06c6c..ee805588f 100644 --- a/packages/contracts/dist/signatures/naga-staging.d.ts +++ b/packages/contracts/dist/signatures/naga-staging.d.ts @@ -5,7 +5,7 @@ export const signatures = { "Staking": { - "address": "0x781C6d227dA4D058890208B68DDA1da8f6EBbE54", + "address": "0x9b8Ed3FD964Bc38dDc32CF637439e230CD50e3Dd", "methods": { "getActiveUnkickedValidatorStructsAndCounts": { "inputs": [ @@ -58,6 +58,11 @@ export const signatures = { "internalType": "uint256", "name": "startTime", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.Epoch", @@ -956,6 +961,19 @@ export const signatures = { "name": "StakingTokenSet", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -1032,7 +1050,7 @@ export const signatures = { ] }, "PubkeyRouter": { - "address": "0x280E5c534629FBdD4dC61c85695143B6ACc4790b", + "address": "0xE37847746012c756d5D91d37B311eeB8e59684e9", "methods": { "deriveEthAddressFromPubkey": { "inputs": [ @@ -1343,7 +1361,7 @@ export const signatures = { ] }, "PKPNFT": { - "address": "0x991d56EdC98a0DAeb93E91F70588598f79875701", + "address": "0x92d2a4Acb70E498a486E0523AD42fF3F6d3D3642", "methods": { "claimAndMint": { "inputs": [ @@ -1733,7 +1751,7 @@ export const signatures = { ] }, "PKPHelper": { - "address": "0xe51357Cc58E8a718423CBa09b87879Ff7B18d279", + "address": "0xe97fFbc4eDa5CdF70375D4b8f87e476D40b628EC", "methods": { "claimAndMintNextAndAddAuthMethodsWithTypes": { "inputs": [ @@ -2016,7 +2034,7 @@ export const signatures = { ] }, "PKPPermissions": { - "address": "0x5632B35374DD73205B5aeBBcA3ecB02B3dc8B5fe", + "address": "0x1E382ef3957218423C6e1a992a4cE6294861cC93", "methods": { "addPermittedAction": { "inputs": [ @@ -2634,7 +2652,7 @@ export const signatures = { ] }, "PaymentDelegation": { - "address": "0x700DB831292541C640c5Dbb9AaE1697faE188513", + "address": "0x13fC0864A37B38D3C2A7d5E9C08D5124B9Cec4bF", "methods": { "delegatePayments": { "inputs": [ @@ -2935,7 +2953,7 @@ export const signatures = { ] }, "Ledger": { - "address": "0x658F5ED32aE5EFBf79F7Ba36A9FA770FeA7662c8", + "address": "0x23Be686cAFCe69C5Fb075E2be7a4505598E338E8", "methods": { "withdraw": { "inputs": [ @@ -3354,7 +3372,7 @@ export const signatures = { ] }, "PriceFeed": { - "address": "0xB76744dC73AFC416e8cDbB7023ca89C862B86F05", + "address": "0x651d3282E1F083036Bb136dBbe7df17aCC39A330", "methods": { "getNodesForRequest": { "inputs": [ diff --git a/packages/contracts/dist/signatures/naga-staging.js b/packages/contracts/dist/signatures/naga-staging.js index ea43e368f..67224fbc6 100644 --- a/packages/contracts/dist/signatures/naga-staging.js +++ b/packages/contracts/dist/signatures/naga-staging.js @@ -5,7 +5,7 @@ export const signatures = { "Staking": { - "address": "0x781C6d227dA4D058890208B68DDA1da8f6EBbE54", + "address": "0x9b8Ed3FD964Bc38dDc32CF637439e230CD50e3Dd", "methods": { "getActiveUnkickedValidatorStructsAndCounts": { "inputs": [ @@ -58,6 +58,11 @@ export const signatures = { "internalType": "uint256", "name": "startTime", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" } ], "internalType": "struct LibStakingStorage.Epoch", @@ -956,6 +961,19 @@ export const signatures = { "name": "StakingTokenSet", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -1032,7 +1050,7 @@ export const signatures = { ] }, "PubkeyRouter": { - "address": "0x280E5c534629FBdD4dC61c85695143B6ACc4790b", + "address": "0xE37847746012c756d5D91d37B311eeB8e59684e9", "methods": { "deriveEthAddressFromPubkey": { "inputs": [ @@ -1343,7 +1361,7 @@ export const signatures = { ] }, "PKPNFT": { - "address": "0x991d56EdC98a0DAeb93E91F70588598f79875701", + "address": "0x92d2a4Acb70E498a486E0523AD42fF3F6d3D3642", "methods": { "claimAndMint": { "inputs": [ @@ -1733,7 +1751,7 @@ export const signatures = { ] }, "PKPHelper": { - "address": "0xe51357Cc58E8a718423CBa09b87879Ff7B18d279", + "address": "0xe97fFbc4eDa5CdF70375D4b8f87e476D40b628EC", "methods": { "claimAndMintNextAndAddAuthMethodsWithTypes": { "inputs": [ @@ -2016,7 +2034,7 @@ export const signatures = { ] }, "PKPPermissions": { - "address": "0x5632B35374DD73205B5aeBBcA3ecB02B3dc8B5fe", + "address": "0x1E382ef3957218423C6e1a992a4cE6294861cC93", "methods": { "addPermittedAction": { "inputs": [ @@ -2634,7 +2652,7 @@ export const signatures = { ] }, "PaymentDelegation": { - "address": "0x700DB831292541C640c5Dbb9AaE1697faE188513", + "address": "0x13fC0864A37B38D3C2A7d5E9C08D5124B9Cec4bF", "methods": { "delegatePayments": { "inputs": [ @@ -2935,7 +2953,7 @@ export const signatures = { ] }, "Ledger": { - "address": "0x658F5ED32aE5EFBf79F7Ba36A9FA770FeA7662c8", + "address": "0x23Be686cAFCe69C5Fb075E2be7a4505598E338E8", "methods": { "withdraw": { "inputs": [ @@ -3354,7 +3372,7 @@ export const signatures = { ] }, "PriceFeed": { - "address": "0xB76744dC73AFC416e8cDbB7023ca89C862B86F05", + "address": "0x651d3282E1F083036Bb136dBbe7df17aCC39A330", "methods": { "getNodesForRequest": { "inputs": [ diff --git a/packages/contracts/dist/signatures/naga.cjs b/packages/contracts/dist/signatures/naga.cjs new file mode 100644 index 000000000..720be9d70 --- /dev/null +++ b/packages/contracts/dist/signatures/naga.cjs @@ -0,0 +1,3648 @@ +/** + * Generated Contract Method Signatures for naga + * This file is auto-generated. DO NOT EDIT UNLESS YOU KNOW WHAT YOU'RE DOING. + */ + +const signatures = { + "Staking": { + "address": "0x8a861B3640c1ff058CCB109ba11CA3224d228159", + "methods": { + "getActiveUnkickedValidatorStructsAndCounts": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructsAndCounts", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "ClearOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "CountOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "DevopsAdminSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "EpochEndTimeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "EpochLengthSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "EpochTimeoutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newKickPenaltyPercent", + "type": "uint256" + } + ], + "name": "KickPenaltyPercentSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverContractAddress", + "type": "address" + } + ], + "name": "ResolverContractAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakerAddressClient", + "type": "address" + } + ], + "name": "StakeRecordCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Staked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "StateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorBanned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorKickedFromNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorRejoinedNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "FixedCostRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "StakeRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "ValidatorCommissionClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "ValidatorRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "exists", + "type": "bool" + }, + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "hashed", + "type": "bytes32" + } + ], + "name": "KeySetConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "KeySetConfigUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "AdvancedEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "attestedPubKey", + "type": "tuple" + } + ], + "name": "AttestedWalletRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "ComplaintConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newTokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newKeyTypes", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinimumValidatorCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxConcurrentRequests", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPeerCheckingIntervalSecs", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignConcurrency", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "newRpcHealthcheckEnabled", + "type": "bool" + } + ], + "name": "ConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "ReadyForNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Recovered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToJoin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToLeave", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newDuration", + "type": "uint256" + } + ], + "name": "RewardsDurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newStakingTokenAddress", + "type": "address" + } + ], + "name": "StakingTokenSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "VotedToKickValidatorInNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "VersionRequirementsUpdated", + "type": "event" + } + ] + }, + "PubkeyRouter": { + "address": "0x5655D71832f6f2AFD72c3012a60144f5572897F1", + "methods": { + "deriveEthAddressFromPubkey": { + "inputs": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "deriveEthAddressFromPubkey", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + "ethAddressToPkpId": { + "inputs": [ + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "ethAddressToPkpId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getDerivedPubkey": { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "getDerivedPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getEthAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPubkey": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "PubkeyRoutingDataSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct IPubkeyRouter.RootKey", + "name": "rootKey", + "type": "tuple" + } + ], + "name": "RootKeySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ToggleEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + } + ] + }, + "PKPNFT": { + "address": "0x11eBfFeab32f6cb5775BeF83E09124B9322E4026", + "methods": { + "claimAndMint": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "name": "claimAndMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "mintCost": { + "inputs": [], + "name": "mintCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "mintNext": { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "mintNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "safeTransferFrom": { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "tokenOfOwnerByIndex": { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "FreeMintSignerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "MintCostSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "PKPMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrew", + "type": "event" + } + ] + }, + "PKPHelper": { + "address": "0xAe666c3080AA5Dd935574099c18E1eD779FFB231", + "methods": { + "claimAndMintNextAndAddAuthMethodsWithTypes": { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "mintNextAndAddAuthMethods": { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + } + ] + }, + "PKPPermissions": { + "address": "0xEB1F9A8567bC01b8cfa9d6e7078bEf587D908342", + "methods": { + "addPermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod", + "name": "authMethod", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAuthMethodScope": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "addPermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "getPermittedActions": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedActions", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAddresses": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAuthMethodScopes": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maxScopeId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethodScopes", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAuthMethods": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethods", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getTokenIdsForAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getTokenIdsForAuthMethod", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "isPermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "isPermittedAction", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + "isPermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "isPermittedAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + "removePermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "removePermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "removePermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "removePermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAuthMethodScope": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "removePermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "RootHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + } + ] + }, + "PaymentDelegation": { + "address": "0x5EF658cB6ab3C3BfB75C8293B9a6C8ccb0b96C3c", + "methods": { + "delegatePayments": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "delegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "delegatePaymentsBatch": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "delegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "getPayers": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPayers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPayersAndRestrictions": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "getPayersAndRestrictions", + "outputs": [ + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction[][]", + "name": "", + "type": "tuple[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getRestriction": { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getRestriction", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getUsers": { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getUsers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "setRestriction": { + "inputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "r", + "type": "tuple" + } + ], + "name": "setRestriction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "undelegatePayments": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "undelegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "undelegatePaymentsBatch": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "undelegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "restriction", + "type": "tuple" + } + ], + "name": "RestrictionSet", + "type": "event" + } + ] + }, + "Ledger": { + "address": "0x9BD023448d2D3b2D73fe61E4d7859007F6dA372c", + "methods": { + "withdraw": { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "balance": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "balance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "deposit": { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + "depositForUser": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "depositForUser", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + "latestWithdrawRequest": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + "requestWithdraw": { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "requestWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "stableBalance": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "stableBalance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "userWithdrawDelay": { + "inputs": [], + "name": "userWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "batch_id", + "type": "uint256" + } + ], + "name": "BatchCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositForUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FoundationRewardsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "LitFoundationSplitPercentageSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "RewardWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdrawRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "UserCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "UserWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "WithdrawRequest", + "type": "event" + } + ] + }, + "PriceFeed": { + "address": "0x88F5535Fa6dA5C225a3C06489fE4e3405b87608C", + "methods": { + "getNodesForRequest": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "getNodesForRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "validator", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "prices", + "type": "uint256[]" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeInfoAndPrices[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "BaseNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "MaxNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakingAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newPrices", + "type": "uint256[]" + } + ], + "name": "UsageSet", + "type": "event" + } + ] + } +}; + +module.exports = { + signatures +}; diff --git a/packages/contracts/dist/signatures/naga.d.ts b/packages/contracts/dist/signatures/naga.d.ts new file mode 100644 index 000000000..6dd095933 --- /dev/null +++ b/packages/contracts/dist/signatures/naga.d.ts @@ -0,0 +1,3645 @@ +/** + * Generated Contract Method Signatures for naga + * This file is auto-generated. DO NOT EDIT UNLESS YOU KNOW WHAT YOU'RE DOING. + */ + +export const signatures = { + "Staking": { + "address": "0x8a861B3640c1ff058CCB109ba11CA3224d228159", + "methods": { + "getActiveUnkickedValidatorStructsAndCounts": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructsAndCounts", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "ClearOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "CountOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "DevopsAdminSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "EpochEndTimeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "EpochLengthSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "EpochTimeoutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newKickPenaltyPercent", + "type": "uint256" + } + ], + "name": "KickPenaltyPercentSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverContractAddress", + "type": "address" + } + ], + "name": "ResolverContractAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakerAddressClient", + "type": "address" + } + ], + "name": "StakeRecordCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Staked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "StateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorBanned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorKickedFromNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorRejoinedNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "FixedCostRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "StakeRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "ValidatorCommissionClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "ValidatorRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "exists", + "type": "bool" + }, + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "hashed", + "type": "bytes32" + } + ], + "name": "KeySetConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "KeySetConfigUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "AdvancedEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "attestedPubKey", + "type": "tuple" + } + ], + "name": "AttestedWalletRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "ComplaintConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newTokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newKeyTypes", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinimumValidatorCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxConcurrentRequests", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPeerCheckingIntervalSecs", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignConcurrency", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "newRpcHealthcheckEnabled", + "type": "bool" + } + ], + "name": "ConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "ReadyForNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Recovered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToJoin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToLeave", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newDuration", + "type": "uint256" + } + ], + "name": "RewardsDurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newStakingTokenAddress", + "type": "address" + } + ], + "name": "StakingTokenSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "VotedToKickValidatorInNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "VersionRequirementsUpdated", + "type": "event" + } + ] + }, + "PubkeyRouter": { + "address": "0x5655D71832f6f2AFD72c3012a60144f5572897F1", + "methods": { + "deriveEthAddressFromPubkey": { + "inputs": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "deriveEthAddressFromPubkey", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + "ethAddressToPkpId": { + "inputs": [ + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "ethAddressToPkpId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getDerivedPubkey": { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "getDerivedPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getEthAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPubkey": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "PubkeyRoutingDataSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct IPubkeyRouter.RootKey", + "name": "rootKey", + "type": "tuple" + } + ], + "name": "RootKeySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ToggleEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + } + ] + }, + "PKPNFT": { + "address": "0x11eBfFeab32f6cb5775BeF83E09124B9322E4026", + "methods": { + "claimAndMint": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "name": "claimAndMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "mintCost": { + "inputs": [], + "name": "mintCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "mintNext": { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "mintNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "safeTransferFrom": { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "tokenOfOwnerByIndex": { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "FreeMintSignerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "MintCostSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "PKPMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrew", + "type": "event" + } + ] + }, + "PKPHelper": { + "address": "0xAe666c3080AA5Dd935574099c18E1eD779FFB231", + "methods": { + "claimAndMintNextAndAddAuthMethodsWithTypes": { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "mintNextAndAddAuthMethods": { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + } + ] + }, + "PKPPermissions": { + "address": "0xEB1F9A8567bC01b8cfa9d6e7078bEf587D908342", + "methods": { + "addPermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod", + "name": "authMethod", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAuthMethodScope": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "addPermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "getPermittedActions": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedActions", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAddresses": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAuthMethodScopes": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maxScopeId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethodScopes", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAuthMethods": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethods", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getTokenIdsForAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getTokenIdsForAuthMethod", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "isPermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "isPermittedAction", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + "isPermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "isPermittedAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + "removePermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "removePermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "removePermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "removePermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAuthMethodScope": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "removePermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "RootHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + } + ] + }, + "PaymentDelegation": { + "address": "0x5EF658cB6ab3C3BfB75C8293B9a6C8ccb0b96C3c", + "methods": { + "delegatePayments": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "delegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "delegatePaymentsBatch": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "delegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "getPayers": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPayers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPayersAndRestrictions": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "getPayersAndRestrictions", + "outputs": [ + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction[][]", + "name": "", + "type": "tuple[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getRestriction": { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getRestriction", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getUsers": { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getUsers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "setRestriction": { + "inputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "r", + "type": "tuple" + } + ], + "name": "setRestriction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "undelegatePayments": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "undelegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "undelegatePaymentsBatch": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "undelegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "restriction", + "type": "tuple" + } + ], + "name": "RestrictionSet", + "type": "event" + } + ] + }, + "Ledger": { + "address": "0x9BD023448d2D3b2D73fe61E4d7859007F6dA372c", + "methods": { + "withdraw": { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "balance": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "balance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "deposit": { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + "depositForUser": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "depositForUser", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + "latestWithdrawRequest": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + "requestWithdraw": { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "requestWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "stableBalance": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "stableBalance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "userWithdrawDelay": { + "inputs": [], + "name": "userWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "batch_id", + "type": "uint256" + } + ], + "name": "BatchCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositForUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FoundationRewardsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "LitFoundationSplitPercentageSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "RewardWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdrawRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "UserCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "UserWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "WithdrawRequest", + "type": "event" + } + ] + }, + "PriceFeed": { + "address": "0x88F5535Fa6dA5C225a3C06489fE4e3405b87608C", + "methods": { + "getNodesForRequest": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "getNodesForRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "validator", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "prices", + "type": "uint256[]" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeInfoAndPrices[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "BaseNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "MaxNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakingAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newPrices", + "type": "uint256[]" + } + ], + "name": "UsageSet", + "type": "event" + } + ] + } +} as const; +export type Signatures = typeof signatures; diff --git a/packages/contracts/dist/signatures/naga.js b/packages/contracts/dist/signatures/naga.js new file mode 100644 index 000000000..64f399622 --- /dev/null +++ b/packages/contracts/dist/signatures/naga.js @@ -0,0 +1,3644 @@ +/** + * Generated Contract Method Signatures for naga + * This file is auto-generated. DO NOT EDIT UNLESS YOU KNOW WHAT YOU'RE DOING. + */ + +export const signatures = { + "Staking": { + "address": "0x8a861B3640c1ff058CCB109ba11CA3224d228159", + "methods": { + "getActiveUnkickedValidatorStructsAndCounts": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "getActiveUnkickedValidatorStructsAndCounts", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epochLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "number", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextRewardEpochNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "retries", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timeout", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastAdvanceVoteTime", + "type": "uint256" + } + ], + "internalType": "struct LibStakingStorage.Epoch", + "name": "", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "ClearOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dataType", + "type": "uint256" + } + ], + "name": "CountOfflinePhaseData", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newDevopsAdmin", + "type": "address" + } + ], + "name": "DevopsAdminSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochEndTime", + "type": "uint256" + } + ], + "name": "EpochEndTimeSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochLength", + "type": "uint256" + } + ], + "name": "EpochLengthSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newEpochTimeout", + "type": "uint256" + } + ], + "name": "EpochTimeoutSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newKickPenaltyPercent", + "type": "uint256" + } + ], + "name": "KickPenaltyPercentSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverContractAddress", + "type": "address" + } + ], + "name": "ResolverContractAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakerAddressClient", + "type": "address" + } + ], + "name": "StakeRecordCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Staked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum LibStakingStorage.States", + "name": "newState", + "type": "uint8" + } + ], + "name": "StateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorBanned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorKickedFromNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "ValidatorRejoinedNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "FixedCostRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userStakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + } + ], + "name": "StakeRecordUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recordId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "StakeRewardsClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fromEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toEpoch", + "type": "uint256" + } + ], + "name": "ValidatorCommissionClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakerAddress", + "type": "address" + } + ], + "name": "ValidatorRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "exists", + "type": "bool" + }, + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "hashed", + "type": "bytes32" + } + ], + "name": "KeySetConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "identifier", + "type": "string" + } + ], + "name": "KeySetConfigUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "AdvancedEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "attestedAddress", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "y", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct LibStakingStorage.UncompressedK256Key", + "name": "attestedPubKey", + "type": "tuple" + } + ], + "name": "AttestedWalletRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "tolerance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intervalSecs", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyPercent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kickPenaltyDemerits", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.ComplaintConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "ComplaintConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newTokenRewardPerTokenPerEpoch", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newKeyTypes", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinimumValidatorCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxConcurrentRequests", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMinPresignCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newPeerCheckingIntervalSecs", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newMaxPresignConcurrency", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "newRpcHealthcheckEnabled", + "type": "bool" + } + ], + "name": "ConfigSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochNumber", + "type": "uint256" + } + ], + "name": "ReadyForNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Recovered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToJoin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "staker", + "type": "address" + } + ], + "name": "RequestToLeave", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newDuration", + "type": "uint256" + } + ], + "name": "RewardsDurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newStakingTokenAddress", + "type": "address" + } + ], + "name": "StakingTokenSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + } + ], + "name": "VoteToAdvanceTimeOutElapsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "validatorToKickStakerAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "reason", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "VotedToKickValidatorInNextEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "major", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "patch", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibStakingStorage.Version", + "name": "version", + "type": "tuple" + } + ], + "name": "VersionRequirementsUpdated", + "type": "event" + } + ] + }, + "PubkeyRouter": { + "address": "0x5655D71832f6f2AFD72c3012a60144f5572897F1", + "methods": { + "deriveEthAddressFromPubkey": { + "inputs": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "deriveEthAddressFromPubkey", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + "ethAddressToPkpId": { + "inputs": [ + { + "internalType": "address", + "name": "ethAddress", + "type": "address" + } + ], + "name": "ethAddressToPkpId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getDerivedPubkey": { + "inputs": [ + { + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "getDerivedPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getEthAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getEthAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPubkey": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPubkey", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "DebugEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + } + ], + "name": "PubkeyRoutingDataSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "stakingContract", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct IPubkeyRouter.RootKey", + "name": "rootKey", + "type": "tuple" + } + ], + "name": "RootKeySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ToggleEvent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + } + ] + }, + "PKPNFT": { + "address": "0x11eBfFeab32f6cb5775BeF83E09124B9322E4026", + "methods": { + "claimAndMint": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "stakingContractAddress", + "type": "address" + } + ], + "name": "claimAndMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "mintCost": { + "inputs": [], + "name": "mintCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "mintNext": { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + } + ], + "name": "mintNext", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "safeTransferFrom": { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "tokenOfOwnerByIndex": { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newFreeMintSigner", + "type": "address" + } + ], + "name": "FreeMintSignerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newMintCost", + "type": "uint256" + } + ], + "name": "MintCostSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "pubkey", + "type": "bytes" + } + ], + "name": "PKPMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrew", + "type": "event" + } + ] + }, + "PKPHelper": { + "address": "0xAe666c3080AA5Dd935574099c18E1eD779FFB231", + "methods": { + "claimAndMintNextAndAddAuthMethodsWithTypes": { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "derivedKeyId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + } + ], + "internalType": "struct IPubkeyRouter.Signature[]", + "name": "signatures", + "type": "tuple[]" + } + ], + "internalType": "struct LibPKPNFTStorage.ClaimMaterial", + "name": "claimMaterial", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "permittedIpfsCIDs", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedIpfsCIDScopes", + "type": "uint256[][]" + }, + { + "internalType": "address[]", + "name": "permittedAddresses", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAddressScopes", + "type": "uint256[][]" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "internalType": "struct PKPHelper.AuthMethodData", + "name": "authMethodData", + "type": "tuple" + } + ], + "name": "claimAndMintNextAndAddAuthMethodsWithTypes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + "mintNextAndAddAuthMethods": { + "inputs": [ + { + "internalType": "uint256", + "name": "keyType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "keySetId", + "type": "string" + }, + { + "internalType": "uint256[]", + "name": "permittedAuthMethodTypes", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodIds", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "permittedAuthMethodPubkeys", + "type": "bytes[]" + }, + { + "internalType": "uint256[][]", + "name": "permittedAuthMethodScopes", + "type": "uint256[][]" + }, + { + "internalType": "bool", + "name": "addPkpEthAddressAsPermittedAddress", + "type": "bool" + }, + { + "internalType": "bool", + "name": "sendPkpToItself", + "type": "bool" + } + ], + "name": "mintNextAndAddAuthMethods", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + } + ] + }, + "PKPPermissions": { + "address": "0xEB1F9A8567bC01b8cfa9d6e7078bEf587D908342", + "methods": { + "addPermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod", + "name": "authMethod", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "scopes", + "type": "uint256[]" + } + ], + "name": "addPermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "addPermittedAuthMethodScope": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "addPermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "getPermittedActions": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedActions", + "outputs": [ + { + "internalType": "bytes[]", + "name": "", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAddresses": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAuthMethodScopes": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "maxScopeId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethodScopes", + "outputs": [ + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPermittedAuthMethods": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getPermittedAuthMethods", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "internalType": "struct LibPKPPermissionsStorage.AuthMethod[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getTokenIdsForAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "getTokenIdsForAuthMethod", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "isPermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "isPermittedAction", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + "isPermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "isPermittedAddress", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + "removePermittedAction": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ipfsCID", + "type": "bytes" + } + ], + "name": "removePermittedAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAddress": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "removePermittedAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAuthMethod": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "removePermittedAuthMethod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "removePermittedAuthMethodScope": { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "removePermittedAuthMethodScope", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newResolverAddress", + "type": "address" + } + ], + "name": "ContractResolverAddressSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "userPubkey", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + } + ], + "name": "PermittedAuthMethodRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "authMethodType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "id", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "scopeId", + "type": "uint256" + } + ], + "name": "PermittedAuthMethodScopeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "group", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "RootHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + } + ] + }, + "PaymentDelegation": { + "address": "0x5EF658cB6ab3C3BfB75C8293B9a6C8ccb0b96C3c", + "methods": { + "delegatePayments": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "delegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "delegatePaymentsBatch": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "delegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "getPayers": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPayers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getPayersAndRestrictions": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "getPayersAndRestrictions", + "outputs": [ + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction[][]", + "name": "", + "type": "tuple[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getRestriction": { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getRestriction", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + "getUsers": { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address" + } + ], + "name": "getUsers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + "setRestriction": { + "inputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "r", + "type": "tuple" + } + ], + "name": "setRestriction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "undelegatePayments": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "undelegatePayments", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "undelegatePaymentsBatch": { + "inputs": [ + { + "internalType": "address[]", + "name": "users", + "type": "address[]" + } + ], + "name": "undelegatePaymentsBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint128", + "name": "totalMaxPrice", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "requestsPerPeriod", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "periodSeconds", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct LibPaymentDelegationStorage.Restriction", + "name": "restriction", + "type": "tuple" + } + ], + "name": "RestrictionSet", + "type": "event" + } + ] + }, + "Ledger": { + "address": "0x9BD023448d2D3b2D73fe61E4d7859007F6dA372c", + "methods": { + "withdraw": { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "balance": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "balance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "deposit": { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + "depositForUser": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "depositForUser", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + "latestWithdrawRequest": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "latestWithdrawRequest", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct LibLedgerStorage.WithdrawRequest", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + "requestWithdraw": { + "inputs": [ + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "requestWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + "stableBalance": { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "stableBalance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + "userWithdrawDelay": { + "inputs": [], + "name": "userWithdrawDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "batch_id", + "type": "uint256" + } + ], + "name": "BatchCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "depositor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DepositForUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FoundationRewardsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "LitFoundationSplitPercentageSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "RewardWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RewardWithdrawRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "UserCharged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "delay", + "type": "uint256" + } + ], + "name": "UserWithdrawDelaySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "WithdrawRequest", + "type": "event" + } + ] + }, + "PriceFeed": { + "address": "0x88F5535Fa6dA5C225a3C06489fE4e3405b87608C", + "methods": { + "getNodesForRequest": { + "inputs": [ + { + "internalType": "uint256", + "name": "realmId", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "productIds", + "type": "uint256[]" + } + ], + "name": "getNodesForRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "ip", + "type": "uint32" + }, + { + "internalType": "uint128", + "name": "ipv6", + "type": "uint128" + }, + { + "internalType": "uint32", + "name": "port", + "type": "uint32" + }, + { + "internalType": "address", + "name": "nodeAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "senderPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "receiverPubKey", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastActiveEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "commissionRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRealmId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatedStakeWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedFixedCostRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardEpochClaimedCommission", + "type": "uint256" + }, + { + "internalType": "address", + "name": "operatorAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "uniqueDelegatingStakerCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "registerAttestedWalletDisabled", + "type": "bool" + } + ], + "internalType": "struct LibStakingStorage.Validator", + "name": "validator", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "prices", + "type": "uint256[]" + } + ], + "internalType": "struct LibPriceFeedStorage.NodeInfoAndPrices[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } + }, + "events": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamond.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamond.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "BaseNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + } + ], + "name": "MaxNetworkPriceSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newTrustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "stakingAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "usagePercent", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "newPrices", + "type": "uint256[]" + } + ], + "name": "UsageSet", + "type": "event" + } + ] + } +}; diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 56fd06300..b62a6b6e4 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -83,6 +83,26 @@ "require": "./dist/signatures/naga-staging.cjs", "types": "./dist/signatures/naga-staging.d.ts" }, + "./prod/naga-proto": { + "import": "./dist/prod/naga-proto.js", + "require": "./dist/prod/naga-proto.cjs", + "types": "./dist/prod/naga-proto.d.ts" + }, + "./signatures/naga-proto": { + "import": "./dist/signatures/naga-proto.js", + "require": "./dist/signatures/naga-proto.cjs", + "types": "./dist/signatures/naga-proto.d.ts" + }, + "./prod/naga": { + "import": "./dist/prod/naga.js", + "require": "./dist/prod/naga.cjs", + "types": "./dist/prod/naga.d.ts" + }, + "./signatures/naga": { + "import": "./dist/signatures/naga.js", + "require": "./dist/signatures/naga.cjs", + "types": "./dist/signatures/naga.d.ts" + }, "./dev/develop": { "import": "./dist/dev/develop.js", "require": "./dist/dev/develop.cjs", @@ -141,6 +161,18 @@ "signatures/naga-staging": [ "dist/signatures/naga-staging.d.ts" ], + "prod/naga-proto": [ + "dist/prod/naga-proto.d.ts" + ], + "signatures/naga-proto": [ + "dist/signatures/naga-proto.d.ts" + ], + "prod/naga": [ + "dist/prod/naga.d.ts" + ], + "signatures/naga": [ + "dist/signatures/naga.d.ts" + ], "dev/develop": [ "dist/dev/develop.d.ts" ], diff --git a/packages/contracts/src/config/networks.ts b/packages/contracts/src/config/networks.ts index bdd2b27d4..cf2fda508 100644 --- a/packages/contracts/src/config/networks.ts +++ b/packages/contracts/src/config/networks.ts @@ -17,6 +17,8 @@ export const PROD_PATH_BY_NETWORK = { 'naga-dev': 'naga-dev', 'naga-test': 'naga-test', 'naga-staging': 'naga-staging', + 'naga-proto': 'naga-proto', + 'naga': 'naga-prod', } as const; export const DEV_PATH_BY_NETWORK = { @@ -93,6 +95,10 @@ export const NETWORKS = { 'https://raw.githubusercontent.com/LIT-Protocol/networks/main/naga-staging/deployed-lit-node-contracts-temp.json', 'naga-test': 'https://raw.githubusercontent.com/LIT-Protocol/networks/main/naga-test/deployed-lit-node-contracts-temp.json', + 'naga-proto': + 'https://raw.githubusercontent.com/LIT-Protocol/networks/main/naga-proto/deployed-lit-node-contracts-temp.json', + 'naga': + 'https://raw.githubusercontent.com/LIT-Protocol/networks/main/naga-prod/deployed-lit-node-contracts-temp.json', }, }, dev: { diff --git a/packages/contracts/src/sync.ts b/packages/contracts/src/sync.ts index f63e9c9bc..99d3c9530 100644 --- a/packages/contracts/src/sync.ts +++ b/packages/contracts/src/sync.ts @@ -157,6 +157,10 @@ function updatePackageJsonExports(networks: { // Add custom network signatures const customNetworkSignaturesPath = 'custom-network-signatures'; exports[`./${customNetworkSignaturesPath}`] = { + browser: { + import: `./dist/${customNetworkSignaturesPath}.browser.js`, + require: `./dist/${customNetworkSignaturesPath}.browser.cjs`, + }, import: `./dist/${customNetworkSignaturesPath}.js`, require: `./dist/${customNetworkSignaturesPath}.cjs`, types: `./dist/${customNetworkSignaturesPath}.d.ts`, diff --git a/packages/networks/src/chains/LitChain.ts b/packages/networks/src/chains/LitChain.ts new file mode 100644 index 000000000..536783dfa --- /dev/null +++ b/packages/networks/src/chains/LitChain.ts @@ -0,0 +1,67 @@ +import { createConfig } from '@wagmi/core'; +import { Chain, http } from 'viem'; + +export const CHAIN_ID = 175200; +export const CHAIN_NAME = 'Lit Chain'; +export const CHAIN_SYMBOL = 'LITKEY'; +export const RPC_URL = 'https://lit-chain-rpc.litprotocol.com/'; +export const EXPLORER_URL = 'https://lit-chain-explorer.litprotocol.com/'; +export const EXPLORER_NAME = 'Lit Chain Explorer'; + +/** + * Configuration for the Lit Chain mainnet. + */ +export const viemChainConfig: Readonly = Object.freeze({ + id: CHAIN_ID, + name: CHAIN_NAME, + nativeCurrency: { + name: CHAIN_NAME, + symbol: CHAIN_SYMBOL, + decimals: 18, + }, + rpcUrls: { + default: { + http: [RPC_URL], + }, + public: { + http: [RPC_URL], + }, + }, + blockExplorers: { + default: { + name: EXPLORER_NAME, + url: EXPLORER_URL, + }, + }, +}); + +export const WagmiConfig = createConfig({ + chains: [viemChainConfig], + transports: { + [viemChainConfig.id]: http(), + }, +}); + +/** + * Resolve the effective RPC URL from an optional override. + */ +export function resolveRpcUrl(overrideRpc?: string): string { + return overrideRpc ?? RPC_URL; +} + +/** + * Build a Chain config using the base Lit Chain config, + * applying an optional RPC override to both default and public http URLs. + */ +export function buildViemChainConfig(overrideRpc?: string): Chain { + const rpc = resolveRpcUrl(overrideRpc); + const base = viemChainConfig; + return { + ...base, + rpcUrls: { + ...base.rpcUrls, + default: { ...base.rpcUrls.default, http: [rpc] }, + public: { ...(base.rpcUrls as any)['public'], http: [rpc] }, + }, + } as Chain; +} diff --git a/packages/networks/src/index.ts b/packages/networks/src/index.ts index 8520ab74b..12182cf40 100644 --- a/packages/networks/src/index.ts +++ b/packages/networks/src/index.ts @@ -3,6 +3,8 @@ import type { NagaLocalModule } from './networks/vNaga'; import type { NagaDevModule } from './networks/vNaga'; import type { NagaTestModule } from './networks/vNaga'; import type { NagaStagingModule } from './networks/vNaga'; +import type { NagaProductionModule } from './networks/vNaga'; +import type { NagaProtoModule } from './networks/vNaga'; // Network modules export { @@ -12,6 +14,8 @@ export { nagaLocal, nagaDev, nagaTest, + nagaProduction, + nagaProto, } from './networks/vNaga'; // Network module types @@ -19,13 +23,17 @@ export type { NagaLocalModule } from './networks/vNaga'; export type { NagaDevModule } from './networks/vNaga'; export type { NagaTestModule } from './networks/vNaga'; export type { NagaStagingModule } from './networks/vNaga'; +export type { NagaProductionModule } from './networks/vNaga'; +export type { NagaProtoModule } from './networks/vNaga'; // All Network modules export type LitNetworkModule = | NagaLocalModule | NagaDevModule | NagaTestModule - | NagaStagingModule; + | NagaStagingModule + | NagaProductionModule + | NagaProtoModule; // | NagaProdModule // | NagaLocalModule // | DatilDevModule diff --git a/packages/networks/src/networks/vNaga/envs/naga-production/chain-manager/createChainManager.ts b/packages/networks/src/networks/vNaga/envs/naga-production/chain-manager/createChainManager.ts new file mode 100644 index 000000000..22a7e6520 --- /dev/null +++ b/packages/networks/src/networks/vNaga/envs/naga-production/chain-manager/createChainManager.ts @@ -0,0 +1,22 @@ +import type { ExpectedAccountOrWalletClient } from '../../../shared/managers/contract-manager/createContractsManager'; +import { + createChainManagerFactory, + createReadOnlyChainManagerFactory, + CreateChainManagerReturn, +} from '../../../shared/factories/BaseChainManagerFactory'; +import { nagaProductionEnvironment } from '../naga-production.env'; + +export type { CreateChainManagerReturn }; + +export const createChainManager = ( + accountOrWalletClient: ExpectedAccountOrWalletClient +): CreateChainManagerReturn => { + return createChainManagerFactory( + nagaProductionEnvironment.getConfig(), + accountOrWalletClient + ); +}; + +export const createReadOnlyChainManager = createReadOnlyChainManagerFactory( + nagaProductionEnvironment.getConfig() +); diff --git a/packages/networks/src/networks/vNaga/envs/naga-production/index.ts b/packages/networks/src/networks/vNaga/envs/naga-production/index.ts new file mode 100644 index 000000000..d28e544d0 --- /dev/null +++ b/packages/networks/src/networks/vNaga/envs/naga-production/index.ts @@ -0,0 +1 @@ +export { nagaProduction } from './naga-production.module'; diff --git a/packages/networks/src/networks/vNaga/envs/naga-production/naga-production.env.ts b/packages/networks/src/networks/vNaga/envs/naga-production/naga-production.env.ts new file mode 100644 index 000000000..919a2c13d --- /dev/null +++ b/packages/networks/src/networks/vNaga/envs/naga-production/naga-production.env.ts @@ -0,0 +1,58 @@ +import { nagaSignatures } from '@lit-protocol/contracts'; +import { Chain } from 'viem'; +import * as chainInfo from '../../../../chains/LitChain'; +import { NAGA_ENDPOINT } from '../../shared/managers/endpoints-manager/endpoints'; +import type { NagaEndpointsType } from '../../shared/managers/endpoints-manager/endpoints'; +import { BaseNetworkEnvironment } from '../base/BaseNetworkEnvironment'; + +const NETWORK = 'naga'; +const PROTOCOL = 'https://'; +const MINIMUM_THRESHOLD = 3; +const DEFAULT_REALM_ID = 1n; + +export interface NagaProductionSpecificConfigs { + realmId?: bigint; +} + +export type NagaProductionSignatures = typeof nagaSignatures; + +export class NagaProductionEnvironment extends BaseNetworkEnvironment< + NagaProductionSignatures, + NagaProductionSpecificConfigs +> { + constructor(options?: { rpcUrlOverride?: string }) { + super({ + network: NETWORK, + abiSignatures: nagaSignatures, + networkSpecificConfigs: { + realmId: DEFAULT_REALM_ID, + }, + services: { + loginServiceBaseUrl: '', // Lit does not host a default login server for production + }, + minimumThreshold: MINIMUM_THRESHOLD, + httpProtocol: PROTOCOL, + requiredAttestation: true, + rpcUrlOverride: options?.rpcUrlOverride, + }); + } + + protected getRpcUrl(overrideRpc?: string): string { + return chainInfo.resolveRpcUrl(overrideRpc); + } + + protected getChainConfig(overrideRpc?: string): Chain { + return chainInfo.buildViemChainConfig(overrideRpc); + } + + protected getEndpoints(): NagaEndpointsType { + return NAGA_ENDPOINT; + } + + protected getDefaultRealmId(): bigint { + return DEFAULT_REALM_ID; + } +} + +// Create singleton instance +export const nagaProductionEnvironment = new NagaProductionEnvironment(); diff --git a/packages/networks/src/networks/vNaga/envs/naga-production/naga-production.module.ts b/packages/networks/src/networks/vNaga/envs/naga-production/naga-production.module.ts new file mode 100644 index 000000000..20d612caf --- /dev/null +++ b/packages/networks/src/networks/vNaga/envs/naga-production/naga-production.module.ts @@ -0,0 +1,14 @@ +import { createBaseModule } from '../../shared/factories/BaseModuleFactory'; +import type { ExpectedAccountOrWalletClient } from '../../shared/managers/contract-manager/createContractsManager'; +import { createChainManager } from './chain-manager/createChainManager'; +import { nagaProductionEnvironment } from './naga-production.env'; + +const nagaProduction = createBaseModule({ + networkConfig: nagaProductionEnvironment.getConfig(), + moduleName: nagaProductionEnvironment.getNetworkName(), + createChainManager: (account: ExpectedAccountOrWalletClient) => + createChainManager(account), +}); + +export type NagaProduction = typeof nagaProduction; +export { nagaProduction }; diff --git a/packages/networks/src/networks/vNaga/envs/naga-proto/chain-manager/createChainManager.ts b/packages/networks/src/networks/vNaga/envs/naga-proto/chain-manager/createChainManager.ts new file mode 100644 index 000000000..a3f3cebf3 --- /dev/null +++ b/packages/networks/src/networks/vNaga/envs/naga-proto/chain-manager/createChainManager.ts @@ -0,0 +1,22 @@ +import type { ExpectedAccountOrWalletClient } from '../../../shared/managers/contract-manager/createContractsManager'; +import { + createChainManagerFactory, + createReadOnlyChainManagerFactory, + CreateChainManagerReturn, +} from '../../../shared/factories/BaseChainManagerFactory'; +import { nagaProtoEnvironment } from '../naga-proto.env'; + +export type { CreateChainManagerReturn }; + +export const createChainManager = ( + accountOrWalletClient: ExpectedAccountOrWalletClient +): CreateChainManagerReturn => { + return createChainManagerFactory( + nagaProtoEnvironment.getConfig(), + accountOrWalletClient + ); +}; + +export const createReadOnlyChainManager = createReadOnlyChainManagerFactory( + nagaProtoEnvironment.getConfig() +); diff --git a/packages/networks/src/networks/vNaga/envs/naga-proto/index.ts b/packages/networks/src/networks/vNaga/envs/naga-proto/index.ts new file mode 100644 index 000000000..841350473 --- /dev/null +++ b/packages/networks/src/networks/vNaga/envs/naga-proto/index.ts @@ -0,0 +1 @@ +export { nagaProto } from './naga-proto.module'; diff --git a/packages/networks/src/networks/vNaga/envs/naga-proto/naga-proto.env.ts b/packages/networks/src/networks/vNaga/envs/naga-proto/naga-proto.env.ts new file mode 100644 index 000000000..6a979f370 --- /dev/null +++ b/packages/networks/src/networks/vNaga/envs/naga-proto/naga-proto.env.ts @@ -0,0 +1,58 @@ +import { nagaProtoSignatures } from '@lit-protocol/contracts'; +import { Chain } from 'viem'; +import * as chainInfo from '../../../../chains/ChronicleYellowstone'; +import { NAGA_ENDPOINT } from '../../shared/managers/endpoints-manager/endpoints'; +import type { NagaEndpointsType } from '../../shared/managers/endpoints-manager/endpoints'; +import { BaseNetworkEnvironment } from '../base/BaseNetworkEnvironment'; + +const NETWORK = 'naga-proto'; +const PROTOCOL = 'https://'; +const MINIMUM_THRESHOLD = 3; +const DEFAULT_REALM_ID = 1n; + +export interface NagaProtoSpecificConfigs { + realmId?: bigint; +} + +export type NagaProtoSignatures = typeof nagaProtoSignatures; + +export class NagaProtoEnvironment extends BaseNetworkEnvironment< + NagaProtoSignatures, + NagaProtoSpecificConfigs +> { + constructor(options?: { rpcUrlOverride?: string }) { + super({ + network: NETWORK, + abiSignatures: nagaProtoSignatures, + networkSpecificConfigs: { + realmId: DEFAULT_REALM_ID, + }, + services: { + loginServiceBaseUrl: 'https://login.litgateway.com', + }, + minimumThreshold: MINIMUM_THRESHOLD, + httpProtocol: PROTOCOL, + requiredAttestation: true, + rpcUrlOverride: options?.rpcUrlOverride, + }); + } + + protected getRpcUrl(overrideRpc?: string): string { + return chainInfo.resolveRpcUrl(overrideRpc); + } + + protected getChainConfig(overrideRpc?: string): Chain { + return chainInfo.buildViemChainConfig(overrideRpc); + } + + protected getEndpoints(): NagaEndpointsType { + return NAGA_ENDPOINT; + } + + protected getDefaultRealmId(): bigint { + return DEFAULT_REALM_ID; + } +} + +// Create singleton instance +export const nagaProtoEnvironment = new NagaProtoEnvironment(); diff --git a/packages/networks/src/networks/vNaga/envs/naga-proto/naga-proto.module.ts b/packages/networks/src/networks/vNaga/envs/naga-proto/naga-proto.module.ts new file mode 100644 index 000000000..dd49d9741 --- /dev/null +++ b/packages/networks/src/networks/vNaga/envs/naga-proto/naga-proto.module.ts @@ -0,0 +1,14 @@ +import { createBaseModule } from '../../shared/factories/BaseModuleFactory'; +import type { ExpectedAccountOrWalletClient } from '../../shared/managers/contract-manager/createContractsManager'; +import { createChainManager } from './chain-manager/createChainManager'; +import { nagaProtoEnvironment } from './naga-proto.env'; + +const nagaProto = createBaseModule({ + networkConfig: nagaProtoEnvironment.getConfig(), + moduleName: nagaProtoEnvironment.getNetworkName(), + createChainManager: (account: ExpectedAccountOrWalletClient) => + createChainManager(account), +}); + +export type NagaProto = typeof nagaProto; +export { nagaProto }; diff --git a/packages/networks/src/networks/vNaga/index.ts b/packages/networks/src/networks/vNaga/index.ts index 1be7049fe..342ec1470 100644 --- a/packages/networks/src/networks/vNaga/index.ts +++ b/packages/networks/src/networks/vNaga/index.ts @@ -16,3 +16,11 @@ export type { NagaTest as NagaTestModule } from './envs/naga-test/naga-test.modu // Naga Staging export { nagaStaging } from './envs/naga-staging'; export type { NagaStaging as NagaStagingModule } from './envs/naga-staging/naga-staging.module'; + +// Naga Production +export { nagaProduction } from './envs/naga-production'; +export type { NagaProduction as NagaProductionModule } from './envs/naga-production/naga-production.module'; + +// Naga Proto +export { nagaProto } from './envs/naga-proto'; +export type { NagaProto as NagaProtoModule } from './envs/naga-proto/naga-proto.module'; From 38aee40189faae785cd04c52143d1377e5c0896c Mon Sep 17 00:00:00 2001 From: anson Date: Fri, 14 Nov 2025 17:18:29 +0000 Subject: [PATCH 02/15] feat(networks): add per-network subpath exports --- packages/networks/package.json | 70 ++++++++++++++++++- packages/networks/src/entries/naga-dev.ts | 2 + packages/networks/src/entries/naga-local.ts | 5 ++ .../networks/src/entries/naga-production.ts | 2 + packages/networks/src/entries/naga-proto.ts | 2 + packages/networks/src/entries/naga-staging.ts | 2 + packages/networks/src/entries/naga-test.ts | 2 + packages/networks/src/entries/naga.ts | 2 + packages/networks/src/index.ts | 6 +- packages/networks/src/networks/vNaga/index.ts | 4 ++ 10 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 packages/networks/src/entries/naga-dev.ts create mode 100644 packages/networks/src/entries/naga-local.ts create mode 100644 packages/networks/src/entries/naga-production.ts create mode 100644 packages/networks/src/entries/naga-proto.ts create mode 100644 packages/networks/src/entries/naga-staging.ts create mode 100644 packages/networks/src/entries/naga-test.ts create mode 100644 packages/networks/src/entries/naga.ts diff --git a/packages/networks/package.json b/packages/networks/package.json index 1807ea335..c87c5604e 100644 --- a/packages/networks/package.json +++ b/packages/networks/package.json @@ -40,5 +40,73 @@ "version": "8.3.2", "main": "./index.js", "typings": "./index.d.ts", - "types": "./index.d.ts" + "types": "./index.d.ts", + "exports": { + ".": { + "types": "./index.d.ts", + "require": "./index.js", + "import": "./index.js" + }, + "./package.json": "./package.json", + "./naga": { + "types": "./entries/naga.d.ts", + "require": "./entries/naga.js", + "import": "./entries/naga.js" + }, + "./naga-production": { + "types": "./entries/naga-production.d.ts", + "require": "./entries/naga-production.js", + "import": "./entries/naga-production.js" + }, + "./naga-proto": { + "types": "./entries/naga-proto.d.ts", + "require": "./entries/naga-proto.js", + "import": "./entries/naga-proto.js" + }, + "./naga-staging": { + "types": "./entries/naga-staging.d.ts", + "require": "./entries/naga-staging.js", + "import": "./entries/naga-staging.js" + }, + "./naga-test": { + "types": "./entries/naga-test.d.ts", + "require": "./entries/naga-test.js", + "import": "./entries/naga-test.js" + }, + "./naga-dev": { + "types": "./entries/naga-dev.d.ts", + "require": "./entries/naga-dev.js", + "import": "./entries/naga-dev.js" + }, + "./naga-local": { + "types": "./entries/naga-local.d.ts", + "require": "./entries/naga-local.js", + "import": "./entries/naga-local.js" + } + }, + "typesVersions": { + "*": { + "naga": [ + "entries/naga.d.ts" + ], + "naga-production": [ + "entries/naga-production.d.ts" + ], + "naga-proto": [ + "entries/naga-proto.d.ts" + ], + "naga-staging": [ + "entries/naga-staging.d.ts" + ], + "naga-test": [ + "entries/naga-test.d.ts" + ], + "naga-dev": [ + "entries/naga-dev.d.ts" + ], + "naga-local": [ + "entries/naga-local.d.ts" + ] + } + } } diff --git a/packages/networks/src/entries/naga-dev.ts b/packages/networks/src/entries/naga-dev.ts new file mode 100644 index 000000000..67b96a11a --- /dev/null +++ b/packages/networks/src/entries/naga-dev.ts @@ -0,0 +1,2 @@ +export { nagaDev } from '../networks/vNaga/envs/naga-dev/naga-dev.module'; +export type { NagaDevUnifiedModule as NagaDevModule } from '../networks/vNaga/envs/naga-dev/naga-dev.module'; diff --git a/packages/networks/src/entries/naga-local.ts b/packages/networks/src/entries/naga-local.ts new file mode 100644 index 000000000..709a1ac1a --- /dev/null +++ b/packages/networks/src/entries/naga-local.ts @@ -0,0 +1,5 @@ +export { nagaLocal } from '../networks/vNaga/envs/naga-local/naga-local.module'; +export type { + NagaLocal as NagaLocalModule, + NagaLocalContextOptions, +} from '../networks/vNaga/envs/naga-local/naga-local.module'; diff --git a/packages/networks/src/entries/naga-production.ts b/packages/networks/src/entries/naga-production.ts new file mode 100644 index 000000000..aa2a5c390 --- /dev/null +++ b/packages/networks/src/entries/naga-production.ts @@ -0,0 +1,2 @@ +export { nagaProduction } from '../networks/vNaga/envs/naga-production/naga-production.module'; +export type { NagaProduction as NagaProductionModule } from '../networks/vNaga/envs/naga-production/naga-production.module'; diff --git a/packages/networks/src/entries/naga-proto.ts b/packages/networks/src/entries/naga-proto.ts new file mode 100644 index 000000000..d7ddf1e07 --- /dev/null +++ b/packages/networks/src/entries/naga-proto.ts @@ -0,0 +1,2 @@ +export { nagaProto } from '../networks/vNaga/envs/naga-proto/naga-proto.module'; +export type { NagaProto as NagaProtoModule } from '../networks/vNaga/envs/naga-proto/naga-proto.module'; diff --git a/packages/networks/src/entries/naga-staging.ts b/packages/networks/src/entries/naga-staging.ts new file mode 100644 index 000000000..32e26a633 --- /dev/null +++ b/packages/networks/src/entries/naga-staging.ts @@ -0,0 +1,2 @@ +export { nagaStaging } from '../networks/vNaga/envs/naga-staging/naga-staging.module'; +export type { NagaStaging as NagaStagingModule } from '../networks/vNaga/envs/naga-staging/naga-staging.module'; diff --git a/packages/networks/src/entries/naga-test.ts b/packages/networks/src/entries/naga-test.ts new file mode 100644 index 000000000..35d8b2ac4 --- /dev/null +++ b/packages/networks/src/entries/naga-test.ts @@ -0,0 +1,2 @@ +export { nagaTest } from '../networks/vNaga/envs/naga-test/naga-test.module'; +export type { NagaTest as NagaTestModule } from '../networks/vNaga/envs/naga-test/naga-test.module'; diff --git a/packages/networks/src/entries/naga.ts b/packages/networks/src/entries/naga.ts new file mode 100644 index 000000000..fb5e3a023 --- /dev/null +++ b/packages/networks/src/entries/naga.ts @@ -0,0 +1,2 @@ +export { nagaProduction as naga } from '../networks/vNaga/envs/naga-production/naga-production.module'; +export type { NagaProduction as NagaModule } from '../networks/vNaga/envs/naga-production/naga-production.module'; diff --git a/packages/networks/src/index.ts b/packages/networks/src/index.ts index 12182cf40..72867e7e7 100644 --- a/packages/networks/src/index.ts +++ b/packages/networks/src/index.ts @@ -5,6 +5,7 @@ import type { NagaTestModule } from './networks/vNaga'; import type { NagaStagingModule } from './networks/vNaga'; import type { NagaProductionModule } from './networks/vNaga'; import type { NagaProtoModule } from './networks/vNaga'; +import type { NagaModule } from './networks/vNaga'; // Network modules export { @@ -16,6 +17,7 @@ export { nagaTest, nagaProduction, nagaProto, + naga, } from './networks/vNaga'; // Network module types @@ -25,6 +27,7 @@ export type { NagaTestModule } from './networks/vNaga'; export type { NagaStagingModule } from './networks/vNaga'; export type { NagaProductionModule } from './networks/vNaga'; export type { NagaProtoModule } from './networks/vNaga'; +export type { NagaModule } from './networks/vNaga'; // All Network modules export type LitNetworkModule = @@ -33,7 +36,8 @@ export type LitNetworkModule = | NagaTestModule | NagaStagingModule | NagaProductionModule - | NagaProtoModule; + | NagaProtoModule + | NagaModule; // | NagaProdModule // | NagaLocalModule // | DatilDevModule diff --git a/packages/networks/src/networks/vNaga/index.ts b/packages/networks/src/networks/vNaga/index.ts index 342ec1470..f15bcdbd8 100644 --- a/packages/networks/src/networks/vNaga/index.ts +++ b/packages/networks/src/networks/vNaga/index.ts @@ -21,6 +21,10 @@ export type { NagaStaging as NagaStagingModule } from './envs/naga-staging/naga- export { nagaProduction } from './envs/naga-production'; export type { NagaProduction as NagaProductionModule } from './envs/naga-production/naga-production.module'; +// Naga (alias for production) +export { nagaProduction as naga } from './envs/naga-production'; +export type { NagaProduction as NagaModule } from './envs/naga-production/naga-production.module'; + // Naga Proto export { nagaProto } from './envs/naga-proto'; export type { NagaProto as NagaProtoModule } from './envs/naga-proto/naga-proto.module'; From edf1099e9abc3022c5da1d5d7d5c2847a8496d8a Mon Sep 17 00:00:00 2001 From: anson Date: Fri, 14 Nov 2025 17:20:52 +0000 Subject: [PATCH 03/15] chore(release): create changset --- .changeset/fruity-lands-help.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/fruity-lands-help.md diff --git a/.changeset/fruity-lands-help.md b/.changeset/fruity-lands-help.md new file mode 100644 index 000000000..239566fe8 --- /dev/null +++ b/.changeset/fruity-lands-help.md @@ -0,0 +1,6 @@ +--- +'@lit-protocol/contracts': minor +'@lit-protocol/networks': minor +--- + +Interanl devs can now run pnpm sync:contracts and import nagaProto from @lit-protocol/networks to target the new ChronYellowstone-based naga-proto realm, ensuring contract addresses/ABIs and SDK tooling stay in sync with the latest Lit deployment. From 2e15b4ae9b599b87d936f409d6c6c50aee10a3c1 Mon Sep 17 00:00:00 2001 From: anson Date: Fri, 14 Nov 2025 17:22:13 +0000 Subject: [PATCH 04/15] fmt --- .changeset/fruity-lands-help.md | 2 +- packages/contracts/src/config/networks.ts | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.changeset/fruity-lands-help.md b/.changeset/fruity-lands-help.md index 239566fe8..bfbd49585 100644 --- a/.changeset/fruity-lands-help.md +++ b/.changeset/fruity-lands-help.md @@ -3,4 +3,4 @@ '@lit-protocol/networks': minor --- -Interanl devs can now run pnpm sync:contracts and import nagaProto from @lit-protocol/networks to target the new ChronYellowstone-based naga-proto realm, ensuring contract addresses/ABIs and SDK tooling stay in sync with the latest Lit deployment. +Add `naga` and `naga-proto` networks. Create per-network entrypoints and subpath exports (naga, naga-production, naga-proto, naga-staging, naga-test, naga-dev, naga-local) for better tree-shaking diff --git a/packages/contracts/src/config/networks.ts b/packages/contracts/src/config/networks.ts index cf2fda508..9c4a5032f 100644 --- a/packages/contracts/src/config/networks.ts +++ b/packages/contracts/src/config/networks.ts @@ -18,7 +18,7 @@ export const PROD_PATH_BY_NETWORK = { 'naga-test': 'naga-test', 'naga-staging': 'naga-staging', 'naga-proto': 'naga-proto', - 'naga': 'naga-prod', + naga: 'naga-prod', } as const; export const DEV_PATH_BY_NETWORK = { @@ -97,8 +97,7 @@ export const NETWORKS = { 'https://raw.githubusercontent.com/LIT-Protocol/networks/main/naga-test/deployed-lit-node-contracts-temp.json', 'naga-proto': 'https://raw.githubusercontent.com/LIT-Protocol/networks/main/naga-proto/deployed-lit-node-contracts-temp.json', - 'naga': - 'https://raw.githubusercontent.com/LIT-Protocol/networks/main/naga-prod/deployed-lit-node-contracts-temp.json', + naga: 'https://raw.githubusercontent.com/LIT-Protocol/networks/main/naga-prod/deployed-lit-node-contracts-temp.json', }, }, dev: { From 444c72e826f34425b3be6a05b2a127da145c83ae Mon Sep 17 00:00:00 2001 From: anson Date: Fri, 14 Nov 2025 19:02:23 +0000 Subject: [PATCH 05/15] feat(networks): replace nagaProduction with nagaMainnet and update related exports --- docs/sdk/getting-started/lit-client.mdx | 4 ++-- packages/networks/package.json | 12 ++++++------ packages/networks/src/entries/naga-mainnet.ts | 2 ++ packages/networks/src/entries/naga-production.ts | 2 -- packages/networks/src/entries/naga.ts | 4 ++-- packages/networks/src/index.ts | 8 ++++---- .../chain-manager/createChainManager.ts | 6 +++--- .../src/networks/vNaga/envs/naga-mainnet/index.ts | 1 + .../naga-mainnet.env.ts} | 12 ++++++------ .../naga-mainnet.module.ts} | 12 ++++++------ .../src/networks/vNaga/envs/naga-production/index.ts | 1 - .../networks/vNaga/envs/naga-proto/naga-proto.env.ts | 4 ++-- packages/networks/src/networks/vNaga/index.ts | 12 ++++++------ 13 files changed, 40 insertions(+), 40 deletions(-) create mode 100644 packages/networks/src/entries/naga-mainnet.ts delete mode 100644 packages/networks/src/entries/naga-production.ts rename packages/networks/src/networks/vNaga/envs/{naga-production => naga-mainnet}/chain-manager/createChainManager.ts (79%) create mode 100644 packages/networks/src/networks/vNaga/envs/naga-mainnet/index.ts rename packages/networks/src/networks/vNaga/envs/{naga-production/naga-production.env.ts => naga-mainnet/naga-mainnet.env.ts} (81%) rename packages/networks/src/networks/vNaga/envs/{naga-production/naga-production.module.ts => naga-mainnet/naga-mainnet.module.ts} (55%) delete mode 100644 packages/networks/src/networks/vNaga/envs/naga-production/index.ts diff --git a/docs/sdk/getting-started/lit-client.mdx b/docs/sdk/getting-started/lit-client.mdx index 1eb03c9f4..4a82a28ef 100644 --- a/docs/sdk/getting-started/lit-client.mdx +++ b/docs/sdk/getting-started/lit-client.mdx @@ -65,11 +65,11 @@ const litClient = await createLitClient({ ```typescript Naga Mainnet // ❗️ Currently in development. Coming soon... -import { nagaProduction } from "@lit-protocol/networks"; +import { naga } from "@lit-protocol/networks"; import { createLitClient } from "@lit-protocol/lit-client"; const litClient = await createLitClient({ - network: nagaProduction, + network: naga, }); ``` diff --git a/packages/networks/package.json b/packages/networks/package.json index c87c5604e..52b8c9e84 100644 --- a/packages/networks/package.json +++ b/packages/networks/package.json @@ -53,10 +53,10 @@ "require": "./entries/naga.js", "import": "./entries/naga.js" }, - "./naga-production": { - "types": "./entries/naga-production.d.ts", - "require": "./entries/naga-production.js", - "import": "./entries/naga-production.js" + "./naga-mainnet": { + "types": "./entries/naga-mainnet.d.ts", + "require": "./entries/naga-mainnet.js", + "import": "./entries/naga-mainnet.js" }, "./naga-proto": { "types": "./entries/naga-proto.d.ts", @@ -89,8 +89,8 @@ "naga": [ "entries/naga.d.ts" ], - "naga-production": [ - "entries/naga-production.d.ts" + "naga-mainnet": [ + "entries/naga-mainnet.d.ts" ], "naga-proto": [ "entries/naga-proto.d.ts" diff --git a/packages/networks/src/entries/naga-mainnet.ts b/packages/networks/src/entries/naga-mainnet.ts new file mode 100644 index 000000000..e2dc0ff0d --- /dev/null +++ b/packages/networks/src/entries/naga-mainnet.ts @@ -0,0 +1,2 @@ +export { nagaMainnet } from '../networks/vNaga/envs/naga-mainnet/naga-mainnet.module'; +export type { NagaMainnet as NagaMainnetModule } from '../networks/vNaga/envs/naga-mainnet/naga-mainnet.module'; diff --git a/packages/networks/src/entries/naga-production.ts b/packages/networks/src/entries/naga-production.ts deleted file mode 100644 index aa2a5c390..000000000 --- a/packages/networks/src/entries/naga-production.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { nagaProduction } from '../networks/vNaga/envs/naga-production/naga-production.module'; -export type { NagaProduction as NagaProductionModule } from '../networks/vNaga/envs/naga-production/naga-production.module'; diff --git a/packages/networks/src/entries/naga.ts b/packages/networks/src/entries/naga.ts index fb5e3a023..a18148e4e 100644 --- a/packages/networks/src/entries/naga.ts +++ b/packages/networks/src/entries/naga.ts @@ -1,2 +1,2 @@ -export { nagaProduction as naga } from '../networks/vNaga/envs/naga-production/naga-production.module'; -export type { NagaProduction as NagaModule } from '../networks/vNaga/envs/naga-production/naga-production.module'; +export { nagaMainnet as naga } from '../networks/vNaga/envs/naga-mainnet/naga-mainnet.module'; +export type { NagaMainnet as NagaModule } from '../networks/vNaga/envs/naga-mainnet/naga-mainnet.module'; diff --git a/packages/networks/src/index.ts b/packages/networks/src/index.ts index 72867e7e7..833418dcc 100644 --- a/packages/networks/src/index.ts +++ b/packages/networks/src/index.ts @@ -3,7 +3,7 @@ import type { NagaLocalModule } from './networks/vNaga'; import type { NagaDevModule } from './networks/vNaga'; import type { NagaTestModule } from './networks/vNaga'; import type { NagaStagingModule } from './networks/vNaga'; -import type { NagaProductionModule } from './networks/vNaga'; +import type { NagaMainnetModule } from './networks/vNaga'; import type { NagaProtoModule } from './networks/vNaga'; import type { NagaModule } from './networks/vNaga'; @@ -15,7 +15,7 @@ export { nagaLocal, nagaDev, nagaTest, - nagaProduction, + nagaMainnet, nagaProto, naga, } from './networks/vNaga'; @@ -25,7 +25,7 @@ export type { NagaLocalModule } from './networks/vNaga'; export type { NagaDevModule } from './networks/vNaga'; export type { NagaTestModule } from './networks/vNaga'; export type { NagaStagingModule } from './networks/vNaga'; -export type { NagaProductionModule } from './networks/vNaga'; +export type { NagaMainnetModule } from './networks/vNaga'; export type { NagaProtoModule } from './networks/vNaga'; export type { NagaModule } from './networks/vNaga'; @@ -35,7 +35,7 @@ export type LitNetworkModule = | NagaDevModule | NagaTestModule | NagaStagingModule - | NagaProductionModule + | NagaMainnetModule | NagaProtoModule | NagaModule; // | NagaProdModule diff --git a/packages/networks/src/networks/vNaga/envs/naga-production/chain-manager/createChainManager.ts b/packages/networks/src/networks/vNaga/envs/naga-mainnet/chain-manager/createChainManager.ts similarity index 79% rename from packages/networks/src/networks/vNaga/envs/naga-production/chain-manager/createChainManager.ts rename to packages/networks/src/networks/vNaga/envs/naga-mainnet/chain-manager/createChainManager.ts index 22a7e6520..aeeefa8f4 100644 --- a/packages/networks/src/networks/vNaga/envs/naga-production/chain-manager/createChainManager.ts +++ b/packages/networks/src/networks/vNaga/envs/naga-mainnet/chain-manager/createChainManager.ts @@ -4,7 +4,7 @@ import { createReadOnlyChainManagerFactory, CreateChainManagerReturn, } from '../../../shared/factories/BaseChainManagerFactory'; -import { nagaProductionEnvironment } from '../naga-production.env'; +import { nagaMainnetEnvironment } from '../naga-mainnet.env'; export type { CreateChainManagerReturn }; @@ -12,11 +12,11 @@ export const createChainManager = ( accountOrWalletClient: ExpectedAccountOrWalletClient ): CreateChainManagerReturn => { return createChainManagerFactory( - nagaProductionEnvironment.getConfig(), + nagaMainnetEnvironment.getConfig(), accountOrWalletClient ); }; export const createReadOnlyChainManager = createReadOnlyChainManagerFactory( - nagaProductionEnvironment.getConfig() + nagaMainnetEnvironment.getConfig() ); diff --git a/packages/networks/src/networks/vNaga/envs/naga-mainnet/index.ts b/packages/networks/src/networks/vNaga/envs/naga-mainnet/index.ts new file mode 100644 index 000000000..ba508727a --- /dev/null +++ b/packages/networks/src/networks/vNaga/envs/naga-mainnet/index.ts @@ -0,0 +1 @@ +export { nagaMainnet } from './naga-mainnet.module'; diff --git a/packages/networks/src/networks/vNaga/envs/naga-production/naga-production.env.ts b/packages/networks/src/networks/vNaga/envs/naga-mainnet/naga-mainnet.env.ts similarity index 81% rename from packages/networks/src/networks/vNaga/envs/naga-production/naga-production.env.ts rename to packages/networks/src/networks/vNaga/envs/naga-mainnet/naga-mainnet.env.ts index 919a2c13d..fafbaaf2b 100644 --- a/packages/networks/src/networks/vNaga/envs/naga-production/naga-production.env.ts +++ b/packages/networks/src/networks/vNaga/envs/naga-mainnet/naga-mainnet.env.ts @@ -10,15 +10,15 @@ const PROTOCOL = 'https://'; const MINIMUM_THRESHOLD = 3; const DEFAULT_REALM_ID = 1n; -export interface NagaProductionSpecificConfigs { +export interface NagaMainnetSpecificConfigs { realmId?: bigint; } -export type NagaProductionSignatures = typeof nagaSignatures; +export type NagaMainnetSignatures = typeof nagaSignatures; -export class NagaProductionEnvironment extends BaseNetworkEnvironment< - NagaProductionSignatures, - NagaProductionSpecificConfigs +export class NagaMainnetEnvironment extends BaseNetworkEnvironment< + NagaMainnetSignatures, + NagaMainnetSpecificConfigs > { constructor(options?: { rpcUrlOverride?: string }) { super({ @@ -55,4 +55,4 @@ export class NagaProductionEnvironment extends BaseNetworkEnvironment< } // Create singleton instance -export const nagaProductionEnvironment = new NagaProductionEnvironment(); +export const nagaMainnetEnvironment = new NagaMainnetEnvironment(); diff --git a/packages/networks/src/networks/vNaga/envs/naga-production/naga-production.module.ts b/packages/networks/src/networks/vNaga/envs/naga-mainnet/naga-mainnet.module.ts similarity index 55% rename from packages/networks/src/networks/vNaga/envs/naga-production/naga-production.module.ts rename to packages/networks/src/networks/vNaga/envs/naga-mainnet/naga-mainnet.module.ts index 20d612caf..d6a3d8cf9 100644 --- a/packages/networks/src/networks/vNaga/envs/naga-production/naga-production.module.ts +++ b/packages/networks/src/networks/vNaga/envs/naga-mainnet/naga-mainnet.module.ts @@ -1,14 +1,14 @@ import { createBaseModule } from '../../shared/factories/BaseModuleFactory'; import type { ExpectedAccountOrWalletClient } from '../../shared/managers/contract-manager/createContractsManager'; import { createChainManager } from './chain-manager/createChainManager'; -import { nagaProductionEnvironment } from './naga-production.env'; +import { nagaMainnetEnvironment } from './naga-mainnet.env'; -const nagaProduction = createBaseModule({ - networkConfig: nagaProductionEnvironment.getConfig(), - moduleName: nagaProductionEnvironment.getNetworkName(), +const nagaMainnet = createBaseModule({ + networkConfig: nagaMainnetEnvironment.getConfig(), + moduleName: nagaMainnetEnvironment.getNetworkName(), createChainManager: (account: ExpectedAccountOrWalletClient) => createChainManager(account), }); -export type NagaProduction = typeof nagaProduction; -export { nagaProduction }; +export type NagaMainnet = typeof nagaMainnet; +export { nagaMainnet }; diff --git a/packages/networks/src/networks/vNaga/envs/naga-production/index.ts b/packages/networks/src/networks/vNaga/envs/naga-production/index.ts deleted file mode 100644 index d28e544d0..000000000 --- a/packages/networks/src/networks/vNaga/envs/naga-production/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { nagaProduction } from './naga-production.module'; diff --git a/packages/networks/src/networks/vNaga/envs/naga-proto/naga-proto.env.ts b/packages/networks/src/networks/vNaga/envs/naga-proto/naga-proto.env.ts index 6a979f370..a525be135 100644 --- a/packages/networks/src/networks/vNaga/envs/naga-proto/naga-proto.env.ts +++ b/packages/networks/src/networks/vNaga/envs/naga-proto/naga-proto.env.ts @@ -1,6 +1,6 @@ import { nagaProtoSignatures } from '@lit-protocol/contracts'; import { Chain } from 'viem'; -import * as chainInfo from '../../../../chains/ChronicleYellowstone'; +import * as chainInfo from '../../../../chains/LitChain'; import { NAGA_ENDPOINT } from '../../shared/managers/endpoints-manager/endpoints'; import type { NagaEndpointsType } from '../../shared/managers/endpoints-manager/endpoints'; import { BaseNetworkEnvironment } from '../base/BaseNetworkEnvironment'; @@ -28,7 +28,7 @@ export class NagaProtoEnvironment extends BaseNetworkEnvironment< realmId: DEFAULT_REALM_ID, }, services: { - loginServiceBaseUrl: 'https://login.litgateway.com', + loginServiceBaseUrl: '', // production/proto uses self-hosted login }, minimumThreshold: MINIMUM_THRESHOLD, httpProtocol: PROTOCOL, diff --git a/packages/networks/src/networks/vNaga/index.ts b/packages/networks/src/networks/vNaga/index.ts index f15bcdbd8..8627035e1 100644 --- a/packages/networks/src/networks/vNaga/index.ts +++ b/packages/networks/src/networks/vNaga/index.ts @@ -17,13 +17,13 @@ export type { NagaTest as NagaTestModule } from './envs/naga-test/naga-test.modu export { nagaStaging } from './envs/naga-staging'; export type { NagaStaging as NagaStagingModule } from './envs/naga-staging/naga-staging.module'; -// Naga Production -export { nagaProduction } from './envs/naga-production'; -export type { NagaProduction as NagaProductionModule } from './envs/naga-production/naga-production.module'; +// Naga Mainnet +export { nagaMainnet } from './envs/naga-mainnet'; +export type { NagaMainnet as NagaMainnetModule } from './envs/naga-mainnet/naga-mainnet.module'; -// Naga (alias for production) -export { nagaProduction as naga } from './envs/naga-production'; -export type { NagaProduction as NagaModule } from './envs/naga-production/naga-production.module'; +// Naga (alias for mainnet) +export { nagaMainnet as naga } from './envs/naga-mainnet'; +export type { NagaMainnet as NagaModule } from './envs/naga-mainnet/naga-mainnet.module'; // Naga Proto export { nagaProto } from './envs/naga-proto'; From da829dbffa5a77296dbe4b67c112c5911b71fb54 Mon Sep 17 00:00:00 2001 From: anson Date: Mon, 17 Nov 2025 15:36:54 +0000 Subject: [PATCH 06/15] feat: update naga-proto contract addresses and timestamps --- packages/contracts/dist/prod/naga-proto.cjs | 54 +++++++++---------- packages/contracts/dist/prod/naga-proto.js | 54 +++++++++---------- packages/contracts/dist/prod/naga-proto.json | 54 +++++++++---------- packages/contracts/dist/prod/naga-proto.ts | 54 +++++++++---------- .../contracts/dist/signatures/naga-proto.cjs | 16 +++--- .../contracts/dist/signatures/naga-proto.d.ts | 16 +++--- .../contracts/dist/signatures/naga-proto.js | 16 +++--- 7 files changed, 132 insertions(+), 132 deletions(-) diff --git a/packages/contracts/dist/prod/naga-proto.cjs b/packages/contracts/dist/prod/naga-proto.cjs index 4c6c96025..a026d0b75 100644 --- a/packages/contracts/dist/prod/naga-proto.cjs +++ b/packages/contracts/dist/prod/naga-proto.cjs @@ -7,8 +7,8 @@ module.exports = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x43b64F416cac52a7E60099E29F6477183bA172CB", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x28759afC5989B961D0A8EB236C9074c4141Baea1", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -6873,8 +6873,8 @@ module.exports = { "contracts": [ { "network": "naga-proto", - "address_hash": "0xC73DCD75AE2c17A0BbAF28c47b1725B0284A5F31", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xb6AAAd38f552DAd153090Cdd591DeB6a0f346161", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "anonymous": false, @@ -7011,8 +7011,8 @@ module.exports = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x5E8db2E7af793f4095c4843C8cBD87C5D8604838", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x0996A48f8cc3c7c52Caf10d34c804eF5C9E7748B", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -8065,8 +8065,8 @@ module.exports = { "contracts": [ { "network": "naga-proto", - "address_hash": "0xFdC09086E184Cb812D37566B09751CcbCA6a2205", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xB0c6B245B25F2e542c3570b53439825615371231", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -9199,8 +9199,8 @@ module.exports = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x9bB7c5504E12aBBCec35DF786769BBA292Cc4C0B", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xaeEA5fE3654919c8Bb2b356aDCb5dF4eC082C168", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -10627,8 +10627,8 @@ module.exports = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x835585944fB37d14C317cc6cd4864570cFcFab9E", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xCCb4A87731B3eFd6732e257381486912eEde24C5", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -11642,8 +11642,8 @@ module.exports = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x23A1aAB688EEe1d66FB45719ac527c2A0B036ed6", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x3894cae120A6ca08150e6e51cBcBdD5c16115F9c", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -12977,8 +12977,8 @@ module.exports = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x7866b6379Cb2B7e68Bb942dF3A3ACe9C25773874", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x0d49661778415Cd456805AC68d53bAB27C9E9Af6", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -13141,8 +13141,8 @@ module.exports = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x111F4990037333512d6F04e4ed30463fe7235dE0", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xa6c009FD21F9AB44163F6753F57862699B2956CE", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [], @@ -13378,8 +13378,8 @@ module.exports = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x58bA8Eb59E5A88ED690E47a8D37DCdB7d3aea490", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x5033b79388EBBAf466B4CF82c0b72Abd9bB940d6", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -14014,8 +14014,8 @@ module.exports = { "contracts": [ { "network": "naga-proto", - "address_hash": "0xf69e2D0Fa6a7F24d65De4F972c1a3000d55CA175", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x25be72246358491Ac7a1eF138C39Ff3b240E50b5", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -15070,8 +15070,8 @@ module.exports = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x7cD9b8A17733bcb85683009f6Fcaf5B920c249EE", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xFF4ceEC38572fEd4a48f6D3DF2bed7ccadD115a6", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -16111,9 +16111,9 @@ module.exports = { } ], "config": { - "chainId": "175188", - "rpcUrl": "https://yellowstone-rpc.litprotocol.com", - "chainName": "yellowstone", + "chainId": "175200", + "rpcUrl": "https://lit-chain-rpc.litprotocol.com", + "chainName": "litMainnet", "litNodeDomainName": "127.0.0.1", "litNodePort": 7470, "rocketPort": 7470 diff --git a/packages/contracts/dist/prod/naga-proto.js b/packages/contracts/dist/prod/naga-proto.js index 86aeb4e54..a80e5ac03 100644 --- a/packages/contracts/dist/prod/naga-proto.js +++ b/packages/contracts/dist/prod/naga-proto.js @@ -5,8 +5,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x43b64F416cac52a7E60099E29F6477183bA172CB", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x28759afC5989B961D0A8EB236C9074c4141Baea1", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -6871,8 +6871,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0xC73DCD75AE2c17A0BbAF28c47b1725B0284A5F31", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xb6AAAd38f552DAd153090Cdd591DeB6a0f346161", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "anonymous": false, @@ -7009,8 +7009,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x5E8db2E7af793f4095c4843C8cBD87C5D8604838", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x0996A48f8cc3c7c52Caf10d34c804eF5C9E7748B", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -8063,8 +8063,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0xFdC09086E184Cb812D37566B09751CcbCA6a2205", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xB0c6B245B25F2e542c3570b53439825615371231", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -9197,8 +9197,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x9bB7c5504E12aBBCec35DF786769BBA292Cc4C0B", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xaeEA5fE3654919c8Bb2b356aDCb5dF4eC082C168", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -10625,8 +10625,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x835585944fB37d14C317cc6cd4864570cFcFab9E", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xCCb4A87731B3eFd6732e257381486912eEde24C5", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -11640,8 +11640,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x23A1aAB688EEe1d66FB45719ac527c2A0B036ed6", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x3894cae120A6ca08150e6e51cBcBdD5c16115F9c", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -12975,8 +12975,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x7866b6379Cb2B7e68Bb942dF3A3ACe9C25773874", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x0d49661778415Cd456805AC68d53bAB27C9E9Af6", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -13139,8 +13139,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x111F4990037333512d6F04e4ed30463fe7235dE0", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xa6c009FD21F9AB44163F6753F57862699B2956CE", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [], @@ -13376,8 +13376,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x58bA8Eb59E5A88ED690E47a8D37DCdB7d3aea490", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x5033b79388EBBAf466B4CF82c0b72Abd9bB940d6", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -14012,8 +14012,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0xf69e2D0Fa6a7F24d65De4F972c1a3000d55CA175", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x25be72246358491Ac7a1eF138C39Ff3b240E50b5", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -15068,8 +15068,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x7cD9b8A17733bcb85683009f6Fcaf5B920c249EE", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xFF4ceEC38572fEd4a48f6D3DF2bed7ccadD115a6", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -16109,9 +16109,9 @@ export const nagaProto = { } ], "config": { - "chainId": "175188", - "rpcUrl": "https://yellowstone-rpc.litprotocol.com", - "chainName": "yellowstone", + "chainId": "175200", + "rpcUrl": "https://lit-chain-rpc.litprotocol.com", + "chainName": "litMainnet", "litNodeDomainName": "127.0.0.1", "litNodePort": 7470, "rocketPort": 7470 diff --git a/packages/contracts/dist/prod/naga-proto.json b/packages/contracts/dist/prod/naga-proto.json index 229aa3491..d4ead481a 100644 --- a/packages/contracts/dist/prod/naga-proto.json +++ b/packages/contracts/dist/prod/naga-proto.json @@ -5,8 +5,8 @@ "contracts": [ { "network": "naga-proto", - "address_hash": "0x43b64F416cac52a7E60099E29F6477183bA172CB", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x28759afC5989B961D0A8EB236C9074c4141Baea1", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -6871,8 +6871,8 @@ "contracts": [ { "network": "naga-proto", - "address_hash": "0xC73DCD75AE2c17A0BbAF28c47b1725B0284A5F31", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xb6AAAd38f552DAd153090Cdd591DeB6a0f346161", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "anonymous": false, @@ -7009,8 +7009,8 @@ "contracts": [ { "network": "naga-proto", - "address_hash": "0x5E8db2E7af793f4095c4843C8cBD87C5D8604838", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x0996A48f8cc3c7c52Caf10d34c804eF5C9E7748B", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -8063,8 +8063,8 @@ "contracts": [ { "network": "naga-proto", - "address_hash": "0xFdC09086E184Cb812D37566B09751CcbCA6a2205", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xB0c6B245B25F2e542c3570b53439825615371231", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -9197,8 +9197,8 @@ "contracts": [ { "network": "naga-proto", - "address_hash": "0x9bB7c5504E12aBBCec35DF786769BBA292Cc4C0B", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xaeEA5fE3654919c8Bb2b356aDCb5dF4eC082C168", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -10625,8 +10625,8 @@ "contracts": [ { "network": "naga-proto", - "address_hash": "0x835585944fB37d14C317cc6cd4864570cFcFab9E", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xCCb4A87731B3eFd6732e257381486912eEde24C5", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -11640,8 +11640,8 @@ "contracts": [ { "network": "naga-proto", - "address_hash": "0x23A1aAB688EEe1d66FB45719ac527c2A0B036ed6", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x3894cae120A6ca08150e6e51cBcBdD5c16115F9c", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -12975,8 +12975,8 @@ "contracts": [ { "network": "naga-proto", - "address_hash": "0x7866b6379Cb2B7e68Bb942dF3A3ACe9C25773874", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x0d49661778415Cd456805AC68d53bAB27C9E9Af6", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -13139,8 +13139,8 @@ "contracts": [ { "network": "naga-proto", - "address_hash": "0x111F4990037333512d6F04e4ed30463fe7235dE0", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xa6c009FD21F9AB44163F6753F57862699B2956CE", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [], @@ -13376,8 +13376,8 @@ "contracts": [ { "network": "naga-proto", - "address_hash": "0x58bA8Eb59E5A88ED690E47a8D37DCdB7d3aea490", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x5033b79388EBBAf466B4CF82c0b72Abd9bB940d6", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -14012,8 +14012,8 @@ "contracts": [ { "network": "naga-proto", - "address_hash": "0xf69e2D0Fa6a7F24d65De4F972c1a3000d55CA175", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x25be72246358491Ac7a1eF138C39Ff3b240E50b5", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -15068,8 +15068,8 @@ "contracts": [ { "network": "naga-proto", - "address_hash": "0x7cD9b8A17733bcb85683009f6Fcaf5B920c249EE", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xFF4ceEC38572fEd4a48f6D3DF2bed7ccadD115a6", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -16109,9 +16109,9 @@ } ], "config": { - "chainId": "175188", - "rpcUrl": "https://yellowstone-rpc.litprotocol.com", - "chainName": "yellowstone", + "chainId": "175200", + "rpcUrl": "https://lit-chain-rpc.litprotocol.com", + "chainName": "litMainnet", "litNodeDomainName": "127.0.0.1", "litNodePort": 7470, "rocketPort": 7470 diff --git a/packages/contracts/dist/prod/naga-proto.ts b/packages/contracts/dist/prod/naga-proto.ts index fb7ab5588..79c44c2c4 100644 --- a/packages/contracts/dist/prod/naga-proto.ts +++ b/packages/contracts/dist/prod/naga-proto.ts @@ -5,8 +5,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x43b64F416cac52a7E60099E29F6477183bA172CB", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x28759afC5989B961D0A8EB236C9074c4141Baea1", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -6871,8 +6871,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0xC73DCD75AE2c17A0BbAF28c47b1725B0284A5F31", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xb6AAAd38f552DAd153090Cdd591DeB6a0f346161", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "anonymous": false, @@ -7009,8 +7009,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x5E8db2E7af793f4095c4843C8cBD87C5D8604838", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x0996A48f8cc3c7c52Caf10d34c804eF5C9E7748B", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -8063,8 +8063,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0xFdC09086E184Cb812D37566B09751CcbCA6a2205", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xB0c6B245B25F2e542c3570b53439825615371231", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -9197,8 +9197,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x9bB7c5504E12aBBCec35DF786769BBA292Cc4C0B", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xaeEA5fE3654919c8Bb2b356aDCb5dF4eC082C168", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -10625,8 +10625,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x835585944fB37d14C317cc6cd4864570cFcFab9E", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xCCb4A87731B3eFd6732e257381486912eEde24C5", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -11640,8 +11640,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x23A1aAB688EEe1d66FB45719ac527c2A0B036ed6", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x3894cae120A6ca08150e6e51cBcBdD5c16115F9c", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -12975,8 +12975,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x7866b6379Cb2B7e68Bb942dF3A3ACe9C25773874", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x0d49661778415Cd456805AC68d53bAB27C9E9Af6", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -13139,8 +13139,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x111F4990037333512d6F04e4ed30463fe7235dE0", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xa6c009FD21F9AB44163F6753F57862699B2956CE", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [], @@ -13376,8 +13376,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x58bA8Eb59E5A88ED690E47a8D37DCdB7d3aea490", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x5033b79388EBBAf466B4CF82c0b72Abd9bB940d6", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -14012,8 +14012,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0xf69e2D0Fa6a7F24d65De4F972c1a3000d55CA175", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0x25be72246358491Ac7a1eF138C39Ff3b240E50b5", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -15068,8 +15068,8 @@ export const nagaProto = { "contracts": [ { "network": "naga-proto", - "address_hash": "0x7cD9b8A17733bcb85683009f6Fcaf5B920c249EE", - "inserted_at": "2025-11-13T21:55:15Z", + "address_hash": "0xFF4ceEC38572fEd4a48f6D3DF2bed7ccadD115a6", + "inserted_at": "2025-11-14T17:22:15Z", "ABI": [ { "inputs": [ @@ -16109,9 +16109,9 @@ export const nagaProto = { } ], "config": { - "chainId": "175188", - "rpcUrl": "https://yellowstone-rpc.litprotocol.com", - "chainName": "yellowstone", + "chainId": "175200", + "rpcUrl": "https://lit-chain-rpc.litprotocol.com", + "chainName": "litMainnet", "litNodeDomainName": "127.0.0.1", "litNodePort": 7470, "rocketPort": 7470 diff --git a/packages/contracts/dist/signatures/naga-proto.cjs b/packages/contracts/dist/signatures/naga-proto.cjs index bc31c0708..ec0cb4be7 100644 --- a/packages/contracts/dist/signatures/naga-proto.cjs +++ b/packages/contracts/dist/signatures/naga-proto.cjs @@ -5,7 +5,7 @@ const signatures = { "Staking": { - "address": "0x43b64F416cac52a7E60099E29F6477183bA172CB", + "address": "0x28759afC5989B961D0A8EB236C9074c4141Baea1", "methods": { "getActiveUnkickedValidatorStructsAndCounts": { "inputs": [ @@ -1050,7 +1050,7 @@ const signatures = { ] }, "PubkeyRouter": { - "address": "0xFdC09086E184Cb812D37566B09751CcbCA6a2205", + "address": "0xB0c6B245B25F2e542c3570b53439825615371231", "methods": { "deriveEthAddressFromPubkey": { "inputs": [ @@ -1361,7 +1361,7 @@ const signatures = { ] }, "PKPNFT": { - "address": "0x9bB7c5504E12aBBCec35DF786769BBA292Cc4C0B", + "address": "0xaeEA5fE3654919c8Bb2b356aDCb5dF4eC082C168", "methods": { "claimAndMint": { "inputs": [ @@ -1751,7 +1751,7 @@ const signatures = { ] }, "PKPHelper": { - "address": "0x835585944fB37d14C317cc6cd4864570cFcFab9E", + "address": "0xCCb4A87731B3eFd6732e257381486912eEde24C5", "methods": { "claimAndMintNextAndAddAuthMethodsWithTypes": { "inputs": [ @@ -2034,7 +2034,7 @@ const signatures = { ] }, "PKPPermissions": { - "address": "0x23A1aAB688EEe1d66FB45719ac527c2A0B036ed6", + "address": "0x3894cae120A6ca08150e6e51cBcBdD5c16115F9c", "methods": { "addPermittedAction": { "inputs": [ @@ -2652,7 +2652,7 @@ const signatures = { ] }, "PaymentDelegation": { - "address": "0x58bA8Eb59E5A88ED690E47a8D37DCdB7d3aea490", + "address": "0x5033b79388EBBAf466B4CF82c0b72Abd9bB940d6", "methods": { "delegatePayments": { "inputs": [ @@ -2953,7 +2953,7 @@ const signatures = { ] }, "Ledger": { - "address": "0xf69e2D0Fa6a7F24d65De4F972c1a3000d55CA175", + "address": "0x25be72246358491Ac7a1eF138C39Ff3b240E50b5", "methods": { "withdraw": { "inputs": [ @@ -3372,7 +3372,7 @@ const signatures = { ] }, "PriceFeed": { - "address": "0x7cD9b8A17733bcb85683009f6Fcaf5B920c249EE", + "address": "0xFF4ceEC38572fEd4a48f6D3DF2bed7ccadD115a6", "methods": { "getNodesForRequest": { "inputs": [ diff --git a/packages/contracts/dist/signatures/naga-proto.d.ts b/packages/contracts/dist/signatures/naga-proto.d.ts index f9034c847..48ec9d0fc 100644 --- a/packages/contracts/dist/signatures/naga-proto.d.ts +++ b/packages/contracts/dist/signatures/naga-proto.d.ts @@ -5,7 +5,7 @@ export const signatures = { "Staking": { - "address": "0x43b64F416cac52a7E60099E29F6477183bA172CB", + "address": "0x28759afC5989B961D0A8EB236C9074c4141Baea1", "methods": { "getActiveUnkickedValidatorStructsAndCounts": { "inputs": [ @@ -1050,7 +1050,7 @@ export const signatures = { ] }, "PubkeyRouter": { - "address": "0xFdC09086E184Cb812D37566B09751CcbCA6a2205", + "address": "0xB0c6B245B25F2e542c3570b53439825615371231", "methods": { "deriveEthAddressFromPubkey": { "inputs": [ @@ -1361,7 +1361,7 @@ export const signatures = { ] }, "PKPNFT": { - "address": "0x9bB7c5504E12aBBCec35DF786769BBA292Cc4C0B", + "address": "0xaeEA5fE3654919c8Bb2b356aDCb5dF4eC082C168", "methods": { "claimAndMint": { "inputs": [ @@ -1751,7 +1751,7 @@ export const signatures = { ] }, "PKPHelper": { - "address": "0x835585944fB37d14C317cc6cd4864570cFcFab9E", + "address": "0xCCb4A87731B3eFd6732e257381486912eEde24C5", "methods": { "claimAndMintNextAndAddAuthMethodsWithTypes": { "inputs": [ @@ -2034,7 +2034,7 @@ export const signatures = { ] }, "PKPPermissions": { - "address": "0x23A1aAB688EEe1d66FB45719ac527c2A0B036ed6", + "address": "0x3894cae120A6ca08150e6e51cBcBdD5c16115F9c", "methods": { "addPermittedAction": { "inputs": [ @@ -2652,7 +2652,7 @@ export const signatures = { ] }, "PaymentDelegation": { - "address": "0x58bA8Eb59E5A88ED690E47a8D37DCdB7d3aea490", + "address": "0x5033b79388EBBAf466B4CF82c0b72Abd9bB940d6", "methods": { "delegatePayments": { "inputs": [ @@ -2953,7 +2953,7 @@ export const signatures = { ] }, "Ledger": { - "address": "0xf69e2D0Fa6a7F24d65De4F972c1a3000d55CA175", + "address": "0x25be72246358491Ac7a1eF138C39Ff3b240E50b5", "methods": { "withdraw": { "inputs": [ @@ -3372,7 +3372,7 @@ export const signatures = { ] }, "PriceFeed": { - "address": "0x7cD9b8A17733bcb85683009f6Fcaf5B920c249EE", + "address": "0xFF4ceEC38572fEd4a48f6D3DF2bed7ccadD115a6", "methods": { "getNodesForRequest": { "inputs": [ diff --git a/packages/contracts/dist/signatures/naga-proto.js b/packages/contracts/dist/signatures/naga-proto.js index 976aee8a5..5668ca6fe 100644 --- a/packages/contracts/dist/signatures/naga-proto.js +++ b/packages/contracts/dist/signatures/naga-proto.js @@ -5,7 +5,7 @@ export const signatures = { "Staking": { - "address": "0x43b64F416cac52a7E60099E29F6477183bA172CB", + "address": "0x28759afC5989B961D0A8EB236C9074c4141Baea1", "methods": { "getActiveUnkickedValidatorStructsAndCounts": { "inputs": [ @@ -1050,7 +1050,7 @@ export const signatures = { ] }, "PubkeyRouter": { - "address": "0xFdC09086E184Cb812D37566B09751CcbCA6a2205", + "address": "0xB0c6B245B25F2e542c3570b53439825615371231", "methods": { "deriveEthAddressFromPubkey": { "inputs": [ @@ -1361,7 +1361,7 @@ export const signatures = { ] }, "PKPNFT": { - "address": "0x9bB7c5504E12aBBCec35DF786769BBA292Cc4C0B", + "address": "0xaeEA5fE3654919c8Bb2b356aDCb5dF4eC082C168", "methods": { "claimAndMint": { "inputs": [ @@ -1751,7 +1751,7 @@ export const signatures = { ] }, "PKPHelper": { - "address": "0x835585944fB37d14C317cc6cd4864570cFcFab9E", + "address": "0xCCb4A87731B3eFd6732e257381486912eEde24C5", "methods": { "claimAndMintNextAndAddAuthMethodsWithTypes": { "inputs": [ @@ -2034,7 +2034,7 @@ export const signatures = { ] }, "PKPPermissions": { - "address": "0x23A1aAB688EEe1d66FB45719ac527c2A0B036ed6", + "address": "0x3894cae120A6ca08150e6e51cBcBdD5c16115F9c", "methods": { "addPermittedAction": { "inputs": [ @@ -2652,7 +2652,7 @@ export const signatures = { ] }, "PaymentDelegation": { - "address": "0x58bA8Eb59E5A88ED690E47a8D37DCdB7d3aea490", + "address": "0x5033b79388EBBAf466B4CF82c0b72Abd9bB940d6", "methods": { "delegatePayments": { "inputs": [ @@ -2953,7 +2953,7 @@ export const signatures = { ] }, "Ledger": { - "address": "0xf69e2D0Fa6a7F24d65De4F972c1a3000d55CA175", + "address": "0x25be72246358491Ac7a1eF138C39Ff3b240E50b5", "methods": { "withdraw": { "inputs": [ @@ -3372,7 +3372,7 @@ export const signatures = { ] }, "PriceFeed": { - "address": "0x7cD9b8A17733bcb85683009f6Fcaf5B920c249EE", + "address": "0xFF4ceEC38572fEd4a48f6D3DF2bed7ccadD115a6", "methods": { "getNodesForRequest": { "inputs": [ From c59c9b560fb945606d9789ff33039fc02ddc0fc4 Mon Sep 17 00:00:00 2001 From: anson Date: Tue, 18 Nov 2025 17:38:56 +0000 Subject: [PATCH 07/15] fix(e2e): align mainnet funding and delegation limits --- README.md | 4 ++ docs/sdk/getting-started/lit-client.mdx | 12 ++++++ packages/e2e/README.md | 5 ++- packages/e2e/src/e2e.spec.ts | 9 ++++- packages/e2e/src/helper/NetworkManager.ts | 12 +++++- packages/e2e/src/helper/createEnvVars.ts | 29 ++++++++++---- packages/e2e/src/helper/createTestEnv.ts | 41 +++++++++++++++++++- packages/e2e/src/helper/fundAccount.ts | 12 +++++- packages/e2e/src/init.ts | 26 ++++++++++--- packages/e2e/src/tickets/delegation.suite.ts | 6 +-- packages/e2e/src/tickets/override.spec.ts | 14 +++++-- 11 files changed, 144 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index d73f77775..7b272d623 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,8 @@ pnpm install && pnpm build # (Optional) Request a private rpc url from # https://hub.conduit.xyz/chronicle-yellowstone-testnet-9qgmzfcohk LIT_YELLOWSTONE_PRIVATE_RPC_URL= +# (Optional) Mainnet RPC override for naga-proto / naga +LIT_MAINNET_RPC_URL= # For live networks (naga-dev, naga-staging) LIVE_MASTER_ACCOUNT= @@ -48,6 +50,8 @@ LIVE_MASTER_ACCOUNT= LOCAL_MASTER_ACCOUNT=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 ``` +When `NETWORK` is set to `naga-proto` or `naga`, the test helpers only top up generated accounts with `0.01` LIT and deposit `0.01` LIT into the Lit Ledger to avoid locking up excess mainnet funds. + ## Command ```bash diff --git a/docs/sdk/getting-started/lit-client.mdx b/docs/sdk/getting-started/lit-client.mdx index 4a82a28ef..1c0c9ad93 100644 --- a/docs/sdk/getting-started/lit-client.mdx +++ b/docs/sdk/getting-started/lit-client.mdx @@ -75,6 +75,18 @@ const litClient = await createLitClient({ + +For smaller bundles you can import only the network you need via the tree-shakeable +subpaths, for example: + +```ts +import { naga } from "@lit-protocol/networks/naga"; +// or import { nagaTest } from "@lit-protocol/networks/naga-test"; +``` + +This avoids pulling every network module into your application. + + diff --git a/packages/e2e/README.md b/packages/e2e/README.md index 8d6b986f9..66d68f456 100644 --- a/packages/e2e/README.md +++ b/packages/e2e/README.md @@ -26,10 +26,13 @@ LOG_LEVEL=info # Optional local overrides NAGA_LOCAL_CONTEXT_PATH=./lit-assets/blockchain/contracts/networkContext.json LIT_YELLOWSTONE_PRIVATE_RPC_URL=http://127.0.0.1:8545 +LIT_MAINNET_RPC_URL=https://mainnet-rpc.example ``` Make sure the referenced network (local Naga cluster, Shiva-managed testnet, or live subnet) is running and reachable from your test machine. +> Heads up: when targeting `naga-proto` or `naga`, the helpers only fund generated accounts with `0.01` LIT and deposit `0.01` LIT into the Lit Ledger so we don't strand real mainnet balance. + ## Run the Canonical Suite The published suite now imports everything from the package entrypoint, so you can execute it directly through Jest without wiring up helper paths manually. @@ -113,6 +116,6 @@ Refer to the source under `packages/e2e/src/helper` for additional exported func - **Jest not found** – install it locally (`pnpm add -D jest`). The CLI wrapper will exit with a helpful message if the dependency is missing. - **Missing signatures on naga-local** – provide `NAGA_LOCAL_CONTEXT_PATH` so the init routine calls `nagaLocal.withLocalContext`. -- **RPC connectivity** – when pointing at a private RPC, set `LIT_YELLOWSTONE_PRIVATE_RPC_URL` so the Lit Client bypasses defaults. +- **RPC connectivity** – when pointing at a private RPC, set `LIT_YELLOWSTONE_PRIVATE_RPC_URL` (dev/test/staging) or `LIT_MAINNET_RPC_URL` (naga-proto/naga) so the Lit Client bypasses defaults. With these additions, QA can stay in sync with the canonical Lit Protocol E2E coverage while extending it with custom assertions tailored to fast-epoch or failure scenarios. diff --git a/packages/e2e/src/e2e.spec.ts b/packages/e2e/src/e2e.spec.ts index b00707756..de00c4383 100644 --- a/packages/e2e/src/e2e.spec.ts +++ b/packages/e2e/src/e2e.spec.ts @@ -18,10 +18,15 @@ import { import type { AuthContext } from '@lit-protocol/e2e'; import { registerPaymentDelegationTicketSuite } from './tickets/delegation.suite'; -const RPC_OVERRIDE = process.env['LIT_YELLOWSTONE_PRIVATE_RPC_URL']; +const SELECTED_NETWORK = process.env['NETWORK']; +const RPC_OVERRIDE_ENV_VAR = + SELECTED_NETWORK === 'naga' || SELECTED_NETWORK === 'naga-proto' + ? 'LIT_MAINNET_RPC_URL' + : 'LIT_YELLOWSTONE_PRIVATE_RPC_URL'; +const RPC_OVERRIDE = process.env[RPC_OVERRIDE_ENV_VAR]; if (RPC_OVERRIDE) { console.log( - '🧪 E2E: Using RPC override (LIT_YELLOWSTONE_PRIVATE_RPC_URL):', + `🧪 E2E: Using RPC override (${RPC_OVERRIDE_ENV_VAR}):`, RPC_OVERRIDE ); } diff --git a/packages/e2e/src/helper/NetworkManager.ts b/packages/e2e/src/helper/NetworkManager.ts index 4e7c3740a..243c7336f 100644 --- a/packages/e2e/src/helper/NetworkManager.ts +++ b/packages/e2e/src/helper/NetworkManager.ts @@ -54,9 +54,19 @@ export const getViemPublicClient = async ({ const viemChainConfig = networkModule.getChainConfig(); const defaultRpcUrl = viemChainConfig.rpcUrls.default.http[0]; const isLocalNetwork = defaultRpcUrl.includes('127.0.0.1'); + const networkName = + typeof networkModule.getNetworkName === 'function' + ? networkModule.getNetworkName() + : undefined; + const isMainnetNetwork = + networkName === 'naga' || networkName === 'naga-proto'; const customRpcUrl = isLocalNetwork ? process.env['LOCAL_RPC_URL'] - : process.env['LIT_YELLOWSTONE_PRIVATE_RPC_URL']; + : process.env[ + isMainnetNetwork + ? 'LIT_MAINNET_RPC_URL' + : 'LIT_YELLOWSTONE_PRIVATE_RPC_URL' + ]; if (customRpcUrl) { console.log(`🔧 Using custom E2E RPC URL: ***${customRpcUrl.slice(-6)}`); diff --git a/packages/e2e/src/helper/createEnvVars.ts b/packages/e2e/src/helper/createEnvVars.ts index 1e2c0bb38..b459116d8 100644 --- a/packages/e2e/src/helper/createEnvVars.ts +++ b/packages/e2e/src/helper/createEnvVars.ts @@ -1,6 +1,23 @@ -const supportedNetworks = ['naga-local', 'naga-test', 'naga-dev'] as const; +const supportedNetworks = [ + 'naga-local', + 'naga-test', + 'naga-dev', + 'naga-proto', + 'naga', +] as const; type EnvName = 'local' | 'live'; +const LIVE_RPC_ENV_VARS: Record< + (typeof supportedNetworks)[number], + string | undefined +> = { + 'naga-local': undefined, + 'naga-dev': 'LIT_YELLOWSTONE_PRIVATE_RPC_URL', + 'naga-test': 'LIT_YELLOWSTONE_PRIVATE_RPC_URL', + 'naga-proto': 'LIT_MAINNET_RPC_URL', + naga: 'LIT_MAINNET_RPC_URL', +} as const; + export type EnvVars = { network: string; privateKey: `0x${string}`; @@ -71,12 +88,10 @@ export function createEnvVars(): EnvVars { } // -- live networks - if (network === 'naga-dev' || network === 'naga-test') { - const liveRpcUrl = process.env['LIT_YELLOWSTONE_PRIVATE_RPC_URL']; - - if (liveRpcUrl) { - rpcUrl = liveRpcUrl; - } + const rpcEnvKey = LIVE_RPC_ENV_VARS[network as (typeof supportedNetworks)[number]]; + if (rpcEnvKey) { + const liveRpcUrl = process.env[rpcEnvKey]; + if (liveRpcUrl) rpcUrl = liveRpcUrl; } const result = { diff --git a/packages/e2e/src/helper/createTestEnv.ts b/packages/e2e/src/helper/createTestEnv.ts index ea04c75d0..0ef0870b8 100644 --- a/packages/e2e/src/helper/createTestEnv.ts +++ b/packages/e2e/src/helper/createTestEnv.ts @@ -3,6 +3,8 @@ import { nagaDev, nagaLocal, nagaTest, + nagaProto, + naga, PaymentManager, } from '@lit-protocol/networks'; import { EnvVars } from './createEnvVars'; @@ -14,10 +16,26 @@ export const CONFIG = { LOCAL: { nativeFundingAmount: '1', ledgerDepositAmount: '2', + sponsorshipLimits: { + totalMaxPriceInWei: '50000000000000000', + userMaxPrice: 50000000000000000n, + }, }, LIVE: { nativeFundingAmount: '0.1', ledgerDepositAmount: '0.1', + sponsorshipLimits: { + totalMaxPriceInWei: '50000000000000000', + userMaxPrice: 50000000000000000n, + }, + }, + MAINNET: { + nativeFundingAmount: '0.01', + ledgerDepositAmount: '0.01', + sponsorshipLimits: { + totalMaxPriceInWei: '10000000000000000', + userMaxPrice: 10000000000000000n, + }, }, }; @@ -35,6 +53,10 @@ export type TestEnv = { config: { nativeFundingAmount: string; ledgerDepositAmount: string; + sponsorshipLimits: { + totalMaxPriceInWei: string; + userMaxPrice: bigint; + }; }; }; @@ -44,6 +66,10 @@ export const createTestEnv = async (envVars: EnvVars): Promise => { let config = { nativeFundingAmount: '', ledgerDepositAmount: '', + sponsorshipLimits: { + totalMaxPriceInWei: '0', + userMaxPrice: 0n, + }, }; if (envVars.network === 'naga-local') { @@ -58,12 +84,18 @@ export const createTestEnv = async (envVars: EnvVars): Promise => { config = CONFIG.LOCAL; } else if ( envVars.network === 'naga-dev' || - envVars.network === 'naga-test' + envVars.network === 'naga-test' || + envVars.network === 'naga-proto' || + envVars.network === 'naga' ) { if (envVars.network === 'naga-dev') { networkModule = nagaDev; } else if (envVars.network === 'naga-test') { networkModule = nagaTest; + } else if (envVars.network === 'naga-proto') { + networkModule = nagaProto; + } else { + networkModule = naga; } if (envVars.rpcUrl) { @@ -75,7 +107,12 @@ export const createTestEnv = async (envVars: EnvVars): Promise => { }); } - config = CONFIG.LIVE; + config = + envVars.network === 'naga-proto' || envVars.network === 'naga' + ? CONFIG.MAINNET + : CONFIG.LIVE; + } else { + throw new Error(`Unsupported network configuration: ${envVars.network}`); } // 2. Create Lit Client diff --git a/packages/e2e/src/helper/fundAccount.ts b/packages/e2e/src/helper/fundAccount.ts index 1d0129694..5d73a766c 100644 --- a/packages/e2e/src/helper/fundAccount.ts +++ b/packages/e2e/src/helper/fundAccount.ts @@ -104,9 +104,19 @@ export const fundAccount = async ( const defaultRpcUrl = networkModule.getChainConfig().rpcUrls.default.http[0]; const isLocalNetwork = defaultRpcUrl.includes('127.0.0.1'); + const networkName = + typeof networkModule.getNetworkName === 'function' + ? networkModule.getNetworkName() + : undefined; + const isMainnetNetwork = + networkName === 'naga' || networkName === 'naga-proto'; const customRpcUrl = isLocalNetwork ? process.env['LOCAL_RPC_URL'] - : process.env['LIT_YELLOWSTONE_PRIVATE_RPC_URL']; + : process.env[ + isMainnetNetwork + ? 'LIT_MAINNET_RPC_URL' + : 'LIT_YELLOWSTONE_PRIVATE_RPC_URL' + ]; if (customRpcUrl) { console.log(`- Using custom E2E RPC URL:`, `***${customRpcUrl.slice(-6)}`); diff --git a/packages/e2e/src/init.ts b/packages/e2e/src/init.ts index 4b2b0998a..5820dde2b 100644 --- a/packages/e2e/src/init.ts +++ b/packages/e2e/src/init.ts @@ -24,6 +24,8 @@ const SupportedNetworkSchema = z.enum([ 'naga-test', 'naga-local', 'naga-staging', + 'naga-proto', + 'naga', ]); type SupportedNetwork = z.infer; @@ -35,6 +37,8 @@ type LogLevel = z.infer; const LIVE_NETWORK_FUNDING_AMOUNT = '0.01'; const LOCAL_NETWORK_FUNDING_AMOUNT = '1'; const LIVE_NETWORK_LEDGER_DEPOSIT_AMOUNT = '2'; +const MAINNET_NETWORK_FUNDING_AMOUNT = '0.01'; +const MAINNET_LEDGER_DEPOSIT_AMOUNT = '0.01'; const EVE_VALIDATION_IPFS_CID = 'QmcxWmo3jefFsPUnskJXYBwsJYtiFuMAH1nDQEs99AwzDe'; @@ -117,6 +121,8 @@ export const init = async ( 'naga-test': { importName: 'nagaTest', type: 'live' }, 'naga-local': { importName: 'nagaLocal', type: 'local' }, 'naga-staging': { importName: 'nagaStaging', type: 'live' }, + 'naga-proto': { importName: 'nagaProto', type: 'live' }, + naga: { importName: 'naga', type: 'live' }, } as const; const config = networkConfig[_network as keyof typeof networkConfig]; @@ -160,7 +166,11 @@ export const init = async ( } // Optional RPC override from env - const rpcOverride = process.env['LIT_YELLOWSTONE_PRIVATE_RPC_URL']; + const rpcOverrideEnvVar = + _network === 'naga' || _network === 'naga-proto' + ? 'LIT_MAINNET_RPC_URL' + : 'LIT_YELLOWSTONE_PRIVATE_RPC_URL'; + const rpcOverride = process.env[rpcOverrideEnvVar]; const _networkModule = rpcOverride && typeof _baseNetworkModule.withOverrides === 'function' ? _baseNetworkModule.withOverrides({ rpcUrl: rpcOverride }) @@ -168,7 +178,7 @@ export const init = async ( if (rpcOverride) { console.log( - '✅ Using RPC override (LIT_YELLOWSTONE_PRIVATE_RPC_URL):', + `✅ Using RPC override (${rpcOverrideEnvVar}):`, rpcOverride ); } @@ -186,10 +196,16 @@ export const init = async ( * ==================================== */ const isLocal = config.type === 'local'; + const isMainnet = _network === 'naga' || _network === 'naga-proto'; const masterAccount = isLocal ? localMasterAccount : liveMasterAccount; const fundingAmount = isLocal ? LOCAL_NETWORK_FUNDING_AMOUNT + : isMainnet + ? MAINNET_NETWORK_FUNDING_AMOUNT : LIVE_NETWORK_FUNDING_AMOUNT; + const ledgerDepositAmount = isMainnet + ? MAINNET_LEDGER_DEPOSIT_AMOUNT + : LIVE_NETWORK_LEDGER_DEPOSIT_AMOUNT; // Fund accounts sequentially to avoid nonce conflicts with same sponsor await fundAccount(aliceViemAccount, masterAccount, _networkModule, { @@ -224,7 +240,7 @@ export const init = async ( async function masterDepositForUser(userAddress: string) { await masterPaymentManager.depositForUser({ userAddress: userAddress, - amountInEth: LIVE_NETWORK_LEDGER_DEPOSIT_AMOUNT, + amountInEth: ledgerDepositAmount, }); console.log( `✅ New ${userAddress} Ledger Balance:`, @@ -340,8 +356,8 @@ export const init = async ( }); await fundAccount(alicePkpViemAccount, masterAccount, _networkModule, { - ifLessThan: LOCAL_NETWORK_FUNDING_AMOUNT, - thenFund: LOCAL_NETWORK_FUNDING_AMOUNT, + ifLessThan: fundingAmount, + thenFund: fundingAmount, }); /** diff --git a/packages/e2e/src/tickets/delegation.suite.ts b/packages/e2e/src/tickets/delegation.suite.ts index 2a7da888a..b33ce1400 100644 --- a/packages/e2e/src/tickets/delegation.suite.ts +++ b/packages/e2e/src/tickets/delegation.suite.ts @@ -46,7 +46,7 @@ export function registerPaymentDelegationTicketSuite() { fundPKPLedger: true, sponsor: { restrictions: { - totalMaxPriceInWei: '1000000000000000000', + totalMaxPriceInWei: testEnv.config.sponsorshipLimits.totalMaxPriceInWei, requestsPerPeriod: '100', periodSeconds: '600', }, @@ -69,7 +69,7 @@ export function registerPaymentDelegationTicketSuite() { authContext: bobAccount.eoaAuthContext!, pubKey: bobAccount.pkp?.pubkey!, toSign: 'Hello, world!', - userMaxPrice: 1000000000000000000n, // 0.05 ETH in Wei + userMaxPrice: testEnv.config.sponsorshipLimits.userMaxPrice, }); // 5. Now, Alice removes Bob from her sponsorship @@ -84,7 +84,7 @@ export function registerPaymentDelegationTicketSuite() { authContext: bobAccount.eoaAuthContext!, pubKey: bobAccount.pkp?.pubkey!, toSign: 'Hello again, world!', - userMaxPrice: 1000000000000000000n, // 0.05 ETH in Wei + userMaxPrice: testEnv.config.sponsorshipLimits.userMaxPrice, }); } catch (e) { didFail = true; diff --git a/packages/e2e/src/tickets/override.spec.ts b/packages/e2e/src/tickets/override.spec.ts index 7856e3337..e3de6e730 100644 --- a/packages/e2e/src/tickets/override.spec.ts +++ b/packages/e2e/src/tickets/override.spec.ts @@ -1,25 +1,31 @@ describe('rpc override', () => { - const TEST_RPC = process.env.LIT_YELLOWSTONE_PRIVATE_RPC_URL; + const network = process.env.NETWORK || 'naga-dev'; + const rpcEnvVar = + network === 'naga' || network === 'naga-proto' + ? 'LIT_MAINNET_RPC_URL' + : 'LIT_YELLOWSTONE_PRIVATE_RPC_URL'; + const TEST_RPC = process.env[rpcEnvVar]; // const TEST_RPC = 'https://yellowstone-override.example'; // beforeAll(() => { - // process.env.LIT_YELLOWSTONE_PRIVATE_RPC_URL = TEST_RPC; + // process.env[rpcEnvVar] = TEST_RPC; // }); // afterAll(() => { - // process.env.LIT_YELLOWSTONE_PRIVATE_RPC_URL = ORIGINAL_RPC; + // process.env[rpcEnvVar] = ORIGINAL_RPC; // }); it('applies env rpc override to module and client', async () => { const networks = await import('@lit-protocol/networks'); // choose module by NETWORK env (same way init.ts does) - const network = process.env.NETWORK || 'naga-dev'; const importNameMap: Record = { 'naga-dev': 'nagaDev', 'naga-test': 'nagaTest', 'naga-local': 'nagaLocal', 'naga-staging': 'nagaStaging', + 'naga-proto': 'nagaProto', + naga: 'naga', }; const importName = importNameMap[network]; const baseModule: any = (networks as any)[importName]; From 5df9672eada3b119ccf70de712ca8531b02670a7 Mon Sep 17 00:00:00 2001 From: anson Date: Tue, 18 Nov 2025 17:49:10 +0000 Subject: [PATCH 08/15] fmt --- packages/e2e/src/helper/createEnvVars.ts | 3 ++- packages/e2e/src/init.ts | 5 +---- packages/e2e/src/tickets/delegation.suite.ts | 3 ++- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/e2e/src/helper/createEnvVars.ts b/packages/e2e/src/helper/createEnvVars.ts index b459116d8..89ddc5e9e 100644 --- a/packages/e2e/src/helper/createEnvVars.ts +++ b/packages/e2e/src/helper/createEnvVars.ts @@ -88,7 +88,8 @@ export function createEnvVars(): EnvVars { } // -- live networks - const rpcEnvKey = LIVE_RPC_ENV_VARS[network as (typeof supportedNetworks)[number]]; + const rpcEnvKey = + LIVE_RPC_ENV_VARS[network as (typeof supportedNetworks)[number]]; if (rpcEnvKey) { const liveRpcUrl = process.env[rpcEnvKey]; if (liveRpcUrl) rpcUrl = liveRpcUrl; diff --git a/packages/e2e/src/init.ts b/packages/e2e/src/init.ts index 5820dde2b..b3335d598 100644 --- a/packages/e2e/src/init.ts +++ b/packages/e2e/src/init.ts @@ -177,10 +177,7 @@ export const init = async ( : _baseNetworkModule; if (rpcOverride) { - console.log( - `✅ Using RPC override (${rpcOverrideEnvVar}):`, - rpcOverride - ); + console.log(`✅ Using RPC override (${rpcOverrideEnvVar}):`, rpcOverride); } /** diff --git a/packages/e2e/src/tickets/delegation.suite.ts b/packages/e2e/src/tickets/delegation.suite.ts index b33ce1400..340ff81b3 100644 --- a/packages/e2e/src/tickets/delegation.suite.ts +++ b/packages/e2e/src/tickets/delegation.suite.ts @@ -46,7 +46,8 @@ export function registerPaymentDelegationTicketSuite() { fundPKPLedger: true, sponsor: { restrictions: { - totalMaxPriceInWei: testEnv.config.sponsorshipLimits.totalMaxPriceInWei, + totalMaxPriceInWei: + testEnv.config.sponsorshipLimits.totalMaxPriceInWei, requestsPerPeriod: '100', periodSeconds: '600', }, From efc220badad1a5f2bf89219db9420fb9c4162083 Mon Sep 17 00:00:00 2001 From: anson Date: Tue, 18 Nov 2025 19:16:42 +0000 Subject: [PATCH 09/15] feat(naga-explorer): migrate naga-explorer app into the monorepo --- .dockerignore | 6 +- .eslintrc.json | 8 +- apps/explorer/.eslintrc.json | 10 + apps/explorer/.gitignore | 28 + apps/explorer/Dockerfile | 21 + apps/explorer/README.md | 72 + apps/explorer/check-deps.js | 169 + apps/explorer/index.html | 78 + apps/explorer/nginx.conf | 20 + apps/explorer/package.json | 59 + apps/explorer/plan.md | 23 + apps/explorer/project.json | 49 + apps/explorer/public/logo.svg | 256 + apps/explorer/public/screenshot-1.png | Bin 0 -> 82356 bytes apps/explorer/public/screenshot-2.png | Bin 0 -> 193634 bytes apps/explorer/public/thumbnail.png | Bin 0 -> 381815 bytes apps/explorer/src/Header.tsx | 33 + apps/explorer/src/_config.ts | 83 + apps/explorer/src/assets/2fa.svg | 13 + apps/explorer/src/assets/copy.svg | 5 + apps/explorer/src/assets/discord.png | Bin 0 -> 4613 bytes apps/explorer/src/assets/email.svg | 1 + apps/explorer/src/assets/global.d.ts | 457 + apps/explorer/src/assets/google.png | Bin 0 -> 17050 bytes .../src/assets/lit-primary-orange.svg | 5 + apps/explorer/src/assets/loading-lit.svg | 184 + apps/explorer/src/assets/passkey.svg | 1 + apps/explorer/src/assets/phone.svg | 1 + apps/explorer/src/assets/react.svg | 1 + apps/explorer/src/assets/slash.svg | 14 + apps/explorer/src/assets/web3-wallet.svg | 1 + apps/explorer/src/assets/whatsapp.svg | 12 + apps/explorer/src/domain/lit/chains.ts | 184 + apps/explorer/src/hooks/useLitServiceSetup.ts | 144 + apps/explorer/src/index.tsx | 90 + apps/explorer/src/layout/AppHeader.tsx | 36 + apps/explorer/src/layout/BurgerMenu.tsx | 50 + apps/explorer/src/layout/GlobalMessage.tsx | 40 + .../src/layout/StickySidebarLayout.tsx | 53 + apps/explorer/src/layout/TopNavBar.tsx | 62 + apps/explorer/src/layout/index.ts | 7 + .../lit-action-examples/entries/crypto-jwt.ts | 79 + .../entries/custom-auth.ts | 37 + .../entries/decrypt-and-combine.ts | 161 + .../lit-action-examples/entries/sign-basic.ts | 28 + .../explorer/src/lit-action-examples/index.ts | 49 + .../explorer/src/lit-action-examples/types.ts | 34 + apps/explorer/src/lit-actions.d.ts | 616 + .../src/lit-logged-page/LoggedInDashboard.tsx | 754 + .../src/lit-logged-page/PKPSelectionModal.tsx | 82 + .../AccountMethodSelector.tsx | 320 + .../PaymentManagementDashboard.tsx | 1042 + .../components/dashboard/StatusDisplay.tsx | 107 + .../components/dashboard/index.ts | 7 + .../components/layout/ChainSelector.tsx | 404 + .../components/layout/DashboardContent.tsx | 154 + .../components/layout/TabNavigation.tsx | 70 + .../protectedApp/components/layout/index.ts | 3 + .../components/permissions/AddActionForm.tsx | 120 + .../components/permissions/AddAddressForm.tsx | 120 + .../permissions/PermissionsDangerZone.tsx | 58 + .../permissions/PermissionsDashboard.tsx | 182 + .../permissions/PermissionsList.tsx | 473 + .../permissions/PermissionsSummaryCards.tsx | 167 + .../components/permissions/index.ts | 12 + .../components/pkp/PKPInfoCard.tsx | 535 + .../components/ui/LoadingSpinner.tsx | 24 + .../components/ui/RemoveButton.tsx | 46 + .../components/ui/ScopeCheckboxes.tsx | 90 + .../ui/TransactionToastContainer.tsx | 50 + .../protectedApp/components/ui/index.ts | 10 + .../components/wallet/EncryptDecryptForm.tsx | 397 + .../components/wallet/LitActionForm.tsx | 2096 ++ .../wallet/PaymentOperationsDashboard.tsx | 425 + .../components/wallet/SendTransactionForm.tsx | 428 + .../components/wallet/ViemAccountForm.tsx | 248 + .../wallet/WalletOperationsDashboard.tsx | 58 + .../protectedApp/components/wallet/index.ts | 7 + .../contexts/PKPPermissionsContext.tsx | 383 + .../protectedApp/hooks/useLedgerBalance.ts | 53 + .../hooks/usePaymentManagerInstance.ts | 82 + .../protectedApp/hooks/useWithdrawStatus.ts | 61 + .../src/lit-logged-page/protectedApp/index.ts | 47 + .../src/lit-logged-page/protectedApp/types.ts | 112 + .../protectedApp/utils/chains.ts | 14 + .../protectedApp/utils/index.ts | 120 + .../protectedApp/utils/ledgerRefresh.ts | 121 + .../src/lit-login-modal/LitAuthProvider.tsx | 2217 ++ .../lit-login-modal/PKPSelectionSection.tsx | 1205 ++ .../components/AuthSettingsPanel.tsx | 207 + .../components/LedgerFundingPanel.tsx | 46 + .../context/LitAuthContext.tsx | 14 + apps/explorer/src/lit-login-modal/types.ts | 69 + apps/explorer/src/main.tsx | 51 + apps/explorer/src/router.tsx | 17 + apps/explorer/src/styles/global.css | 377 + apps/explorer/src/vite-env.d.ts | 6 + apps/explorer/tsconfig.json | 35 + apps/explorer/tsconfig.node.json | 11 + apps/explorer/vercel.json | 18 + apps/explorer/vite.config.ts | 156 + package.json | 3 +- pnpm-lock.yaml | 17029 ++++++---------- 103 files changed, 23986 insertions(+), 10237 deletions(-) create mode 100644 apps/explorer/.eslintrc.json create mode 100644 apps/explorer/.gitignore create mode 100644 apps/explorer/Dockerfile create mode 100644 apps/explorer/README.md create mode 100644 apps/explorer/check-deps.js create mode 100644 apps/explorer/index.html create mode 100644 apps/explorer/nginx.conf create mode 100644 apps/explorer/package.json create mode 100644 apps/explorer/plan.md create mode 100644 apps/explorer/project.json create mode 100644 apps/explorer/public/logo.svg create mode 100644 apps/explorer/public/screenshot-1.png create mode 100644 apps/explorer/public/screenshot-2.png create mode 100644 apps/explorer/public/thumbnail.png create mode 100644 apps/explorer/src/Header.tsx create mode 100644 apps/explorer/src/_config.ts create mode 100644 apps/explorer/src/assets/2fa.svg create mode 100644 apps/explorer/src/assets/copy.svg create mode 100644 apps/explorer/src/assets/discord.png create mode 100644 apps/explorer/src/assets/email.svg create mode 100644 apps/explorer/src/assets/global.d.ts create mode 100644 apps/explorer/src/assets/google.png create mode 100644 apps/explorer/src/assets/lit-primary-orange.svg create mode 100644 apps/explorer/src/assets/loading-lit.svg create mode 100644 apps/explorer/src/assets/passkey.svg create mode 100644 apps/explorer/src/assets/phone.svg create mode 100644 apps/explorer/src/assets/react.svg create mode 100644 apps/explorer/src/assets/slash.svg create mode 100644 apps/explorer/src/assets/web3-wallet.svg create mode 100644 apps/explorer/src/assets/whatsapp.svg create mode 100644 apps/explorer/src/domain/lit/chains.ts create mode 100644 apps/explorer/src/hooks/useLitServiceSetup.ts create mode 100644 apps/explorer/src/index.tsx create mode 100644 apps/explorer/src/layout/AppHeader.tsx create mode 100644 apps/explorer/src/layout/BurgerMenu.tsx create mode 100644 apps/explorer/src/layout/GlobalMessage.tsx create mode 100644 apps/explorer/src/layout/StickySidebarLayout.tsx create mode 100644 apps/explorer/src/layout/TopNavBar.tsx create mode 100644 apps/explorer/src/layout/index.ts create mode 100644 apps/explorer/src/lit-action-examples/entries/crypto-jwt.ts create mode 100644 apps/explorer/src/lit-action-examples/entries/custom-auth.ts create mode 100644 apps/explorer/src/lit-action-examples/entries/decrypt-and-combine.ts create mode 100644 apps/explorer/src/lit-action-examples/entries/sign-basic.ts create mode 100644 apps/explorer/src/lit-action-examples/index.ts create mode 100644 apps/explorer/src/lit-action-examples/types.ts create mode 100644 apps/explorer/src/lit-actions.d.ts create mode 100644 apps/explorer/src/lit-logged-page/LoggedInDashboard.tsx create mode 100644 apps/explorer/src/lit-logged-page/PKPSelectionModal.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/PaymentManagement/AccountMethodSelector.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/PaymentManagement/PaymentManagementDashboard.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/dashboard/StatusDisplay.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/dashboard/index.ts create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/layout/ChainSelector.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/layout/DashboardContent.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/layout/TabNavigation.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/layout/index.ts create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/permissions/AddActionForm.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/permissions/AddAddressForm.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/permissions/PermissionsDangerZone.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/permissions/PermissionsDashboard.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/permissions/PermissionsList.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/permissions/PermissionsSummaryCards.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/permissions/index.ts create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/pkp/PKPInfoCard.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/ui/LoadingSpinner.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/ui/RemoveButton.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/ui/ScopeCheckboxes.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/ui/TransactionToastContainer.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/ui/index.ts create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/wallet/EncryptDecryptForm.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/wallet/LitActionForm.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/wallet/PaymentOperationsDashboard.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/wallet/SendTransactionForm.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/wallet/ViemAccountForm.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/wallet/WalletOperationsDashboard.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/components/wallet/index.ts create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/contexts/PKPPermissionsContext.tsx create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/hooks/useLedgerBalance.ts create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/hooks/usePaymentManagerInstance.ts create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/hooks/useWithdrawStatus.ts create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/index.ts create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/types.ts create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/utils/chains.ts create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/utils/index.ts create mode 100644 apps/explorer/src/lit-logged-page/protectedApp/utils/ledgerRefresh.ts create mode 100644 apps/explorer/src/lit-login-modal/LitAuthProvider.tsx create mode 100644 apps/explorer/src/lit-login-modal/PKPSelectionSection.tsx create mode 100644 apps/explorer/src/lit-login-modal/components/AuthSettingsPanel.tsx create mode 100644 apps/explorer/src/lit-login-modal/components/LedgerFundingPanel.tsx create mode 100644 apps/explorer/src/lit-login-modal/context/LitAuthContext.tsx create mode 100644 apps/explorer/src/lit-login-modal/types.ts create mode 100644 apps/explorer/src/main.tsx create mode 100644 apps/explorer/src/router.tsx create mode 100644 apps/explorer/src/styles/global.css create mode 100644 apps/explorer/src/vite-env.d.ts create mode 100644 apps/explorer/tsconfig.json create mode 100644 apps/explorer/tsconfig.node.json create mode 100644 apps/explorer/vercel.json create mode 100644 apps/explorer/vite.config.ts diff --git a/.dockerignore b/.dockerignore index 110da04eb..e8baa1de7 100644 --- a/.dockerignore +++ b/.dockerignore @@ -26,4 +26,8 @@ out # allow lit-login-server build output for docker image !dist/apps/lit-login-server/** -!dist/apps/lit-login-server \ No newline at end of file +!dist/apps/lit-login-server + +# allow explorer build output for docker image +!apps/explorer/dist/** +!apps/explorer/dist diff --git a/.eslintrc.json b/.eslintrc.json index a6d5acb28..3bf9d0f50 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,12 +1,12 @@ { "root": true, "ignorePatterns": ["**/*"], - "plugins": ["@nrwl/nx", "import"], + "plugins": ["@nx", "import"], "overrides": [ { "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], "rules": { - "@nrwl/nx/enforce-module-boundaries": [ + "@nx/enforce-module-boundaries": [ "error", { "enforceBuildableLibDependency": true, @@ -23,14 +23,14 @@ }, { "files": ["*.ts", "*.tsx"], - "extends": ["plugin:@nrwl/nx/typescript"], + "extends": ["plugin:@nx/typescript"], "rules": { "@typescript-eslint/no-inferrable-types": "off" } }, { "files": ["*.js", "*.jsx"], - "extends": ["plugin:@nrwl/nx/javascript"], + "extends": ["plugin:@nx/javascript"], "rules": {} } ], diff --git a/apps/explorer/.eslintrc.json b/apps/explorer/.eslintrc.json new file mode 100644 index 000000000..8852e20bc --- /dev/null +++ b/apps/explorer/.eslintrc.json @@ -0,0 +1,10 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/apps/explorer/.gitignore b/apps/explorer/.gitignore new file mode 100644 index 000000000..da9532592 --- /dev/null +++ b/apps/explorer/.gitignore @@ -0,0 +1,28 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +.vercel +.cursor +.env +.plan \ No newline at end of file diff --git a/apps/explorer/Dockerfile b/apps/explorer/Dockerfile new file mode 100644 index 000000000..cfe83e38f --- /dev/null +++ b/apps/explorer/Dockerfile @@ -0,0 +1,21 @@ +# This file is generated by Nx. +# +# Build the docker image with `pnpm nx run explorer:docker-build`. +# Tip: Modify "docker-build" options in project.json to change docker build args. +# +# Run the container with `docker run -p 4173:80 -t explorer`. +FROM --platform=linux/amd64 docker.io/nginx:alpine + +ENV NODE_ENV=production + +# Remove default nginx site content +RUN rm -rf /usr/share/nginx/html/* + +# Copy SPA routing config +COPY apps/explorer/nginx.conf /etc/nginx/conf.d/default.conf + +# Copy the static assets produced by `nx run explorer:build` +COPY apps/explorer/dist /usr/share/nginx/html + +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] diff --git a/apps/explorer/README.md b/apps/explorer/README.md new file mode 100644 index 000000000..032bfc89f --- /dev/null +++ b/apps/explorer/README.md @@ -0,0 +1,72 @@ +# Lit Explorer Naga + +Lit Explorer Naga is an application that allows you to authenticate with Lit Protocol using the native Lit auth methods. + +# Env vars + +```bash +# Global Settings +VITE_LOGIN_SERVICE_URL=https://login.litgateway.com +VITE_LOGIN_DISCORD_CLIENT_ID=1052874239658692668 + +# Network-Specific Auth Service URLs +VITE_AUTH_SERVICE_URL_NAGA_DEV=https://naga-dev-auth-service.getlit.dev +VITE_AUTH_SERVICE_URL_NAGA_TEST=https://naga-test-auth-service.getlit.dev +VITE_AUTH_SERVICE_URL_NAGA=https://naga-auth-service.getlit.dev +``` + +## Getting started + +``` +pnpm install +pnpm nx run explorer:dev +``` + +## Docker + +To produce a deployable container: + +``` +pnpm nx run explorer:build +pnpm nx run explorer:docker-build +docker run -p 4173:80 explorer +``` + +The image serves the built assets via Nginx and includes SPA routing so client-side navigation works. + +## Adding Lit Action examples + +- Add a new file in `src/lit-action-examples/entries/` that default-exports a `LitActionExample`. The `id` must be unique. +- Use `String.raw` to define multiline snippets, e.g. ``const code = String.raw\`...\`;`` and fill in `title`, optional `description`, `order`, and any default `jsParams`. +- The registry auto-loads every file in that directory, so your example will appear in the Lit Action editor once you save and refresh the app. +- Prefer small, focused samples that demonstrate a single concept; link to docs inside the description if extra context is needed. + +## FAQs + +### What "logged-in" means here + +- You are considered "logged-in" when both a PKP and an auth context exist in state. + +### How you become "logged-in" + +After authenticating with a method (Google, Discord, WebAuthn, EOA, Stytch, Custom), either: + +- You select an existing PKP in the PKP selection section +- You mint a new PKP and immediately create `authContext`, then set `user` + +### What redirect happens and when + +The `` does not redirect on successful login. It simply closes the modal once user is set and isAuthenticated becomes true. + +The dashboard is always the index route for `/`, and it conditionally renders based on auth state from context. When the user logs in, React re-renders the same component with different UI. + +Inside `LoggedInDashboard`, it reads user from `useLitAuth()`. If there’s no user, it shows a sign-in experience and, in popup mode, auto-opens the modal. + +# Screenshots + +## Login Modal + +![Login Modal](./public/screenshot-1.png) + +## Logged in Dashboard +![Logged in Dashboard](./public/screenshot-2.png) diff --git a/apps/explorer/check-deps.js b/apps/explorer/check-deps.js new file mode 100644 index 000000000..5abdfed29 --- /dev/null +++ b/apps/explorer/check-deps.js @@ -0,0 +1,169 @@ +#!/usr/bin/env node + +/** + * Dependency Checker Script + * + * This script scans node_modules for missing dependencies that could cause + * "Failed to resolve module specifier" errors in production builds. + * + * Usage: node check-deps.js + */ + +import fs from 'fs'; +import path from 'path'; +import { execSync } from 'child_process'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +console.log('🔍 Scanning for missing dependencies...\n'); + +// Read current package.json +const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8')); +const currentDeps = { + ...packageJson.dependencies || {}, + ...packageJson.devDependencies || {} +}; + +// Function to extract require/import statements +function extractDependencies(filePath) { + try { + const content = fs.readFileSync(filePath, 'utf8'); + const requireMatches = content.match(/require\(["']([^"']+)["']\)/g) || []; + const importMatches = content.match(/import\s+.*?\s+from\s+["']([^"']+)["']/g) || []; + + const deps = new Set(); + + // Extract require dependencies + requireMatches.forEach(match => { + const dep = match.match(/require\(["']([^"']+)["']\)/)[1]; + if (!dep.startsWith('.') && !dep.startsWith('/')) { + // Get package name (handle scoped packages) + const packageName = dep.startsWith('@') + ? dep.split('/').slice(0, 2).join('/') + : dep.split('/')[0]; + deps.add(packageName); + } + }); + + // Extract import dependencies + importMatches.forEach(match => { + const dep = match.match(/from\s+["']([^"']+)["']/)[1]; + if (!dep.startsWith('.') && !dep.startsWith('/')) { + const packageName = dep.startsWith('@') + ? dep.split('/').slice(0, 2).join('/') + : dep.split('/')[0]; + deps.add(packageName); + } + }); + + return Array.from(deps); + } catch (error) { + return []; + } +} + +// Function to scan directory recursively +function scanDirectory(dir, extensions = ['.js', '.ts', '.tsx', '.jsx']) { + const allDeps = new Set(); + + function scanRecursive(currentDir) { + try { + const items = fs.readdirSync(currentDir); + + for (const item of items) { + const fullPath = path.join(currentDir, item); + const stat = fs.statSync(fullPath); + + if (stat.isDirectory() && !item.startsWith('.') && item !== 'node_modules') { + scanRecursive(fullPath); + } else if (stat.isFile() && extensions.some(ext => item.endsWith(ext))) { + const deps = extractDependencies(fullPath); + deps.forEach(dep => allDeps.add(dep)); + } + } + } catch (error) { + // Skip directories we can't read + } + } + + scanRecursive(dir); + return Array.from(allDeps); +} + +// Scan specific directories for dependencies +const directories = [ + 'node_modules/@lit-protocol', + 'src' +]; + +const allFoundDeps = new Set(); + +directories.forEach(dir => { + if (fs.existsSync(dir)) { + console.log(`📁 Scanning ${dir}...`); + const deps = scanDirectory(dir); + deps.forEach(dep => allFoundDeps.add(dep)); + } +}); + +// Filter out built-in Node.js modules and current dependencies +const builtInModules = new Set([ + 'fs', 'path', 'crypto', 'stream', 'buffer', 'util', 'events', 'os', 'url', + 'http', 'https', 'querystring', 'zlib', 'worker_threads', 'fs/promises' +]); + +const missingDeps = Array.from(allFoundDeps).filter(dep => + !currentDeps[dep] && + !builtInModules.has(dep) && + dep !== 'react' && // Common false positives + dep !== 'node_modules' +); + +console.log('\n📊 Results:'); +console.log(`Total dependencies found: ${allFoundDeps.size}`); +console.log(`Missing dependencies: ${missingDeps.length}`); + +if (missingDeps.length > 0) { + console.log('\n❌ Missing Dependencies:'); + console.log('Add these to your package.json:\n'); + + const suggestions = {}; + + // Common version suggestions + const versionMap = { + 'siwe': '^2.3.2', + 'siwe-recap': '^0.0.2-alpha.0', + 'jose': '^4.14.4', + 'ethers': '5.7.2', + 'viem': '^2.29.4', + '@noble/curves': '^1.2.0', + '@noble/hashes': '^1.3.0', + 'base64url': '^3.0.1', + 'cbor-web': '^9.0.2', + 'elysia': '^1.2.25', + 'tslib': '^2.3.0', + 'zod-validation-error': '^3.4.0', + '@openagenda/verror': '^3.1.4', + '@simplewebauthn/browser': '^7.2.0' + }; + + missingDeps.forEach(dep => { + const version = versionMap[dep] || '^latest'; + suggestions[dep] = version; + console.log(` "${dep}": "${version}",`); + }); + + console.log('\n💡 Or run this command to install them all:'); + const installCmd = `pnpm add ${missingDeps.map(dep => `${dep}@${versionMap[dep] || 'latest'}`).join(' ')}`; + console.log(`\n${installCmd}\n`); + +} else { + console.log('\n✅ All dependencies appear to be present!'); +} + +console.log('\n🔧 Current package.json dependencies:'); +Object.keys(currentDeps).sort().forEach(dep => { + console.log(` ${dep}: ${currentDeps[dep]}`); +}); diff --git a/apps/explorer/index.html b/apps/explorer/index.html new file mode 100644 index 000000000..8df6991c5 --- /dev/null +++ b/apps/explorer/index.html @@ -0,0 +1,78 @@ + + + + + + + Lit Protocol Explorer:: Naga + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/apps/explorer/nginx.conf b/apps/explorer/nginx.conf new file mode 100644 index 000000000..88232ea68 --- /dev/null +++ b/apps/explorer/nginx.conf @@ -0,0 +1,20 @@ +server { + listen 80; + server_name _; + + root /usr/share/nginx/html; + index index.html; + + # Cache busted assets can be cached aggressively + location /assets/ { + try_files $uri =404; + access_log off; + expires 1y; + add_header Cache-Control "public, max-age=31536000, immutable"; + } + + # SPA fallback to index.html for client-side routing + location / { + try_files $uri /index.html; + } +} diff --git a/apps/explorer/package.json b/apps/explorer/package.json new file mode 100644 index 000000000..8ddd41ecc --- /dev/null +++ b/apps/explorer/package.json @@ -0,0 +1,59 @@ +{ + "name": "@lit-protocol/explorer", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint \"src/**/*.{ts,tsx}\" \"*.{ts,tsx,js}\" --report-unused-disable-directives --max-warnings 0", + "start": "vite preview --host 0.0.0.0 --port ${PORT:-4173}", + "preview": "vite preview", + "clean": "rimraf dist node_modules bun.lock package-lock.json pnpm-lock.yaml", + "outdated": "pnpm outdated --filter '@lit-protocol/*'", + "update:lit": "pnpm update --latest --filter '@lit-protocol/*'" + }, + "dependencies": { + "@lit-protocol/access-control-conditions": "8.0.2", + "@lit-protocol/auth": "8.1.2", + "@lit-protocol/lit-client": "8.2.3", + "@lit-protocol/naga-la-types": "^0.1.0", + "@lit-protocol/networks": "8.3.2", + "@monaco-editor/react": "^4.7.0", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-hover-card": "^1.1.15", + "@radix-ui/react-navigation-menu": "^1.2.14", + "@rainbow-me/rainbowkit": "^2.2.4", + "@tailwindcss/vite": "^4.1.12", + "@tanstack/react-query": "^5.69.0", + "@wagmi/core": "^2.17.1", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "buffer": "^6.0.3", + "lucide-react": "^0.542.0", + "prism-react-renderer": "^2.4.1", + "prismjs": "^1.30.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^7.6.0", + "tailwind-merge": "^3.3.1", + "tailwindcss": "^4.1.12", + "viem": "2.38.x", + "wagmi": "^2.14.11", + "zod": "^3.24.2" + }, + "devDependencies": { + "@types/react": "^18.2.66", + "@types/react-dom": "^18.2.22", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", + "@vitejs/plugin-react-swc": "^3.5.0", + "eslint": "^8.57.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.6", + "rimraf": "^6.0.1", + "tw-animate-css": "^1.3.8", + "typescript": "^5.2.2", + "vite": "^5.2.0" + } +} diff --git a/apps/explorer/plan.md b/apps/explorer/plan.md new file mode 100644 index 000000000..a841fd764 --- /dev/null +++ b/apps/explorer/plan.md @@ -0,0 +1,23 @@ +## Architecture Improvements Roadmap + +- [ ] **Decouple auth provider layers** + - Extract a lean `lit-auth-service` module (hooks + context) from the 2.4k‑line `LitAuthProvider`. + - Move modal UI, funding gate, and settings panes into dedicated presentational components that consume the new hooks. + - [x] Remove the direct dependency on `PaymentManagementDashboard` inside the provider by introducing a minimal funding widget + callbacks. + +- [x] **Modularize payment management** + - Split `PaymentManagementDashboard` into headless hooks (`usePaymentManager`, `useLedgerBalance`, `useWithdrawals`) and small visual components. + - Reuse shared types from `protectedApp/types.ts` instead of redefining them locally. + - Replace inline style objects with styled components or utility classes for consistency. + +- [ ] **Unify chain configuration + ledger helpers** + - [x] Move the canonical chain list and ledger balance utilities into a shared `src/domain/lit/chains.ts`. + - [x] Update `PKPSelectionSection`, wallet utilities, and dashboards to import the shared helpers instead of keeping local copies. + +- [ ] **Route-level composition** + - Define separate React Router child routes (`Playground`, `Permissions`, `Payments`) that each render focused page components. + - Keep shared state (selected PKP, balances, toasts) in a parent provider instead of a monolithic `LoggedInDashboard`. + +- [ ] **Strengthen domain typing** + - Introduce typed service interfaces for permissions, payments, and ledger data instead of returning `any`. + - Add discriminated unions / DTOs to the contexts so consumers know which operations and states are available without casting. diff --git a/apps/explorer/project.json b/apps/explorer/project.json new file mode 100644 index 000000000..9c61a9cec --- /dev/null +++ b/apps/explorer/project.json @@ -0,0 +1,49 @@ +{ + "name": "explorer", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/explorer/src", + "projectType": "application", + "targets": { + "dev": { + "executor": "nx:run-commands", + "cache": false, + "options": { + "command": "pnpm --dir apps/explorer dev", + "forwardAllArgs": true + } + }, + "build": { + "executor": "nx:run-commands", + "dependsOn": [], + "outputs": [ + "{projectRoot}/dist" + ], + "options": { + "command": "pnpm --dir apps/explorer build" + } + }, + "lint": { + "executor": "nx:run-commands", + "options": { + "command": "pnpm --dir apps/explorer lint" + } + }, + "start": { + "executor": "nx:run-commands", + "dependsOn": [ + "build" + ], + "options": { + "command": "pnpm --dir apps/explorer start", + "forwardAllArgs": true + } + }, + "docker-build": { + "dependsOn": [ + "build" + ], + "command": "docker build -f apps/explorer/Dockerfile . -t explorer" + } + }, + "tags": [] +} diff --git a/apps/explorer/public/logo.svg b/apps/explorer/public/logo.svg new file mode 100644 index 000000000..6acb0efa8 --- /dev/null +++ b/apps/explorer/public/logo.svg @@ -0,0 +1,256 @@ + + + + diff --git a/apps/explorer/public/screenshot-1.png b/apps/explorer/public/screenshot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..662f6e83ecc69651131d1de6e8ececb6af86224d GIT binary patch literal 82356 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%0D*jj%{lB+O<2ZZkUQ|cTltv%ROTh4_iP?S~ z9`&1gQ0w>ou^fIJ6Z$2~Tr+lAcp&N3fmgY?inxmO^aHJ(3MkZpOWDq07s@Zys0CiC zdt-St$r@e%X5PDHc;Iiz-?krZkw=|GUZUi>0x9Mo6cksbOWX{^707w?7-zhC`BHIj zzR2~(nkJQ@z@}>Z$G6^R>Db$A^3A)|V;i7=fDP-K1PbpyH?mx6TYruc=kDTcH>NrK zQ$Z!>19#J>NO?4XG4S@7YUDC(C-MqSE3+;{O2QYA5)%Do+L2uQzPv3{ z%qDi!cVE#Ubo*a6HZsmKtog+f1quYAci@o>On0*LoO|SFrV=vPezpgxpld1^9F-~1 zAh{3ygwS4VeK@Bn_2%G{x%NW_&Ip|xqBn({+8oR)ekrmH8@fm+7W1tgF|mwU_O~ee z60nWA0_m~=ga>H4=ViT2xir{-IB{q0mBi)1W~j?6CoBd@YHv2oFVa(bDPPuQkKVe_ z(Q=?)PS^eXP#jMEVEhZ!)YtXf)=y%F)@#*WxECIZ*Ai;YgV#?Ju3|5%?~!h@-mc6g z*q?_=QgEkWvpigU+%VxvCzj@CI=)0D!Pm%{s3BcQCqfmN)d-rz-zvq#lX?X%6}sG= zNp}q$LQ|3Z)fN%%7rL@u%?+2#>Pdd5`X=m?las>}LsBu2;z3>o%0wiw+bOk{j)?_X zLhmS^^yU>tVm^|B21-w6M?7`xv2+OscE)5aIg zxz)=KTlwY6-{smtbdxrjc70Jr9`wGUQ#+LuuFi|25f$-C36@VCmS<#cT(%$%=wQCW zRfYH+)(yd+S7mW2m-Q~S8>-Dc#RqbQW8gTyk*E8%GBWeQFKwmm1|`ss!M zANTX6%fcS-l09vwoWE54GHzGb9cO>Dh{cWRPgqY_Xu$>;;$T6d{iI>@A z9pnI$sQ5r|$Ktrv4m(0l*h7GfxH#J-OAL-irQXu3b8!&|?6G`I&mCQ;jV@n7z=&U2 zXM}jn!9rEn`=#;0-nfGD6@y$+&mX%5pMf6O9p317^x}}O58q9w^XSy&{FLJ>@Z?+# z=PNi0iO()ZiOm4kdC9lDj3kq0p&oxoL&|?(N7Vp!^i5F6ySv+OcEWT8z0`@63~r8F z$UXZH`hj)1Xu$lq(5CP`g0vD}v-6d>myXV^4~vl_T)8UdS|=AG*qYO(3hT1{tBCwv z772u>i=lvDPNatCoR48uv_LtHUk7H{HWa%Q(+sGJ+|uy8hbPp#{s`+k~M9Xq3oZhpX%IB?bwxH*Dj3%ArtN5N!cYaiLO4 z%|QqBU~SkubU3<1ms@wRAFGe8znwGD8*oa5f)ulX5+^YqY~?@ zjG6^&bL^N4(p>7;+zZ#}u_#%8P6zHcIUzs|Yg$@rsmHS3+)F8O z2k&w{xKJM2Aaf@ngd{E5fPF2zD@-l<(0KXPPkEQ$UcazaK+$bjH@GEDzdw%Kpe^}*=tKC3drl(^rvd9@TXr zrKH8Rc{Qb-sED1hvRt0TDdkvID&;)A^)5?Cx3RbE4rbzVac^(rQ7*}`$~hsdOp2fOUfS$cps{p!1^=chk-{h!7rUX~GNhbS1m1eOkC? z+|_xkxN?LG|Ito%R_RV!e7N%B8x=nlJOx*)tgp8J+BFxV9+fJHShUA$$`w=0`!2M8)}5z#(t ztrJ8mN3!%;U_EzQK$uh6Ybj#CkTMbLaCIHpsC8^XM~PZ(=n|f4=hk6L+m`?;5eyY6 zr;ZLxA4^ml45Iw!`Stdfk8fq%xoBGG^FE#DIdslr*Q|{@$9uiN@y8X~9Fwr&541=~ zsvP_Xj2c43H^X?Nti9ckxcjH-s^JOC4}!?2aDiHx7KL>5R&oV7beKhAry&pFa1y2B z;-cNM$oC0hD1`5s)jl|qR8+D^fIr}|5jq}pwjb72dB?Egmws*Aadr=icPu{8U4SOh zzP~HUkh!FQ!=7fXVAQGJx#Vg0&#>TNxdo4dXshiBOywtv^2#q^%Qwd zcjIb|>|V_4JB_)nrk6$>lD@JF_ z=$$MovQOY*i~A>0hFtr8abZ~@APq`(C4Sy2_Ph;cjSh`RcfRY5j-HCy=_Z&P{?j^L z-Nw9Pfio6W6Eb%LSU$#1S$-bxyj4k)-A7gsJ`89fAr1L)0q{ zTce9TbUm-)hboeXE_2LWx|X9Q3<(K_RUF`xb_zS;>Fyo5F6bko!=wIOA1aRge=x6gu6=NUM)Mh>)1Xq2^P(Dwmv{9Sw~KAfE2rEXG(3^cBjI+#~z zktY_@7E;_{+;c|YP=}(ctM2(2nVU2MmP>d$To`DOP8rmV&o&si4=2gRo; za4el^kz0tcJ8NytsJBjyEg>16=<2*wP1e`NJ~4|aXn^0@$_$?T*a>afMsHwk721Ck zZ2R5aTKPp(8j+Hc0vy4dK=%UX*fM<%h7R{SjyTbg4?wW;w7X1@mT6=#=1aqW%LxSq zpdY#<70j3`=npS1i@sR}F)2@~{omi$v&G2B2zZ9&hMw0;+t^$mq;T~sZoJC`PrbjhW!cywj z4u>sHUC?4>dL5wqz6Y{X7!$tvZ^S?Au}NvU7ruAptkep77N@Z^Y#6XH#o;Aub3NEI z@#YrRSxjyAk^L^0AWug`1pXsN)^3n;C-;W&`c-04%OQZ~NvUF6Wu;Zgt+ECz!k&17 zt>g8?8ENK3)tighE5Bag8k4@vqu(4Y0Q~&V0@W*Z?-F%5+B-W>aC_&IvTU`w!{YZR`r|QdsGq|cz=^rV8v8|F7yq)`Y$*dIPVqo)b{!SqqG#u zH<@5n;%>Hx8b_lTW!DiG^gFC~`(vQCp5#j>2)LWXlS9=~hI$q}b z0goyodV8bC2l4~k2{-|7??OxWppDE_dmD4!?ZkmgxDYIZ;x&GQ%`+iEn3G>RbZL62 z_WqP{SEKq}-_jV@l@cr4#ZBa@pS=EznK1QyWu0Jk+|fprHE^pf($e2Afhpe5RK~z% zL_HA>*P25?E=RXr@mG7PD=Q?ymJaq-{+L!54Jhils)JRs!_eE8x678^hBEcL#y!sD zsvJ3(GDW_GfzctdC7Ae`|MS{anA7Ueqj>1Vp6Bs*Sk-0?KhR&uTp`9Z*BgmsO~j=5 z^36-OS^xEczNaB5^rwDR4v6}C?LDX(Ob1K-QqBhJx1ztIX9>UHS-Tvaop%x?g>oVp z>$TqUCwg|n;TViA_h3Z+fS!S69-qa0Y%?7WeS^KE^S|k%=$IIL3SYR%XBJubgQSUu zYS=rKefcjEy_x3}@RpAo6*B5zGS?16Qo)GrqysAd=`Ldk4P&ZVFEn!L+ET)FdMzCD z>!M2BK$rae-_6+^EtxGBy<3%h?y2qj|7^K%;Q~I|YNEgW4*`~zQubD(=8m|)&DqTA zHyZvN$v3B~AMCQD5b-3ki}6{v5CH`#$XH>~SC!v(9Yh$fqq{pFak|?)(Up?b9CICtqEmL>v?8v;FD|4+eewRz<3HM9OixlKi^r{K6E0IRhF;_|LYObM2JsH zu-S2UD{xcP9EW`fVn09!*ih zFC^Ls^WjK^ySM^73Td=&xJ>6~}v* zBiUa9u2n=DLA8A+u@c^knuTrxs(evs5q(UcR60)o(EcT#sUggzQ0Dn ze%V7>{6Gs(f$OhpG8%1!iy;@YbY>;`eUY>fB3!*f55&p6!jhO zgkO=Rl5TADaE8~^8+(A-ZdzrvTOcs&E8Zxg&9LaK-(`deh5Y{^VWvlFikD|xnB75JUAAZ4Ia!#x_l+#A7RX=kC<%YEvjrpUT5Wr>tQWyzcy7V?cZ z>iP5#V{}l4ygSC8?307-l!@@JHyU({+VQw^UUe?tIt-hGJh^fD?edak=A6GFW?!Ve zn7TY>g0j@Mcyqegd@M+qu^+8m08UeKh&2K&xxgJmMPn2i%e!E$b86Xu0I!|PO(z-q@5dJ_*C}xM))5QAl%Eh2(-$<889v&kKNd&+g;i;F8^jl_*GC&NN6uB8P3%!Q>>T-` z59F)y$#}IK;d#k@b9y!|8!jH69zjto<2%fsKUB2;C(PS4)}|uYmN2qI-6;&Zw^eAj^0vLtaXLLE2k&yzO}vo=PW7XCRqij_+cTH3 z*vSr;{D*DSdACvD%4J>u2t)K@ir<`=aPVgswa>55JS=!}GW~s;B<^0=fONuS>2=*r zp?d`H+`N9pZCFUP41}+Io0=7uLDundT)vA=Prdm?&^hzg>@tSdTe+|~1%m1VPjZ>w zDcIE>eeL@Mu{lyoDRUnfrpH=91v#I_enM=3Eo_85Qz$PI+qtBBNcTnT3Xc$thP8U& z;|)7IpD9}s1naruAwUJfZie%e3`hM?uiv7R4ZCnhychm1Z@;xzo#-S z+54uz-o1HM5CX*$D=el=(o!!!+`Lb3-Qa+);A3Gmna^ja@AR|liwz?^qB|9{6l3#l zYfa0`WS4xyl5%lt;*h-{qjl@nLZgR~z{v%UNXwXo07r4=*icNQbFa z1{TgQzmSei$ib6a=Ie&<_|MIyMQ?INS{2>@Lk0-kJzw6 zV>5?oA!zkKq=J^T!GBDLl&rQH5yE1#=}?VPlvrV^Kwo@OyO&Xj9-FHGKlpA>+-`hAYwKr;<|3+ z`|Y}KF-}nQJb#N(Yd|G>xwiCi=Q^YWClN+?lAuLHLWf`FBnaI0=~l~m3QHdP4q{Fh zEqp)d;sLyB*FX)dGifG!4eHg)PfITGMw!~Mr=>HB_UfbS%EFLXPVsQ#EVk0;^L_;3yXCw57SZxu9fjvy!s8 z{(MB@#m|TX?&o9F4xYgk`k3`C&Rhc)tpC&E{u`e!$qiUdyLM=vEOlkSlzDj%FicF3 zeD;Ng-0jFn^3b(Q)^IgHRCpZz?)`3+>l$jBp61>~*Q^Z}(Fw0j0pn@3bbG~M>!Q3| z(>yx8-c=RT)k}@E3SZiw^l#$x=4!6cvC>lMT1|B6+mY+hwUq$Wn=AUCK)q9Uw?4-A zJyrl2?+ksaWM(t_?bC4>g&2n1x*P?_Iip4Ky`_?O0q(}N5o);HUfUwLiTBWWOm9wu zOhlWUyY7&KA?EzMH(5^VmZ>bT1F%^~B!TqLB57wBg30#Y~#-y|V zSpPEC!1hm^<4l(3G4Z8d*}d+kJq?aC*mc&lY}XOJ5S|KX*1G0%JTY(XEumw_Ba@#vd0Vvxok3^q=3~wB{F$G2RtIh|eH-te)Y~ zF-DE`VtZp_BO40F&HCH#{!_~fc90w}H{dzV9Q!{#;b#hBRWRN^{q?iUpn%x}c3>Up zF7!XZB``^e-L>pLXk~7cqn1J|-4)IL6Pgtr9lhaKiWnU%02G;uH59Sm$Yp>Z=D=i@ ztz)}@MnM|jPCHnb9^E+*T%J70`(t#ph7Y(}k$7|0tJ4ff>RFD4rKQ_EwoUw6^9vK? z<})jaB=(Yz;t><3-T7LUrpminYH?rOY!vxw7nC_iq9zP5tk?p+E`%QcwU>Bw3;8=3 zzzcww{}*T&kE29FSG% zI0PaEbRN@o3lo+P{(9HyJ4Z*aA<&CwI#wlxDP6w^ueO-TcXMqw=zqc3Hm}n5gNM@3 zu?!DmoR}BS&V$}xZC7IS{*PbQ@Svjz`%JR_3yP4;)^TWBm!&LG{biex`n%6jHWwsJ ziw^AFdnqdSKP&WH4HMoUTt6)+4SB)Dq|f-ClLd2>iWCvg@Z#Ug8wdFK8BkdZFZ-yP zx;mef6+JN{bVpA{b_{$g?jfOvegHUNR{f5PK}(;qC>_L;%_{^@oqw}dEAP{xryG2J z*B1NVWTrn<^%1aY+FH9R{34H#-OsGnPm<|u%LA(G?{NtlZ9J%OnmL|=(gr>Fs38vK zXnI*9o=wEuLY~^hJzjSEgv`plEq65n7GM9yv9tyQPpl1KjJK#EqM%4SdeF3`_&j{w z))flH3KX5ynx7pXwvhX3G>mds}xdusYji~31HmUkRt(? zZKeOgE}1N}QohT1u9|=)lN7?fb+xYUY3gsZvfoH>5-lxnl_twNB6EKbt`Q#-enap8 zhFg=*gzx^iN;YU802>u6QkYw+=n8{SN)!t9dNW*Gg!E)P|dFus`kLV7hz;16g-V zSA)c3m7W|^DK{Z6c@|UC;1}O2u-|O+Fh#NN$1$6`+9E&-7r_+I4Jw9(b(%Zg39Ax8M#zPYfIR5xL( z)KB5@q?#Za07`oDXkA?c&vE2;;qWhckW+M2OPexu#H8j`jgGw0YkS&j6N(Zw^1V?!hTh1 zlH?+vgIR9#b?W-=PNQMvIJcg`*wB>Pl#-!7_4->4G26~S^a3Y;PXCYL|D9^-`hm@< zcZ_FVa>IkVP=R7D>nt5?CYzR^nmlTLBE0D%TG&r()MFvxfP_R@ zrsZW0wyDb=KU_hAdMtt@DF7Wk!a>4{_woPgdZs)9&F zqIh5aKW;30TT3n*FjaeBaf)7D;*)_Fk6(@0;`*-*;GNCwl{7^X^ggQ#`%YcJhr{*g z*_b2mdYaAJw> zQ!*EeAn6HK90=RZQz%@#fBqe(I9v%CxjUaWh%dw68zZNx&O4r`b?qW8?zbZ}qopf{ zO-N*Wb)s1;xu*?t4{b)azgsZqj=eD(V=Zh#n^*Q2FjoKAcmAJ#Aid8`OaX5$yZKfY z9gtSln%=o9OzCg5I;p7KTp{<}^afFn&675$ z%GpUn9P}7Rn|iolzJ7de4B&W^dKILbQniu9JnPYfF78a^L~6l zIF zsutZZQtYIjO-htR*GG4_%o5bm6+Wti?YOj5s0=y^mh25rh?)Dhy*)b%-QL}PBQtFx zVmdNTp!;l_0>5^&b6HkvnV#FUcvtTwOY*AX`8oa?ftw4K71|daO$AuC1|CZr!++4v zI$~~BWa)4aQ!=*W$Gg_E}02!5tK>|?pgY|C-{?F0*;1eIsro_$f? zw}6Y%Z>~sxxnGag9XKZkkBN?%TY#Exy4ZG3%(0?w=HT2M=x_pw{Beh}rdb9d93CGF zr&3bYh3+JNC&0YykwQ4@Bj_Cv=x6L41`s`!_6i8hArpcW%}=VgOlp}aoU}Y;uc?_) zDZkc5tSUP62-za>z1(eJmkE=~V3W@-uP`3d`CTqDbzUp}FgMCVfdGjih2JUV~csMV;&NpR@jbEY4}$OLYM!F@P5;nU;J8R(Tk3b8u1 zDY!DkdM2u|olRc=YNL$C5iTExKmMS(kn~yR`y;s%{3|`soc|rk$wqJi2M7 zSpPGXyAmhpZ{u^Rs1v6kwRBEsUKJl&R||(xDkZ&JYw5Y6$sqfCS|!La2=h51bQ(*p zvj(At3M&qoVktUJ@`_Un13An`% zmRI!qLW5P3SIgp^@I(Fy^3XFOgDz38<|Ek7I;D@Eu=jk)bL-um=37YiEx5P~BFm=n zv{lZQyrrjc%&D_&mnF@M4g?TpdPecO)90ZT1vVEtwQxaYV_Y55=QmZp#DKi-w@wIK zwOtDBWKU1)kYJ?emCs*KybgMqNz)8jQ0Jd~O$Zfqv213ZqkstG*{$OD7FdC^8^@V6 z=qi^TXV(oHndzhZ0|Wt&3fI+&^xW*q$tKqFM8;3yQtOFJIdTBi(S-s=BgD?~Tbf)s#d| z&du{aUt?Sx8SVXXfso{RTZ`knmButo|Ku(p+%6>EFs~5p`bD~!-T0xhW28mCmy<3z zGl%n+b++~_ed5JSCw5#eO@EoOweIA~tE*gg0`k%P`87Fk@$|f` zHAoFTrRs8?mm&*N^IJ~NFF?t&Tn*qUAE&+6w3o0MUul)dtiu%)vXb?SX;5%0^wr_$3;#0V#J8=;0ZP{ zjLA^(iOv9~J^zTdp7`k9`m<{{?3HcL(PW*WYO#1~Eu;5;yf6q@$tRP576&i`s*DxN zdVyHn3Bsw;=cfPgF%}_9T+e=$;v<60{(WJvHsEa`TSP=eO2DAm=`jXy_s2IU9%Ns^ z6xXUCR#%#_sLX+z=j*~A$Kq=K;XcGRI%XI)xed8-fca@rfnVrOmhu>R1G+IQD*OxK zX+-w=L1x*hw_KY6hhV+JyF-lTdqEMU&CTI=f}_qX`#|kZFQ#Khg+G*2EfxL+FMO6z zRd37%5^HAt0y<;q!n}3wWoy{xGfbLy;(CxG>GM|^IF;_l(AMh@z3A~w%1b}G*zM*= z;u^e9|0^+b!|#Nr`uZvx#&e(o3|Owp|5_$6M#=sVgY0B4=YD&&ClftUbaeF1&+mb` zG6+J{5Bt7kK_o}S9;I}jYg6W2iX2;3aHbE={S~T{Q(Pd6+m0BfXQ1Axg5ZN#G6hF} zW(qd!S!LycMB&v;K^c={D@W(9cC`k?_dPwJg$#{oFbWPe$+|yS8St$1)>rzB(J}bn zGnz#jRgPeO1(HBIE=YJP`pE>WxBOFDGu!_!SjXVPh5eY~zgv}<>yLGPFpSN|8vp?Q z-}6?r0T}=KN$1*H=q$s(`tFCK2By_Ta!jqpP;YB4H2LTRKFyg^bBt*Q37Z$_@fY)s zB_bYEJQ;L^DeOPjt5=1F8C|JhaJR*O{sw@J8oHbM@WHMl?s$KFU~} zUFc2KII?3qar$qCdVA)EBf2?R0?m`D+f!yP@HP%$41=8|9+=rh4(RWj>-KRA5VDQK z!b(}VyN_=brh(v=q?p$5XmKpqv{iy zKpmo#e1D~b0q{?WUS;m4si*8O!^5{|370j&eqnQH1k%}Ys&a*l@^AFhBCG5iV^STU>f16PUAHL$JHIZXu@Qn>1{J zTmk~Z^b|6W-oQaVdKH#FT$uvZ3na`{hrGa7ayEYsTX+y2=i@v$cm=Zt?6la zGoiy_tUxNsM_^B#VBl31(tIYdFUz+Eu3K>o88GND-0g9%F#8(QPFzvGz#C4B?~5?B zV-CBvxWV%jf1TSXF~|P+Js(~R77i-KRE6F4xzCNF#kpB6R_8z!g#2C41c6#$VF^~G zzUK>5u_q^h9UqvdfoG>z-w_fy$?s1e}|jN+(O6OkHco*NTK3E zn7#$A4mCQ>lMM&ezx;<3?0NVXv(R-~`pSpGlw4hrXI4A%lT<@?3 z^>9=GCaigndzRCE=Kh0t!jW8PesKt3rL=yC-lBW@)5(-Xh*FMf=N74nMDI>9cHjag zU0Im)wwfR)M9@(y{l-{9>$0Ih|7+8;ARjRbRl0wWkn3sNG&gsEJv3E)_B7x9=U8v>d1k5X8tH;9DrMAYPto5}3!x8+Egr^rUyhKvGyBLCJD?HV;w<+~C3~WgLnsTPy5; zb|nyB2(jFGdlT3Fgdl?W+gygT-;w?-$j7OSr$ zNl$i+ERy%7V}11*Gx9fx8G3u-?f0b4f`qcl$?nk^KP3S|a}H7}M-9+5<5DnT)O(DETcK-AA*;nzQa<{<`*+Ir2BzFSpiERa0Tb;so zbi^d#-nKo@P`JuE_Y20x5fE;A&KyPlL}u7a#5 z%(q$J6lpt>p{EN?ZUvBq+0B6!TEJV=>6s<>bZiESc@Iav-Ze8%WEHTX`K6MApXFV!h5kV@>r zAG!}X+ktB6p-JHX7GB$cN=lRYBHt}@ZN9!bDZwd`;P<`^Oh?ZnmaT&>Sc$jU0a+Tv%HI(*2u$?` z(qi-2c=7dKjbcef-inS5$SietukyUv2&Y7}M=Ra~x1PJMoh(#uEleyft^rX1Qawr9 zmoyvl<$@pl_4_h&En%3!c?xBZ$A}y%yl*BpTKIh1nS}349{3)8*x%_HUD>i0Co_)m zdVlpa$7R(Gbb9=TcmbL_WQAzbKgi|6jO>D~B$?(hU|>qSjBO4L4V6rd^Y84*#UxIf zt3}y@wCz2|19B{TD>FVlJyHjN%2x}Qi&LKRe9YVUy>qit@xcv|4sFLxjEzUI<3%Pk z`j&eqIFeqcOKT+MK<#u#n$PBE4>WS)9|&Lq-DiS5zW7SHrahs?ToA>=AJ{E7-wBw2 z+SQqLl7RNskkpdlzJ}^`+7tqAC_)U zdMVkx>;H@W_yR<`)+F<so$^- z)`t>ZfE(izN_OO76=bGS_@mRH#Ezli(-5>wCE+e(3JutPA_p5(Csy0zTKDxOx&Y;vPZ5Lzxf2NHXWV5X>J5&SPBg7FN3?bMq z`anZd^G*o*$yt`VL$1uaLwUox|~1P9Re}&5~LY(*dK9%ENjtpadFJ!I)~Z{ z5~tlr`bL?R@dhbQ$qp6)ov$6N=;8H57ULBdJoJo&U$S$OT~iB?Un%Ut!ys)Y>E#u< z)mm6BBlP-DuY8+lj@zcbdmO2=B7(e0h}ZgLIH3krJ%-A`1)JdoKK|<>W?zt#m!`?GLOFRn{`z+9F_xH+*EKN{O&k8rruC znT@xyO$6&s$R#4J0gfi!Dto=V)AzmH&#~O>Wy++4 z7D}9s?OI^3?Zt|9))_?HLxf z0!||CZfGr+u3X<%Zop~|m9RNggF0y*p%D!8#GsbV$t~hUWqu-L4{d)7ofYz|R3l(h zitiP(F)P-G{eb;YlW)vO#rg~J{Mf_?S6%B>^#`hpwJt3hrZkE=utAv%*uV>M;;(o2 z(XV7P7}5bsmR)O#7qB#$u*e?hf~?5wqb`Awcsr;f3sP1=ouoJKIhalT)2$kh+0!#J zk}Mx%L8>bAJBN67AGfXE=^}8#v1MmYIZHu-AFH@!c0=oZkWCOt=r3TVCRU|xxXUdp z^x-ZSxt(-ZFFEMcy=`vePdr&V{X=df4H8pQYK@vDzn40(jJOgTDG|aku0|ZX&9(8S zi?t3}M_`XdDjQ2Z@1M(}(JIk0AM$b|6J`*3YXl1Jc*1xfFr~4e>&4VUFE#eyIZ~uq z$=2Un&}b$S3Mw4Ab%vkC{Cwwz%@UR(!b4ecvh0XC#8B@TlR?Ok_X0IUK`lfRi;Waw z;N*-ySuYYRfX@1i^~bI`vCyodDkS_`?ei{lSgGfjoT)WPWZ=zNXn$)3HaM$#510Tw~ou=y(6+-P$+MA-XA5xn6sIz(>M zeCQWxPQBUwxiKUK>42JLgIIRu3>1UXY^4>ympzc4&UdvA$&?TJ1Z#NmpG8=^P~-`z$*V_({9O6l zmzOf*#X|hPeJYtOi?Qo3-<5Zv+?qCv@R+)Q4m+Xhsg@NXz!lqSNl=Yd=Ov7>y%QVB z8IjJcyoPcmWX?&4*PT%n$oE|L&AUtJQH0`kLfmYRD-*a~`FK8`V_QmS6(k?_?_QPy zt6*KesJcmoavX$8S4@==C%@L!S#1*JgO`n`KUZ=K5PY3g)cv=7-__eCB(yJoiWhPs zvOMpm`?5DYoY?fT=grUwxA|~AlJ1oEkniyGr*~^_bE})Cp8sX#B`Sg zkmTkbrmq>ZW@ZvEAQrmJ#lzHwvG^`dIKP4gDOJKChONSG(678nHE^VprYn|(B`1^% zH7pYLRG1fK(K^!X?sfa-3}EKlU_8F)AkBT$P+DVNd;HNds%qFTWAC{O&|*CU5A?2G z9SJ*2Mi$Aov{PXrSek#}*Ip%;h49c$>m$lD20h5@YSUhyK+Toc(x5mm6jC{Xs%=G*B6xLfPmQR)FUO_c+ZClf`n;NpbXAi>qz}%thsB^1UB2VWg1PB_D3J==xN_ng2Ih4=Asu?KVRnPOF_^d=kz zRcIT8?vJkdUE>2=-^i`v;(_ZP^sI=K^KnA-g_wnpX|8m}#pA!Nr+pMY!!a}HwLrRq zDe#=dYh6pAdh_lw7zSTV;5EsfVde&(OJeE`yo41F8s|3E92lpjMbfyOP&<%X_3C zt6pE}7^0K@Sm%Pu|Hs>RhBdV{Z7af&qGCZ&kfNw`u+XH&h6O27rK^a52%&d^kz+xn zs31ycN>gdlJ3$3ekX|A!K@dW(p$GWZ21x?)!1?iB-@jat?7hm&teJc6nKeefBOP`G z(9JzJGYXk*VG-f!*^H<;N$PJv8ddlhEjabZq!naH5hbAAGSw;~vA@1NEG|H9I&pt9 zhucRVdHR21{N*>sxFc~-zc4SCD1c&U(C!^>;$x3cBCWH34vfBS8>^VWjKGs~CAuEe zL&?qDe`hLSqab??A9WMbAp_IbvS?H}#ob4^Tv_=GF5tf24F1a}N!8oPh0q;Hsj(ri z#a4RSKCy3YhyETM187Qf{#@+9oAPx|-~fim9cU_aJn=y9+O+d{UEqq@%Ngd8Dygo1 z2ieGe(7fV9Kr?;af+m1$pda>rcL)!~TUDfyK|w5BPc+8Omp}wj-b8XfxvTp`@d;{R0sicP#{D5q?4;z2P z`3#L4#KP~!4IUwj4rMpnE9`xJNymRFsvKcEX!!W}0JwS9@ElpYAIX{%e0t73q4t>7 zUeNU9U7#x*VcX@w(-a~GxYc0Y8HjrVuXdA-|G|2eO76xEMDIu)rnu-gZw**7zQxL#f z@H#qm&2--ceMz8X+{q;3qlcJdym=j`ou{+m(riv;cK0ddJCHK`|<#8LS z6!}#^tx6%h<~g7Ds$U?jSQL~OHOs48VRM$*W-!1b%h09q~p zh%jeoeGDIYDUAh>!VNSozZTNmCG5!&lFFo>MqV6L_Uh&+dyLJ?E|$zvF5WhGEO)o;Eq(A)SOdckl;Q3Z zCS_hpgGx`?TQt3ZYzn#V+CZ8#^`!%#LWJJfo@|=(3Z&Y(&z%G3+4l$Lfq66wT|7)% zsK#ps`j>hEbb~G+CTUn1NJpMwk>*>wYO+~*ny{HqYKMT75v7t8$3#WpmV$QR+*PFC1$T;A|L|wl5o=4`VU)DeVc_`{%c5-QF zNgIdU!{aAU)M?M4k(E#+$Kig=7d|y}$%mvChQnpy2ozPJE;h~4^5#(8lv+Azxk(=c zuX4r@n-{_v5O;&fzylV#kQ67C%_g`qUh#a^I=Qel*&Zz1j`4I}t?>OQV0gY94gG3b3 z6x(-=*N}H`Th`3TgwWxfRa&@|T`qWpyEP6IAv-Ar$q*yEzrb?#O1@c7XUEny1Am6O zOVmN01rODti!?AT`x)it>}*Ya#7Jtm@Bz68XlK(w_80Qxxcq7|?2I{K;HNq2Fiw5& zwvMobJE&nfY&E#a_iMQ;8w*-;wBr6jd^svCgw?Ip@kZ6#bN5H(W;!^MM}56r#Ey7K zhzfy_#%bscH$5iM5g%|2{PY8E*(9#2gNjkcp1V3lO1hVXan!Pns7r^7u-R8_E%_es9W?$IC%vZ zEVqaWu=t%syHv6vhi#%7!;C9x_xRT8SDB%-2>Jg6bu%Ha#ycinb?o0b{OLFEG3S!n z%fGu#u-VMW#u^Mif@t_L$|54zB#nPXvJjveXUy-3LW$O z;@J{m4??UFFY#5}bEvwI#xQvqQTlENDef`}1YFj$$eI zP*zArnWa;A04Am1NLiK@3K`-=!{O4ywYCjefrk2S{kBqq<*3A8<*w&JD@eJWv5ECk zs#cRvZH0V}C89(0l}_Qz;kkm@_Ps1Q1DT4E&kBp@37BKuo{SNIK%aCwkzG6AZm`jO zykZ=lHJhI~RBaw%j?rl2-^{UnP|-;a3NTN<<^>mW$_91FSk33%2-M3m3;ET3Lbjwl zD)FQ(zNo4FYq4R%q-(QF@oW_u$D;jl(lM*5Xu{V`x-^ign787hoE#Sf65y+O+QPQV z#99T15Xi3YB6gwzx}<+ruTboI&qG#I{&N6-ikI0r2`M@-b9v1c@8xWqvKXv3Azi4X z?qp~#e|JVWd2r0`{1_CTJInC_LNI7x$HJuYWQ?^V&5w^ zkM_zgiQXdd#6{E2z07R*VBSI19|{?pKB|c?qoUTweI66`!Uk@l7U@V zFZF17UTcX&Kf$)W2aS6k5+;ZKptLWI(V?UcRSm%%``thLHJi3QH1Zs)FZZS$027B> z_H>JM5Q4I*z76I|9he^1mXQjRAFo%2!s58}+lhUIaNkXZiFqf*s$DKk5$?N>|8U@M z%J7{X$I3K$nD^yOm997?!Y?lPyNWt*KT{rf9}2c9?EQ|qhvsEV`E?i*f5iy1Q8iB73slKT z#dc}aiI52WoOFB3!OAzuR?TllUd-B!{Cx4yq(&-6^k4C&NXvpuE4923;XbLO*&Wf& z`R$=QhMg>fx@)5q5^@g+Njf^+$r$U@=9Fl89_>BX=%~!o98y0Ua&*|U3*%_bDWPwQ zn|r|#)s$-XqC@didm|F(&@cO4O}jz1^aT3DaDm;+Pb(tHtEZ5J6W!c$UJ2I@SW=vS z;ZwA~H)W@JqRkEsfg`_^=3mCd6Et?R@cc2U@x~))bA|Bl)YXz`-fuzjKL=#2Fs4oE z7IrsdMYd~LsNXSrao>uA5D zO@y86*KV{l?`@kJL;bl7k3wLynHXiJ)h%!1w;qiDf~tPc%@)FNT6pftR7IfP3&kt$ zxJSkGH5X%~Bj%(eS=oZAnuOh?-EHY%F}Q^CnA8WuZ)PVd?tSu=p2PJKvU}rRqwkP& z%Zuu+2V%+Z7b$#g!0R_tx11I*lfk;d#5stHO-46{d0O2{N5B@3;w|Vz(h9aUS!(mx z1hUCZb==c;Y!qV%kABhwS95g7ecrmYkI+{oD21y3kvGzaGU|+L2m^Hwsh=dZL+#vq zQukTc{xbCDw?Sf=3V;>+lvKK{sZb#?H?*VSX2cjsEQXbjqcd^g5|ah)$+LvCqFb!S z5gzcI(K$&Zj`4^x0EOiQa}X7qd~Z(4$#vP@pQ$eAD9;fv_)&MvxFc>*R>31Y^EZ+H&?*9)%ccjKB<+yM*apBBwYZXT1E2W3n zn$yM<*w9xRIMjJJr0w#UZ0T$E7;rhN%PisjZ5ANDUQ8d$Hp3^HEs7;OA|2ub>WO8F z=Vt-XNRLq+a;n41w7;BhMup6jeA-+no^PY_%cXJZ`!LS;nXgaDy?islUnxrS+IIbo zQL9c=K;7cOmVK%<>NI@hQyzAV`gS5p8%>H)-*L={JPdvW6=_)K^d>XA#l5u(W_p`v<)n(ysh6b?qqoSQHk6s8iS1x&h zGS4b!`k}$Fr||qjnB*ejVrZm)QB9g-;)P+6_%@lNs+`V%hgOwz=AmTou9#;9W_&$4 z^Y-V`qlfw$Y-!wBH`(XMQ9qtiy0gUw1QYGKa-kZT!O=k#G1K$tEAtXz!WMyc@eZ;x zBo~%iGa5EOH|ssA|C$ljLhYDUgSCE3#DOn%L6UyASF&YnNbtLV>GU6l`H*DuzIFb zAjT4$-`7LxFamo`R~y!OQcg!)5fhvsXdyDxHs;1CUXt-+uDMHyH2cL5mDy0}Y*YyE zMHIS_K>o@`>d>HRy*;S_&2y_1#}yZyYWZ@|n?8Yq6MI1Xa|U9L=)U6Ifeex$gl!qi z$;FdUH=Z*{i1ybHUVhGLF??xblW4YWin8~__#RTcqz<*aR{ z4t6cvAqI8rg+lqja<BL61@-ZNC$B+mND?f;24IR^{d|0F6xiAya>yFkni+LtKr~AlIWXgaBSji{ zI+f#{f?`0}fc zAlW1&du$lQIf^dks28Wb^r|3rFnz_6_eUw7v0O73!XkeI@UveXT}HT&y)xPHJKgKM^wal9lE4aBxIa~0T^%4$QfrZXIH0#6Wv8m1YQc)Slj-10 z)wR%n)ZZI6T@+2wj(7BhbRyERRcF(*zv8^TKWQ5aN_K*56~CrtM-LgbP}xQW$Q|_4 z+q!aePTFa4EXXJ$Z04tWqVQfKuj zVDVQcT`leOqfXE+JP5j1O8*tsYZ>YXE9We-}C>vIqa?B#GS@f;a21T=!P z*9sr)(3Sz|sHezHo4Z$;ibPqdxEEP)!mh(wJaRc0&nlQG{+^O$|hq`=iMm43W=rdAm?l z+1(jZHQfC%%Jj5&H6#2eW;Nt58X$kAZk9SE!XYf2(~ofy6rcB3<(bKaC}3*1!&s!k z(3UH_bMQKdyCO`~O3l4xPP!x!49^*v8VbLZ=9xcbzBR;L06xdAOCH^yVIp6G_C!s` z!%&(ex!ivB7Shcsb8f45NMcyUF{CP;p6!?TVPD+=J`MZ(E<)((Xo=3qH^&?YazCGx zB29PUL-=7jkY{@y`ZAr2mVq_iM;Cdm8z5sr?w#c*w4PvWxuTr?sKrEK$b_sqK7Ukr zPFL?Gf5xkBfP~$$_jPqV{U+#{uk7v$=?PUg31gjK%_a?I?|dp$LtV*-3AD@w)zopr zIU)xZLEfb;X;q`@&UgfeU@Rg4V$^;bz6|L(S7+Us6i0kb)-`1roF`@0i@}WJ&A5U>_Cp5W_0w70ku;;Mz(grWinA7iG^q``f z+_tIe{Dv&4LG9dnJIPmKvk?nuRL#8A^#k*O98*%RZ(SyLgZS^o;r<9ju>Q=o5&u3S z;7#ZO7Dx4kR`suQ5BKjg3G;9UDfD+%?gRzUm*Go=&!^1@ZXe0H)XeUeQUDSYsp`(R zo4+VGZ}Ac@Zlccw0!*cs_1~&+iK*jJ1^}8e1rHy?+SdWG1y9=b00lNcMX15L4J?nvuFCfhKq6m zS?BFd;?i!RCqZ0vvzV7w%A~w`vJK&RkS4rBQkdpJYOg+EvTM-4qu& zVMz%@B)~ULBJ`}rKX$dmn#486p3i-e<1tp}QVcj`@Eblu=nZh$Z&FsR1$#wIRUERCM$-n%-w&V34-B{tO(bvVJ%7T)*tuFJkT^Cy`4tqjZJg=id>SQL73xoXNV*I+;C@l;zSm6N~<}&LH_8#zg!yW2m0XCuvgxkN|wCwDVpTir0gc>*~V#@D-xziZv(jYBS^Z z9yjAZ==kYhQacwDZh6V<5?)bUN3N;DqfRIS_}X)X;}$hMzx-KHw@%W$Lc2`TX%D%g z1jWmu-x%n8V%Q^K={TGIdnOPaTJpYSJSw11;Y#2o0l)g5yxD;r+VL@=c6LG%*%Fh}c!dNnk&*HI9ljmWf(Ftpqvmj*viQ6l zp2l>$rVZ}f$ca-OAv<@b z*QvnP*AKBt+L>=%1~>D z40|na65}yYMwNz}?g>07*H4(`V)q4P#@{1()9=IKXYAb$V~QcT)kkVdD`_IU;+)Q| zlTl~pP0$z60fOX-LMH^W;-DWQJ#JEfCX?J2b_22#G`qcB>ERNN6Al)crAad+BhNV)RH7)2~))!?NS=R4C3w=x2=gQ6`6VuvJxC$D* z8lImb_5^U=eo!-*3rE02;^U==cy7ppwZVC^=W-<7$+>WE@%!u)DXt&TI?vxao{=Z}e(t{L*BRr|s6!x+(ct zG2Xz+_(zD8utOsvR-oc}k3^f)!&|3@yHDJb|KJEvs^r$OW9Jbka4nL?wI{n*xSj&% zI0aK`Z+-JSAgb^kPr(=t;PZ?AU?xz9)|`=0Jb_X!4s)_0^rqaN`*;WtUeWt>Ei@hb ztD@gY&^SHZ%KB3A7)n@}qffC$GUi!6=pv)0!q=kZ!DI#eOyj1VS9c%@xEm~2nj%~= zce3$cOTH;@ZuvR(wY*}|^p?7&rhJSK8%t?&;i%c;?q-j(SFTh|4xSO#%j5yERS1KM zCTycB{bh5LtUckGF3mpO+H$adhZq@9RcAOcrE7-pJb(_^W9`?jtah; z7u728YIDq@EK=oR%1zVG=7uTcRt4c%w1i%a@E+lBwR$>{Y!uoN=Le%Fbb6w}47A>< zi0_!(LdC1{Jo>bO&Ih(f+B(=qOpar(&Wu&oM2h`=TMIqaOKPg(Oa#RV5L{NsDrBR< zz!X@z1y%@LG}8q+I6YA;>RmF~Yl}OJWExV8aIbl1xFUlC#RG2C)mzlOE6g-xx4Dqn zap85ewA1N9=ihTt40^%QM;h+|2=2~k3Qu~Z-X^>}F2e$J~`0kZI z+(?xMdfJ+s|0Ka!oRw76)$g#^zdR6hR8T9BkUN+;KATn{?D)p=Zx<5`?|cM;SVqEAqB(i^59vDZ3T@Q0D)t9Q9_=pgDptnfiX>GEQ8uL~r85tA0(l0#?lgJX7Nvv5|^@WK2qXORNC|Sa`^SlKt zcYAOP^^U7mGcrqCgJ>LGKhD@)U1ERaG++`reD>Hsq~@?EH~G z5iv?#{W^L2kuTL8508Y_+Kwn-h5&JhKWaMadF|39v3+r{4v$_BJ zs;Mf(RPk3^Z*+NpLZtvtpiu19rX!LC%KuTp>d4jpNio-WSWdNOj2PKUbnvf4&6rPD zETCp}E2(IjP0DQKxmPw*1HKUzx~%`bDT%WRi)DI6nDc)%R}}~17uUEKGj@Hg9A9)h zJnMPEJN>f?a;G$o+13XG$g~hbfV)!U2ahvXQC#R91^SMy#7B(bXm0ZeGs3!>8 z{?h_!I`TO4A1c}s^1dLVFlz{Wr39`^^saUGWmVY+lp806FXWg&>*7_wGhkN5+A^GS zDc7CSCNe9R&sXg z<5Ma?2L~=1Z{|#^C!>7O2)703yX#&(#B8q5~bAPbL1%F~R1-xpZYPj;%!xuL`? zk~yvDH^lVH&vxElQM>{+Kv0ddjG$R{9Fyar=i}OP|*#Oae8~_Ai(1>0|!Ngv=s-3M3S%$`HwE z$bv34y+5~W)AVCfbA51R*p4|iWU<$kRndYUKi#UzP=*Cu}1CSxXTuhMR zZHOW3Gw=A>PvCAAxJ#-Ca1_{ZQ`7T>z)^qv#b@rK<&47%k?xk^UG0DjQpQl#JZ(iG<~ zs1wk=V<_U*L8~`k(bVqwU9HVexSv%{YIuG(OVTHo-oi@U9PgZUuYSWf+zXH4oV{|_ zRrOpO8i3Vn0$S|@XLnX5^yat(k2ZywOvn&^stsrK!powc7#O8tlLoOl#lLWqxV^*Q z-Yu}ooT0j`+@b1MlPyDGg;4bjvmruoZq9f9EPY%;0~+3!{H1<)b`T*7E>!mg7D9W- z8Ej556!~k-&Kf3N`}A4j*Q+lP9%#|FxKSZrM;vM|1RiXeYDlWe)5V;gF(3R9X1JU8 zXAZ=E=+AG*K5YA!10f#E)sX`@6}B6@AKvKVEiQ^?O$=+9Mx_XqG&)yheQD1|S(ct` z4hfmBIj2?RJ)g}r=kjYXxt$Oozll+9v_c!Lri(y~FunzMt>5o;SgtSyBY>*!=$uNy z+^qaT0}3Sb^#p(T63Tpu`UxmwA#-G)Ec+*yuK7O0;$Nelvdmhu9TUUeXBdB!`?^l# zIk`4ZzI(47ET||G;8X15Dl9eJsXJJxtR!`!`WrUUW9ms2piE>=KJIM~o6ncZPN+US zJ*F*FnsF(xJZUc5-1rp6uEJVw);{vuP`a)Ki!Hvq>|PGKgyxFcRGny@HX9ea^Kqe^ z>FB+cXl1B;1~B^!f`?LSY&#r$wgm(}kd-=M4X!6Qsxx@9DJvFF)yTVDUn<05I;$!{zbUR+ zM1TA>-auz2nc^UYOu@$=;E0R|41`-k`^Z8m0!Mw(ljHdHgEBXKu?TK)@z}elx1h#;u>>I z?&K96(Y{7_#j({}-=X;k>#1OR1uh3Q*mw*#`)p^E z-qfXehi;A=Y1q7jG}<*|XSOwp`$$bo9UEw&8?O7}>x-8gI4|qb-`_GJ911EO^c}y+ z6Ai4oMXfQjj70-EmWEQg5i`7gGE$gwg*g}ZJ+yMy!en}X&kkFkFVvc!U>G(Ky6W~V z!^itdh1*W`gcnsL(!io|y9%0A_B1@gMR8`46HVcVX=}Glcg9#7sOA6%VW{nM@FxLxzT9)2z4obB^#dM<~zP&0P1y4RD`E+9zZZK^CaMQs7m{y&g)p80_*@10*3OwqS7N z!*_~9=rx^yU>9h*%d0#cc?~}ILjE6N1;5PK_FA?fg zl%LHQ=&BQ$wYfCb9@Lv4!y+~x6Fu|+SYRcEt?#uLx7{-!kk zU<=THGhGg?$tfPs8?0<$^Qp(b@i$_VWD~+Im`!9zbfoIa{S?EQ0lMKdJr&6?c0^w{ z(K208P7hx*LTy>&QaDw6QoJaQ!VQ5oM^hcv>UgfBne2~;zov!e!Z^|yW2bbg)nBzh z++B4@>)^+OR4911Q{=!D^SmIa`Bmp>d*Fd(kJ%!{&;C7L8>Jef^yK_MXqoYrKBqf* zu;IuFZj%}wj+yy9VltLtLHeqo411)0r2t3LtuHX8v3A2r% ztxfNC1&Wgxoay0Lfg*;=O^tQksC%nN;p;p;_)*{#jwqQQZ7Wp5#nXElJr&@2<2P4C zavGwBsSMywY9L{JTAI+M_PTW5?bm37Lrt>_+Q`6zUy04ZVGGtaFcXhF-;*gL*3%#X zIMg>{n_cqFW?KNy`b17>{e&W~H?0z{VvbvRSmL8WxAs=3QnC${=sx;|p0Uk!8$u0_ zXF9eQ1sXnK+HT-lh5+q&KKF(0o}C8iAt*JF(jDkA9x=~scDvU<|KnhR9&83ZT&Pw7 z3X{}~X6-TM<%Yq!UmS_9FK+x`g%^Wc)01td65TkbO8^@B9uyt{SWndB`*N>>R^&B| zo+uRB{^9#$b#luqaOv)LQ-Lm2d5khkH-DGzW9}>Y_I5o#50uaK^EOE40N{BqrrF9I zz|qLYSmC)dacHd0zVZq5Or3z!47PA0MH(_V_LZQ|wiU$4{XzBZOSyz_LWTEUC>Jv9 z$%TI1pd~p>Sj!&+V=EcVI-H=T5rn>l3CP#hit_$4vil;Y%6{HX8GE97ep;|xMA5ci)MfNjtJ{4u7ZWbf;Xb{H>1w9cm8Y)w zysPeM*s3)1z<*+chO2%6Oy;EORwt(Io%m?%tI#Wm$d#7uwytcZ)c@fgzLc* z#VPcG=JPi$AX)~AMbpJoqh>jg=4qo1WFX_?ahmC|UXu^_fT<0&Lq*O`s4yj6+zNq*a-^(}E z5|G|s`@UVZw>(3| z5*TVaU-3OTAOC`+zVX_e-s6fJalno1e;=l68}=t+T#5l8|0Eo8;q7Jilc7J;V^nFF z{g->EfSY`SJ>&sp?qeYk3i_MTnhAa~UWTcy%p!`ek|wW*uI8$rbsHl$Jl+i&9;dfG zj5Q~X_Rj}o2h{M`=H7QQ8)en-tCL5iYCmg~;>zDIcd|J@-l38w3ZY(5+_kgZEn7TP zP16^-WvKr4DiU1@`BLZ)FYR`BOXcDf9z(A|tC5vmIJiL#3f<*P-m_399+1dWnk9k-WX7Vm<5ZrZvrHYG9bwL;ed<;*{pOiT-ap~-HP z|5?CPI`o5&l!E3lL6WLIOQ#r-`5+A)ewk)N)8Yoc(kj4AVbqH!I)Emu-dp2r3TU*9?0)PrfJ=Y{bS6 ziEqVew)F2Mt%za*RiwOWbt`QC(!ZCq^azB4Z$sja$ZPChp>oStn)(tiKx9>K$1ZQr zvEq54z0&r@vQ*lH$Lp-$cWAHW<0)#~R$CvY^WlmpF`!@%HQ%rHfAYL}ya9@87FNv=FDRs+b#nnZwrY z8u)WTI+t{kVJtMwDnZlDU+&k)&+Xw^PVy)?4u#qK{BDwL8?>-UWd#E8vf(BZrIOp9`96INRZINCF&QE;#f*NE@iiY6qP(%wf6$lNU?2A^F{5FO z@WmoKbR>!hs7D^MdE&#fP#c^S^D`9^!ks@t0@1Zy;~e02&>0S!n{I;-W0*=V^())Q zq{sMEVY?@%J?3JnY*@1WsB(EfqQZJkhH)!S1xF*xm1#oc;47&aNBj^wa&DNt)+0MG z3o`0W2N1)vVWOI)LKUx1h^uZ8r@3b6YI|pY=6tJ@^AFTBs%Utws1S-?(xPTMTR5NS zvWJI#_}hzP;>?fShXaa=H%(8Jl}vUEdvK^lUw$I&VTPL=92G8NRA$)&PPuZ$FS(pK zgM;&v%DHo$nLqEej~R9TXlNK?vXcEB?rvM0a7J1uEIauZZS`K`o7ocSl#YBnt;JIsBqqpx1wklqQNJ^YXN?z*lirr(Oa zvy@pHpvB?ufjvN7Qa!m$PPvdM%d8XZZe3mg+AB4JYB*(ZoXmR_kysg(IAP;(@x z!O_iPsCefm0wtI{%S3bsm$gQK0=kA_{;bxa*u=bmet1@c{QcuTpev4bE5ft=ZpGlf zn&=81Y8$n$Y5x$sJ?8o=tUon;X}cd-d=ta?)8yKIe+DrQ=bu{1$?PtD-FNH;AOhRS ze1COHTVrXt7a$3IOAzkv6~=G#eNw)U{h@n%t3cC<2*byDFtc&U9D9kn)vvHw*COd+WOrDgKY`fN&2)sxLU9iH2MN-+?k zIma{gbXAW|n?H0rQ2h=ceSx>t+yWQvr@kyTR-()~dk@^4JSF2OLur5uOh8J+@?ofr z9=J9MAcexza+n{Abwnu0i)1`f3|b)FXq$PmDRFit{+S|Oha9g z$5}pc8YeX!qcn|(gA+|Po7s*^Kp0F`+M~fAE z^yPjLOFC!yxP1&z^tTffTN<2;<5LVmfT6YS_nt3Tq;WszklXH{d#ee;v>2wNJ?-Wl zbm5`#5h$OG7MGM%UVrOPhcSii$}+4mv(wEIt);k%_=*{MhrBtACJG)LGCiX>|NY*# zKz)0om-AmygOBR83`I4S&1X96dt{8ev>Ui-LIPhR?0VoSW^onhNw{{spj?8{P-xE0 z;(6jki#DfAuOPE8t$~g+C7%(p!#AL=A?Is;oY(lF$+x@_co1NcZ*4mq1u;jIKxq#k zZz%;&1jZVD0*#1zE}l2ph_%CwHwhWw#T9#-4~y$aaHuF^M$9{+kNeDjx;_kQ;f%g@ zdpu2z9OG$}M zItjK1+8^-5qyps<^uNwAx~b1pg1CX7^XMWWg*owDsAa`` zM(}v={7!}0c7N`$mv(|-#bgf>kRiHoav57{N-Y1KCWjZ0RUV^@gnc)mn?CYPUA}_7 zrT6mTJdyXnO))##g&I(Za0H~W4L1F-Dp1Y4e}3@a1KO1nU0nHC(@OEWXZNzZQ&MZq zds`SbwnlZ>QzUR8S5pKWbI#fNM$8n1gGE?OE_m2P{mT1# z4?T8%R7l}&<}a3DN*f8b<_RE?%wAmKdX<7M5WC<>4f3V0bSd)9(D|aG0}&hkLxvpr z_%Y~>Dfa#yWrgpG_bfc{2Gq3yiQ9>aB?ZT;#k(M6;R8|T3md+5`o%>3Y41YlySD{Y+NY#P*X!S?b9b1ZvN#mjXPy+SI?HGw1BOy+ldxZ41Klu=Q z@lTXw%;|@n>TaQ^tKs2>HnOIsUhB`JVf$z!ah7*@6vJd?z(tckD-YurM~u`wvhZV^ z%I&^E`mG)IWI2Z^KsN?mR94U>NsZ>!)-lZ2!r+s(T9XLzKZ_uEo-=Q>CdZH*f2#;V z;ugpqPrkKg_-k(>ba(NE|2<}AaH75}eNnHxG-m!iSL?f3Vw6I_HM#k0DYsb1njX(f zbS;v@zhTF^L&C7LrO#iE4el&eeJM>|W6fwlTG5Km&n6B0(h~Ds!;RW~0pzP3XSo=Cw`^>wZj2?xK-W6xBhmBp#Dr#(aEGNG0+mO#^P6#IYB68k zCz^Nf!iDVz8}a07%GxvSX?I9=#E#Su9jkXqnjphC_vSk z!P4S7N8M6M42*CQQ0~0X3Pkfp^(N z$KGNMA}(WnuNmevJ5w6}NM_mPYoG2x9W`}w$9wo85!_urs<;vR6+6Sh6(ZdEd6 zHs}?&&n^M9TVm2AU7=TSX~(zC4uR^b(f8^ zta{cOywollrj356-~Yq({xoPx}9^#7};$vajCZ0 zNG?6>hi6a}Re}pC+>H&Xh;m%<~VsdUN%PFB$#>mGH~WvS za*Y`~&vwP~eY}ly$>m-N=JrKIEmH%TX(=>2*FDuev6H#DL~J~;C$=<Xyv7?eKR-W{QA8^N?vC=hmBis@zFdwLpG_Mej78Bojp3jB}tsPcPj6HG3=?GZRH5xYk}LgDtH(G$q0Q zg@b863AiQXD)Th*xRyKiMVo<5d~(I*d4R9@a$CFJXNkKlK;u zyC)>4bj$1T3VKrpvi58pGu6X3mSx;+7=Mk$KB0O!1=aRRvg|WSTVI$}JGvmIW!fkx zSbC_tU=H5zaHN`-p~J}IzjV1RV{pB{;dDNuV`r`VFk@#MvOjfCO$YxWXtZX*^t1w{ zUzRKTDohK}k*kKS%&EQ{y*lh_?l~~AqyY(FthDfp`9g<1VhoP`%B__T4*NRwC$-Zo zY&9S$DI=~pjWwJZ-C5&O|CN^{1hCd`R2_4fayFYOvQ`D^*UE18>%Hzy>Yk`Bx1-AP zf6cE|@-^${OC#CE^(io>vS#z{*CRA%b&KW{2H1?5OuHvs)|VZ}x3vY68&V-7=>5;p zvyZveR#gcv$vm=!rsS+;o~q+?p2*cB&r2h$dz581>J-E(~4o11Fgf2vRkmFHcw9{|W{c=Q9B6+{4J9nlFE6v?9QGBgxm!Nlxu(`PEb$l019T;sUlihd3{RXAJSi=HaN$OPf_S>PtXrWcyn09UUdQ8mvdinP1X7ez zw7#P<-lott@h&35kn|ep+-iwBWO;eKJjB;F>Vz$Ru=i%~*$MYCsl_8VK_fi>pNiS9 z^`o}-k`(7h621S7kr%F5(q)>IA|ARN-dvlY_zkNicEm5R=gFw(tZGB{(TzL+p=o3Bf?AEak$pk3d?cNQajL=E#MKPR_9KVR->WIjtM1kByhJyD z{*c_nz90@&Oh$C>Vl#=>dK#fD2LsjgOaq;{`r^-nORK(JA|3WR=lP_}_}=ct?w63j zD=n0 zPuKiNxTQs>c+;$U*@BuOQQO}omg#y7vD@FV&?P6lkb#0KogWV&4AYaz@JBUu2{qij z%|Y^FvyLIlg9m@6vh$UJhi*>3qkH`9jzxKb)bAP`X;Z;JoRjf^?80w5tYYahak)O> zwFEXL@67d{#eM#H>RMTv-NRc3>cf@&d8R+fEtZg*nf5+7)i$v)Pju-#;`BSTeOEqX zfS>pHb40?eKW0FfTF-ZOAIWkwKZj+_r?pMIly8PF0V6=QE^m-ir<(klHM@A}rr*Ks zm>K`CqDyW7CyetV5Ggu?6q4#>Q5`!VurXL_+n>8^T0|# z5#cbWiN^G&S(hw1ShU+S9X9eK65aoul_eRuCp4W${11By-(p%s8-i#$6TX)Pd>}&< z1-t19?t@ndx+kDH`@KiOb{iGP5K@A15zG2a#PX^Cx7-AX`NU7@NJLZ zWEuO$RW7F>Z8Z20eyZRx?jPwlt3HB+=t$hV>qun3&O}&o;T+|YpcV6`VjpX!^vKL3P2oxW}uUy;v4=_k))-gyI zc7JRW4=`+Bd-qM5_ZC+@#yQAS*4L4jg0wB1THzHI1`B0VtNeHAYn2DD6~Ui`UR`@V z_QN0{IZB(o#*@ImkeVBPT`YGqk&o%6*HHcrc@~&`V4w>(R+6uuUv=AbXrz0xG?rbd zw948%r}=7~+9vM2MP!}#9s#m+ME27vkDw6MZ_E-QN}9w@Mo;#2WG)9d*A7zakc=e$ zy?b7U%xcK@ksdmofbA$*VS zoTilMzXyu+hRo%^yU5Ybs-ugb1x}jrA%f@1@hpEjE0A!)JG{5UI!Q4rTCiDXws=wi zIV)EUlJs!Ja5w|=+6NZogt+5eYi&C>m@ZE@Q|QX#!{dRsa)FqB@G&XgS?#5FVbOPY zqhC)quI;`RY@=$I&>7D0jG(yub2UZu_>W+*HU!3ng#$2VIy^J`@{y%aE3L;L29)RETv<0lpWg9{C7%h;i^ zjtNPoQHpu78{Oa;zM?2{<)l)}0 zqc;LP?Xr~hp60M)AuiQFq_Ivxz*(ehl7-^h=Ho6b0(gtwcR#N^S3g1E3^Z`9r|x~6 z0LhW!{IE_8ro9NeX-_wBAH_hNg_dSKNBBQl?DzbfL^uR@ChOb#z72Eu>;>%N zwCq%v@*xC@iDsQ8yb?Y*GZ4Yep+G$1gIp(mt2|`o=!nUiFJ=5sPi_s+GU&$6WX%7+ zz1SD=^R?;z&c_P~^jvdcdUFDS#L(Ey;?=iZ=hNTa@_(GK@BMmq-T#OEbzgFRu7C30wU3KH zu(>YKd8g}nU;f|a{@wg`|MpndK0d#D_x%5Frq_SIs4ibx|8wvA(&d*|O1CYPK5n?Q zSqguB$C#%J0Ey(oDYAGxC9M*qvefeK+%?`!ISou zmzUpNy?)=XH=_Ig|Lpz_42ZY)%jIo;u6cd$U)lBg&+GSTe2KpMQhRxR@8g%3-(7z^ zIZvYgZtd6X__zPQ?7si<-w*$PE2^K*E#Gzj->KPmqxb*5wmI~`(odVDEW%i(yFIEl ziIM96yQ#|J+v$&=G@p9MScU^v6K(we#^r1M#k`!Y|7%>!Dn$ElS$_NZ`*-*L)*t6j z*4O|0`|ro=nmj{ zzV*BQm;8VE?=nc_rESaa^Upu8EL_`@d#C*PwZGeczkgY8{k1mi&F=qY|7GjBKjwG- z&i{V@-Tw8T|NVXp++8^T&#Ume^?Uz!zuQ~?KlA%L|GG=HKOVNu$TGh<(7nE8+T-tT+f|Jze<{W5p=Ip@00wVdl*+jyg^eUF`$mz9o=j$Qr!9X&ca zW*8ma!SgIkv^P-yfl4|$))GfmRb6#eRUutB&=W^zdpf%NZ(`z@b)!bO{fX3U88aa+ z(T_5>F1U2VKOaR?e4R)qUw{cJoz7{h1%A z(3{YkN{d*w9%fxV@VavW)e%%fmoQYRnPs;}rcwABl zJGdQ-keyzzc)}oI?f*>alXh;dqs3qHN2OJK|6J<0ZW zmkGNbHmve;Tt_#S!S^$m41gXI>lK_TIebmQeH;qbq%Yd*@vDcF(i4VR_%M zn+q;i-9IEBYfrF~z>FIo6S>d;3Y*$VJ|^hLB<39Ud_mx&`{f60k<+0()mP`@#S@Bd zeK;*qBC=}oZoB%8O{DvWws4k+f!NcF^290Ol9115-jyvMv?^SCu6O}@UyDju@{N5A zx@#L>nZdENLwe3I>)W}0Q5|TJT+>pkQ}x+8{@bOt3z~=CZLjIop5I*W)NPwMJnhy^ zWPi7Q)vUMC()vrMYY965(3U0Z$P*@gKYQ8TegM`zzxtHu2MMV}bm z)A7!uA=ey$^9zE9g%})#IHCjOzA`c0H{`w#KGMMGMJLF~@=4`}$q`whqZtfGTN&~j z<#bts8>Nfc4E&vRnUDB4OPMws+g|eIvub7 z-PFpjJSQ2WY@VC2553@NJREE5p}9|t%iL9`3tw_H!k2Gu^ZGIqf~*^- zF8ZJS`1GPy^r7GYH&w5k`^=lBg=T)fU3l9jgb^mzG! zQ9k~#*;L~+behK36Y~e=jn*00#n* z@$&I!I+-tXYcws|0ZS%^pE@7&JW+A5h6fXf|Ga6#TrwqlTKkm4Tlde5--oLXTbyy> zAaD{c6NFt@whrlh0!)f8CvTsur9%l=zfyj!`~vj`7LX#;%IR@v^Dh;KxCqtZ2g5q^ zLKY&2j|#soy#q}$5h)=oj=~t>()=!Q&NAJshMe_XOXLr`ykgS zH&L%B^H3kMPjg|Wue#5^uO*{MBfOpS@%rPj$HUhE_LuCn+sC3##bvf9bTGANwa2y! zMAw~_zZ?|RAGH=S)qbLNuq`Q$FC#5y)IjD^5HbLn;vFe>K0F2;=g=n7#?v7fONe-ST%4@pZns~?$NrCwsXlJ)&wCgTH%2MU>I zGr2S6A6Q2(vp25r0Q3!>|8 zBt}wvR$f+RmPy&&GGq7K8rEVKfI6d)q2s_bX;pbEpKQ;#&G@iaVW@7WB;lkWkLO`>m0QW~C-d&YtxV z;UjHFnE7Av;3Q|oCs1BrA9h6IO{Rv4cOb!FQd=(8wEsQc0=L_#hIxt8Bd!KIwrbi6 z*w%YWxu2*`ezrINgjmrG@8_Q(%veoN;Lgk)B|QALGN9jay|Jv#y|ZH!5M!Jz(~Lp; z)NCon@`f}yJr3O&CKaqyPikzkZ@`zKvkucDtGMN$J?JiETlvUWcFu$4jDadflVJ@a zw@A0dUih&$Gchw7GbwXiPjjmkU`IUS}Q+Jt}x^ z{G7%)ayqvf{0)*Deyl6pCA{&=ozDX;ZzWeuN&#(O^>CRlHHZ@Z*0FU>u9vxw^PTd!;`xrhwa`AirR00w_hwm_591$d{`%xf^{V5`5WQ+B{-B$}YN0 zbWW|%fzXrxHD5L#X#^;=s`P%u?yl8k_7pfaTBv}p4Xpj>TeN!s_Zs&Oy;m{e3|$~? z@tu|N;L15M&2yMCxuL56(cojw^2FVs&_U%i*fe#xrp>KCSqmFnrDhz`72FXlq9J?1 zSSAr9fmJ|U@Y5g~CBn%SHkF4e#>WY@dn&okjxGz6N2vU8`33n9&w4Dv79DdfzjSf@ z^Z57iy&1n5ypPAGGv>N!q={>GAEGq#0m4atu%&LSPG+lm2~cR1FHuNYJxlygFH%2JRayhsLMuW;nGHEyfPsmhwax{_3LssF z_n!Hbsk>{j!85m6WX~$CuEq^p69hICN5OAh3wEjqD|yEUj;q0S0ophdb6azmkB1Ld zJtfML{|LW`pVS`WTl8#hdp~P-W%8M1QQ7NY>8&NN>|*zIi%->!g(ob-yYD5Tpl7yk z6Vby zpFC3eCZq{#P6Cp2II1|-71*GgPb02xFNUux3kR_#>nF$6ef8>b8^baM{UuK6Jio0P_ygPUM|1uOsqu@WM!EHkv-Sr0KM$ z9PxePOQ0OvnfY>O=)6nmZvHoP7^ogApp&Vsb!g=5X6Hr!+uWxGIT|obbQgQ+bU}0~ z7T4shdsuFewXUd6Dz7XZRyrq5HvnefjOFkbOxqGN<1p=$pwkRjvyq^yD330vHuZYq zlER&TjBZuosB$k*t{t4}avWT2-X^u(tLl>QA(^=q}No zS?Cz(kI@~VJ<-$t(giuv9sKc3M<-1Cq@z3V?iC#~?eiGzpKdC{zebs1sR#b`eDM7K z#9R8R>gu#leLFXMdl&boAdfHEqf|ON24zPB6Au$DO*uOdP{QUh$ktxM3;1k*37vwM z9PJTk?_ne41$1_Cm-A9Q`(uV2?Ro#Tjw`{6tRg&fWi6PWzwY*{2>J&*UT}ArOcJHp;NKa2l9`2R2bfz#w~IB#CP`FEUu8~WSQeIn#^ z+#G4>Z1%aRbX7s}Ki>V%dF8AG)bHFf z@SlowW9~QN^C*uZ+mk}ww?|=y&=5Q@|i2Wci1Q7 zg7lJ!ioqQ<Qtkmu6}4-3B8$gf9L3* z7#r~YyKNxK;J;vO1sm6i6Gv%!B_H`;=#{;_{SfCqRjHR4_Q=lfTuYL)Yns<3MK6de zL)IVhd5?TMRkq;W0T}Y=Nj{})clLM3Mc0}!7>9dRHvUJxt5_Zr+BT2d6vhPp_UzFP z)P|A&B&cqD!&&xssP|9azyBZ~PIiRKP1R@WrqI z?QkhFXvuGu(s(3HWYF=NZZ7EXsM{GVNLiu(9TeR-Mi$D@OkGFCnc^_EPX3L0b}*HT zu3LnqVCMesH=BQuW_%VlpPyhRa;iK69?H1@vH(mV3?+s_e#f~1Zu;h3xVTTS+gV+X zgDiCD7fGGMXMbV63Zw!sE|j>s)$bty;GVizvJx;Ml=tRYM`@*d`#SvksL(dwi>7-l zLdCO;Ty)9u-pdKrR{?i^sow#JOIHYGC7ZLjqN2fT#cun0CBbrK7Gyab;(UMsd|zd1 zM|!->fq(R@G~=%hNC4RS(RZ{priOU9oS3Ck*(Hq~lY=bSj&I^4FKrL&vpu>Q32M69^^6AZEV1^>|2Gfb_czInA< z=J=wSfS}Lrp`j<)NxsR~9XgBe3Hr5m-z56_K)%XLdv>1eH;JL{VnT-isJ%;Yc|(?o zA6LV9R?c0m^R~28VuC)H;JKvc?`4S*jb{D@0jWc*zRK=diW}G#_|A~IIrdywxv0J{ z1_P>hWapDEtwVYuM59E^QFF;<0h2G0rAQ2bF9-s_DUk?h%y zk#ZVnm8&*Fu?`(MwOh|YIYOO2j!9KNF2AvUz2MdhrmRQ!cNapm;4fohkwS$GsG!rH z@nHPWxDKX7i?0T^Nge*HsJ=W2;xdn`+~`dh{ZvP*$0ek(h-S+Y+m~99luDQJQD(pNl%TEa_2h08uuLCw zrLAJvO#@I%AxQ%l%Li`!l-@vrKe9)%aKtb|{x?Uopo3vCu-c}no&ROt%Obt^Z08G5 zjZF1mkO$wusLXlsqUhv%s&V(!zc~0Yq4^!}FD69)a2<3_=*=kHLs4VD;_1(KIba5i z3#Ko0P5w(7{YYDs@J?Ye8Zb6o0jy3E42NtMnEGM%)iuR;_o0)#dHK_CSe;}AQ7K?= znpzeN<6Hxm%3-+-qwaMM%(>5Xs@HLV25durVh7VR!o-x@^*3rwj{QO%|8+=*Yyzs? z=Z3d?l#2{L(Qugsh4BMB=O1oet^9dA(n-Ck)ec`kOgJr6Xo2I3xrZr6pZ*wCUBzka)$) zxCUxQDLe~a;pF0UtKhk(3%Xl+)N5+KrS^wOX}zVwvBJ6AMIUVX8?NCQoVxO1y&hw4 zL`Dfd<(22clt!8A_bND6FPYRhWNUj)-eM-3$~+raO7UrYxw+$zG6KPBRn~2dv}`Z~ zH`_HNvr6T5qV@3$A}PglDbJgAFwSdT_~?G^%210(CJR-^VYXE0`ca?RT#-F&64Ik2 zvMDIB+Q{hv-gA5~p?<5dZnM2Z8Z@CGzdX4LCUfj?>~mO1geLIW&!06}gd)Nl#(H0@ zy-#}n>+AawJBx+e4#*bWm+Q{ckNOhAV}6`xiT#$T`1*#i^~l^*v#B6Y#72O%48Au= z;4&!5{Alf9RYUgPqNbRr=*rY?Ud{Z|(LzJ98WIwVNqfnr)i`Y{Bd~n*9)D7Tn)n;Z zs%bs*65B6McFfsNzO(OZw@Lw>ILz+(HYfeTyt7vz17zuMk$iB+7OPV{Af!Xj+y1rp zvg@Ty!0i6QwyLn((42? zTE1T-1uETEl@o|0Wk&;(-?ABLDmYK>R)y~z{?$HcbO@z#*QA7<0=mz3mT1Y0cY3=Q8h@fziv~tYs-!WBBsr3(Xks)ZL*!Y7)fA^(oJ-**HXb^33Mg zZ|w5VHM;o+Y5p3G+j)w2ZT`6FfWr(lxAq|HdexOf|HOp#z?o+rPk{V%)!NiDA( zqFo3XpMI;jKY*liv(o%Y@i9lPQ-5T^eIB9hM2Sz>KMFxb{P;yNv9ec)f=(`)IUG7l z)8syI#(Ay-|9~UMoPnM9t7nl5{$T}EfYiCvtFRD@gH_I51!0JPSMy)u9{5Ye(J^;r z{=Qc0JCQ#Mo@QMJR^uj#yayc&e+lmI7*(|P1M5SEtH1Wp|4z?PvHx9i<_wYdt^@eb za6d9W-7$aqa8>n>vK$JeT|#IEx%@wGfmNIqSl7%k zv?Ilqt8Vp2q8iLNFN%vJ&dMxku;T$KkYF$Yn1PAZknH(5`eg%Yh-kH83O!PW_55eq(O0O%&rJU@rI6!4R|Uo zHyqep?U2l-%xZP9&IfLOD(e|-J=&CyNV`3w55HY}<)67{$o16Z%Z$ms<4~+6J@T3R zvPs0dVW)ifQiSS}5P61Mv1y z=D$8_&s2>hv|1?l==nFVCR_^aAAH%`a~W{v&Si+djqpwiGU1m_m{4lm?93x!5uev$Y_%p27^`y4+?nl40zk$* z^HV&>1*rxL*C{3!BBpDdv?tE|B8;b9B*^nB%Mi;^zG%h(GvTiVrq=~`p?Cz^d8R!^ z+GAd~W@E@4-z9@B2i5O1CsZ|@$(>~!Ff+`>cgvdxDaw!T?kJDO_of3I%t6(AdbV|& zSnMYSdm|-cxH9D_$2cs-ae2!+2^t1mV%T95W7xsLE0g)boh20>BYKI;gT~TM(=3UK zKCwxDv!?k#%~lzg@qBTE1IMMuo}Q~&3KoN}kZ{IgTR()#_3Rtip33zs%6Zv`I1;YB z8zHrgyX4~pPQUxM7>b1G?7?MJl_@!W*xg7|q28Nowwk}bLIMz%X+(5RfvfZQfn z#!)#4;e*p)K6kwnKPgCgxAE2CQ?|_f9=e%bVziT9LqK*A>b9%|Pfys#SuQQ+7gbD! zD^C!rrjFF$D=hEAO_^3LpTFsjNJ%E!$YXw`q<;7o{i?&6@HKhbxhC6jxi%`Bf(?`i$P3 z`(W21;8P%pp?R^7ITY6;LZ97A`+9qMcdch@28TtVLQmi9)0SH}Uo)EkSTaS!mwhCb z*ZWf_0}|EK$8cXizUZ-|?Cwz9V^ryhd@fZV`#g(sl{cTwjDWYs_ZHf5Ph%p9{eeBw+AQOG%%Uf4?vE) zY-*b*19S=!d>#$NA`z05{j5%EzyV-ATOeqfp=Eq?9F6o8<2ZJAt+x}a`Qa%MCEv>D zT)L1|fpe)D31H@THZqvb&izogiRnQE3fS!@a-`+))15vTX^aaFo#`lv8t$o2x!KQK z-GFTOiqA(mxz=UrjZxlT_oK% zBcBl%c}DwncG29`q>M>wkf86R!_Dd9dOvLaYF|hevI34{oXl2M9+4h?bbwl|faO~c z(@K;Z+|NE>YH&(JBM3cX((;Q&>CZFn%V&Z{Y1ypx=aBi~ULTjG#g3%HF9Zv;oAH7* zb-TtLi^W&EP>7mTc0X#}gGTGYFFHyTFNA5?shrL{vO3vhV+Afl!f;4jgxe1wt&XS_ zhFuJG1#dT<5sV+|cOv6~B9MC0qvc2P8|D4L{MoKOg-hsSomUBF!j&Ggb>!3YbAv%R zWEqx@^6Q&B0DL>uE9oNROIjo)cP_OsHHPb%hE9*d+FMJHUbU=8?~pHyaQcjZmT*B3 zd8sTMx-%2E*)CR;!L2W3(vPg33=3>yJr>R{Kh!NxR7m{B;N*}3t)N=mQqOdqY92|U z?mCc%86RrP<8J^6ftPfYb~0cnuNB*xrP2=Pz6^EGG1rz63?a;*bQ69e+NTR56$ALwdCK-XYns9Rd_) z{5F^e*$F-o6a10jCg?ZmCul(aBB`@RKltGKC7uhQ2>w6*wZe`35={7|zO&e`0lYrUUq<42BDpaqbXL+;O{P;zdS* zR_KQm<-w))E-2J&v*FO{1E=Z&qn-z<%A~JKZjI86qnpa9;f~5mo6D;8HIEo=$koV9 zHvzBZMy0O>lk4c?!rS)gI~Sjkr>DZ-Go8w~(rsk8+(f(pZErMWdBd+IT6FNSHx=kmVH!soc?z%oQKk#MYx^ z=R{vPwc`%)EqF#&Rc~CSt7XUTH9#G7zB347s6L|hO)4w#UC^ti;m$~puI>RVygIZKz<{42I!8oqYzN!>f0&t!okrWr*hlaUcQZc@ zS8=~4lYw@9@g{k&tDTHI5w$nN#N$utJOZA2wMFP}QB+v2CT{LbzJ^`Aw{AGIXEUMD zFE^NAs!o&=MwksbbpkTaA5e}WOJbCagh*bH-AX4!9mj4SxMneLaX_gs?4?jK(m2lb zy}SewYzGY55To8Ij42Cjc6&%yRfgHDAy$pw4LwN^;C%+~6zfCIpKfm!`?UvJz()%+ z(4l)OqMSJ~46GBmC(P$ZZ#aM6+rolahqFY$9R=J#v^A^_#y^b&8|me1&bX2mvdKMJ zHII^K^>HInI!Yrw>4nKBh7Bi;)#;BRCbc*yo34!?Ikye#?JSIIokUM(0T+<(@#8g> zFTvzax9y@hoS$q4L83TwvZ(!L2l!q=hEdxYe((8@-|)OpXd_qy4m%?nA1$hqwcs>P z%ED!B7B_{nlx17ptC_5(yv&#!dZR2ay8C`b3WGc$YoOQBttN3Y??wwE&`?iff^*l9 zZCsPSm$O`-r(-eMGyr+Unq{c4^XpktOEK8W&YUNvi@Hj`oP@#K;w?2EBF2Dt0j96g zxnfU3sd*A!^2kS7$XD7r`q|pFBydn{VP1C45;C7-OwAmU|Hb+Ks4ydJ@PUz~q1bi- zK4p=ik5#XdSnQA|k1f{JLOsDKdq>#R;LUal5rYVXS#LhzdxR$j%7I0a+|jm1jRQSn zo~*^W_}2Z_j7?D=a&a(8c=87Hakc>RM<3Rd->BqB=$FETP9 z^i%=_7-3Wr8bw;oPn;1@^v+-?U*OB!p=FoNl#L3TCk$oUj$6j%oXOoNU}yqW75bep zG1QakcwiQX^bQjaMIOAXPi}i+St7SF~or3=+pGjB&shq)U!4HmTR@?wtQ`tvI%FFNL`+f zWsGAL&czI@X?KW&SGGZ-YWo;qF|d}mXfx`gAi3m)@-y+F4IK&j3P*iW09Y%jUXbs` zMU=-YQYPakB^_ANY6{-$5(k7sGG}A4^;^>(N}z7@dZ=-2mR`kP`qX3?#%1Fcc#s_t z94gE&mUqwE@9G2uQ1EEl$_KJB#UHfO2mQ3JS>&{l$F&$Z(eY6HReH-KX`QYVoj$Km ztdy|RN}UL9N-t3Zu{pF|d*;HazjjJv)W>}RnpR0Z6%cWJqDzTd-b{Jy;ME*v`ZULd zKKoqdbPmakn(`4x!;nqz$W6r6pB1$KNLA6Qo2lDOjaUSd&EzHn!dyk1SH8x@rl@*0 z;e+%YyP3QV!hCP~-Yy8~DrxOyW60KE={fRcZtHu9BuOIR#Ni|2holHa$e1IRm&G`J z(Uy=eg~lCu9di&Y6kVxcuzVN3x()%MNyd%QUu{?1(GSW)a88EeT*`av{lmWLf`mo0 zfJ=32-SW9Zs3uE)9Z`MG5tyzjm4C_XG_n33d3da5sjiYkFUez7a*5(YsBlR3?vtoq za#OYfn&>u`yg1TUwBc3(29*IdQt-+A@*`)0Vjxikv0+YE>z>R|OPUfxpzeU|V*=<}l`%DFHNxs7j>QAp8e`UBi6s(C7Kg>;~AF`u8Ri z7Z7HZ!if8Z=n<#EkwNf_33t@qt|~L6s)5YH^VTA&5$jBL2xPO!lR_YejCe2)7FTcb z78sy=uCY#W<@*^(;pdwb1c(Y8p5Tu(*HMWNpC2PZ_dzGs+P?b&a1ps`gmVRB;da)R z8rjO6ks-Inkaxo`fiA$lU5FzEosUIsJUxt!82GY&5-0tHG6S;b!E)tt;q+@d2GfIPHH2q_T5C-l z%Fa#?y=G#J3#I3Bvy+|TEIr?+_>F_nnM$bd!D35oA}Qr5l=bYPKJWqgL4=Bd&`r@K z=;nx$EVTKQ!*+>Riua-@HfbG8r9e>g0um=PJQgzJMrmOuu7$~H!t93D z`+F2RAPeTl#r*IyalW(+G&BEWR+S)vJ7PQq8N_kJsF-1f*Vss0CT2j*-FtC95X?$Z zB7J?~(m4Ue%cIXi`zo=dp}t=3$%T%Ws6qDPz$Mb7YVTcMX#wxC>`ngkamiMes>t6UP{6+)|QWnX>$% z4kz#-qQwy3$PvKFc2clx+HMosn{2M}GX{dQi4 zf-Q#tZ>N&U_>=@mv<#r>Cc5+sLQ6+Hpudq~%D%_bZuD5q6dmE1oa}OXY9%Fnt+7+*1HRDZ zv|eVFZ=Z35D0cn1wj$ochtwvrpHLx%b3IlV1JA*^BXbM=`h$}->TTS`#21sD^yF6O z?UqjQEc0z|VkjVdw(1ca?m(}TYe9*%G9NjYntf_OYu(Dy64HFeaJs)4VPI&AJ$0pl zgd*i(vlFj1;VpxqXu}Fl> zr9hjRbETRK1INxd!VolP3vhVmtDLNFEMBVa$O&d0nORrtxo{7G1Nh8fBWfOVqduZ1 zJ9y{%Oc7mSd$vo>psgoj667?pT6;sgNS8tcB{%TFg5z+pO+_Ux zVLOmbqFA0#b#7xNUt&26mQXl^z(6V&O$Blm-+)OCeRqXZaD%TEG&WC2LJX7_TEYu9K zRMh9GQ4wv9=Vfv5dSxH*)i1ccjmXl;WrW-Ozi^;p^q?^Id zN0DHhLHBWC&E+Y2$!Am9mt+94IY(H~?Lx$-T)XelPnYJG}3 zAG}`DlA>GHiBs2RU7dhzS^9l&1RsUF$1~8r*5H~dMY!=#6}^km{=A=P$?j<39a+0$2AZlp#@_Jyemwbdh1}8X0mhoy|8ki znF~&!em>3bE89B|wBruFb*L1akUH3BVX2H0{71y)Gz0SAl`vj0?ml}C@JcE;@^6Xy z|8O++M^hUZ)C#wnzcb9Kd;T#WPsac-q4}J=O#e+GM~fvoCZ>0_QutBZ@jvdvB#PGh zX&E(I!1l+fIcI2{5ks7pNB&&<1?bT_Gy!^v;9p1ie?N~>7j-ROJdcw4bqx0Rx<&)< ze!b;Ys_BnTh`+=55B}-uGh}9F8cj1%#Pf4cMEtoxBDcpaR(1za9bVq8c)9lw?$iJr1Mgw?H&>AMwYajpUo%&?~;9nFE)b7`P zqzZNhi)k%uIUx*Xe)Z~>V+Fh;SxY5ief*qo_C!wg>a_+EJL;t^Qn{HWSmmvs^hukZ1if=@|#xStwbT zym<~otz96Orn3?55GvF9hTo%%^*M7oM&E}ygCg2NLwL1{6u>zMNFm_k(037)xl z`m*1Fx*Kp7Qbx-aoN|n(dC@FFy2lxmTIF$8Wm>#74MfrtEEe=dO@c-9_TLo!|5MF? z#Y54(c=ruDQ{Md%A%}nyVwOBTYuM7h8M~z!G!GeOFV+$-J`WNz;wmK16){uM+&yH8 zIk&;gQ>fGH5#p9tY9xSqw<_#=KZr`(?UEVW@`bOf=hZ0tZDnflZl+0oYPSz*$L2FC z=8iIS@a#RZK3pqlr-aC)JifduC+oT?bIy4wUj|c9q-@Hp!DF3~pwQx`*@D6KpGrXi z%0!N6BuC!N6IX#2NZZu4`rGwsVvj1p*0jm9=?;J{rIc%nQvF-WqY>ZhQ|!fHT2}c@ za^SE5Kan#L>i(oi^_Px6ju=37-y*6ef%lE)hHmP^HZGod=+}1M*il27uF`ypR7X2+ zbd~>d(@@T1J?*nP$tbuzd8;`T3Kck)LM`h`xp^jgcX3oReXK$<;W}b6Q3~t>wUHltaz1<1D`CC5^d$TL_-r6f~Li1GVF`;Jh5JLy;U6}kkI^WW z+q`K+Cqe3ijhYy*X%u^~77!W|jCSvTlF$Whe_(EbNBVodU}(um!Agm5Echqtl+WV5 zhXw9g#3nQ+CLG;fLYM=|g)JjbFa*7b6Nh1>tqMa76j&#m$bBA_n@+-fXiJBGAwaLq zqIW(ko3%_8c5IshlZI`#4lFrT>Xd$G+JVKGFYlqHzr)ZNZABf?)>$5;Uykm}!gGTo zUlFD-r%x4f-0B^|_{#UzzK;??l|dV_I6_9j;_lo6xk9eR!}806JRN{-O$cA113Pc^ z$4iT*Kbeg?Wr>i1Smtc`ox9}CeUm^;ciz)V*ojTMUVqYARS@+F8XyBe&n-ED0KlF{ zl($8ijRPL`bTAS3= z2v)mJ`tN_<8Y=XR9>kn)t8boYSXS0(1&?(_GF7-nt%ivNkNJq1J6239idlK4#Yj!` z2D5%Wu>Q$3YAKY5;O!u)5_Cq`T-GNTth_fgaHH<|3`rmh+@@!V5ZHjJ z7L=G{x2*l1rd!wc&Q=*!CIZVsI6hU5tzAJCBzsbpKWdCA2v*U-Q~@I;MPS7pP{r_0 zovYoB0%&jTDW+V_TzD!cll~02s{qE1#x%$Yz$`N-A6Gy(SM1_2GJ?tu_Jtc? z%HoLM_oh#4Ee7krm%NjFP$|3kuXD~GD84BnrybK1I1Ys$*n4*OXj4N)|Qg&0CACKXdR}+?9;8#VQ&{ru zL`SW0qJW5b_VL2XDpJ~s$JaXylm|Av`dp8TgQh|&Z^Wo#@{qB)VRtGmiE};ij|3In za=XCd>W0=8Slr3VIv98Z9sn9tz~zVUT_tTW>zFLG&rCc^(RXo^Dd^C-(%*8V_^RYy zlV7~j1R6Vjq(&BcA{Ui!1{*-i<(|HdI&EubwVS9MCOujjgC8Rw-Xa?NjlXvWFRAs1 zpgqAZaU*k}F&DNu?TxvUgVkp^EFWWG8>9jl5;dqdOy;z)NiFgIJe{*k;zv3G=W@n^~zvxWSeE#Zb(sqnAbV&tf zHIfE)fOOTiSjto^m)Xn5-C27r&oS@iM@=sC1#yH9VTV1Hcl!perYn3e)Itt94>){LZM{NmKCY?1h+@LQiGe5_4z9D7<@ZET(f7^XeD|%;MCT_p0>1Tlx8>*G zrUn2x5Lc{VAfN*Jp}n*2&|H+3`I2+W1~r^|AB`+TZ3l@>F;R#SDTV31Yk5kCXVjIC zl;XqJ0h$$fZRNrZ{<|~5Vj9ETj9g_&>FINf{QWfoZUNXHxgzL%H|QRAIg;x45vae6 zpTQCVPziDh*{WANO3!ho^a~-uHwH5YB01LZdq>vz`Pz4l5~fgg({9e6p*sDpRUHAe zE_?c|(Q6Pqc>#Dl-xnGzAKpCJJ6|olM^2WO!_;e>nc03)$1bym73c2U9TkT5N!l&T z5VkesWIo4ScjQY?jOb7j|GXpNo6?8euq-r;OW#{L39nf|Z#cKuT!f8POBNn^T-M>~ zTfaGXz}Xs7_jIv)LmmAt!|r0VVy)4J&mF`16vrfWv{P497vVZOv71A`#n4+wYpzFU z?B-OCGAw?3+~j#shMZjI2G`ZDJqd&S9XMpc-e+(3F5r7%*8?}gYQJ&~7E0Yj<$6ef zVACfkzBJ4F{NdahNZD`51KR(>4e7~2#eylL1z5KP?t13W{2*5p{PwsORXo-0FRn$W zF=7IQxSNSD?s-#B2%2G!I8qykwSAb=>?0Ul?Ack zSr%b4RRG^sjSWrgP48qVD1I81?>q0;a@xJAB^N84%kliDXRi`K`&QJcwMv!f$3I>~ z&{8!<$opMS_$4pKYS?8Rfz5I#J#uR`EUIc);FcKn{D3-?Tz_o*vC$Qmu|$YT z_;sR(@+iTTzE7PZ95_1|-oHhp#NexlJ#ZodRL$ox)YWs#C&lYy<*cjuxkO}X9qe-brv!NIV z9|3m+et6G8BDKG5F3FM4=yDQB!*5&L^u54g-ABm&L$GD#s=>6KBn<2uNPv9mEOn*~ zcH6Qyv_gVl!+__>44_ipboi9OP_}Ihl|4p-u8eU~@PYv_%qsE~l9bNf8DzQkio@iH z>$qW0vaEvd2k$}Br|s@MjyxH$Sc%dDlCTNph7)7DoN|gl^ujZ0s!Al_Y5}wa^O1*S z`h8L3gJ~A&=;cy=8PXWqx^kR(Z_W7UPIHX}+^UlTvp zcm1vM#EldeBvgL=IrhTlt?u-x71Y)(xaskZmiR$-_|}+f&0zO<-C7u#(#h<834U(% zo*_<0?|m#gyGoW)Xa?)6vV?YA15jR-bz zO+|c@-uLDmiR0kAP9;@)OJ@rVJ-a-evyGM}=1qV#SVzh??!h{s{OQFPS6rE{4Xjv? zrAG3*&1ejHryNf+C2h&U=4hP^E&ZU2Yx8`H5oH64{#;re++E_ z{fj#5vad0M3Cb3B(Xa}9w+FlSC5_c;*Fa^N#YTEdHVA}+$x&HsvT7#GXD2A1_B$K| zE*9KpU0Re&5ZE4U5mb1V+?B8#xwQygfsMPazmhRH75y$OG=oS_IlUxszE71a$Z86C zz9?Yr=@>)^sJir=_C<3b)^Q{+<0fI-CHmuBY{rx%VJy|{r*X$bmg}&A>-)Dv6~7*@ z*8$5ewtog_WKCT$+jO3*&yb7glIUN_-B_p$72wi+fQ&uQuc{QaY%R5jDs9~&n@XS; zWox(zja6+;)`jbQkG@A_k8ee5`-QCLLXfjM{5!~n0C^~nb+v77-HgEOVHEwe!gRpe z_*VSX-g7P75UBM^fwrvVrDC5Pa#zj-4^uT(#LkKmBtNJ8ttgxK``rNN%#0~Y4L{L<(R%`kDL{TI%puJn=LELyQ`qFNy za_r0-lFc~maA!~v!hYM)zy*Q3hdC7gTB!Y*6V$y=kAOZkX+7NbGo2Wa)6gEHHuP+P zrA#o{tKznEuwkeiwk$vy};3sRl8(fZ}5^b)UgowcCdvEtOF*&R@Hr zh0pVox$cbk5$&K%J~fGDl9n~$e9YSb!Oy!(8|LsRfZ-@IpRE)*uxDIpj>3An!Cx~~ zi^PSm_V-b7uCtc8Ly7GUX*CZgCdQ{90xlyg*u}vcT$K#<*czjtMC4F$3JP2ab{l6W ze#PHO$uyhqbQPCV?bGT!R|sp7_M~^ZfKW+ZZ)3|E5_DqxAikhJZO=9ri_L(HSBgqK z8}DLA?io<6ZaqRw%I%T@auYuybFst(iF!;uKax6t7~M-GKcv(Fix-S2v^JXQ!7l&x z3?nvnG~oLzAo)_Zi^BYy%_A+lLp_B+L%@^qXtY+i;8>^^<7e=34JwJ^=fBWW>+OTyc)gpI7 zzEyV#Fq4eF@`oYY&A@Vf%yE4VMeUS_Y)drjvs9*+y6_U~=>d1ex?@~Tyf;r#T?Q9k z8-%EV%itnk2CrGre{xn2U>-ME^clyvB(~#TY#Otiy&I>m5y)OSJQQrnHc~A4?te`2 zP#nJMAsXd$2v!APgu5IYT)hMDJ5k)P%Jk7<0epVi{E2=2%nO(9+?X|5sO)qdx%Zjz z_NxrDvu(FHlyVXiyUYkr^zYTphQWE@riq1=#vpOXyzOGQsd_h?gI0wk)5IJ#j4auG zw%=`KX1j=ZNQL9<#RXZj*+5sPGsQ13$+DPvq+C^M9>d53xe5nlYAY>9Cs2)4Zf~fx zAd#lw@{%{4O4Sh-QJaZ@G>1C7!8U%Ye`|`p{Aj4m*qHL=?=lxVV5N(j9p<}QH}J#@ zYbXf(BQa;dr-8zw@Xje9eI;p-O;wsq^TcCqGlX%z*|GAyIMt#x!FBq}_>c@}&0@U3 zWRHHk7d1qnk^;N=x$?3;$B_s8VfB~5F1@N;dsOcnaqDZ?A@{i^-@aPW6y($+8Q5i~ z>b-7g!?;QEblH75tA2EUHzLqLhU_$$J3z@18*4f-a|>q?o>B!+>o>w{%>gg)lf5Gx zhyDr&uEo}n6TiEng~iixwPum8qCKF!%g4^-&ZN0`fKccX%4oG^OB1w*ou(GDou#7y znmH{b%O-sEu9|mW(9bm*AX{(8W9N_`705Up+n)S0Df6yZz9jJsW`g@RuF&dpe78ta z+wu^6n0!nA<(0YSmT@gtNEoF}5LyBbbNO2Q|0w$kptibh?LuiOrAVPbad#_FTnhz? zyITtdiUtd=#fug##fwYu;MQWr-6gm?gg}D)q3`?6fA4qyx$pPSoM9%+$;m!zul4LD zdp*0-t6~fNPE_)C_eARFbNZI)22Rl(-EX%$4}=$d&_}Pd)JVit|i>Gk~=PAmia2ULUb2cE{@$3t?E-WB_3kY^X7Y zhdgr>8Vs8)qlb%Rntf986Yt;9C$}uv3-CoRB4WJZn2@4_w-!3vsJCFcdSXp`i_YX9 z)yN|+MwH_4`kpL~n)TQeFcY|n3ur!hobDj-)l(w1wYe`VJn5sgTFL3X(e$%p*OAL2RS_!)Fm zHEvEa%|0Y#^;|bSx++NM?usRN*Z8#0>v= zvo+h?n+dmqtDq=@*+y~v?985=@9=<+F_~*V!%x%EJ8~!X4Bg^Q_5G5Q+1Fg>hR-F?y}|f(wac|EeWo*GOY7*7$+t-oNcBX`CKSTHdXwzFf(Ic zRM_lxKQa;l=qJMTezV?aDK~zYKKee?3Qa~`GB~O->1HgCzfkd9f(w%{srt*X$AR0N zux>+AXQ=^`$tQqCg4=;hp{;qfl1X&YSX>JE-}R~=P1SvRd)VUab^|b!A}IJFO%hT1 zj|xefVhO#)M=2lfJ{7iF5SheT{H?PW>7minh)%sZ`$FgL2M#`yZq}8gI_%JyF_BWi z^MTp?MQBjW^&X!WS**q}ze&WUQ)Go5i~W<3U)wWe&|fCkSnq%z(iP?w9tlh7Lx9 z*?ZDA=`~Ba&ZVbe3PSlcL)%=1{<)unV(bpG=Ro9TujpCKoSK# zt0FI4I>>T4#gxZhzL_`w-FyQn_-R?uA=|w5 zvu`zHIWF0m+iF#=4-JaDh~HEZ$97tzys~%WFb@~zAG)>p<`q_aDyYvtAZ0ziw#D}w z%Oo2qag(CdsUgNB@wfP!qb054R;f8#xa6dss+`jaNcfn%iY@l?d3qHzohw9A=7q!z z?>$>xH}^>?Tc?Q*bWg2mgq`Ot4KkKc61rWz2MtA045ltSvtnGqX6E%P4j-W0G~r;T zFIoQ9*IPGr@)1Dt?%|s4G@fW_!Z4TSB0Td5R-J1D4e;QJZ`Upsk#4v)TX^YWK+9tsMF6J5%}4EPe* zn>U@zbppnGYl3m0;Y^xzF5;2ohZ^deupj-62rOe@sW7|$Tm2!(gQxQhF2{Wl( zR!bp0l8_Uh;B#T`lAOEp=g|Q1cGMgfQ=TQN(`DuQpUjsv8G%)2yTKAxo2ZJ`&$Dxr z67~5O&apk1UXjIhhiPOLWtZ!!7=LYuC=Hj!_y3otN?s&a;DY{vndAS^AB6^$Gy?JzFS}y0+$70F;R^Rx?ZT?vNI;Gpf zNBvCu_sQtxaWP(C+_7&(*1g3NlbdDq%b)cinnDcc?Xs_>AO1X*zcWNICnuCk!##g& zsA4_>TSVlq%4}??w!~13k9v$j3Wjyoo3!3#_NV*eBaIknGgt8}Xc*4~ z8l)|)9t*E;i#p%hXD*xXbF^2~d*n7@Af4}t@78SH3;<%5oV9$OAhjJ6fxee+?NMPe zIp@96SJQ0XrN$W~aP0A$<-xmFIJv4bowQ$G-q1(|aY(=%*$AHIDwh~^ zf{iT598$L_)!LJ$_=7J!d3Z zK1-J?d=UG)(9M)9p%#cFatcPH=e+Or3~)kOG-K8m?6AF9Je1ACd`sAn>TZ76Q;xVP zhSc}>FOc%9^g6+Ej3TxvYCikqm6;#2)eXoj8uCno`gvHF?{<}y_(9NhKn+2-Z&==4 z{h&D*;(Z-yx6AaZF(^ zBAl03Rx7Z`W;1840_m#KZwX2zbEahvlESPYZ_HTk4lvv(Jjs=WC6Jt{uI&~p zs3__5_tfW-7E)X3fv*=2Vlg}DAaDjWk%>74GiK|3r5nV0Z;8*|_NU{zQrk&^x*|pH z=3ZcCFHQ1`&nGMqw^n3|VC$>fk{ETPcOl+!f0-u7!mryYEKAW7%Ep^1Z)jr|ma!z^l;seK^>>p5(@3K~%tVONsri38MQRqic zh;2dHVL%{}ZC#+zbV(7FUpQ#Q@g;_@WeIKTP~(H+Nn=y9W)8v8F4A zY!U3<6h4EKRE>)Hu-yy(@6BtQ?CMZjc*+tZh<}HS^t9hq#OB)dfM0yUUzmuch~RX( zY&uBWC|VgjFjxynwTJv{^}Rche^VmuTmVn~?KwjY$t8Td8!i5QvuWz$={D1qO`y$W z@gWlwu)BThOXddTPuV*u_I6qG>#lb@SS~SE25JP4wjY0~q~{s=_~>E7WJmCBvZw3_P>O$S65RN?O}H_s zJw<(+;0;vI$c6Rha*@clbl{cWSmoCvnE$SEreuR;i%M}0iH;`oJgmj=!bsP$c6!iI zg*2NKW_$L@bKxY}#XgMH@?|&GJYRk?vsEVHu6J^)@lCpmU2lzItyRNRfIyRj@fV8B z*{NhJPmUf{mxkS`JMXqkdZUu~Xv##N9E*8Gs01)$1n}CZEg`Oz$I5m-mJa|9ZQCq? zF#@ehHE&7ZCx9JAZGv)-E^o=SxjtNUen`~E483ylh!S3M(lb7L>xcQ#fZ@6+7Fqh+0wCW11XsUv%5fHr_Y?};WjU(2m)mu29F8}_En(yuzz2X^JJPLP`sK5D@oId0Elj=94orjm-J>MWG@t zj=HZew2T~ftX%CvleCh@DaGnpa7!3dQyY@Fj+Q*WbEewEy}6Eky@u=x>=RguB19Mc zFPB@Ljd0Heh~5q@^;zVA^ykkjA8LTU85}u(R&p|u@jDx>zRf@WA*iv>>-Nxa?a5x~ zU4I*7T1EuHNQ7&=68H4?}TQ0g@8|%c$yjZ&_ zO8tyNbtmQDus-Cm6xbUdnV1tQF|0R**9SF00I6hLRe+XF9eST{+;aXh1+PGzGO z`|<0k%5IABK@qUxt>>{Ht7suEyNNqxx7W>OCF`|&W^qj5p}^!(&MTF3Ei(+3?cBzK z1Wl8;fw4VV7o(IVen3+>$c245RMZDl-quKb_VeM^e5#)~4X>9W`Rw~~kk6H6L#jnF z;Pm_JQWNXhTz=ttcu6Yf9LJ;@m;$j6^a{?34;CfR z9`fO*V%sa}_f-YvPbFvPuj&A@VhF#fLeu7@dY^gkEsDeZeR;R&HX)#5n;$Ht)eQse zKFq(vkUyj#RIuGFY&T#a_HOU?SP#qNn8s@_Qx-v0!LZ$!j~+ZB#FMdyy_4mGdo| zFxH1s)GBVoyV$NHM6(!%avXuLcbYS5jx^EFZz^z^51T%WHBgtO$<2Q=zR2~_FFZ4X zdqUmD!1UwXDfxMsh}B(*wDePDaWNhc=X{M}boO@DB`rH<0pOH1bi~>BA(N+kB}1C@UF3j< z_2gRvs(Eh5Hk;a+>}pEMcaSER!D$E54fb@Mo3h>nz=B(Cu8r9Okku-)i#^qNNRqsN z)LUy<%zGOTM(QmEvH2=C9;oE|GVk3H+Nk;88_OhsXh?z$a?zweT}8h+DjX7Qej*Yg zSn>u}Ntj+cj&oe4q#pVb?Y0z+N_wWbUGN+ZHSWPZ;#$AG>3%XIJg$L_@QZ{3rymXbaL8*BQuVTCzbQN6`-@Otq*j&2%CA+^UtgMiz#2BB8jinlk0cT2D>{u<;S2@@2iDAEjM9`y~gJ^M_L?( zujbK>UDg^mGD5XqD9x*#EEwn7?^^V{Y4iB`7~&Q!>gI7Z6WDk)J9vv)t2Qhcc>jj@+O+wnEQ8ACmJd ze>gQ9!7Sy0jB)fqp}Aa6Yqi4TyaI=0nLG8-898+>D8Yx83!9WlFL%pA<%`?w7LmEt z;7TswlKOPPY}``zxE26tySzDfOHp`A;$D+4#t zB^i-3SsTB0z>idX#A5x&!#Me~L${wD7fa~{^T<6c&~bkIsX5rQJnoQ*olD3(0+zAi zrJ|lZ2fxWSrc2;XC+cu2(lP2_X@zu?1AK3vO*d(Z9V+ERP)CQMVmoe8`Wq!+7^xrY zk=}>-3-l}PiQA8RJio6I9QQd4SZ4iRk~Xnh**ksh{!q0qacY5qFgV-JcjcJJGYZ}P zVZWPqRIn|w(y|-U-5)uXUJu8!Ny_sL0-Adby6%6vMQXRsl6eSe2=_3M51+E>HB4kO(spt9rFOJVa{b^c;z>8t>F4|)Io3Kkf`)7nLYL>x zt6u|;T@!3s`}q#47MuzC7VBpsH}fR+k=zzCIhR2&&i$i@Mn}&qf3rZQ4KGgW`Hzm- zixJmwVsXB_#=Qa89D%JHO|=p43)ux%%f`oB21zc$&@Vrn&7Qai4Qp)@mF<2ak7*l1 z59v5RpT6IRWNxGOiT+#}-i{0ZBOyJi$ewL*$4B%_4 zbYfU~|9HW(9xKn3(<|YEm_F&)~z$FteTCCXkQMaUb@{_$4f=0X}hnLJ{%)^VvyY*4yc2}{5Esr zz?J<*rzxzw^Pb2rtPBY<8A9bX7u>A#Sve$D6NXM3edf=q4WGu|J``umAx*O8D&eq# zqFo|=bZ^*@omVD>#Yy?>=b%K3zEj!r@KeQVruQTD*_bri{DS3*C|&hci1*q_Q25l0 zo>;#SQhCi;Olq5JZVds=opxsV*U*Pz_9^wllD-WC_?uC!79|m*9={NZKXdW+{XcXusjVbVc8pstlaajSbfPViIn;;L zE%M_4kA>-2t5(TaeS)(d-q7R~nYb26MGj#OK2T(GhF>=ri;pGupSul}5n%2G6hBVk zF8-DT@V(lPslTu657n{lq;61tmQO8Ave+#)nVutWO#gOawIQyc%~n|l5c>&xoE0iL zvC*cl$Pd_R&5=<@DiXj)zK^qNHxj@zg$NS*UNaPl7~0UoXD-qC#aGBi+^?thJJ&AK zUg5te&q3HfC=XtXbD`I4U)=D;C*zw41xEz4eS>YLx#&_AJ8nvbruN|X^QQdbt*cxg z!eqc0kkvkuo}F~%1Q6esBIcLh#v2*n`DV84?0F(;+xO&l00US4pI!DZB(o->t`v}j zY476D{~)0`3gx`gQGdfJ+lgPpGw(WWUS|y!-^Jh?7vy$bZ?`}N-?W|Xu!Tt=*h4o_ zpMbkRVgWlV+Q5C1B1{V&ZYs(X(N>xR3)zO*wB?h|SM);93pKW4RJz97QC1|0$Y z5B{ksCqRfwRUg^;i@h(y_m4!6yA2X@7(XGN#*b#a|7jG3n5bPY2ty)Q+WG(4L-TKM z3N^|KTL$=)quPr9lO!e{1yqgQvuRl>c2s|5JdwpCyQY zB1!K_{{zzdBUI_BkyeC>kIs9MDoR_&qUdx{gddZ-fKVmXWC7Fi336=W@hS3gC;lXynj+36g0yU$RDbH zw0}|viT|(jACPpj2}x}e|G`r^p1hb2j(Sh}Pga4{2DW=*zJ3VY5M{>opN3mVde7#` ze?e;y@J|g(P{XX;+@Pd3Xft-j)xW9s|M;ki{x`R4z|C)DKj#1bYza}KPcs$N_a=w_ zADG-jR92n)Y8d(jZR$Tf8QFDX_=f=zAX@&=R_vd2X96W)Y)l<_+`xPBDvbZ}PXG2> zs>6?7p4DaOJmC9hs|%6P(<5g0+v_g-$ofw+m?efea^UQ6DSzxU(k_#BL(A!P@kV@OUPB)pUNR#|mRRPN7vJY@~Iu4*OHZcQV?h?Q8O zU0z;(5PEs(9-*CoJQ%}6gMwE-i1uR;TY%JD(&6*NzIqg2du*n%7cFJXUL20{<6k^Pg=i(7jytdrt6K7e9Mtir6jTeixvi(h_cG&Y7#Q zKt2~aX~^rhU;rJII?-E`fGFAj+l)Xx6MaQ!)1I9Ms&mxvRkfMQzwQfbPdA3}kP!9X zkDICuFE+-a@OrRZC3KA@099sLy%eK|MyYUT!{0jN0_)a=&VieT7$`Exv?UY4k0`7p zK)&4@23%6on6Sc^FJPzsmRvEPMF^tP|5kug(SYBDpMqrHc9eV*URW?Zb!j$SJA1(y z9RC0#7J2z6wjUTmK>X$*_g{F5i^AfEInuGJDn})bFF>?b$mT&lGSXwZlbT-nh5k4o z_MRcQwa@TrZmG!wP^U8#{A-4;zWD2+h6YK0;vX@6ltvV8 z<87>(r}(e8{?>k=3*l)Mwz*e9DnI;p%F6j0fLq_UWaJp@eyB)7G=2$Yzf^>v?xL`z z+r%n19Mb+#)1}~%gX?UiD8@QNz#58<;|Y@gNN)*33T90jQaah`o5RQbl24$JYoPP( zX%`6-0|y1YPsg#N=_U1ipMd9nWJ2 zdvT^d+5omE1CSab2*+Yr|IZaZ_I@~F&#~-Ww#qyM-$n!Qq+^OFR%&cSTMPQtpz181 zEc}kKEaOHYDQlHqT=Zph@ShpW`i&clQ{H*j4b4(L@aY&;yFq`)L05Lt@Zc-Wy{zuV z6^eFh?K8aMFcWqE`4kJq5s@Z**A)-Q?+ifB$$~PfWeyvcZ-g+Ue$NNCh<;VonPIlt z89o(FBenV{V&KO&YzmRE@>cj$YHDgvIK=NxR2!tP^+L^IsP3!8M_V%El-dVtmh3$b z2T8L42vT|DUNXp>Qisc*I>4*BRz+=bgIiw z-j*CU|HQy9-1IQp{xNVclKrr=pjosB4&9>;{rWcP_lwyJIujF<`ucj^7$i5N+41tv zdiRqbV6PmRD2HKDm~J^ekL$kfqUGs&Z{sz1+PJ#!)w<~QamP%Rd4!Vqn(0KLTBDDI zguhx4ug%nU)jjc&K0}K2WO26d4V=$>$H;cR77HmHmNKKJ{1Wp>_W^iCdFN?)*BHr2~4l~T3h%1nSzO+ zxVT$6p(T@Fs`mM)cDqb^8m1IpL{?A`ojc(f)3fmvvcE->C4nCc6)^64kOaNbj{l9T zXSfDPq(l5|r|qEUzXzc=Q!>An?iD%K?}_SFs$a$0-H8x{S# zI&6XTb~6<}Wy1bQ%g@hm(RQ}VT({nVIs}U}Bu^pvhjavCSa`UcPABqwhvP0HllKGP zxb$bgH;xXZ@K9HYU9ID%iTRM2b~Ss!4kwgcj9)Co)dC=8!>84*2m0wI$m3VQiU}h~ z{t}7lG9!?=$5%Od`CrE?9b8@)`^~s2DZvT;^`6Gyy(eOnqohFA#Geygq@&H+1d;o* z%9L?;7QGBcNOc08_gZnkXfs{3(Y^E?Z!6MDV+x?ZC|6@Vh-wC_p$v3(F}5!bf*(Yu zNiqBdtO38|B&N*uG6B4fQEghE_f`I04;o~t>ZV`|q|fP*mK)oiPD|Bos(HI4c-zc_ z@!}IIwRKzP@ZgVjCDG?E)BQVaZcto@}_fpWTwSEUnSSEVjngmhKp8^c#K@o%;7Zf}4P4x`5RhYJmj^C>)* zHEa#B+?Cv7-j@}kG_(0(_^~hB0-I{b`i$OG?p+GLE-{*wrw1A*bf}cnj%{hj>B5k5 z3WvU8Og)(uXM|FFs68Nsj=8G%cVWRn3unqOB~`*VWo1Kdo-dol|9~1&91>4a^peee zS|^b!q&7y?zy7~Y5wM^SaR$6iczZ8Jw`e5A!II#`y~Ny6)xsHaqoFp6OrQi<721G16XX-GO4qke7Z`bpHPc8uCt)1Q>cpaYi%pjZ_17v zA?Ub@hWuKHR4BGpgt?Wl!?MKn)mA2xakD^%`zpp_3(`_wzIy+_+uNHPzefnK{lved zo{TK|kR4D@cL(d#Bjsk_)s)<=vM&ame{B_%3*nxw*jxmPy`;UH2|atG29Iq{kgL+Y zA@uGlAD~xj2>M7SLH+ZO2<}~!K>yPIDlv%lDv4hS+U&oaE~gj?d(cq>KaKo7$^{6^ zN{9q+8g@8sbq@+7Ep+`MD$<#$&p+dQXWeh27X1ZW;+R|3|NB(u+5I2Qp9|O zSR-te`YRylBvkznA>627YNijDs+@riz+*~57exYiwon>=Rv zl~pd`*N^=SF0+uU{i%jh}xT5za zisD(dF}1S?UJ#>#c1zmC&Ar7c`bDR{wLwFhLoF$6g9(AfpRhHE025mPS%ZZyl%jr* z6l%%aMS<+lMs8AZ(?J{EbNM=KUU}2?j0ch5>r@nGJvd$l9v0=ELCyii>_J^xHM-Au z?jiXel@A!+V+#l5IxDR9ePin==;;wEAqDA zQZx_#c#8qH&zIpD?1mm=GmWjuYI|M;Wk(*UDUwKa`67aH5+~mep}Dh^ct97+gW8og z@I>Vml1|6+hG&^zNTK7-EDBlWeFDbOoTjnay?(y@!ZTK7yoZSmg!;cPjNQzCLq zu>~|6^7HeD?QI>kB9vLPu;|O{eF!&BkSl(vc?7E7*!9&J)MGe9bncgchzMDxFT9AO ze^++(<_m8%(>Lkb+_SA=T0TC)AMJb#Q?q8$X_GCwCa<4Nl5_NMVgP-CO^&u|w*sz^FIV;x*`pwjS^V!a*MmV~<${^Q%U_&QS zl8u}U*%Grx{(Iyx1KUUrdycxTo=@{7I-GXqZ1#CJ6NLeF5MKi~B7SV(-qhsOz>i35 zZ0uTDw)q#1s2!A6p(!P`l5Cz)HOLi@7PFVX#7NIXAyp5F-$?f$p#cd#C8eG)Yu5Mi zff#0o$jWFhDbQ&NA2)8?ppx=$xLFUASPj<;Gnxtd0wEjiM=1Y@ogS7IWn}m};;2Y| zFzx0gx0vFZ1Z`o)QyFOHdAMwJ4>?)5c(`U<$gpQ6a3kT}vMcVfo7}HN-FacTg?Z@S z^gN-(nLHB3o8?VWM7%C+*>92jjuTVW-7R#up007vtLu@6NbntIOJ5;PutUZZNm)*P zAdXz@!qn@LXF<$8s!_|FZJDpJ$^j*E8aIa_Y5yb_G$JCc#`B36LG}f*(PX{4?b<8@ zA7!$Tk;3*|DFxE~mSFYIJQ^ju%MieHgt3LL%U;+P?Bzz)B#H?tnf|oVy^;4-kto!D zKzf>y*(7VpuHBYYE8~@eHT;*l(8cPY;bD7!xn!q3lNZ_8q(SjeK5hQ?FDIN8)eurm zli;_zR@eL+Dtae^9UX)egg-t~5Xd0;avfC+2OGKcEn`0yz*~93NrYdlC-Qtx?OpRc z20p_KFO6DAnL*vq+=UAr?sI^QXnC{7tv7Pf=dpg?i;IiSuTd*^p~uJm_36r~ zaq;ogCjmx=hGW_%-;r90OH3N-X2H=@Y$W@t-iGyUSNHp+kd{U}$c57K&Sn`XQ2GRM zIKDUuJiPKC+9+r8#(GrV`EW^W^VX$DFBY>LJviHtxb3sZqralur=lp8PkyY{EsI(t zPid@Z+Bif%_T7=Ex>oSqDl8ujw`qR!+45cuerKZ9w{8t@#Z49(>igwQ!3wIalk9!$ zOOJM*T2S9B(u-H9(b3VGw}cgz-79ettu(lHuI(4^WsyDD{;PyX-GUUEo$y7%Z;?r@ za>uVuQWMAmKg#0$MhUn|y;z;kBXtxMSjeyIyd=;Wt}{Kcp?x(N%;dchODF$c>Umne zUO?-5w?lxhH<<|10-sY+aXsite5LV|Zh6W^CE65ivwQQ^^yTL({th*yPw@f^IZK!q z&aLr#UOyRnM(+aw|6qT2;=B#cI}+qn+K0F2>EffBDt;<^(OxF#LPu%&_*Ux+#+G4bW>}$uO2qMVz7Tk)Lqc`C)8y?Jt58b5D7uO zmPjv#1}Y#Zt3@BO_*F+mlHco0mIM-ljk74Gl>%Gh_Yg{fA5i{CO9FM3I-w7Odbup{ z5$`tuZKzA2__7WA(>9XP<9+3&C~jONw|#HnzOnnF=vJL&_sM;9N`Z=W%qfPNG4CI- z9)!fTpenfC_xQ5?_?Rc_okC%K$VTi3f-nBem^o4g&cxf~cy0w#FyYrmOG)?G=9K7P z@8jC175+j7l}?ooBW!GH_Gj(_U#jYO|4)X;4i*x0-ABD)A16+7y8sqxy0ZTzRTYas ziyLC^)hz5SKv`bLK7;y!4itUm_0rPNoJV}W$=69beS8p?gX*&M(}fmW-pRW#FY31g zGxpgeNSip$k!>Ekmuvbxwy1?h*-?@F0Ci~A*{1t%hFWFpXa~0O$D7FZj$Vv>JfI!C zFIe!ru-G}I$Q>(H$a%z=uE*e)uz-Nq&q`}bDz2w;D1J18)RJ{TChes;PC;hvL9gTt z8|ydN##+nU5Y+IkB-G-lK(8Xjo|R=Sf=$*`K$ru^V@BZ7dOa>(y2*z`PMGU4lV$&0 z8*!XjU@X}OjOUJ0VRp(HIYlcrwZYAQhvQXfRr-+ZDH_=}3(vs>ux?yn38!MK+YWd> zTlbL>gN@@ZSdFNdvL(OR4TYWdS{zE@Fk1LI(9-$qRaBR)b0&sr#9nWq8k*YIT)rXT5(P3R9zmqj>Z61udhY zoA+W~Ht4YhV7ZN~F6puPJT!|>%zL%Gmlny=H4u4{O0A}SZ{;pXK123xmDn{#WP)`7 zZB<(|GFM@bJMG8bL)L`2T2WKqk{^6h4-;u-9#TA<%rBVx7G*R=L7^f`wKG7|38KtB zd&S7oQsLRF#VmL(V4Cdak67DU&f*hXyY+l$*J(cij83EovFU*%tX_(kZcdJycgJ{% z=RMPwU;5U-iwxSrx;gB#`St0KmhRA2-J&N`^M;fl0fE-6Ym%m~<0fTXel6j=XPHG) zoJOJnzT^w0+UIFiAQN0yd_=GmU)t-c0mS=1Pg{b8^grIh;kjO-ZdulrTor z1e#g&N>di1H_`MaL7m&H1T3K0(qD)( zN;9;J=wAp9pd-%l-rtz&;P$=xq?mx@`~xkSuTEXmd7wKLBiIb}71ixl6FK;e`&Ak% zNE~h8#jr%WMLt1}7hG*R<4$R$EoBh$k7eEHpWxkAzK0X=42ze|boY@9s+$QK7X&lry=c! zN;V^P07|xR;^F{%iK6?3Th$-qn-sRC5WF+cWY@F6bJ$=AoT+AsPDg<}G1*scD``i` zV0Pd|SGlqr7kqtT)vO;32U^_*(3kVQt5)ob>johnw_v0<+O2-If*U*Tq3^BMM@d0} zt1CrQ7TnltxLxID!Daea#fYIY|7{cby(mCIBW}>3==nft#kxEJBjosTJfz&WD`+80I3IVf@M^SF z$QsZsA-G`ZDz4p*YB~EEZYP1u+N#{AgH(US4IVNJ!yGSU)$vyfA=V9TUHT}MIiAb! z7S(pHnfb{6ZSSASmB4s;h|WXeJJvNhXP#5foV2dFhGAYA7uGrMJbqxRuKla5PyZeE z>{~E{ITl+PUDsf)E{gDra_hCHV{;tok+$$(qtbe71Ih(_XEbJPPE%zW{cdCAco%*@ zhLHpA{F2Pj^%%^G7+`otq%{yDf-#3Qj1qLNLSY0(}d6WjvoWw67LIP#=4pQE-d6F+& zC*(OiSxtaeGTDLTnuFh61`A2Ke8nc97Sys=x39ogxhXT^DbRjufUt;t4xoj1)ZltWa|IlUZru{d@?&39;EI zFAH`>U{l+We6!K)v8$I$GB{p$?`5x<>U(*<+3t;M4RGrm%kMP2z-hg%*(iu>hxPC6 z%tOI0Jo%=w*SW0I<8kKB%nHq~xroHFG|UU2ViVV5{zxnq5Wf&$3Ws@5^B{F}6#C z-0X2c+Qz&bGvm^Aaxfn$y&IA<2P<)WQ!O?*(>szf5P8YDf2a^$I8jVzeA{-j#zDd4 zW%{|WvQrVEJoVDt>2qy{6L+92l$N80p1wy9Ni3DU_L9+H$-^Z;-39$XD`|529HF>+ zLd={e@>d>Vod6}i_iaC<`Lja9y@Q%I4*WJ02~_$A`_R zlK$qCuKOIzzPJlowZ*X15BQJRKLGWV1jVd_yV{YF?AlOExLta6nb~F{NXo=~Mr7yu zDS3&`Ds+xXdQdKQ#;vMhSNDdCF2D9yuj*XXm(DfuVx@5(2m9NVC`n-_B(%QMu0$RD zNytBqXQTRJWL2Ac=W|t+)*%_aMa5UT+pLuf?wtW|qf&OSw1kZ+OZtrv&vXtRw$Mo5 zl=Q)5b_ymkR$w(BeqLj4ZUpyZ1-yQf%9l>1V;U*?L_A-3MCZ@QcnD%+SQHYAa;G$x z$MX6Gyf1OF_aVVIUUh5RUqxB+tBI32O*)I)2${N$fStmEtEQ473lYf@P;0H_)zz>r z%)9np{7_8;sABcID%VU=Ka}Kh7FdC6&9J0lZL!L=8_5|FNJ3IlvKCGd+|8;D>MG{l zi}UM|?(MqwWW^dJ{KyfuuY2-_yh&$)%`zbpsyS4ZPr|(7@2P@|LvEB9464df zQvE=@uhPrHVNXe*p3SCsJ9u!IbchJi?@?;S0!Ll~A8PHJ_A;_6ER|?CSU{iaU0WzH zVS1Fmn)2NWF>@iEj&AGFY)tGE*6k416}F6hzEMS|=1tlg`=PbAgK2E59^5w`_S9oV z6DF8?8p*Nm5lsv=7yJW2!29hf6L+Wret(DkQ~{E*RBUul04)eHY)Zi|fC43{F8M^K z*F7cEs3$YaTWSSXUM{|uj;~wmFz0{=QHx$U`WrsH2eOKn@41!J#cbI7Ia8$jZzU5w z*-s98Oe_TGW{;EjoL=2m2t`p%qf)iFO&0SN1Aed(zP9e*-tq3HoDg_XUSM5PpnchQ_$+}&!s0O?bgH5i+jHrDSIi0t^8^9(OWNe9txQD2*yolp|9 z>+ZekBq+$;E>oy0++#1 z24`q%kCYczirR&jf5S5yiH)z=5+#oqtsmO89d;g&m+>u%d8T78WR|nMzyA!G>k0~$ zrD0|!u5>)9_p}v@29aZNa_YFdC(3XU;b@+ogql^+{-VuEJe?*`E{2HP=&W>}1QN5j zNUy;C@ENnajX2Dx9Db)uTZE#yBzIV>f2b9Zq@k*Bd|Dr>ob37I?o|Q7_6c!x=5C+=j93Z|61~ zE!McEGz9ybmvswk(A}Fw2#Q<*JEddqd%AqUYH#KTY|*mP#3q|z($(3{Y+aAvbDVokWL3t( zljQc(m)Q%(jIwE3M+BnF3+wFUW;5V3)Eneu;W!4w#dZrJ)V1a*hO-DVp65SV?)8eP z>V8kgZ!u5he`VUVfV@VDG5o+pP`7Tb(X|CZiLTvc zH-PMEa_#tvCxo-H$yUDysK={z&3qj&ByHr?B21g29P5t<}^yd_gk zYwu%mf?zxClxMM5G6~cAs$dfVt*Ot9HbQpDwE#Y{A7;Xqn10hS4p&yt!Ay;rjDM*x z`_rx*96Zt?BD(jIO%MBaMYvu9S-RKsm&ww^CeX@!*;T>va&Kk3SQM6ZgF@ai@sA!p z!Fkp*mKbqjny9ZIkd_q1Xd2z)HjLcp;W59_WN*K4%x915c+x z017^fup<*ohXN>G)36{U?^VOBmvuAtJCOuF#pnb5G*>01Xsntco|SewaM=*D9*a|I zzKfYg>S4pt!mXDht1CvLQI>olx6=aX1du<{2p4iFo>HNtkxl56Lt)hjuUQcPfcR7| zR-xWj{Vfou*b|*@AEDaxIjLJthfhz;(^>QGCU?nzTbaT+MsRBRk&lif;Q$mt2_Ek&w670Wnu6bcVjXnb%$G#|2d%3VDIFc2`CHgcEzUo}8xnxoP5YeaZZD3nSQwmdweA}Lf zDWoXXz)f)c>o_@)w<2P&qHEGQCnhj4x!+Gt$g2Dh*6u{GzH{u;=gICTGnKxA^2vQSZpEeDJ|$4@hRBcS#K)x>P1)Cj zFVI+#{^dS{YQnS|dh)6RlbVhm?a{ELqYb}u6RA*POc&Y0HPy8T0QQIeUiE=##F`YYXSK*QFF!{y)6EbyOVNx;+|52ni4@IKd&fCb$K6cefDS zr5ks*1SeQut*x zC8k^H^ey~1X6yXcTZg~HO%7Uz;=U+RlOl;!ey0tW(ji}k>j72Z1UcE#dT-yGYMiI8 zX4d%>T@)%7abzcGpvA@U4yYG0a%jzg9q{EpaEB)7m^j>Nvwtq!j?#{%U&pA#&?ryu zdW-F!<(T(#Z`I?)Yd(Ryk1*nwmxkt*lG1pg&Z4UqbAG9f+2|dT2%?}-0ChFH_>99_ zl5^9&@L+y-FjhbOL#^^iPYz5nSt>! ztU$t&RjaJ>rZr?JqX`|2kLSy%%!m`T!Yk?f8Rmrm#o?6~+I1JTfoD!>javJTs?^;z zA(w95{`e_=sI1fll>F#xS(3S{!U?ZbRXlwKViGRi9u6JZPSonyT8%j zyY1cd&7tP=9Qfs#LP6tk&YGrwM&QqsS!X41eK<37ERcL9_<_f9DS!0oSZA~R!Nobn zT0eu&rOQ$lD;~3p`7?uVlQo0NfC0U~Sa4QhLba}-;Dg*}Yeh7Lo6|hg-!2PsDx1By z%zA#-KQoZ)Lyas=8YjJMz-(7VW(FKTzXH84!MK%PyTobSW=iIS?_k6JhXlIBzV<#3 zLa_&i)C%%j-F5{2kPUr(_fKjJF_d9F_O}87l~1eu1L;?9Z17vWFFCG!4&3z26k2NZ zz^*UduYu?gxFWtqk*qtNsGc8L# zd2%{&tiZfy;?J1M`v~mMV~HPEoxdPF2iZ z0myfcNz%8KVcXVH1|$&3B0QvQCTr@j+;ffUFzQE@wn=t&&h-Pou26J8&{MTx-TcDct+=X%zVD z(rXWDNZo>J2JT(BBqk46b%@aexypHR8GWEjWG+}T_KEBn)Yv~~dUlFZpKzz+oHEfT zh(1uGH~LA?w?(_Ey?Z$f5Zq_i*5!&Iv@*k`W>i^_;@j09XsP8x=B8wZQ1xpwh5X2u z&&*3$vOTfI<9EaxqO+}w90oG~Frzs&elGy|fQU*oeafyzuhG4PATteoX6rtag%^wd zVx&tFJ|W`FrYnh?C*@TB*T6XV>InJc_d(7)uKzkTroE?0Jd062S;>oUMYO-ZBZJrl zzrAz~+-PZKKc7KNPY9kU73M6OCx??dkQ9spzHx zQ$wh{^$*5Xl`5}9Egsej3@l1;93ngo9@T-8J&4xx*|cdNh*UW1c1$-bzg-t=a_xEm z>zfW8=W8Gg)87hVt`2p5d%yt45FX)WzqSqr^m*t)KE zHQ}98tDvt7Of!dw)4>%(A{?m(MAvCdxNb62uTKa~#5XRs32~Z~?}L@A@-qT7mm=Md ziH;pF!n|WPrc#`=e?0Yj*wGypOVl*imT4Pa*7{&z;J;N;9qe@!zy5Y@O_^alxFdJn zEauBX1X(h-dAc-AdStQb9bM2i>t7;K%F)L5ia9}ZRz}*v;9(YYL`zAE6gr`@`2DMI zOiqiezxR=(ZE4PTCIJEy;7TU>_BZ8+3-Mx~>oBMX>~k0!wNjFf%4HZB$wphIUtiMa zY~1O0m78v^8IZqqv78Zcb`;TVbJnH}=!%CQN5IXdTk}*#=9{YKglRTPN=2t1Kp(_- zxpLd&kxMKLyhFVM#MkC=`?57z(VWe57&H=$)n`Z=664d^^A$#Ilka>$2i^)-$6>X4 z?nc9na)o-;JnCgypxN5n74PAP%IWq#_pD2bTAbcSCsZG(?p*{lS*8&YG2~lAFF{@Z z5&zfW#$j#R$NRob7bhj{(T8oc(4ZPhrM&@AN&OO*K4tU1m7wMqZk#Ds z+n=3}r{GrQ?FFN_* z99f}p#iy$f&Ly@2*t;w5r(mkxJx0& z6AvZAyVE&q0`H<>`NOYYnBUJVVff-yL7&4Pj_GfUkAz* z2y*n7$a6RTX}P|!hP2I$d1fDIVof>}mSulQhYFbVPTqVD+BDS=HL!V8S1Xt|cs^f{ zIhERhoCFPHf3}`DLG9T#BHE^N9EmJK-?loSw8b&4zH12#60KihU~r5shs<9 zwbzCAg~2J3k`=ATUA#24=V3-N8zqU-WqUAT{2rtxI1jN|u4<^AVP$X~`Zf;?aTH1M zZkdYmw5_PE#kATw3w>il%ed_))Zy59(t+(4qU%U+re3hMCCC<37 zfpJ3Iy1!vDUi#M6MmsETK&Nj&&8m`o8}E7j>(IRe9l^31+D$2I@Y%?1-KQ#agk0eC zcNf`-A12gS+~C+M-FY_PR@TU!%?hR-fL`$8Jbr0Z^1?QDn!u`N_=sPW!A#775vR6= z*iF%mt|&*>SkTs4EwPu#SwDXG0{R{UI|w<6>F}1ch%2#5Ji<|vV}&wB_Tx|rx7zOU z6YCa=dv**s;y3=U=HO8Ohq*A7LanX~+c7bIM3_8xABt*Yy(B`o%?FF6$lI@5*7$7( zAE3@1gj^D`fAF&V$QKE1_eXyAT>k>k{sf=ceucjV&+O&ZgZT%BS4Z$r+=d9jO|;t< z#?6j!jNt}(o}c@QoP@(^@?JQf`_l?&)B0}yKqo>#l%TG6^Pty=#o_G2Usl12Fp&@h z#Y_%tT&I$F2X|jRIS+jH{Cxf{)i(PsVM}AewR&Esfl{6sKe0pEtVT+GMtYx0>HEOz z()xrEsaQF)u*D|tN!M+*#&_OICrmw^Me%K!QT5fd~ro=3yR?6>62U z1H#jTk5TcD2dvEe1tw&V5AnZi^p}Jc(gofd$UX^_0S~WJs&^;V{F4}Uw6)l^xFRrh zCm!SS_na0ot^EAZBW(W2LmuC7aeBUk!45SqYSCtiY^ZSBg4E8f)DMB0=A^E+tGOEx z@how*YtEEC|2K7J=pR~%b_OHHYLwOLlWhH+G)&NmOvJAbs2re64lt!(PW{7gdN#HX zNeQ^&y#RosdeMPMg>!7_^eD;^DCYYZ3#1&Y60_R1J{$mZ3{ZZ`N^l;uj$-Y8h(F_~ zdSD&pGsxx9!} zP?2|YghyVZF-(sDTmC#-@pFQ0RJRui+4&X8jk8heqGWrKwxA?RU+2MrmSVY96K0dE zwW9PAruj;#07T|~b4Uw2qn!+2fW48T(pg29kL4Xxl7LvDh*O@fHL?V?8Rf@r3MMAF zANe%fs0(@_W|Gpf^-}lr;VUw9OMZb^ELc_9%?ZF3iRjEJt1`{%h3ei9YUc;l(%BH* zr&00aV{(_@p|H9)(`j~z>q8FPVaF)2L%I3UxW*c zc0r={+oPwOOAF^Nh;JfJ;GscYqanRv!1Pxjg-p5X^41`%<3>}klE0BsItXpfA0d;J z4pozAWU?yrk=Lw16-8 z6#Pz_j80upqg=lamM1kA*|;K8;#6p2z9V5%Y!blf*@@PBtfJcKhhhfUe`vKIgt=z@N;4{QjIZXG2n5G^M}Ee{aghx74ej+WMq=&D3BF@ypf*@Vayrl56AMG%oEF$~)ngdv zkdGA#y#%^F(x4IO(-d@KQg%~sEPxLOkTkUrBqUa@UdX5MMcK9>3eDWtND0%023dt+ z_WaPXlGVee6ON@ZjiS8O$}`^F5vwwb0`InNAbISTx13#Eh(2;Kx-{!i4EdK1ZbWPG zgB zYIL++1`^w3JW@@b(Te51T_EaqDL20>&`~i~d$giQKPT1v5Cl?kI(At}2E6VuQ!4r9 zLSzDXh-tG#_*#d^vpgk%)C&2Uy`t(ZZDUO!RcdI*9u}*LRh3Co@^fc^&UG@8Xg=Cx z78V-rH1omiz$;wQ) zZCJ$7#)iM08KhWjxvbP@1W|XWX2rU;z7}dY@jTXcOM$L2VXiiD~qg2#wZ%9OV3BdBr;=4)P9I zJBW?^O^+CVF|Oxvcc!+&IAl4jAgdbkut#rW=?$PzRXcrcCx54@Rjxl}RqQzjcJ8rk z5kU2>0!7QwBMmQUnlw6Fqn)puUmR|pPh5&Po4;{j^}4rQ(S&joYDg$>SF>|4#$A=; zGCryJu-w#MU{2HPgUosZhk@g0HXBD7`BKtd#l7o3bjty1~hP!M%%YPG1UY0 z8oYz)2Od+EvQ-&I5U2fY0=bZAI6=8@q-Q=itcfe&F&`XJ^@5GAOVHQa7g#lBV zZam!F>jkH+zM6ay6N?f(7&zP4GM1N1_SZCh)5p@VUA12 zzog6v5x$Vcm3k$Wsd6<$nMB6U8=J!f|H?|`ou3$(1YzxChPut3Z}}T<#e$F$&~XXh z#pNIytKPjZGsE46U%;pe2GRsMRB^B8_YZy?>*QWNj7f`RpEjqonk->{H=9(~*!$ay zvcK_eStE{Ry{kWwT_?ficuL48kR6t`T|b7|CeJGj@MJhvSy(Lf(bSkl$tgsiGZ{9A zc(Qn>5iC+R-}YmPd=_PePK1&@xQ9F5@?6lO11c&uXenOi@LeGuF`_-}SeAR%@GY?`i&z)%1-jk>A zFn_`YWEutp!T3FVfSH2Y4yhl%7i}E1U7x}G5O-bodjNUdr=Z$2q#0uXt_W2_j zKI=)|x=s@}WKi9gmiz6=4$bFNP9%2A*+FN|bqtJwpVyd>C+TeGqM=>#L>h0%-PdwG!BheAm0Q&LMycMe8X%xJo(O&h~ z%qgBrrb*+6Nw7LJ*0zoUb1ADISbif2Pz~lNCp;91Eo_aL3 zrJ0y)URBEw;m#L+8X>3FY~lPZVe&^_3)}YJ|Bkxm_v&Z(3t#mY`y%iv_oB{_|5Nl| zO4UCSlV2||en&*D*V<^CTqc&yH366jIBg@}(eLEwS95T+0tlD*ycEl9Uy23>b*RxY zG9#uvL(SrtrsBhg4|A8ipuyw#gc>K03XOIlVFL72d_O$zW_eQcjozS!hm*E>4yXv1{2pxtR$u#T4-*~44#QfOcSlp=zLaBz%18Fhj|~>?>tKxJFFA3$ zG4j0n;V@pfqarYPo}qFJaCH{uW`34k{79ARK)%OE2TTf1s`e-c52FSg4be}+?Zgdy z)g*s|=TOB)m^eOT9tW#2NzzKc8ZBJ;KK$wJk_CL7lgXX@Xu>T_YWkN5$zPb1lOyEv zYm`R0SDBD5GLmd`+`q2%;_aVnz3f-zLizLAdMbEKHp<)2pX)wjxx(~?G=;CoF^$j8 zmNY7^JB1Fhh(W9Pg04P<(Wr^Qn3-_vuc!usQ6alg9YJSSjY+9-$O4V0Zq4?9%+%Z= zZU|@a^F6Ea`%M=;sk#l#DFCK+qMg0UVv>fB-{}pLcs94xEIWhROL~$=_&h$_==864 zi$^TKN1AO3JaG^VP9Q`{6fe*FpD3!$EquT%ULIY}Wm7)2QlrkiC-u&FHa^~{U>Wt! z4kM=t8xt&Oy-$j}dL~}d!%-2|8CZ2S>^L~v3hd!BU&D`lHnD2(D_eOi^Me3dzN(K* z6X-)%OLcIkloneWQ3KbqnVHi|eOPnV`pejf^|@@ z1Z&D?k^_gh> zC#r8mnno0WdmkMZ;Cz$z`Qz7sa$t?C$E%*;P3S!Hn&cXOYAvYr9&`0b{{)_i0~sDkuw2OSUmuV(rj0hN~ukpStO(>50|bdw$8c&4!Y)bKGz7@7~?S#Eq# zey{#x!e@+aaCN4D$RKxPRyr8}-=WCged+)9>X$A5ciCAsRHFSp4t94meY`oNBObRl z@+uzpGtb0!lPVv=KsCSJBxWt?r_z3B7MBY2Y}D8-M{BP5u;uf!sOvn1mjXCE%_tl@ zdrz;gZ_!%(QU(@)Cpjd)R1$EswfNln-qBC}4%GB)GW%iM!P007sSjm%$ z?hSH`UB$q#{NG)tG=MfYg=zYvqslwe=*idO4N>*$rvulCPhR_{qt`Hbw$I^t#z>6L zEjzr4u#0!2doXnXe9Z>*zRBZ|4f>zv|EIzK`_2p4xUCAkK!fF#q`R+L7ppY^-nHjB z+F^9K!EEXmf(4om(gM5|Gp(kL_w=`X<)hheGHQ--({aVh>Yoy@&|SrJPQo8o;Q;)F zgVC=udVW^(x2`&5Iw*d8-8slvXDu-q=aqe8|#N1XB zo!)NbS=GDp-{l*H1dEZ9k&Wl`G4NsbDP(|Yt9Lha+f85T)*CBK3Xgw;>D|JlaBvSS zs3|L{vU5yq!hpP^G2G{IaFiMD2YufFT2N zSNEXF#frObaY+;nr41rvo>Utasez!1dYiJ~DdSW8W1p1j?KvGe_voQ1C z!#C5zgS*ZR%)9d*yM4`y?7f7|#wt9<*`BFY?E{ZSq}unrHSYt0#GT=7PH#U7k{)laGlkt z&$KO`aI4-j+I_A&{6O?Rf_BoUV=gIJa}l%(VTNi~<7c@0~5 z8B`&iwy_T^tYi#jmT;a>~7e0*Wx^Gqo4eCD#ewe3KnliFC%lOvuG zzUOQ}uUewqp`D?%Gm&6*XS?Is-P^Oi`8LPl;>ykQY55&JFvl(_y6jwWw>FvG1LKB> z&lchz(ihwc|PSLFiwzwvoz=M{=Wv9|Frr)JFw>e z>N7(N5LH6@qj;tyMN*Z@i}zR3r9#u>Bc@8Yu&;7_W^e#f_1d^jf@va5^Jz?prk-!~ z`O8gOT}xJwwi7(|Pve75dO{Dik9yt=KFJi&a1|V-m25yVdXmy5Hf692ZmjpHbk%J{ z?>)FDCi)bEQMI61>hVlI#%!>4(VC~rD&CCf>pbGY#?pDC8_8jg?;^@zJNJFA{tbEV zoU4_5{6^^|eKf13u7xArJ=6G$E3kgs`~z(|E?{sw-+6XsBBdYfIwZ6c>z-j({-}Nn z1CBAv_0?%l=mahm_*aB(8%$~v>bl{)pJ2ZH*EiqPL94-*34=Mgc5jzWSN%*hn>`tc z51&X+Y?TeP3VRKEN0C`w9_)ZlLo6OWD^n*81td*H4Acl+nfoy332AznZBpx%T0)hC z3)iVLxI*P3-TV#LQ(k`qZ-ejw>_M^z?MPc4J=&;MpIs`ew!3;D%;VU(>?pBQ(R6#M zNdot?h3f1=uL!L}TPagcfg@u})H`6GkN=O?g zdW$Bjew%lIQL;!6QyS^VN2AR|pYu4&)wLE@?fbq90k?!HS$GqM6OZbbG&FfJ1rdnd z+O^NwbzqtO)26ntjq(g_RYhsY>=&3$y?+plH$sm)W>=n>Ulv4#W9=|)pllzGynd*Z zSSh*a)(0Ig&+4ls2vo-=IB+#)wW<#tk^g(jbpPUZrPAM2n%I1Jp+uQ%SI>ikY^YST zQeFdTV>G|nG@N>& zK&*jyy0>VYoK}SUak)#}8pVq0^j#4Ri`woIVq!V12h7LK&3rXg+~nlagAtL@!7%^_ zs!23d)Gtqs?9Ohwy8Z&IYHc4or(mK=;VX8Z|JI!UM;kka_y%qcLQ&mMmQs~rA4P)m zGp187$xV2+=_!3lf2P_MGFEP^64(bT>V1dXIiFIj5I${|t4!(Bd`)fB^4OyM=Aj|! zi)wh)JarFyWlU<1@Mi`N_?LD~4fOJo-JeRDDRCI)eVR?mCYzN34(2@G{6t91PQZ>V3e%442+! z47b~N-nJw?m@2iLT%GMBWRAfrTo#ZKtEn<~aRT%pcV#FJC@a7;IJ$MKC8fc)AGrLp z6s|iaUlOa`o1jPN$YkPm=XN(>BNWvOoGesgzb_5b04|HmL`EAqv%z-}a=2P`1YMW-oSdL`qzVy5Ap%V^WK z2MI5KD_!}U@l=g&u~gbayEK^U+nMNgc0DY9+cT((OLXF2Fs9WUnN%=HVm<+l4#r~_ zJeUd$1TiYi48GO--}1ilkjLw6#G}E*yMS^714St*KW2-*mGRuX zdXP-f1mAe)M%3ybFBE~pb9favZDw+bx6tz(ovll29b16+#l=>?4pp9~KsrPK&T>!$ z!Awb%h%}t1U4(d1>RiI@?d7z3m*Z&hK-6U_NFYKP%DLpcNF~a?Q00Y|rk6f-$7mAk zeLg_0!4TCKMI7z~my`g$K#EsSZ11g~jMJN##eM4#rg=T8PWh3t1C$#ReM@hnr<vDzu*6fF#G1P(c5m_ zNis%oWY(hKJlF}tMt^ef*X}Wz;#)i5@|Rz~u%S(BjM4;z4}NnXJKovyPl;(ZEnE3u z|7F+ePJL|GvS~ui3kv zW%WcO48i3gA*t#RX%Yt$>)c;!ibD_=3?>?6T?%~L%qXkPqeGK0R)*Qu))g*~kqae% zCA-u6i-f}g#~BgYT*grf>Tm=6%}gtfoYe3^D?W{e=R;=x0Jgj*@Dc3AURmp$n9Gw~ zWZNz|9E0z2Hi$>Rs(u8gVbW}5+QHWV|32Q)s|80$$mq_z)4aZ9uA^W?w_Rh>M~x|W zkhbLO;4?rkEuHM7B;|i^F~=B~InEBTj5N6)xzyUe`0{l#fBJF)W?k3_Vi8^wax{#? z5PC=495y%+m+I^}%WekPXj_ZmoR;ZmZz7)9CRf2qh^?igI!-7gjaOyL)Jd$<)KtHu zMHA`Zle~6Ne2%+XZtZzsn8}N#JvVxsYB5OaA6*Mhbcm2yw{snx-4-Fdt(Y+@uyMtk z<7GblQk8P@#(j9JmE}yVN zIN(>GKcit_B*whArc=>lc$~br<@a8?yt~+RC{${RRijNU)+#sMmMJ@aK9MlR_PJG$ zt^bwC)my|ElVf6he%jhK5I&Dtt-00I*g&eJC2khqZCaa)16a))jgJ1fG+COZhVQ+z zgz(u~Q-|I=&yU8lC8DH$3D=g7IZWdyt2FBWy-^r_oMNb`eth{sIR@62A>!pEJ)&EH zKo}Zltpg0u$|j_Riw293*Kt#?d#+j{&TdnPfR6n@#@$0boTMf@uvc&K7WST99kIWV zv=o=^@+{YT_qXReuRPlTVcx``W#0A&UCN!4wcurE>kWA)abwLm;yKrKbXR?zY{n>( zl38vEo9ZsuG*^ZCkuc@4och-uzj*{K1M*Wr?)ryw5yrE`N~93)R2 z3cmE-zH#e?<~=Z(=)7y*x6S5DN^TA*&lG<;CF!GJU+7#c!y_)A$AP6&CX-Ov-&D>| z$5g3oo5mwKr*u6nV%#?Irmj$_p6@H}>!c8VX+z^CqnZ4TSP$J2A)wEtEQ&SSUQH_pMyWjar&!-(dGamS-!L2WX}CZJTS?VXJ_M-YvW*|2`8o~VbLR(#KX=!Dn? z$AVT*8RO1+bX>v6dYj5Fn2kHlOsa(cbz?nBST&7++fVS2K|*yOkMl@HSHRquGr<9fmqD$%%n zms-go->+J3t|ZK?1BOF$wGNQPUIbn@+7#;c8}l1fyPIMk0tJ8417`E$ANTY;Q0aTz zv5M7-zG7ozVg_%}+SZo^4gHUk<39(NFyY>snH#is>omUmVAc$*a(v9x{Fyz)-;WG$~^|-ek1)neT3KFd5)n2JR26?K(c`^X9|tw;mW?y%WjQ@9_NGJo7%r& z!fVZ=;kM~-p|$Z(4y$ZK>e4_d%un3li`xvx>+`2psyp)%Q|N@au5tw7UQKhZ{Ddbq ziB|mKU_z5=K&9p@!U2O#?(l?@MknbX$@1Z0F$nP&uw}aoU@T}ML4g1PH_fsNB zJ7(L*W{gqhKB@b%i&#eCm2%{Oiym&?8RQ{^8~Bvoe@3$t>}V>Jw@NKnL=e0zwL~X_ zc{??&7P+c4%3rj3Caq;}j^}#J>+f-DVO)0s7==>sh}$)(4~qq|hdu6^W$uTZdP80w za-2+U4-?EzA~{&)e8%U@V!T#U2EKL)&1OJY9#H;2I;wOH!PENRZ<_m$^ZQu zPm;kjEGLaaioviF>4xdVLIrF)iF&l`gMvv?Pm_B{2X$y*^A03;s;?3S&6;?$43qn5m@CQOZUD|W|+wp`SX14LywDs4``rY^HYlp{eoL$1< zR!G@Q+dZ&8$kqHUUEprMIQ1opNc{xVONm_%fH?A?gPHqTBE{@OG!p! zbN+qbVaG~OgBddZ0RO*!{ZR@D`S^eM+g#39@72b}M#AGa#QJYtRntrz)?Yc{Dm9}c z!-XA~b*v1V5U|>Vm++W;(W3t4>_>C;%F)Cr*~&BP`P2HVzsUq7yuYyfxp;2fKdlXu zq~_#Mm_YMof`k4hUtlhoz@GN8wYI^ZlZ3t^W>_h)P{Xf12g?>?1#*_^* z7f6F)9seCs{C|3jr3JfX;APvtvUL=_h{+WBFGtCxNXb|+oOYOktfTS! z2dnXdQBOi(s(3OsHY6Wt3!IX4hgzkuR?gee`}p=9o2E*eUHuxnNqFKD+XjJwA0YXf zANvOf{*B<0&2s^?98FfhH2^c9@>I6-)62(S7Ml-^W$|90?{#3g&sy26fp33D?qV*^ zmfq6);Zxf{;$0(vUuGe7X&hMvlc(=q{@SGYNPj!xcuR93i zzF<&R*lxNqXx9>atJWIT=dgXa@_ccu%{lssVDWi5Bq9m4aq{uqL`&a;9Is-5x=TFm zagwdqLTAmfSqUI9r%z%12_RlzQw*xsE@=G;MV5yGa84r$-?qgHsN-LhQ;;;ZJZzw= zmcj5%?~;_xR`pQh>pp{>MMFBh0W>sc+mIc((~0eU{^}?lXb%ap#>S5jo@|*u4sD^- zgtRG6t@Bx)r^-b$lE{G6RI39z2%j0o&55A@s32630mh(l^YUt~N?8-^j0er9MJj<> zO7axa`2=E4VmXZ`q0fwVC&GXEW&DL-B80(`DTI9shthw#59N1Z!^#D$l`@W#U^Fjy z_F}ae=@qvKXm`Awcc;Yr-uA%~ypJt{I42eyGjCXYFo7G-^SsC}ii(*dGxZvqnq;K4 zzhf%$#3!mYz7j?F@%=&})Yn&9nud%hJ5U-B;tT*(KVL4-a}JG+42>`~{bpJnPj_=T z^}2rHvU|{hag@?DQ3tc%sSg;vujXiv8J=ZY@u4|ahxbyX zG%#vBHjAQ?-tPDwUx$O)sd2VxDD4C z27F4_(qxeFwSEzgkg8Pa?7P=UW3bMykLuTgh&q^t;3GL)jGZf))l7bH-DJDTK~XPs zHI%}CIan0hr39I}zN@<*%w2g*XublLl^~GRwg)m>3*41tt9#Vw< zgj>fY|7woZRycZiQMxzL+F;~!{2({q?2-iG^D4*CyWAduLxHoNOw`-q3H*Yx6TM@@ zErz_yxp7*X?vV!^hrc1u5b*k_Gkpmu%eFf(WMd_7^V*fsp7S{ieUj``NPBy2HJ}fq zVGi87#TigDboi$QL8NdflzF?S^gv@xs{c&&XQFGrE8}8$OxfHhByi#w8r>bUO|IIr za{T2<=i13k@+^C*YDY};3@W|`?awuN?PlyxMPh#n)@^ZLe)Ibc8o%SwsImxeYEqdd zBd6U8$F|Q>O*y43`e^*_9UNM~b!x4Q{_zLh>(STMCGus`nCzBVDd&sE*e^+n5giFE zu9aS1e~7faA>s4X#bMUTO9$^#nuh20HgzB923Fi%GCM_SpkeL~q=*TW>MR3;fD4Gs z??RKUIIY?HMEihG3u;s{`OZ7ZcV|7TGi9^N(Nk-z0=Wgi)ak2fdg~ zK9!cE#^hSV9G6m%fSs9LYSXIcs!)z>`bc^k<#H=Te4+M^Wyv{kaoy4HRVSGrg@nRS z?Ic<)Q3UzLr{iTuJDCI3{_8rD)fI9`#(9VbSB4wORAJ%mJ>@sS69r)J>a@ohteB!l z<1`Lit)lCxuS%>96dOh00DlXHxHZ<(WcDPa14lOByl6hKj%5S zWUw(f4)(o>Ph~Ezpv@MGOqZyBx5d5gF+qS&8QjsM;U_I2((}qa&TGs19bOot`Y14Y zc|e#U-Ya&m8DZYjfzyN^Ws9!#i@M6KM@}b_R{RA5zULT%5m^=Le>odo!n zR|71QuA_tf;Gaw9tuu7MR_dSo9H3uxOb)>Qw*l5#Yy&4=h^7%Ui|&He6PsEbF1?f>!JKeear1+sQ8VFI+4A^Ua%i+b`>~1a^%wR;KM+`o^5xbwDjo z54w@K%+WQL>Z76k&wGz_D5JIj6j}Hu%_i>>{G-4^ZYxe(>^?XIA^sRp2~a?VKN~}U z-*HPamREzL2=wwXTeQ}tA-MNGPy-sScDR+*TChDB*VT-+c6)koYXJ^h{m+=g>F3)* z1>!`m&G=8W(~01Br1goQ15x-eC?ZKNolHHenyD5^mgS8;Y~=ntIOr@ezrA1-|H%WV z=+T=h4l%uV)^_RhBMHAZ!>yVwY<_hmlg*mMCtn{l!cL1SGx-pS<2$oM#_O$NF8J1+;&Jh%SZM8}zG@D1fN9{SplZM^k?Y^zxPr8TAQ5{s2`Ei6ridEd` zZchr6Tba^gzO)?c^7i#Y5z){{Fsl31VXZ!(-a8zZo-}nz#A5!!CoN9;p{7W#Z?E=v zbhlg-Ps)BUkvo8I+;vmi=c3y+N_KMO=sML^GNmp8=@m|3r>F$m5D#udV)>L8)jKO^ zREiHAue7HS+Nz}{;e$tN=z`?u-wKZ6Km-W(eg%FmQXz;DaE5eo>^ZDg#zfnrWcU_F zt-js44>bDnO4z?mZA)%jL!GJU%_s9c&12HrPwQIia3SN(g@`;w7$0$j*^aW@?Q+u9 z=QOPY>TaS^>nhCu8X2zXwuer!vN;AqSma>t#cw>|6O%(9DKc{ITDlzf4Vme;*iL-v z0fs+Ac<2uFCU!djCLiZBIe{6aDh}@g+|JT`?ZX>JSVLb0S4;q1zfF6PpYZRh?FH8F z4v^-Oy(|6Fs!R84K5?0Uaw!j>=Bl`umZ^gN3FCp_^rM~!3fqQjY7Ajxy6X!S!}gr% z@$y5D(RV~^ue+WwUxLn7CTffrFC+2!M{deDAf@$XrbaCI$wtL5Wy4sUMld~KvQ3C_ z24H)d0;iMtHHwj8bjkg8+3r;0antcV;6%XCL%t|E@@z5VuX4tBC$*(j%uaRa7twqw;)MFjN ziFnbMfqtPCzy3VRn{EVZs{w~zidvvY3AVc?hbpxK@eXjRP64o;m-&?@Ab7QR`vzF{}PG)NjtvWQTlpgEwa>{Y5C0jmt03*27a0@;nRu$dhi({EVeOp zyFL)wO{vbBq_;acny4rr4#*x$b$g{>H1b*j@BKGrz?UJ>-B@acFnODwKkfar*z%GD zUP=_tezR!O*o69^S?#W9Ifb^(+OlP&XV%yhXZ-vjyQ>X?uJ#{X>*OjesOG;%*RP)O ztk(KefLk(&OB8r=L$+*|S@XTdLiy)rd(*Yfv2TEc1rH-QYovTK>FXos>w?{PyCkL?5cw4o0HI>?25x)5#;A%o=Sgrv;xUBQuI z5S4^Pr+xQ_UcTg^Vx2X4cU%~F_9CDT>6P2uF)twUi&n0pfSX8*&3Tfbg8Vxz;>9BX z#P{ypA+E8vWEg1{<+NUe$H&gJFR&3s!7wmyrO_ltwM=#9NDL9kLBs+#N-7~@#=JB9 z`Vf~A;_`nT%$+M;wyh_sC$Y`gJ@{rsHY|w3S)l&y8 z8+RK6qdPW<_1nd^eya#myv?`(JkCY`J(U-3=e7DnPZ4~6)lxM2Vy<$t;3c1o{Rp~WPr`hr z3XkO5QAxZ&L!f;ZGN2 zkcRYA6PwCIhSM%XNt)%Nd2@Lz)|Dzu|(|+IH^sZ-h_5ssy^B>h` zCk34I2l6QfKACl|2ze3b;7-Cqh1=+FBL*dUXOg~s;U)z{-Py7{8fV}`&eE?tyk3o} zH!jW>+0}#TLiWLuZ>nE$)0eW;3N<%o!Ly-k5FW6~w|Fs%NX$cD*4|Ge;SS|w@DaXB zpL7GiZz@FcS4aF=;B_V*h{q$+Vz)--2%`~H`1m+lEN&yF1}#JCRx=jXi%|f(@cukI zj(1v~R${)V+*P9(#gmaXvZZxJ z>9`J@`ebm-k~W7hbX~)Nlz||l452`WVD!jnIkT?o=*{*|Z_-QOPh*S(!1+>jnF+9Bg)~~cw87GN{9}lSHLr_ zo?Xa-y~E~Jiu@ttWYO*v$0FC#{s5llgn|1I3vqV{lMXv5MC|~rONX(ic1)4U~1Fbr| z@)6X^>qcoM9Bz`uQE1gEeH6u-mJK8kmkeKw?Y6v51)#n0iawPd!DpTJGsTO4-Q;?l zpPstuIh5?$?jEe^_Mt5TyOO^E{eon)E2mFBjH)-J_lcpACi7F?Ab=?)qZWZ$0R~zAg`LwovBxk=Mbn zFAc@MBU)>DyRvkGlChBdbG=y{?6-dFZ=q-}r+JEWlF^qOM`%;EqVt2~CEGb7a@1wm z16M0ao=lu{`Q8^6g8#r%^%TCh-r;R0d;gg~Uc7DIcr{iTf*yJofcT>MH5ru4HCQ~% z_*s>zF7yGNpHIzFmP z$LS8UFq6Z6{`y{3Jm7KFdk@KWVR!%T&gv{}B)Ew1l)0KbK$tN{fV^)GAqy^i*Te8s z;q+!_F!krLh3R)uFemSbgG;`2%97wfe*NmH*W4g7wKsQL3Po~HDIV!V;(PCvk{sN| zlLeY&KWsnJMfUNk)V*@5o%^e!)(NvNq*_!ae0TTP-g$YDy=3SOBwkMzF5@9h)st>TO0 zS&8-W$?AM<=xdUE)INmg178WN2KPl6elKK%7Yf8*c(Ke-jsB_koFH)3U}a@h&gdCq zz}4_e4U9tP8 zfp-NRn0^9B+MO1y$R44;e5(ROV+fhZ=)ES7@r&_e*3H*E<-v9JBQM}B%DpT@zx4xK zs2d<;%XKD60%F%EPdQ(gw_~vcT992d2IbsM>B!;SHAK;zyfr=y0ijQ3H8acHeRx+5 zd-I!3Fu1|ax!V7#R~zB{Xk9D#{jY|dcyY70J8#6e#hq7r>F_dFt)>E(H6NBM&lf0P znw%Vy9y)=ZympHg#}u4ldLs!8i#Lno(wG#`lU`YA`NithAsWUQ8lc3sz@2W+_a>&1 zQr`GWu)#(9>br1~PC^DhXvh&%;D_}9+3{@LDEtWLLqpPmulsW0^lgA)sBgTxm* zh^zJzii9vHx?B}=HY$M3*UAp5NJ&9bcC%8CJF23&Frq9R>kGZLDjZ9;Ys)-YX)Pq9 zffjIYf7@@2?K~)=NX}~1COd%%QY$iyO-Xm{k06}1p3l*1Ukiwf-zBL>o$cz%F^;}b z)aw=0Yjf^P@BK=&FgH)}qldYZgEx6SBiL$g-`-6=_Og*ZpPGL#eoXgq{Rjn`VD^pJ zlo;|xng=JAo{QqDf-Wv`na!zcRX`Xl0_3gujhO^pMWzBK5hmG7u=7z!x%kw{%$_k0 zD-oG_=YCtTl1kZoT`=Q=D5GB6E8L-Wn;^d+j{*MlH!dC0LEnB{s#lC??_j=Dp5r!( zStI&3oVH5x!#-Wx4vlQQb($F6iN#cjiNl?&`y54Y3W8bq7i@43GV1s^!V~ch6OumQ z1W%b#j)c(ENx2W7`9+h>jCoQ>xXBtw>;<9=Q{Rth0Yy@;DOA~3f1cju@J{y=e}kx9 z68D+)m94$`!}OIiN#7et&f!!sEeV6ghL|3jST7swIfZdm)b`$Dn}ZGE(<9Zn;HS~P z1C0ibF0--ECLwP!Nn>)#3m}A0kfEL>lu(cq)(YzUJ zdVJhf2JwJf!pwdwGC;sxe*Jd#ZWG~Z8L9Pf?}<#M^$H--72^tJ_WI9|CwI?U1!4VMq;nfpA2(!!h0~ZBjnBGt+U*!Img=|79loT=~`?& zAvlTVIA|RDU2F0s$N4dj@;wWU@2V+#j%riVfLQ(o2$QlFXAF*{hef&E8T$2A`H zj~O5BehT8sm-8f`SQ1lYYk&zddTs=ss*R$tIP5dJYF`{09%*@-?{jMQHuuIg`W%Rh zEBdcZX3MMM3aAlam~Am=ac8Nh=irBUG+`y;-iO9!e(H(b;Br$Gh&NCp9f?Sb{n&?c z(6$u19eUcC+$_#AK(TY$-Tp=StFpa>TGT0D6O8a$1FCQJC*mrBM!Zd^BAh{DU~}r* z^PR8!d^N-|2H}s%e9Ifk>RC!c@(-%wF&Rcfb;r+%NmY-+jCf_N5BglPRCuT@-BZNe zR@=S`^j*ueq!TB#nVo1$nM&x@pSuo| z`TC%-8Phbn^K*{MM9gS}4LfLDJ=kCl*P^6CHx80PU&izpBJ)%BQPOYY_hC|kb-%s+H9|}^r?z-qh`)-|W)6P$hGUX9JLz6b1%=Kud zML+`osjIHlzw&qcm<1^3@W{hoYC#(q|I2P9Dd>@PIy{xz@32GXDKR(DGX0SZ3G~|y zmgi|Nn}YDAFNd~evnYB%JtzdEVbR1>&Pfci4aQG(1T4ADsN-S3Iw8sLHKfhX>oCZ8 zk>n0Zu2{H_&@I|wrj_}YUhTZ@vDJ0?B%qcObjtpo5KxfPn!fxrL6#j+_j;ea@t2=wTM<#U)Mc`9d zABpaV&Kb7JW_d#o!3;mUn{tFpy=@(#iZ8-q6qrPy>#(i>n?FGvGaJlQ2@4nwKDGV% zjBazm>ppUR_k5H2wsO5DMZ7;f+6}Xva@nF4uhWedybpSAk`PYF%e$Ek9DPxOG1b@% zhDBE?k;|6?9{cH7Z-*0UP2YG}tX3Ph;ve(7w0SOo<=Ii>TSc{)%x zC2I*ln3p=o@$CDWpFIrhcG(Crt1D9>k$0kTNF{m>8}8Tl{g-4a1aj&lZSx2$uU$V~ z&lYf*G|Avh@uy?jEbI2Z#R()b>JQthaF6}W5wwtf)5@UXmJJL)&b{;%7~c@YMiPK& za(gutK+}72{sHg>Cp<5jGh>2%ZXWON5ZdrPJPVqo$){L)jD(I2W3E}i#&GqkJniSa zV}Y?XDV$CLDUGDESgy02NtFk2tw7O|J*SnW3fzA7Jw39n(u*kWBKNX^oQj0O-BaC* za1?3ZgJgNMOQ_WLuWSC&mtp_mAK}Z{FHj_OySMkAnO+U4a3aB7uSwtgoSwNHeZBbh zgO>V71fhV+kO}4QC}V)t)?)N(Z$UZV_Q*WSLJp}atC=hvP;Vd_S9r7dM?5D-oPwP{Q182$ zcTs@hdrE5m+i?tX9>caU7Ou0jTc>8ysyd5dMjp5IgcJ?1_H$+wG zYeH%{7-NV?pz~XB<2N%yJxJKx8U38_IU-$F?H_mYfE?6+p27Uvg;2c06sDpC;aGhL zQma7&E{359)HyY!EN<{BbNBFX&A4==HNC*Mut;nQ|3amIVblNZ6-jn&zSiueAFS~@ z9&m0ur1WO{`5@0LYKF-_C1!I>VRw%aCi(xbPl0lJnmFfT#Onqt1tP|B4^-l( zCj)|86cv=W^(Fs_HOGJCoBx*+{J9ixuOSzE%AQZ+RZc@Y z{}t^A$fH8w2(E59`1h=VV!;37!~gXo;UBLt-+iP4&eAqHga-iD|K_jSY=57{g>TcE z>A(8@IN_i-Ys7}y{UQJ53F5k}#QZl-tek7+RsO51OA!zzC#stga&wB)4DccN-EZD<&nG9swY|a=&{7G<;VTde@0mrf^k>2P ze|?`If2h7yOkv~Swt)RRjeF4R@Dw!~h@cEN9*8v`HTKejhQT1?XP?zb5IcPb)d>R* zRQ-QEZedNpo#ENY)Nc4gU2J;=6|0ZbIi4qRPAh;DFKmyzw$Q^7VigSteEo?a|MM#* zCmcX9p?&Gs8^R#-X9I)1C{#}7yN8gpNnBgH2&*W=zTTrfQ5;3&YqV^SeVNEA%?wHJ+?|0ia5&+yLp{Ujssm6Gp@l@gp2p8T(CGAuLW_ z$B?SeJC|19%?6zgS6xW@@099~ak$g?n|UP!Ayd77;9hTkSN4Y>*>(o^_Nn8nFbo%P zZ1xhr<$ym!;OnhsU6X%9I3Dnf0}zZCBbXV({NczpRYi1A}SQEA_q+ zuoy{}X;ka%v^s2t{D{O?0OW9C4*h_POQ+RU^<%yyp@ElqnNEkZ6!sf=dUta^EyV#; zWY~eTjHK)1WxD$d(6{Mwbv`4SwPOkt>&^utoxO6r&8YdJ+EIGf0SVr|)A_7y{+!t=-{V zHCd$jWI?p|#kd67WZU4_{q;#2ugP%Y=*wEi?I9=^*+lx3sd8;~K(YMtRVXsP$LioW z<=j1)=1cW~_x7D$*A)-hU|Qo4)E!Xsd)T|{B!DThH#p`#QS}}cTHWm4^cRKlRmApi zhTG3n4y%z4K_Ab>YmX98wedi{^tYh|b}1vNc>a_++v$&xs=(1KAZAsN)kiX^9U*S)nx4@Q4;EpewIOwiHKU$Pp;;w$< z)8hQO`+jpC$?w$SID7^#bsV@-z>Ml?xMr>$Q*6SHx;HL+=63 zaD(eH6l+vkjZFj`Kw2lzm!cM%Kj|cY189qXlZb^4$=7bQ&G3G7(bsG@Eicn-mG`~3 zX?WO;!yiE><)spOy!ayH4S0+=&T?(3bnXCAnC4OiKT<{e>oL-1@9h%n`4%~9xm2p* z=ZDF!u};bFKUkKM-i*b+4xLA2I;*_*VZdk9O9%`_FNJuCgkU_+=v8vsXvvJFH;+64 zdbctey!A&St_yX0pAH(193T7T_U(*?Zxw}K&yby7G#lbEvF(baOwwHnbC zlU$D$Wu6{xqpz9w7xZQU+0u8j6{~S$8Lg7NA)r1dg@KD7UA(T6o$Kpq2hm(GCRsej zAsT)Gu8yL~nEnHmc2xRoM!d47D&Q!>&V|VU^;TD# z?X+hf_BVs(!0jk-F)6WmaS8jm3 z>dy?mMr5{Sv0%Nqp>LeA5Tg%~KYuD0ewUe57tFu_$TF%_7lssQjBdiI#*tI8gEEMD^KEVB# z%kqbNMGO7cecWji@YreVuxrWmrOM4TYXG!!f8XiL*ZyXtJN18i{U9`GAf9mQ{JxLE zZ!!I|QCRR{2;r)DoOUEVaADkz7T$QAZB>)6FEu-TZ1;583~m#FS2&x8-Y&yQ}k9nO0ny;4>fy)UQLC-i%X@+y!R zyw|#*EvAa%KaHlUqLcCO+OVv@BJH8*eNlpW|G3N2FN%Ax$39if$LFz;-_=SC&JT?E zF`CLzi&8Sk=5xpXrCzQ4`g^=LK{f$|n9VgR^JIA)J#w&4*t!bM{8+MZ62u!Qf2VA2ho!!HIQ-6nI%qJuRc`yF!kKZM+pJ>TH z6N&Dc7J)JS|3WGh0rnrDKrOQt_UcW%JZ1F2{RpD)f13nAV$8yXXuvB<7_78;6exY6 zQQ*w+l87QOoWW<(v$ms$V{zXQ+0`vL&oLcK*PJOeqne@Y5wSj;E=`i^v|ktT5~LSK z4GCrZVS>~JAwaL7ykHB`n}XdSOI&QQp<8Zs!?0DVbiUJT_Zp7LX#KR_^8s7H(|K>= z7N>IG>#^Tuv!2)dmvFI8bApO03whbvDT-c}^L~ELw@$XqfjXtDRXCF;$lh1YL7@J&W zw!IgOro&(0w-R~HBNR;bkJbD(jlYgAJ{UnkLF~EZpRH}OAAVyxLun|o4(8!ufQH*< zN=lhQI{IQBbse|C@7ecUz-3>hJIloD`nVns{`~3{Ju|&}g-*ZI_0KOfreykFubA-S z5S?a3gvAFfms9}vb@X8j@(qqM&JdFw2f#ahtF+VuF{C(1Uo+_gA}UJNDyFIi3O|7| z+iSdUvqEsW(FlI6204YOSK(3h3T0tb#ykv>lne9z#|AK(NgM z2_8@bfjep3xPPeK>zXP{k1K`MBvFCajnk-vV}NPwexIXsdsg2szJ}=I66;i>Nn~ua zWR!=C;pyf8*J}Ax-px6v^Vb>cPtwc5=t@eU@3#i+{H12nRO4F|_ptJ#|Y+NRt#0i8#T$65k1Ca#7M&U77HkAv} z$^VUySFpRz(Ln|Cif0>p~~l4PMMQw$4LxPvnIJtn+G-JR+t zzRRRdyB;m1oB$Ca?c{wR00K^h!udor$HWeO6Q`tJ7F@EtT={w+`Bm4S+oX1hDZ%b%9qlOc-0zB}9u_o?t#vc7q`rj>T z3wGut?`?z6Ce#qIUcURNB45NDEu@h^B_&H*V>)WO<4SftsUTj)pjq;D{<#l7YdH4< ziph^brJbfhw`EGIi(+M(ZQ$vmKC&Pk@pq9RzMhPos8OX0$9@yBY1;iTg>(?*5sCGR zSZ{bnr{@@ezR*7o%$4#6?Qu8LIBaO=YfZj&KHm*n2M#zX?$~CoW}i9yHEH&Ls{?cm zQ?4Bx$ednpXYVKhclEPOHUJ7)t>>7#y-Sx{T-cn>o^Cc{KMv{J*A7MEF{BE#Imujh z{D`&*_VjzD!nE@cynDYMN#{#6jXN3v7-52u z7}`!6J)RKC;F&PcqjT7{NHn>Nl(DE~^kSL3JA1kGMbKhuSnZNTfM z?Yw?CEA%`b`pWn{r$JdNv&{q8&(X0434i%6LBK=t^7il?G+LkV%7gWtR(_SrTmAR& zE2h-XpKs6K09x<~6u$f(`tWxMXhbE2c5iC!F88Mko{ZV8-5Sa?5B<0ctCaFOk}~+* zq}!St;Cc?GiYKYWqXvW=+D6($62lavdq<8h10`h=$S zlV$&|?*E6y{M()=bg+f9Dq~$?7Ci%dO>i_U0B7_Z(G}2JNTo0)Yv}7Pgj0syILNOGrv>s;!-paOJ1se{^2!0 zwL)eO(qY9!^CAK@kW(=0jUP|InYD6V27npH1P~CpiF*8vg`wNJjr$_Do9G5jbRq$S zGI^WvC8cWOy(v;K9Jk)qpif=HY>Q z#Y)`QpE!%NqBT`s&q_bz-`GgjJkfYC>bKwa*tk~Q96w52Jf+Qhu+9FR1W<@zBSnJA zR{XwDMO=%t_3RU7v1Hg-#^aZeu>H;Q=%SNfoBLUt^K`QC%e|v>V@^ZhcQ}PaK;?>x zU(vq7`CUus@)Lt1Yox^TRay>0#_71w0s`FqcXGBej4=Bj#UH<;pBi>iu{XOblMl1a zH%~Mrig*gFYssdZZM*h=myDliM%JrrHC}Upw#9D2@r@^O!ucl=`5$kWKim^BjJ;9r z&HZW>Sm~etMF)FrsdN3Tu6p9%^%#gW=A7GFTzaRyRK&|6CI=%#ChS;a*ouP-b{6CQ zIKYY*xP*M}R2oi}=zzA?i%Cg=0r_-n@<%4oJN7H%RxM#|Whw<)WSpkhnk`y=`$nF| zdlOQwrc2c53x!PnZ-64>VA|~pQuKyMdlU{0$ULZ+!1OLtk!eXc07MoE3Mbr1s%Vg; zDl9TnIEe&}zuQPEE^}hI zf4c}>@BzU5%Qr_=;vsT6^~GzzfR(MlE$OGPkcH}@;*P( zX!gAH3>(sJ*dVu<%B`KUol>LiT$Sy3@GM$tb6Na)2^lxuTQRH3el)bG1vAEbL_Q;( zVH)?#eS<}eg-aQehCs$&7q6BDj_ALvIs{r9(uJTqt)DPHe2sif186GQ_{0^uos>Z1 z`1r%nFF96)dFzFi$(KawyudiWCOVm*Y30bF2QaDqEIvO=ieEB)JNV!WY3^-d z+MLcWeArsw?h0+|knncBdfDtj0TJZV2Hs+42|O+x`c#h!f|DXa-Q!GZgBdstR~;Jf zs2kS{w#WardWu}E>>J|ovA2tVwvSO#{H{1=e7QD6a%4q8c2|I!C8*%|PsAd;iv{u8 zF?&ILwjArYo*?&7ZG%;P1@BU)`dpUuu5%>5mFfKhS_xz3mEB5%Oi0X)l%VZL1>Y<_ zP2V(5HE$P7JTsOtWx|~5liIQJ?@q0;B6&qnCS8%uy2I404*T>0Rmg!!r|Iy+`JxBZ z&=XIybO2#94!G9sQHD0TOj4zMu8OFJ-D57CM|h4Zj){ zEMq`1jrtO9j3Bcx_3ryH{^J$^^3J4McWPXF)o#5;#lPGfHlv*N2JKChE6aozJkNN% zHscIHvPPbQmO-CS)i1f;(yVXa0Wop?3(bS~8wZcEobqsT+z{$+3G=*-{iiI76%DoX@EvR?##d^M@w?y% z(Am=GSX_e6d|q^QZ}o4j;P^u#tx#u){u7e}B{*RySFl5q?WWqMz>CWM$~&|#H~Ki0i-Ax>RM?L^l42o?RsU84IFh7;kf91 z_I*VEfu@F_m-j5@*(1cDGY|X*d#S}|V5-<8^jN&9f9VrM)>YFk!XJ(Om&-Eh(06kypYjXa$oY#J= zCf$+v>&3d7;YRS${@m-}6c{pKLWZ8BL?v#7a5A#dggfz|B6`i=wTrBHfW58Q?Rdp* zhB6^{nc1CjlV6Lh3X{*_$ocx37IBi{X%?fR+EurM)h0;&2p9>GB{V<_@V(hZzVayq zWpdp^ssY^+FF~DHz-d*VIO)vQo@68EWzd>9Cb>YlrPHJ{rAO+UF|p4(ECF+dKesGu zM=y5)R?D_zy!RXVbPb{oo`QV2FVd-86;@-9oz+k99$^vP@44+}Op5O8 zra<$0ep!E3Ir8N2(?)AsS>}UPK*?Th&i5PZWAnudz3L8`7Yl7M^(1aR<)GlsA8x*! z+ASU_KO{crnVrwGbx|*@@YwFZy|%ul$ciqvaS^#)6s$En=V_GnuBYF;Y-3IutUr2{ z#1#fg4WUL`uoPQsEwr{-Sx{a4CgP3%3F9rg{(PB@`{azNP2^IQE;uAIG3d;j)7x5z z5&s`o@d~r66Zw@yP)OD9t{ret(qO)k{v?&~wqvQoNuffgKAIWB!(v1VCIGo>6aWA4 z9CMg+^Gistrii%BNk!mXKvYv?{YR`Do8FoH71Ec z$eY7#xTK&WZns^CgA}GvruAa;z*odmPWkjX$FmE~cWPU5kJr7rdu3$tgW4Uk$n&MS z>(@e0W#f9eKfShPey-=y$acUYV#qYmr@*wK2zuO!A)r33xEo*XjcX>*$Qi*21O>@w z&<4vs8JhcZ8f<4r^i0zwVN?ky^}v08V3tV_mYh2&t>_oU*~V3Wk4tKhRH-w`8uK%| zBa2wc?&f;)a#d*d)1W`o_R?)6tHI!P0hxyrI8M9qc(CXD@b*EbuG~c`UxfvWlztvI3W~?1u1YR{Go4fpuO^)bZ4i@b=2zRhI4I{M;ET@)}*DpkliI>K`@?U(F)pZ_giIR|&+ zgbLR}o4uU8NGddzB&jTgE%m7QBNd7YVi>4&)+S+mbtAQnLCWxg5xhm7PTr8?ia$!r;wXW%vV25;Fv*}WCnNkrG8(f7DICOYL2)b(!gqx9W7fKL^gGc%SsmC5h1 zY-re-6C~COTfHxY`FfDFZHy+=uJ2uO^wq4dFzkn9#rk(uOu_c9DXGjA<%|-Invvn_{nR{Mqg&900Yu22bgz`C0!`-FJU0ixRmRvEt+7(;A0XRL=!O z`V==+?@mKu?9?^(zrJJ7xAXX!s0vR?6X-@817FSc)@r7x;gf8Z+C;weyGhd#w#(09 zXo0iT3pYSh`_}3b;nre`;tQvCVw8B;N|i^e@I$aFy}s7U$9Q735;3Luf{nL7^d+?0 zZEL;rbAep8d2}bhNAL?DZ3G`tOuddkTqpTeeZEvi&qIKa*bM8NNFHjAVN5-tGWE$R z(p>ZOxoTOT(8SC}dgl*r9cQ3IuCoM@01!+u+l6BM{KDHUlxL9`Fq^Fzw0E|%s%rNVDOOhBU78|>epV|DntEq$i^2!%&fLu(ZWfei zeD=E@Z>_)L(?yrd`u?u@0EaLfWfza%>%s6(Z2ytozJ?eo5N-zkR@O^YV!4q7$Id{uMcF@E8BcO?MId(WJ*QUlld?_^8yme zD>pr6rJWHmhoFSF1SAmzYDX3%!-*`P7$NHRPB(U9&84y-R_F5v|q16^>J8^e-J3^K>R z`(xqbNEEU*AP{e|DP>tz9y2#Wml-O+9xzJSd6x#n;DT#L{!Mv8mF=fjWX8|kbq@b1$;c$>WyTc zQ)}kOO4H#4s%qqAje%;cvxWH>5&^^Ogg(KroV9K9q=(fn3vNemRIU6zJ*^2G6*HXN zL{^$S_N~W#T`!I%s7v|)T3pW?Fd4pDK6^hpw4;li?Be3h}_aN8f99RrPw&=AI(l6ygmgWj3mxejL4JHF*AH_tG zuZ~W`eT49QpB##Qs9|K#5ow*Ba1ejj2EAuBvS<1-!$R3sGhs=yclOPSsxw5xxz1$Y z1|}9asNFh`Oi7No!;W8#WHM-*m4IHeVTigYxcB75`Oa;$!642_lH3bdqR$ zec^M`U*YW)FLcmhxo&O3m;|xCaME@)w~@Ua&M^TN)-TGJY~oQ+l9_^DmikO3E6D`u z@ar!rGnEi_27=Y8e#ni4roQs{_+81S*0yh6Te2P=!hopDT53Fc*k+XPN(Nf;fQ>u zX*wE-dZI8)PkE6P{#q5zhw-iUy{^ywokVF>u9`b-?+dph9eG6?`XVfKiU*PG(PY8s zQ=`5v|Db(c8xIY9+BkLU1M&$2vaKgx?h#cqF{g6#eHRH>ynG@pa{1mYB6Xd3^(&K$rwoeva?5icpj`4B5sq*G~2|YGn?>Rp( zJ^86EB$h1y$lPdW=TcX7`_>oyrqc}6SftL>qkO-8c;=nQ4a}Zd_SN$pTqkY;~Wm zXGA_iv`#-+Oy;v^bV5GA58DP7Yj9AOXPg6tvY%6E>!h8>^O}6Aun{v5PZ1hc5ph@Z z4MOoxFY=uMAt?h^_g6UJA#l~stP zxW|p_MO|<*Wb=pq(QH?ePiQKycCb5dQWKE=&h-Z+)lD#IKgIGO%)}OhiLNSdtTM8X zxP8?#YOzgvC+SSr8*~hNnoYp&ri6=kVAp|^Ph}5H9BXvjf>N#x;At=6j>I}ni*^aKxw`7eT~Ke z*!;>^u8|bQVm+f>w{QY7Bl0msAU2IN_Yv3~JL};k3;(QOxQ;2b^Hye{8)NBkrzcW*14h!<$W zzEA&>c!!mzhjUY4gcZy?q6ujgh6Ha<2VfFp8=yT!kPB6$Sk0f3?sn*jHa(RISwTLl zc9hz=k1J%bs0$uVO$2!zPpliKRGwS+imtG>-BZiIL_Jk!yTc`*_f1Be^{db=E&KIw z#lxY{D^n_Qow2!*RP&hu&I!{A^`4QAQc#;OQcNA=*16th`V{%*m`>q%zF|NGWOvzc zxqSNl-tvII)A6}&W<5x1GpQ_pOqBnlgu|iw>3z+qcnAdpMrBc9wI`O9hPl*D!Pva^ zNRW*Y(07M08>Y^bD&pwQ3OyHV~;;|JYI5A|Da3#)knj#A#=c-lxTlHB$=MmBGH! zbfnD*RK16ReOSX&_q#M+@q=s{vohb_z9PMBO75+c|AKxd_F-Bt%Z+&jKdUr3TK-DFh zuk@A)hAYDEM7@g7AWvUoUM9YJ3rqfQ-7hlMsumaKU!39?mI#e|+}457d?ujL;k;!8gE_HHjTpcl}N}Grqlq%+K^`MEMuvS^$1{A2It{H8pLdKjB$8kyL zt4_of5~LQ^wd*(d_Uo5^AvKiq`daXYP;PngCIR4!b=yGRVt8#m5Hic0jzfZIQ=$4O zFi9OWss}8?ntxW>eG7`e;TLH?{Hyur~bP-Hwkz263yPs(F>Uv8umcnqN2|ilB6hMRxvz)Pemvyyk zCqn-EMVQsOLo*?4{~GCHz6riEx%beiCz&I?Lq-dcAyt5?9z_3EEjX*FCIL@R6IM2k)>jqi**SRC@H8oRw@m~ zT;3{`#idUvZhaFnH{~||C7Q!^o?5p(+*S_r%wlmarBEA#(Z)7yH`Dzz>-Nj-%BKR) ze#x$r+-|3-LB#8I0?JMsSuW+Y!($KnzVK(R^ZDc!T5w;Z$HBn)!$LR9B1m>6Nz&R!>x@`j#rQ@XP z>O_IjItBy1ihs=hhT8ucoBT+ux}78Vq@n5xFngwyf0}+ww?+IUKxgYf-r)KvFX45h za%e9d>h{@mS^{hHXc~20Nwe28R{OIlx~l^uG2`xlzwx%k^*Ir=e` z#|z0O0=vR~vI`)xO?ln5j^mg#H}J)TWQvoP%v!zEceW_cZT568>dqt1;`>E9#k78Ccs*pY<^G&&mKT5$TjQTTMVNgngrK^>+E;9H-SQ=OCuD2Xf%l(T%bNp zw6J3@Mvm0D>F^pBx)QxomvxfA)fF0x=tLXdKhtt%P#Hf?#K4P+$9|ER<_=9Za)PHiOl3LL!IvBtQm z8Nw4Ry5LHJF|L5gN$hg{iCYcWN!R^C=}1RUa>zZNbEBo}9^;3BnP{?Yx>F?S#D+%Z z&W;Ns?7^U$dTfB(TelGQXjSfK5kx2h3V)L^7k9{7&iVmK2K?SQ)?Mywk&BM{>Ra+a zY=o=Z5u}HTi3jjv=6?2wSu8tygbj13`lV8(PI!#pB;3oduv>j3tyP1ZmG+AfX$n)_ z3_!mY!TGGok&1a?(_ zF%!Kw(NY*dj|R6Eo;CkzRrcTn46YZ~l+pdk%l^*J29YU9Sb8RTh=b&Y*Dk}G=MfIt zd=p7kl+g7GG5wYaMb3K8z@sJ#Fj(jVL50C|r?Z*AEGR=gXS70?qmr4%uzjnSU+8;m z-MqW^Zcbqnz<1f~kGA1gE{`z|x(nn9iQps#stqd(HaIg) zVIg%R#ZF|r+RY`L&-#Br>oN7c#CmTrb9Lw6ZzH8~nm?j)J0JG~%stzVQ|Q=y8KR9}84S0ZOtmOE3G0-JjB>PW=GpZTjSFDf zdknI8-g@T>F27!&qsoVBm}UsSS{IDp$GRhOSWdQ7wN2EsFxku=-gYBwZaZvWK9X6v ze#cKBBG|eQbrl!f`a2B(dh!0kW*#Rkmf3ICniue=I1lD=R9dpH2Exb$il|Ke5`KiY zNrUBH@ec!I(dpsz@t^6b*<)}MSVa;BEKw^^)O(n&_&}hjx^7%wCG;~7Y~ONr8}^8w zOuX*)!j<5_x%7jzy&J=K54ka=>>@APeAnk6hls?~CDy0YBE%a%D4!-z5s%N(cHQ0_ z?+0N{?!zBWqz~Jt3>xOOI#Q4+-?%{aefX2a1cZrDIEq;yE&glo4p5O@OA)rlh1U(Q zf|$EBZ2io1JEI7y#3lO0lTmLQ9t%l#s4Los4*WIH%|afE^)PrqqBoCymdX9~Aen}H zpl0IL)|)n``V*yzLOEbTlh%FNi5=o4JJ}e}VPhw&gT%NV7X^WxmYN)*=8|7qnN|mx zm7;=A8ac!$t&i>)h#EB83odjtC|_hu_IyFuaksU!D0)w_S?p=vo35D>t>@d7XS%dS zNPQVf1UxHiF4n=!&a)18KZJB@ooLEb<>SB;s}8*wWCTwkygX^f#6Au^pQ|S9@L8M) z5aXj-|23ka=Ky1e`z||P3I?OYOSL5W?i;Prg=#VS!M`pAga{}5=AJ0aoAVEEogQX4 z4%jQ2Y0&Y32swx|V0T{*i^f$pfQIsDng$|Y-1sRrB5jmd0K+N@Gal*r@F%OOq?PN* z^L5x)dc8UN)fOKKW^%h>*-L(t%O)nPor|+CA+Z2yGErCZ5$Icf8Q?7#fN5LOthmso zKCCU=3U{^@4O@h87BAKXKG@x0OjMdBL1{|2>$1mDkWd6nN~5C1YnFfH(FC{v%`OKq z!Xx!RYzp&@JlcBBXRtG{$j%FPBFWGUPxMBv_DDvns#k#pk|+n|d_M0wnVz+O7g6VH zK7C#Gdj581B4d!0BIFqm(kLFbJMuIORY9&J!JOV`LZ@Cj;Ea6v`P7>cq~G-EEM3q^ zk2#bK)kzU?wk!Zitz-Y&uy*7>1mN2N64pC1@KEhdicw=(c#dbTDiGR?g2?N2>Nb#VL~LL-itVf@y-5x!|Y z9vn?Vtzr-I?H&1FjJ|z+j?cy*K3yx8P`TJ3@~&ER!aku6H2mGdER{q(z$>45 z#&s_~g}+QzakX)Zs{ z9}pB$Sy{z3@-}WGE!WOBQ0B3kq69DloRDt`{Mn^dC?`);36abTk~nEW2^fg6f=|&1 zz6YJg*v7SY?m{^>u|L*M5I*lKn;GZdg`YT2f2-vrKl~(m_o?IL!$YB_B46Hsy)h7P zH&Ep1IU(VV_z`9sklS&kmy-fs$H`Q_`7Wn*6E{6IEHqU9yi-ndt#c z5xZgTEWZdNK(;s8*4ZrD>jQ53tFFCWbx-sok}$=D^vA;;PNtuTEMtgy-vf~U>ymUr z+F(9#JKj)T2(6%U@0}6>#w{Q~UVt-p$BqzuItWBJLA+!1btEj3eRtB88S_d9uO?$2 z${0)Uo!+`L57BTiEe#~}PWLlXTLXrAlU?%H{JOuQO_zC6y6tLiE5~pm&e8$Yb1l|6<%nAnMaoC<4I;XA$9%?5gNEw;S$wqNBES=*RR$~K z+wKQwj$)MDW-g^HC%J6`!^LL5v55Nn2)ZZ8QIhv5yW!%#Kwq3@QH1HMCc#}2u-$?<^D3fL$ z4M6h8(0Kj&>VX+rCkdcRp*&b>M~@*K&!67`L_pnnn#@^xm0KNxEHozog}UhD6V$b7ciU8Kp36+PzcnFOV(# zmVsqwu3r0eGmSZ4zc@9&Z}x94%s(^lH-X^KQ#kIUH?JG_6@ttGh8kO7@bb(Q9tn#;Y>|bo6j*rn*?}XvP+b!a%rL@DkC5uK>`^^sQLW)|9r6 zH;0MdU6;T7Fe${{{N%q~Lfi^M2Vm0q2#_ez#4l z?eW5LaxRamg5gpL59)Ef&AqvLdgl)ls`9jC4v<{0V=beDA8MswTk1ob?5nsY$Z_lXRgHSlQYrbN(DmTowO(#QKgpY0or&4pv=Coofq01 z&HWz7rY`*$pUG5o2Vga4Da}+J&bd>bcsV_%y3`d$kXFGeAC!0zR)h zL`VhXWR0@!h%>5oz>&6p6B7NTDCAm@9hTRuL&+kZFa1R7Z2N0uFMe#^opD7O5c-Qj z_i7T`#|BsmN&sd&5K8%pQGmt^?xlKH#)SAp)H0D)#93sQqC|2MB}V#=aKymuZl2SC@FEcr!p{aOz(9VM_e+bl0R9^YrJ{)6^gE z$iSpci_pQm9Kw*MU1H#diw-uvzO>I!9Pxb!@3EdQ_{`|K`HA)uwG1XBz;J)WIA5Ww zPHmt+VQ_J{y0Qx>IxFyD9s?_L6_&BO06&_>=S`}R)MGp&fpT{O{R_o4!fW^nB0#fu z#5qU7YTfx~rGii6$YP5|o^L{UZBedyyFjRZPyTXz2q{5^hqsnv{?orWA*3!+<)-(G zGCUGt?UVDr3A#U@5R94OW=?0ZW>jtkY zmlLNx%QnqkiAe#UoEx}?l>2p-^4Dpww-MCauqT0)IZ@+yXS^_(MfE3E23HHA#9*OO zV;#ly2?xG_Di+!-pi||2_l67q(c-R(QIx1+%@Voy zbvHP*h1nGz{qu!s*K3dX&L5KzP8?|U-#f#(do3oCN=+1XpAe7o&ZLL}T4+Y>uIIvL z!iK!_qp0FH8SM%ySE}DL)jKiEY;GQ|x5@*;#=aBB4fxyTMf4$2P*uU!O}&1$N?Or+ zMNkUASI3IS`d0@)8fdh6x|#EdPU*wu_QY zZ5l|`Ff}#1Qh9C&mo2}FqZlUTn7q3y(B(Q25VDXo4(TR`%pxUA^v$}Rsa-$eZet1g zd-5)D(?$zOsqs7Bega(V4PpEyL+Iz+jhK^G_k9S6=&`q+kwLM&4+_5jg_i|9N92oA zy?!Ft#PS(gwpjrQTe>$tIL8d;eO2hRH#?>G^AW}1&w9coM&$YM zXI#XbMCoaiqvGd*KOPS#2gvxWvktfRe-&J}hstG=cSQ{j15=du9s6|fve+-F$t8DU z0oTQrKxypurcAk5VyrW$f&%GIDUzjzj1HSBli51z1k>a-8yGiy&Z+EM5 zTCRxJ?cSV+Z0Wmp8ZkfQPrNENj!HULq|n&>MD~Uxa)33!BNIlfG+hm1u5qcho_XKU zSo*+GWtrWm0sM(i4i~R#mT7(N@qUj?Uor_DFim6kgRpq(DL%APyfE1V5w(2PHyRRq zj<*Tu#R?uU4EMH&CH~^}P;PfO;Qe9H6Qs9>U+m33_(*2JHxx#c#h9Ftug_oysM*h2B6;`yVuA zA4M!jMN^v6<9h6?#@){3seKroFK5WgVlZUL`=R<>p3z!WuTs8n>s!_jRn5FpI_Ur! zT){_+cenF=6G{%YdrGEP!Z$0ajsx}3^;wUt+x{aV?n-#rS(he8EBKrX!%f|BwI@rQ zCQ6NJJ$U$sDzzapP>RqDc@vIkyFw1RRt<|`AQb|a;3{`+MNh6RrbmdVo1h;&3$p76 zHnkxt8X-C1c)kxhcf7E;C=ueq#y6!dt;$~o7=bh|-WhuPffP88VcKHf%-=RFfi=^5 z#wFWfhr;v_Djxu-kK#@Z8uO4h%6-i%Wh!fZ_{~qX58e0Y>4x}}=?Ug(c*wuIKf`w? z33}aKa(B8HPl_dJ>9z1v!OpG(^T-Nq9FJZZ+m#kx1)4Cr)o=^(`sF~FT+IbLQ=hoO zl5bAscg$A&A|z)7xpAI?LZIgt7hkj$N^A#`oVQ2g5g(v#Ro%o#i#ShfczNSGbv*cI ziGGFj>=S}F={nZRv%^t4wST`r6P^C3IW#;K`t0(ly#oy#jP28mhBdrG+(I)^Yz!+} zgLxiBQOdICWWo2V1B| zv0p3sXSGD)yeCQzp`;T(mzvx}!qR!uwaBEx*8kHco|>@5I*g#SHg0h&Y_<>WD&;BQ z9Fcv_G%%*^(YDsn4qk|6PRv(K!%4<_w#4snNSC$Wwq_DgjVa`zMbTsQI<>3>2;90t zW9gR_$=^1{oK0e9#8eZecVayk$=H5t!yN~sXWe8O)Nvf_4lK4bMIjuX(F z=N#g)S54&AXFDiS_o|6K0)~HyNwa!biL1 z10wk_?>zBK@yWm(cJYT28^ZYk(w;c2pl9N24$oV!Z*I)GKhf4%Z49QnD@p{klj1ND zFInVk6*}FFdj14gY8EZ3Wyx=IOqN40<%9LSo3vPkcd$fRCR&!xdK|A5G{=v|wAx{&@~dX{W+YXlTDzxt|Vcv*eMo}uUTT*lI{GG!{X%KzYUD zivG~@$JFP!kCoYL3SF-(A`kna%k!YP#^ZqPXxkd_A;`2}?hvqLC#KNyez%&f+~=~udVRGI-6n19xsB;CL%$c z_j(#QZp*z!Ghb`_x*S_e(0PX;EKb`pT|DpvX1hJ1u&(^v>?lF>L;%oJQUO^Qhf=xY zdg9pS^v0P^tnm9ixrj?R(ER3+;i|R%%Onm0qT1A2b~3uTpJ+$qB$mgF(;C#!?HI0M`rr0DN-(4;7ny0h@(0RZKA=<6NHSsN`MhD#BSa)9#x? zH~7195$+2w-n9i+ec5o(H;GhV{CR+C-_Z2M7S`k?C4BI0#*Z9%orKr+gBUp~PHOW1 ze{LIH`)Hwh-fBx`Vba*2>r9W&1IWx@(%GG#>*i_{fr+EOxU`BHC@H2?Xxdn20}|>X zzv8ekg_L(-%GTrwz#}MFj)%RCkbC;)g9&U(Rm??R^ZpcEVD_y%qbQAGXDd z*AGz)2bXDsl^i-MTy4g;D%IS+6bAYj)j5UYPHXFen9|?kd}60KNa@fb5oMTk-N=k% z)$P)%#84;0bvcQdAcb(sC?m@c`MHg86DKDNdGo{mjLuhDl-T(AtT_XQaW7~e=WKj} z-$A`a$f8EgKg=$ZTZ&sL{y{aP_n#oYl3EJSYy|7`zA5P zjmX-nkKT6PQ+kZXnsShS%+7m}`>TOMe^U4JUJG-jbE%7ss1BmB8YL+t8>YJx!0x_1 zYRQ&K?ft}G>)tb8ggw`q{l7(0f9H8XEU`mvw?8lZ5qg^bj`e=!`+Z@**@GQJF+CfE zR>BYc4v$Xc@4D?C{#in!KO(oZ6wBe@@B01kk@AKdk&l#rQair#KglHU-~|#QAtC*N z(*Wx_yHP*d$Rg>VS1B~n7DR%tp6_}5JO24|7guN$fz<8BS30Ex_h_7{E)pA)la;Bd zMuH(ZVFD-G0lw8Aqa#9I*u_BAq;g}9&HMt^u<@A5rN!A3ZCTh_;=!$sHwr1eJwCyKpAAU$|M_A>3nSnw9*Usq|rME~b z;0we0=t)@DC(ug9a3X?`w|&H--uEmPM6jfrdySmVxh8+%A%ctyOl}HslH?B%nTdl) zPcLKNyPD^C{bJOSSZtl+|Jc%WBM}^K549&*T=i-x?r%|605Qa2-e^zGwu=CG@1`<> zX!QEPcH-XA!r$4#zXrm8`U|+FR*@WbNaWu#|NrBA{`XTx@#ddDefc5k0W^aDkA`m) zz5swd0CNf$NdHd_=0A7v-ycw9p|!QO0k(8mZ_3F3biu#-^}jxrWk&+y4(i5->ox!T zzW@45!Xrs(X$7FwYrT&WBxPWw2B9*4?up_7o}Gik(`tjFrR7yhHa6vF;Ovy&(1+=B zB*3XJ=RDb2nO=%mz6AJyt4JN2!ASDfdG_ExZ}f zYp-5L=;P+5-UHV1cy_9HgO0tsOp%e-u*kUgy|@4Aj4}d5@U{3kYc#LQxE_)AZ+RsR zd=js@@d*;gp7Sw+_YONM(*3wIL%PQ2iAO94b_PV;t_{GqEhs=rcF%ynowwRtI*n~T z@zH&oZ-RaebjBjt(Fs9P{$t4ZY8tx+a@T};q8J6MSnRu((F50TDgyEXb?1Zjk=6)) zpAj-q831_(hokWcNrP7Jp(o%yEPx*pQ0O2eG)K=8l0=G9MwlQd;xqvLkCmkt+0ReH zInuZ{OGy4tuj%?D98LuX8ut;0Ei&DI9fd#cxASB%6^xwU;H{<9Z+EwB{M}AhQUenV z=G*gBNYU^1yMK2xkMB0GZD_qd+YG+$-|mnvI1y*J?FRm&*qNBVR#Rn3TL#}*GkWecH)7b5rJj}Ycd2M1EH8s55{G}TJo4{JmQ(nQ$@MDH5LLxDDnJ%v|6DgnF zE6hAmh4Cf{RE1zSmM3Td!2w-;`P!?)QN}%$!Xz|XEuk-o;wAnRSzh(v+4UQX&*qQg z-(?pou$|nc7E8{w8`y)mbQRZuR@l`YVu8KQKkQP>4;%R{U*=aB8S~+Zbrkp3X#+G zG>9H3AuCd%x!_uo_F!O{-n&VpjPnsjXXG<#n_9=v#GGKKy-_*4{^gm@<<7A3*zec3 zGq%|ofc=xa4}`2cjlEdN_^6i8EL)zy1+Y({-JPz&w`Es}HyPKYQ%XttHhyz;mL=wY z>8=>kcB&J2xa#Ef3lBonO4fS9^I;|UR3jcpW%IT#R*{|UzrOty^Zusc=2YK)&Hr$; z3Wpp+WtVaig8RrogoNQIlnTTi7&U7WSav>1u_Uu7!Lmhvm@{X8$vgIhJjYG

q=M5C7+}r_#^}3>gsAalo5!Gg3@k@ch?uksBQ`vat&*_c{LsN3uZ3? zY0IWJkSG^}f8cWVwg)jF85UFF}n@Ct@yd?#p9)VeCD3w`Zb{9@Q2^vFeuT z*dF*@dR;Y9lB=9gI{lio94tu(ySr~W9=)3*T&=)0Y#qG_UYzwxZ+qKHLYVp!C{d1@ zg%Pp?2XGqU-}xZ$d#zQ71i29ffh^z)KVLXczg&*C^jPkA;wxkAi*%th--xDdofH*S zeSU>1dwY%2*4f#~$AWDU{DdTL<|0pEA1W#tT+7205Ev+zpTO#z#;W%+F}k;u<+TXp z)^iRswI4fcc_vOpB!+N%ES5fBGt8K#cFrMrEtc0-M7_4~B8iF4k)9K4Axj~Vrd*px z;W6UMxzrEy$56TSj=I14`Evxqo?{JcvFX1|l9DI{Al&4;4>w;C<1%Rch$h?3yG%!= z^jm!P_$Q{zdjInq5suVE69}#1LxxhU#ZbV`fDN6H?&(lQMuyW2&=gxu9r>?YvHc7U z44nEG#`3j6h&qINU|qnKu;FU2UJn7-Z;LRm!at;WU*_W81~DQQ`}EU?mn9l|>mIK5 z=3Lz>1-=jgeAo7Hs2Io9v*hvloi?H|bt6i~o=ssG(Z-cTR=T-)fDVot9#=-B)cHSr zl3*lk91ql5HV)IgZ*|=^PbU-}3*j-qYosk!Z?|*+>&?}+(BKPMLbhw=3D8(xr4%yS z1L4KxD3sJri)5M5Z4R`q2M-%^15S+`HsCm$Q`_9W3z&kQ=OuAWhVpKAdm|HKM{BGr z*R@A=80`C4&sc1a-6VjL)_Z~XI}KO;GlxeiqK_oKkM+~vp|HLrS^X;D5@%4vpVd)5 z&;`A_1(9lDk%q^RYv{mh9oO<|SvAQ@6jp&n_eH#kGOc_{P4(6UU*kanD~@vU?&zKCCyi z)uL4j#J(Wy7Nd8ZXY;tsW`044?hKNxZPg6ZDtiX#%W+PD&kE32+flw?@M4I=Hsrk|;>q4k1oeAi*)bZZZi z2~a39s5J%rrsUt)(kLZ!k6Z)ZZBa{rRT{&AXP%tw#PctWRx?dXC)KhZH!XORB|uBd z24g-qThO<)w7mzZK8QWXLTyg@nv#`v$Pg5wU!kM=$OG@l|=fL(Bb?yF*T^zgVoa6)*nSu<^grL@YWc* z)NJv}kqSBWsXFU=%p60gxA0~j8CCNGJPwbw@63m^Be)?S!#{0%@R&|tI4=EJqTjIl zg0{Saul@u(zoWkU5bQn*^G4#|Den1l|ITQ4WWCA{W?P<1ZJ~#w>MGp{ton+bxHE32 zQ|8W`E$FQafnSmqy9vSbE&3B^u&V?VF(B>!frUtD)Jo38iGA~`CP)+Tw^Vi}wapd3 z!BlG@Yk(}eVSwfY#(RNNKvYHUu8;VvUo4RX7zO>5a4x}>#?d1|s?AAEw5+=Us?8#o z78Rr3i-CM@(TzflrppiGV>R4F_F<4$_BzGFIpt=(*^Op6Jw!%7r8ht+v5%S3tX|DG z)Y+n?o$J>+1Ugy3jG`w979*mVs&?bgNnp)SdF+>v?a$zYRC{S##D@owPlhl!D)F#gCV>jlAll33SvRRz=E1|W>tT!`By%4! zUy8Te`g?O_@MW0YANBf=hsdA51HE;R7#OQwS4QE3fPz%!3tym2YQe66X2$Q>aoZd# z?BOEJgsh!}bE^yG^biBjZjI$92TW!#Vc5J2N&=cB5bU}=&bk{~?|tL`JoVXp9U97W zn8@V@^{Vx>n0x|DE^=+mu%cTjm1p@7)>@Ev3^hRphvX{2BC${f12M1wJIm$E0mSf> zTC}ezF|7L!C<#*Q9z4VxZDBv$C+JFpz1&@7g0brCXuYG8>?L5;+bV03dfW@#hN*8) zCkR3IZ!ZArovgNZDfBC1LG296z5t)1x(KV)NG0W^YFH0^g}WLc*0W2~k{%c(-p@iIL3 z0to%vwL^aupKcUI`SLe(I<7iszWu%|@)BWaM(V_scIRV%O!&jlzRs7jxUSRH`_XL# ze`3nt!1zD?^q;5E3CKxDysVavEWj$8kG#+w^12qD${k>=!6Ru9VBrn8^sdBf8>SR z^nD|u7T#jRdaYu_i(pEoRsq+&0%6WXR{iXC006Y{B2CT4KKmt{>MZuq<3OFP0KUPh znO8wjX%0DwKb`lw2g*mty>*IO-$RPW&$5`dFSha>q(kdC&?-xiP#(*N=<2$B8Bn`F^Kdh+E_$NGxjvFkAiw= z!|evqvUZA)^@Ls{P}Ts;V%?mtf3Ttno8e`nNR@GDEB0G^qph*xVhK744rwTWNsnjj z2BNR865^|ok_`Y6Q=Gj?=ZA-IwT_4i00dsG-zP|F2wgmBbQ__YgC6*K4!kKb?Z$P> zRi*Z-S##uemIWPq?ak`yRY0 z2gAj`Mc8(bMpy%|a^>qrTbPI#IY8I{LpJ#E!W+I%kZU^*api>AfD?;TQ0Hk#xK} zp@ROki#lbbUDv2Uzmuj)f8vR93 z+*DH1Ky&_ApXRv*JEL}0xYcBhSZIwxB`?>s%Imj1lziWx2aJBi@7W$4WoYHQI3kSZ z>~SP@6!_L+e71E${Lu*v0;_-D$7M?4Ii%L-YDJ%CAkRBwC+td7Ib82$ZjD<%S?Nv- zfx2%XymuD)z{+9p9Zdpr-#lcN!yxMa(qX@p5TJ7A>Y_-Ux5O#66D?B!Qk}`^+uAuG zpXJa#VyXci5>Ih(b*&bd2O>^nl?t7s*~)S3U5aKZmV@s^mw<6t-su|mJqAucq_NKz^4@86^&NFcBzsJ|4 z7>9dyN~cZI@sJ<6%gx!2l?CF$SUnKg4eKPe3JlCDdk0IdSwQtwecO~BEWmcP+H_1n_n~rTWy%Kd$ zQWEz90`2EU0fpibg z-^c)2qq`aYDg%#Ryed7-@kc9Itv*$e(Y=dS&t0CTGTfH%q{VIYM6cBI^Lg;a zyfRXh!$3I?@@?Vuk26=0*Ad_EIs_e(tY{K7mr{}=0J(yN9!*j&h+UV__)Jj+@yOxK z6`TZnV|Pr=0``yv67tkCJJ%OS%V^La<^euDwy~;b2T`Y<7i4P}N)&tQyZw^|1gxQUCa~ohC6hBHa2E*yz^9@LgES#T|kb!oEh4BdIm(K#vfMd5l z;gz?o#p(#^n~et;SCHHc5$X5o{u{E7Zb2qsF=9*`Fro;2yb=q5#TCtG7jZ*=UBZlJ z`gfNy*^mPzzr8O_8oa*ef>+73WgA!AhqGK`N=y6c)bys4Ke``HFE{7WGF67-LMSWP zZr&EMs6wi3<`U{EL0ywL`#M%8y94u=KYzaMYlGN+OYdh5AExed;uwn5_; zftL-Q$3JK2jIeQm6U;N)jYE2|k#hRJu=h6I7=&%tjYt{+%&#md8%g@I_opebg@P{K z^{pM-Z1RaL*%MsenI9$1awbEZEB42YTQpa4ZF$!BG zdOtKVlBpBp_num0wz5j=d(g#~yXl%1J}XDi!1~y@tGZf~Hd}B&cfMEfhFf1Uw_Hy` zq!%_)+Sd`^b=+UoftR!D*GfKtsDGtLFAxy2`UAuL2UVuOIF&P z=Q-@)rQ5Q1si&rfHBOa^H`k!<E@>9cl z6JdJPCt#(NuU{2SUP%VR(f5~)<^;QxR=cmKlUq&4XQf`KhaRrIFU0Z~V3ypjzG}>C z#7!(b*EL4R76eUr>Y*2p&_!Z{wU!rE!9*skVTpw?-o>tCBShRgtc+?5P=c`iALNf@ z!Y?$MzEtZ>SApd`g!?aCa*NJJ4vQ<_U@Ushu6!QOc9Y0Glyo!X0qp-+ulqkAlx~V4 zfaB|Gg^$;Gj2#_Lt-r?3Fb$7}l&V+ST@1miPcE7{CFRQ|5(=+%(V;;WUK<;aHiyik z3vN!Z+_D@&9`!>f1zwnH?^3}!h>#$$^Wu@r@|U&-1AL}uE?b@CT_Y-*r8>1iQqMqh)GIQf!QzB*R4+a_$Z z@z#Xw^w&|{;X;7+@`$rucdsz))7%GAg|*ym<%3t|apuuR!01>snBsOPYYZqPKM+$5i5Lu{yrQ0|k5(29GrA1!V zpTF0()80O%8+_G42`*{D{y@Ls)Uoie!>ug?zv8#p!i&OFb&lj-Msi{GrUte@{%*}T&!oG}FUDe;6PzV9-o1!fSVW*9>)Ao~MfAnaN+CJv?1wB}| z+P{_PfKMNh+8(aA-$1i=*07t!dgY(l*-cRte#<%p`K zQF{{nH0kvpsJS3oyCSLH8MGy7I&au4DXjd$L|4Y;btrpN(h|ERQ1(8waLnRpbs{WF zF?VVBhqpBV%!X~F!BljZZ{c<=pPP@e9gd!Z(zK5R5>9t7jKu1dAh%h?XScJ5(d?@z=Nmd1kZHw`wtBWC?eTrW==Vxg- zAEH;pXE#aHgH;E&e^SY4I%EoEKpu)dXat27pUY7kij@Q)AQ#tmJTZzsNc*KmsTc;r zdEYjvqPf>sKMZfzt78pl+LK4~uX$0T;u>1xqD0{!RuO;=vgy^nqv}`2YBZn(`qDn} z79I;!aARCpNxFkXt3LB8l-!NfMO-GiMXH4qhJJ253izf`>40+a=C!D9!?nz2zEJoC zTe8WQoC_js>BS2)o3p3I3@7_kV6_A$BS~$EF7tq5=}A3*=d8mlXW3oR_?*MM%I(!L zn_cI*2E@{g^dSgOuvJHqC5bz&fspWAyB2we&Uk-5{VQ@^9vvNP9 z7zw|3OwO})8tIz_U4>QX?r>?=tI;4z?HrrD*ZFc+y0@uhV-AA;1`1 z&*{Ot$uZ{rFyIB=eG}eh6?k~qc@ha~=g& z5dS1vlrW7ItWJ{Vc68dQlB!x8(96tz!L!u>`;^5zE+5t8znWv_s5#9-c$DWZdb^H~ zrA_pHx4wJ)?D4cjbJ{mDKBB>Oe0$fZ4o1wdv~|$0OAs*PyqDO zDuq#oxq*(5MK@RKg`=;@E_-Q4A?F2Cd=E$!-_4q`Kq>8|8tHSBEAFi}7*zxOj2V*f zKEfy*PnzGm@q9n_g-Sqq`(^469j$4nP3CQ0t9a$zFYWtk&@(M0einn$mxuj+iyeJ} z$cu(Q^HjGDzu;`)zrL_Pa8+IH2^<4o$~AHug*W_w(**bg9hJNtaWN!KKSXP_I(a+b zCMAkiOOogCR6--@)pWfKeRn)F{l_JufZYQoCvLKbKIfJ;f-ZY8SRIN(!LM%*HhyL= z0W#2T7*hb31D=P6ThD&-JE@!K66QM002QKX-Eu(GXSqlyZqv!5Rp$(l`o zwseyj+8LTk1PCu-lHZpo0%W&U;5M9V%~gy2w4hbHb-Bj2n9XkhwMaz>?I88>$dmkB z$(x`;qnN%P5Rp-C*WAbGp*Nf!x44GpD_0LPYXpLWK9}d-n$oVCc^OjZnXsOxOkR>s zexYyh1~Avf21>RTxGiJIVgkmJXp6c@YS2`<)^|3txbripe~13h^?7WF5^CYjq#m=# zx(S_kk<^YK%Awv4?QJVtbb_(yi$ZsanBcpb|XbQZ%r7l|Gc|l-Ko3G1j*H6y`JaGAVD{Q*ZWnw(-VBA)2SLuYTc+tC478$VRDa< z^{;DQT5ct(Rgae=iTz3tvkG|qh?0%*{k{-$9J3j2)#8)T>(=#nB8xr>wV&8*=eIW= z?&M3`8N~!$^|q%k9wndNLRrLTd4A}tuX$fJQe5*$z5uVZV5d%zm7g{6Sn9~EUrU`E zqK)0mU%YN;5W-!7d_7p@)$<8#-cJy;VKV~P78xDJdov&`7UOidck_-^c3KVC?5@Pm z*TfLQ!L(mJbELP z89m9*+20rP^XB9M<_5#kmh;yu;w4*nmQFfZZPJ0cjegbMC@_PC(V)U{+8pA~ZM8aO zBGc%|$ZY7a%vLNq+=N{YE1H5Lys6?X&{Z_`(;ny_1-SD3GVo#5&d%gi^kXIZxv*-L zBn&KU-h3-c`TURwfrP44&$UDb6_C&l!afKTguPO}#u6ti@53YMJ=&N{Mq2fL?e~t_ zl>Do=aCcu6ENM)S{$7PMP_|l&uoFj|oO0}lQN{7^db6np62?`E>Hx<2U%V4Vggdm8 zQwNo0Rer#+oL?ck%v{VQA|Q5=TKB zk@|{M*X!E2jngK+I=Ak{Xa0)n-P+ZKvrV4!YzJq7tDWsrGsacW(-Z^2(t%MKm-Q62 z{q;As<00L<8Lp(bkrF+D6S%E#PPm$cVy6IQ4+$$^A*`|Fe8&4MpebtJUm3+*G;BR1iGwRJt{okhyas3)pJ9epT_Z<0Wj~jRGUt_`%w0 zN7IEHSAVM^?JtsFxPtT@wVcrG)Yp{ZIJcyfUf(s794Ei|7H=MX2oEj9xq19HbTQW& zJWG|v+)z!q(5n7yX=MS6-lE?`rhytI{*2ebikgM1MRDeczl2+5S-|-PdZA4TM;h1Z z_tABN+Gzckx#aYcWx}8cn6?^hrd%rk*0GO49{Dw|zSEzE!xOX4`2#I>rHo1vTbF-? zL0^{q(=jZ|1}>+9wOnR>Fy~!^9)t2>y774DE%f8!?h_UF$(QjX_4ciVnVSmEN?v3F z4hC=z3BUnLv9sncf)}7fhyhOF3tupd1 z6@(ANK)6ePi@9z9BS4gsc-2}bm8R8nReSEY89=o zE^HOC)JOdKJU%*HMZ+Hm9+&<#03%@|rSs#FHmOTXiN;hCY?+54j1!I8S?075e`Q=e zx7a1yp0{QyG;iX4a6S=G#xZNNIDi}j-&9Jf%FT>USfHTv%Y3}3K*p^`gY(G%Q&;qfeuzoaT zl`Ki^LWod}3I~MMmG07aC*{&W`^KW}lVs)V4ITTaqK98a9Q#+y!Vlv`ixLOoQMr)8 z;PdGhAxRw61ze{Ou5U7dgFq(77UOU_YO`=j-(pwc0H$)HRZQsxks<_lS#NGVF9%_F zJ7eih%ZViWF^)uU>)r-yGMEqr7<=@~E&5$J-!wal(Z$SnnI$V2rbW7$9C1?Hz7)67 zFH=95TqJ$B1LR^`TY~XFB2iiAcjo#=J8|OcCpkPsP^;D~!6D?r-tt?c?$WN-B^(`` zRcKSB+hWEue3{i3J3640huvV40X@JeySU|Dr$~q&C1Br=P6m4f=($GUj^Ox_)z%&? z02N@|ZM^dHw28K@Y5gDzlv)iYmR5M9@9Sx|2iJ;5chaA6^rlk>J`Dxw{|UWhvF@Wb zvQd7zKVjTo75hvs#Hg~dV~pEpqiTDwu%RpM+Zm>I!N%_>#-!j6Tg6K|tMnv#Plr}- zxs&ClZt>dN>5FGIQ=5I6-+wrGx^$3kxi8yidlq8C=K5%+T=yEpP3TMbE7I5$c0RFc z)$d}li?V9&0p>usCD-fv)J zK$00~e5?ua`hi@i&w?tlSzO-{b*utuQhhX|S$Spy&(o*|jLJcS_T^JJhygyGlwAiX*68u8krz!5e<_(~x`x9oV=&;(@i?Xv9PK zo!1I31#=v)ItCC0)|2iW6W?HhH%A;Kevy6h{kMA;_lwY=_X+wivk+qDxNVP%SpM-j|^jtAHz}-A=T5fI@J+($5&YV;()UDQannE!5zro0ZcczL7*3|{ zx6B)+W%08Yn~ZY&?z_Wn0=vGNN0s;C6sh6u5_;*o=WRn19!_ylIi8dwfJNQf7G*%! z4+h=R_g|g1XZ1Y5t^Ndl0!5qw=+coZc=Qiw&mBTe^~Pe=*n73EX#h8R_0;j|6~cC` z^ztFmU*r64dsCBl#lB~2B*Mny>n`QEGN63BE=){JfmxTCgb35y7IGSyQ_{nhBNg

;4u3X5k0X^h(#XbB#_OO_kl)vTC_#zy0<$o;(GDHg__10+@QcAeyx9T-?Xv z{dngT`|K@m%+>*{jaH2l=lI6+Vt*K5+P{&Ic^3#? zdDxWMuREni+cq*H{L@_U*1Sm}xMndmMw<|()ZvP9NMmvfv4Le3clrlM^;U0PhS^q$ z6d!EsyQfW_^`H-kelH5vNq=tbniu@^cCt*ui;yR#EGsOz&VR6JsndBl&+5a*OQZ}dL&sUa+8 zK&;gJV9#mSPFPoTfO|Rc(7r3ZMRD9BqaEgXB49zu<(fY1?y;{NM_{+;jA1|R$)>Hr z@HV7sinL7O95O?*1aBobGCX`b=*ZDAaQ05{(NwK6n~lzUjKb<6oOGmzMHgX@kPQR8 zgMNHGpbQZQ2Y!x1FFk^!6;7PAVC_9En5jQJLW;R8ZgQpx#`P%8zJ6kyu$_b1BTS1) zU2*K_=&~WgsWMPDhJplIz~WjRZ|5SS^2Jx5?<(mcua}bKOYa;iXP=vCMT%QSVewYGf_#T> zyQ{XyrQ{?EA1Cv^di%BaMexng{0DFK7lJwSoxVh|?$Ri0c@zwRO^_$VV zUu0)XY=~b4>|US0Lmf%B8|c0L!a!f_VSgJNxs-N4;VG&;s}wcv@wK znjeHvjDK>-sBOR`4Z;ye5Q>|q5Cp7aixt1>U$!fwWR*1Mv#?@R2W@qP@t;C<6 zR}gN#x2QD7qP(_py0-6Y_x>g)5c0^&n@u<|oqp|LA$V>+c3MBaKNbBA9`sm9YeFvQ zX8sEtyO@c!xId7b;e;qVmtV)y($lxI#g{jtfP{B5+$V15`N|CN9s0I>ux24ZC_(B0vvigp__#yvS`Oe1kv5`a@AA^AmFN<}EWX-jI(F>2_Vi?)Q(|RFZ!5_V_`)OXdd2u-sZ9=Fnjk z+(S3mOHjpB>QKRB=Do|5xEbj$~~PawY7yRL&c_W^4P`#YH-ZX{=(YoℑBkQ@ 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

w0 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

4&(IThpXtVH-cVlh zFHsiXYb}1Xs2e2e$J54gpaWfrSPAPiBs`|J@eB0n&uNnTrdT=my zpQ=S^Aqdywalv6OBDn23XHqP^ZdH+XwZC%*S83@^7Cbd|TbZ^aR83%yDy8Uy)NO+Qg)TOzwi~JUeLdp7C`5%K!|D`iC&A@-9?iVnFUgdhg zL)ll>ZP|0UZx!g13WLX26_(XNmP%}WCI=pgd?w2fIvkV&{ zz!^ygPn=gE9zuT6*Az9H`L2GFn-sbJ15Ne=Aq=iW^NrNeACeFuDElOY=3ilsHIiVv zepOtPPfc>w0Ms}Kxy})PIspywU6@m^fJ5M`IsY?&~}|uL_Yz^X@kIp0Y`c* zb_u#s%?J)$t*+lzvXq-Nn`)9gCyOI#`42P_U$ER%#Lt}}_2G+E{V}tNUDhD~I*m69 zt*#Zbk9SDu*@}11w(6};O6(Yr%(r^D3O@XT|8Ie^14WQ`pF(>5780~B6tvUwwr~`x zzJ1Go&r{g<&^&xC2$MwxSA<&6BCCG9+*%_-)By94TT(W1h+tYC+#l|QUd;$#p6$>X z*>6{;u6lZ~?>%HZTKkW7^?WPdvKvwWK3Y}Y|8$E-X8862Yq^m+3K|tr&9&VNE{GiJ z>g3ptg_Y!f8JOjP6#TUv*t+|@LQ$MA2uu^7=14s;%b^^2cCO&|7HgEcds1*LGso78 zn}nLZa=<|V^`vXG@_hBwfdKO3?U5!*Qik;k0iY}~!cy-=O~4D2QA>Qh$<*eWhe2;8 ztMmVbKjhZY!c=@<*D}(0PQ-*_xF5&iAF8Vp65?PCZjI9Zcs`2k!g)hbWeUuW8zn@jZg(I_K9C0P=tDxqn@~akNnTsyRLoWWokm2qMISVhfz~ zsTaqpnwO?Vc`Ieg+IbcP;f(@z^w#IMP5%yY1&{$EA&8`p65F=-P67>EgvwO6KgSGC zgczhdC%n<`(fcWPe9|9Xt0NtF)hkm-v@uo-MfhQ5Tzzl{^)iT+n0o)WFj(C$5mSLF z#)%`}uL9p((!cG~dw3BY*i$!R7Vl4j!FyXzQwtnoG>A9Goau)n89SuE z;{Y-Tw2C)&kT2^ZdOHQKjoK7EeicMr;_FN%8_?o{188HfTmuf5S*owTET46&#?%)g z89~{r2YE`z-n83HDJ%v`Xx|yh@pIg09=kpoa40+@hs5jSCZ*<3!T z-|=>KIS4o$w^MN`rD`E2UyP~-6ISImKR%HF7a&z&E1E(sT~` zjLJ~dkXsd6zD^w6=B?!4s(ZX|b85){h7t4kp0NZ|RQ@sn5x#zWPKo|*W)-|zT@Bs_ z56+P>#=EWT@?6_DH}g?(7!5czgyDZ9Bkv@|&c*4;ls@nb))6;!Ql5JIy8ic+kIg*! zSW*J&F+;3OJ^L=Qr>eQy&wDoEH?h)FiiOY}$UU<%@O&v-@=(2KHA5~YVqPEY%18;E z$O=1=1dHy9*bzgd*YUdfWyo&5`xxzlT8k)I3Jxh@++Rx0OR}5lnu20;Ksp1Xaa1svvIw_AbOeJ2ykIXktqt=FDCO~IdKGlQrDxbw+37S@W!B^_HOC8mD1?)u{BO-bH~%Dav4I3?<^+eD&*jDuz_K@7-8icFZ35~< zX_&>G#V!}FnKxVqo*Y&(|1}wSUpRl=?|tGa(rQHDXkgLMv8eVDg7_uvh6 z1On|TZhU_GzfR>Nz;=#CyyoNmo{C8Hz9h(M2RttrfFx1l+W=+4(z{SRR zK1Kn455mZ+`RQj0+LNhE9heJP#3xQ*sIt%gqN&QcXdiWk=}W*J_lGg~U!szxEyb09VPOF#bDc~y5wqChJWu)U{;Aq_EK2rGfDRVdup-Gty~v?IEr6GYU)NJlbb zC2c5cyC#lBe7bPi1IQv6yRU$zr8^g^&P?AuOX|Yau4GvwE@V8xGYghZEiymHuw9;w&iL{KmXnS6>wlZ^Ra%@gk&3EW+GLqj zna=z9tq0Avl0GFzi=kdmDc?N08?i*P^6oD-9OEY{O3Oc7NMAvL!r_SCnZqWXo#qIM zMD;Vn?rFWNfrxzA*t%6}mSfC-3bT%|sg58}9akaK%*QYBM@5o~#>h!z%N!>*CKYAc zvN?>ZrkyhFO8w zGU9BG?6$u*TC@TOA7M>4?>s^(OZYOLVTY>-1#5=12hRhGJ0}yDpX_tdn*Wcc^YDlI zf&X|&Dj|upg^ZF_Uwd37sf47WjH^^+?|JS*R>qNWm2pX>5@+SiJNxXj_q?-@*x1-Jbr(~XFT4o*X#M5cLI~O3Rc3tNeQA5n78o8<**MytyYKRr}ifggLGSQRgt(=+FWLAiW!P`10HCU>R0gW)BpxAtsV0q3t$ z@8OGDZQkjO;bvrysqQ9)&eZSp{Dys*4#Y*1NKoKBsdk0qw@d)^aB7njjA6&sS&;gx z34QdXGIi@GBRYfVdrm$M-qj(kj>p}%h7de_j52^q?T#a3y}K?JE#9|5=`3uRtiBK0^Wp&k&`n z*=e6pEusBV@E@RU$%DTxYR@T;C5HoL0`Z`?v>(%IMu4UFLym!)TQjzph{uZXrMLuK z0nBirguV&7y=XNfo!AX-=LLZj-MduajyGRcf5o}%hW!5a{ei1Ey%zpKEGt6G}!Var)<7}z86Lu~O{MLJdfB%}*_s?q;VY;xZ z;cspuzw?bGN=wg~F^AzJa;g8?X7jYsjp;{0*sJ{mR6#_g&H5Rbr$nI>_}HlvOR;X* zws@tW$2}6GdeYmbH~!1n*IpNeo!Y!iQTXG2IMj%2v%uO=!`uJW9jQ+l{J5m~TDP9U z1mBBKDidifK}i6@#I|{@rkb`I#Eugx1gri_CmV#m2W!%VXY=2wnATry;fkn{lNX_> z++It0mt>Vn(S}T@Ag?PJLb-9PX@Y+#!9ERnA+K+5e6amkV7&gC&qxHp%uliXl4SHz z@YL8YV4te;-@=E?kas~k{BnqiiS};fojtO(0HbSf#de<)G`vL{%CyISRl|SVoRDD3 z<{cr!t?H{BL&4{uL2Z0A#cOg)Qai}MHpW?yv8j3JLugId&294iDIt75gC+NGxBH}` zL9Okvh}km4zohj0tRAH3);HkM!fHlp<(bof%t(4$g9@TOe|S!ZC7iPw*YP6nI+8Kg zuD(~sS5t+N7N9n(6F!c}ea0H$4mvm9j(hK=P>_*ASU6;i*hJo(47-a^mB{*-q zfLv7%U^%1j)a$7y9>yk`8B$93UFvp@A3rlXTLNvo%L?8v3S)S$a_526>8mxY62v!* z1M07lR77ibKU);%P$D6KN3F{_{fOwd8HX8oFv)T$=Anjmqdmxa1U8#Ywb_o4jzSvt zNey{*aM-rrfE8YIz|D!F=7V)0q2LJP7i@Xo0pF?ssATH00p-{CV8R+fqCG!8cucy> zep-{J{}Iy<>Wix~sx11o$(mSB%XzPa@tp438#r>7llHzFUfInGm7J38^T7I^r>)nk zQZE74uS)yHHSb$>GL%c6FFcIf{j72XPH6N-_B>i@iW64Fjw#le6d&S+**O@`u{*|l z@YCrC3xnfTV^DfxWnPjDDvAW=OQmIBxq zIJVmkoK)EFVq~hs#K>5L>q?shmbQ#1a|gQS5RMCT6-YEmB_n?I;zbEYkLl65;%A$r zDF*8WQZ^$77i4yy=f04vpF4Mk2At4S*^N8Kg(ApoO8y}RwHk7LcDtEN*L)8eRQ=lj z{ddSH%O{5B>5e{f0s7Qo?$iZuhWyR>Z^rG6R(0#vZ_vMukEFjy@W}@wQB#OH7FxY# zj=cubpVQdNidfs34h2o!6?paM=3s&laSvrQXe7G@iihlvr(pxXw0M$$dM@e>5?_CC zF%7o-|J2!82Ka@_UQoZinr-G)0CKylxArmJ)}c`>EQ3oQdwx2WJtU@6XM?L7WjYw= zhi*j(z{*|z&gg)>Te)KbjSckqpKPrjTuX{awn>S@+7PHx`^`Z0Kw=3xC%mP|={xL8 zQbM2%t`{}EfMyrW)$FL{F0hm_)rH_Iib3SWTuB*XtzYYGcK3`fa>IsP*}ogrtQhwt zlrP+LB)&c`oTNAXFwtnJm@x^jF4h4Tgb#d7cT8RLU)^FKq71g^*Z#|k_xw0 zGeL!It0eJYO^JWdr+gDbvWN|yW6bPt#zfd5M~$m4 zPQiEcYg4_~-!5Eta(!s=Xe!jc%NZlSy`g)^r0Yfu<(+>(LI^{1B=`77n;=Gc!eDn7 zsN{)_QnD?bhZ^Itw*)xv7`LGK|15xd$E;Z(`{6VX(>5*!TO))ty7?#d!Z9nKNeF& zlzlu*D~AavWtXw^9L|*IGQE^D6QC`t?8vZ>XTuHABUa}}Q(v%%w>cB+rIXK9o$#y0 zk0gMO?UQ+OP;rfwgOg_BZmu`Uv?bJ@IyaZ(l8{+Rp}AGg_`LviY)D95Xk64mMb%9W zwgGD=_w=`D^snV+h<2uk7$qxH3FtlvGfcosDz04s-Rwar;*b|)-t9%*;s5+^^3W(| zM@#4fpMzi~bwFnH-T|dYV7*Lhd^{z!?Y0f{Y|k#B+|^PK!ckNS^BjE(HebpscmuR7 zQ8U;~4^#2G^m>X8T>}SGJ_EBDubx}m$gk(oRP(k48y;kGM4nS_sS&v*kwrWJhJePv!9 zdFL);a!UTSy&!@7RJ7~8gi}oJf*z5s+imix2TplaQs#5d{@57TCduh7FUr)KmoSp) zbPP#Q^F&l&Jg?-}d{f8nIqP7-`7|D`qU0`_Kk{$Sd30n@T3;C5!d_#TtM56WdT)CN zNMK$o=t!uo_Tecz60D6B#-YG;G9_UkP8xE>WUFE;K0=#~oXOw*nauyh;Dtv2$l)ailoKKDAb!iN}V@Hwryb*zqTyXY;*h7iY|bHvV$Ja<}?j6&5u0}t#~=M76abJVtd&X5>s3UeQEa8g!gZjqFC@T zs)6uB#r~I|u@srjT#m3f4;~pQ^qGmRwFHFU-^|&IguZwZ)!yHa$({NiE&AyU`$!y< zn-}&LIU06-HT-N_5X1&u+WpS=zx!|xMb>4bv=)Yj)QvBGp zWuy87d4(yB0RFJ>vZkBn6Kd}LM5^zF^W$A3Z*%-W3R7zQPH|bM7uS&0dN)q%(KC#%U_^gS2Sxt>vtb_F42UQ#gAv zB4BQ)6+8giOB@WOTc!d!i)laM>A!72VI$r%X2$-1cI|0}(_|h`!sxRfsys)y{qQe! zb{p<}0$bH*iaZQ25!7+L*Z5{pYnQ!nu=*d)uuUof3W7R|il*3w>(4YA zoU0n&-t$^HDEXoOw6eM)OafrrS3M6PWmG`_;J(vC;zbUTT70VXiN3XKYKJ}Zw$fSI zXm9ZWk3&$c$$~NJ!)*Qq@^!{8{QkuJRk5j;F7a%`ot~vp zhfp!pmYPIII8YJl;4;`jQ2W44(FdVR{nG1u$mHj)TtBj)Vk(l+1?YHN+IC0lKdjc* zm6&rIud{PJ(w#r~!`CHaC{on-s#ds%#s!s& zuX2Chs6}p`GP=#@X#gqf^cq>w|!F*q7C>wFXT;=QFF%OZHz{b6_0KaP)h@{@O8WEN8Za1s@ zrQDx*+2~v(W1rmpG|KSBw}#d0vQ4O6^~g$*TEv}MsdDU>fVA^0-Rbg$HqP9kPYbIZ z(YR0P17&9cZG(?f1I|9YOUOE;sEVHt^Y>j#`tU0I#Ixgro-$QNsd<L0#u%b)AxU>EIMgT^u0+rf;XNOOi`*jvyGD>G;(t_qed?fu_ozSJ+1>5JP>8CSzq zF<6;OOew%NfJW*ruiDX@@I+{K6N(s7GB9KmB2ZEq_S7(2Cm-}Nn({?yfR)Djz!wVP z>o8@UTG9_w_QtCB$ZIN>p!$`{A3k=U)offUXdBz$G2Yu-ecR=Z{+6p~`jq+%bFA<;`Mt-=*hIS~?y{$W_=CS3+pWZZ6=K8VrVtsE-L?HI_kZ&D3 z(`AE{S96DM8O;T&>CfHGb+51g)Kov=wB@l1TmaH~+^1Qf+OOx>?@bIrO7s-gbe0!W z2iYIwpj?Px`yZ^e^yMC#BS!q3{#;5sf%KP|^4grmf%Y#WI0bQgTafJua>|F!9pyI9 z_V{4sD{)8P|J?L-F*+pnuCF=E6z~P-c`^7R*fm?H&gF^*?!26S%}J7_?*3x;9=@+d z04PqdF_vGS>WdHzR%W22L&xpVf91GV$2R>ii9uaF;K)}qkKz7^%*0cPcO2L@-0E(O z*2p>Eu|8`0r1+RviB6SBVvX?#;x3k@vpH7`CG3p1Uutuy2Rox%edj|mz_buM;I8iN z#X!uf^=XW3UEJyqqkO5&SVLH19AU5wbUOvpx)KBr`>uNC3rZ2ltQH^&`&ZPzK?f`@ z*v5jY3Psh)LUea_3ev~nQrLgec)N()>%ckRREo~g5r@zzYP-ncTcm||OiMT3g=2d| zY@50i@>ABW=^ z%A2ZFfs894-<%(i*pR!&$1Ou!3^|;>x#;>D-k*N%G773v%}elhk*v?@-GVr*cQO%G ztsk~@6lE2Xc^%eD&wXN5ACrA>M>+qQ{^K^`TQ*W|?`>=|-eH53E;gko&U6!=hB96z z!5{4r1rEREiKD-Z?&Zf~Jj`l1&7hwx$>j;DokE3`=}awfa{72e?QP`b3iCtINn<6j zNHAV_KX^A_Lj`}Ni_sieyvy>*v)G8F4yw(=C^A952^!?fn=TUn#>Lc??;7ehMMyC& z0tt^txtW)$xF9;vzquVcZ?SQJ=$X;EkH+zH2*eWg8N0%l0NzaUPM8x%oFV|2&82rF z=Yth6&QAXIxB8I47)LiC!JU#XiMd1v>}C>d@I%OQV5KMHb8!7jE4Dk!vy$aLogeOb zMbi!N-gmPYt*p+jv-#vP`#I#ljc}TI-c}#`(9*(Zypqg=`8Yf9d>hojI7doy27diL z$JtmXrOj%DGsonjyU4}a_6}8qq#^XA6eqC&C zDxAt66SyxlbYJ>Eip`l$>Km~4Du0a9j9&=QM0RXyl$N(UKLp#FShVmOllrOBH7<(x zg2gS~Jf?PL{;R8WO`8m8rg6m(n}uB*iVu0Q+GfkRt7;^l+ux+-uW0yr`nKd4tt`KEVh-SCDO_R&z(hGRK)9}9G>60qSU*_PRF%Ce30HX znAtG+uad>=Wu1emDt_8A{V^WVCn?cgD@<*EW8<~a7bKvZrKxenwE~@uq6t%jVneEj z1X+11V@RBaB}D%RtYs~+l<3ihr0s_}AJCUpt*F9BByQ&W*)WKo)ZhamR$ zVV(`P%(eP9tWv9N5^_1*0*K`y!Uum`rafX;Q`3Hx1n=_0;~ZO}Ps^aj{h)DLg}i zF==-D>Z7%b_l!6&DZD$Dx6&gNoQhP>X@!SjuPMvDN;Ugos{IiCUh16wg9ox(1~i_R z${zsK0pabtC8+3qMKrbr^i%%D#FOb1s;&#xQZHDFu4oN)=$YnBHif?lzus?&4Rjm%~`d z==on&$y|^1V}6i+v^;q6oMm$Vi+Tq9x8q?iOdyX+3ThN1O`E@Yh5zHN&0*aT1(Q0B z@0RQJ)Nz{F+$jq#EwrH{?@0btlKR1{u3J!AA+3pI;I34iwtVsgveI;Ts`eoo+3=|z zi0>K#ex}P*w*9jo5U494y8t{!MV|o_B)tr+)pp#8Vl&J z`BwnU`?;W%h%e^UuEt_^_0&Rh<4#^hsy%1fm{oWmG0VYYz*?yl)#0KLJiU`m67aj4 z)a*0FS0zAgHJAx=zoPT%n^XTMD7q$`=EDh_7PIk!<5JK|4Q4Skm2-B8p51?hxWr>v zu$Ky|T>_+il22k=O`vs$pEkX`dCq20%TEfiddm>8)5AT(iSOoJ@-5;HTSh(J-}Hwr z^XndRN(pVQgb8tq!3fb3Nyy~jZeW|dyp-)R=NsSS&;y%|y6 zd&rYDYs|@)z)0$oB@-7R;Mo(5C6@7_AX7?dZckvpS-T_dgT=5Q=yxXdx^e#l?rZq= zcfbjjidZ{<)LQ>fr6{)m%o3HhS>#McZ^prd2XFpjv zl}JFhO^#j9FQ;&$VSv8iW}2-C%$Vj&y#ygphr)!^&Yx-1Il4%r$l@R3Vl9rIdocKH zZ~xthzu7xtUEfo2sPDN1Gkw|zDvA>0W1T0_>OCK0aNhN^(X~`#zU#jVPI!c@80p2z z5jrGf?JVkZvZ=4VCzgdRi(^D9GdzCIT)qA+`dCv$_Jyomj^Sq~pV}{ePY!KA-npv# zTqcI-+a4m9^V816CU_%RB4HVI{nPjJ3^6s%hgms5XZ5H5q;&sF9ZXBKRRFKtX^-Wo zni3%1sedjgVlK6H7dxSNUlqJ`yfSwGmb1tFm7Ig@uT9YI>kqw+%HEkJ;>45FQ4WrE zJ9&jI)9+82zcD3C(?DK~)dAkoC%l&RYH%T9K4{&FPWtDCP|s8OmOc@>3t_^99aIs< z;5jAB)76f=R(kjducb^U4-1k9#s!Y7b1z{#Z`F3JHND*))dIi=Yzc%oq(H*@G zN8{)cP`8Ae{uapwr_q&jB3^;Cq}c~e$YM4f3$2#v0C1|+EkkD_CTzuTy%^`{QNSdr zvlyn+vBdhWVtJ5Kx%?+{Ltt~E?qptS-O2qu;z$Qo zgHT2lLhoXhoDFT^fJDe%>cJUw z&pDVGb3GX9KgVoJCVfE6eg_D;osfruN~v;`k@U;|voltjPbQQat-!1(shvE6H*g77!y*!Nnm9Aa9F<0bq!Lp_vUZHnR)Dy zZyF*ME&F=yfOohDEUIlSHV=DM^t=Dx z6WeqSU%YeUQ-s}#ABOU(qD_`rUoBT;=$8Xu5&I`IlKyp`XukO4%uB~vHKnA}#M&x- z%Usly`%HoKs2*ym=hD;e@{ve6`a-z(vbNpINSWglbq>fH@+@U)eykX;OTIL;_&r$r zpk>H-fd08v-jabf*w0X5P*h8QOvr?9O&&gMF-`^@w!bE=rmF$6IL!DuoD3R9JW*@e z_pO3=auSj71HqgTh2gN9&GQN$L3%#KCa!kioL`~A!ws~ZrS4uuh*r|HI`q0qOgAVs;_a`AYwvOIB zHCt&b#6qL+8}7G$`u{34_lkJxSA@(790&{xz9)nGUOC}{=*``2JE+wu8Hc{u0{Ip8 zT7xk6Nv~>+XH1X17QJ~X#vqLGj`s_(7+p`FA9YU(d$BwL04e!X?hB05b(A-k%0wQE zs(yZJ_rl!q$%Q???uVzaUkuYnL^SVCI<>+1Nw{{e&YyflF*(9^ zjdqE$kDG>F5I-j8*%N!ji?s=r3!h#E2p7CXA%|jq)z9rr>^zWGn%qg5_xxgp59TXu zQF@X>;0@t?2evkCZ&6bVQ&c9ue~~14=K1d(v!h}eZc86HP#bt_{o@}aZm8?ze?2X> z+qRmXE*!3R3s9k~=dr&1XEg3V_}e0^S=5JhJ_bA;Vq9aA?{`D?%}a&213=AYpbG+b?{mJ zL*FTS8QoheWaR`T6iN@mb|49?TY4$50TZU%n*k_u-r#&*KsU0&n^Kwz6N-|Ig)mJ` zwp`9`tVJa^mWtAzFa|I~;iJRq`Vam-A?(u;4hKpo_5dJug<`=vVWjEAaluJLgmZr= zBfSS+h*H(=ya-1MCR)ysT219hFyV2E7#Cf zz0hghv;VG%eCnoU9CClb%q5~rCjGxk0x41+y&n<$vHqeKzU|n#QrRmr)pn5v zv9V73@z|)J-bWnHv+8x{?PSb=()z~jQm(l*H|xygp6+Y()v(fZYaV#;HQVYruWYyX ze70@EaTGAi1$QuVuh0FuCq+6FR&X;-85`|6eC5l7LFFYmNA153i|Ks2?`e z88v@(xm6a`MOyMe*-C6*d2t+^tuUYV;utENhx_lk3itE;5>>sAnvGL|`N?9+;&%iq z33u|}jrGEwTir#ixJRWSZPCSHC&)*2*utJ$fu$Ai(@BTm9$MUEZpfn~&|_t6+f&D6 zqk5AY`wtF%5)6S~7b-W<*C22{+IS{EE37+6 zN@q=->f2o~shU=?4+ydgmHxEI5H<*myu54bu-1`jxGj7P%D-w{D|o%Nz}ZZ5HU=2Y3LZ^h(I(1V zK9Ya87rPj$Fzm*3A+H^AC=p0}_M|#ZR~PuR29Dm=JNmeR1GcjWo58@RUZ>cY$`n6_ zffgm~%hY{HlacE|@}Ii%0r;m|j~7*U4ve-_-(yJZo4kEQNWgO8uBn&m1x9)O`Wr;B z0O36!%UBkI^IGpgPfUaTaSIT?zPtu?$yP@$?}#nQ3RUc$%u48z z!Uv#{H_XZ54ATh#=N0xlFp+{&nS1V_y_-j^&MHapjoA{OoV7kSi_ci?v&<-~l;0Ez zrpInY)Q$n_onKA_?wiw%@V1n?9FR^@_1CY#!12KR)~!lJ0B`qQmZ{R_V&2HkW5LA% z+#ANkW-VKcR8=RfL0H`h`sf>qu1_SqkFE+*hb9=7_uI_M!}gA(G@)0pCC-)5S4NJ; z4TnoyacasAM|HyvM=f9G(U5vN@0oN*x2UaMS8muYztOB-@C=f@UNucS&gbafaCuCt z{$ejK9JEEw-=DrI9vPxld~|Q2VCa`6Pf4YwWICWpDq&~~ z1MKVAO>UJcnnT*Aw{y^io>uL0SP1Ft_Qz{%g zgu^CT06$$WEnoM;VxqSv_|?@%OZiG0TPnLL5v7=B9o6=H8JrBXkPL&I_f24i)#p(S z_J7R=L0%Jm+DHM$4_XZlZ4MhJtuLpzRQ1Z9{K$4*8z1l z`5IucfI|;xzXrEgSNF}}JLOXUytV3H$MpeY&u&DL^wg~Mc1FNI-s2gcWD@2E2h5=v zAeJ3;0RFEHU5jZ2cv-&#@9;;>RsEg zVD-wDbrMO~#3o8Qg6|q0d&^-w_d!K!-L`uEtnNd@$n(wTmnQgo2EF%gB&O($n1)i| zl-CB>=!~|5{aEtDj%Jx9D^^%|vrFjv_NsRIV+SzADgb?VM}cBSH@W`(Lx>x60kkM^ zE7_aE)9}>r#H8JIJK}LyqN1iTS%yCf>^8pU9tlN9Dx`Z~fxlju zl#nbtd|~2UCy&_PCa#anO*n!+oyd7Yqo7KLL9)LKB@up1dOg?(pL;Z~jPl21q(`X+ zv%VA-MZAFUa68Cg{5MiakGoYTS~(URDL>*sY}S)gLbsa%lTWKas&+0X-+-D7PL7Uq zZdo1spss2-2tSJIXF`?0@x5*l@acuJzEQJUx-?i#k;G}}#rnn`a7M=ZbTs9;Hf1CGyMb&`}BoS1!nShUzY5!zmP z-vO|*zf#b;XYLgZ?NI;27GBFko9t9bZp~_MSj4VVC#!Vr3QfGUJ8ju|z{v#W>n*S# zD@iTt0rqCju%fiGGaj(bnOfp#Sb^ zr6>c8tHAg49B*Myj(fzkW8Y>Zfj7>Eq1m2)$22r1mG&>lM&%oW8t2WiP>1Kq(p<4* z9E}Sc4@1D`p94|#(8$z*rerDweCA_Sv4x3%=ZhAWIa8A{EP=&V0QUR;EJ8mN%GmY@ zWN$6=bKiK>_BUEV+gaXGdsuGx+;#tNM4sy!8J3*13EX72QbVMG*zYuzwG3xIu=Pcc ze!$L!N*lBJF?p_uD)mVBqa-Wj!kvh}ZwrUDjc=yNUwzG9JIQ#vCJ?rvF8&8OEMO36 zON66EHSl+PlO7v(6=-jKa4|TsO$ZsK{*7?5Do14lArAHSAz4D+hgHChb)Q=mHVg{+ z7F2rfeImEQdyDP8itoRQ>%M1`69W1kEUlMP zn~LbALgzt%?>+sg*N#b6ntj?(F+>l$+Q+WW9O_}P3JZG`ZCeuK=||5;9of56H(aED z7=9Y0wvx|s7mT7}BbwOGOa49~Sv5$8M|-aq5!TIptdD4yI5!}DBbBAMlGE!5?o#7d z|L87Uf0k5=bkhHXKpf5=l9={?N23NH)3uP(UZ|9y3u=|-b}uphQ=SaPqZDN~lUJRc zNvEO~gnd3#pFTHDy!{Qi$t%ome)u^U(0 zkG8W_(Xc4V@UBdfawwF0Ob|p5eR`B&1m05mlf+}*fvj2nGLy?5fmH)A^H0AAxEWrq zB-O$E*l3Wnn79_2GmUKFPar*LG&ui^rtr>J+6VH$YT^yXzs?hrLZ7c2Tcy4-2!hwi z^`&7|AEHl$MoQJ8Wr1W?+FH>*l#GA%d4(<`zjY#kET}Mm{HoI@QB@3e06YNfx~gx! zQ9XVQ`k(qY$o$E(`!eYriFSB1Rwu`ifYs{w*SrMF`& zaD78Wr*w2d$P4Czz9`{btY)G*;SJ#wvr5&FYu^<32x@BFB1BKa-H&d}W85$^#{5*R z8BBR6tt=NGb&qf0$?AMi-Tup$pBQ6;IQ@9R-7-Bp)J8YA!Sc$hw_3Z}+!72a2j7Rx z^N`;|QS!b0DUsI39M_8zV)ZMFrLxrb!x_4ka!*vVK%y^gs!rKwy0^vkh{Q*X=xexL zc+b&$Z>?EN)O@1kd8go{Jh?+kv0Cl>pw6>o-~PM{ua4=@a&~dw;JNvq&vnJ$$>`@{ zPFj54=N`>Id}|39-?ifynwfpy_#krm_Gev$xNh`}Ns#46_1O6NBB5D%MDTR@{446w zQ75R#ixC>P@}o`x>*(Oc&0ct0w;Fj9K6bFN{oDJ{O!@K|5l@Sn5xNQ&Dhw3RhMd73 z7!*VeZ|YMjvOCT9o~)j`kAs*w&RZHCJX?*ZEBSL3Eu1{ zaSDv%dq=dDqYSiz(M};PXX^l`nS`qFn0`)D*VmQ9txYXzM+=1rE>Sb=rw2U8y!!1@ zw*}dZ_TmqH`?82ZpXHgU3o>*9x{oitZNu&d|LCv4#*ImUJ6Ftr;k9*(>vL6cO@Dqb zj!j+_NJ+;!9CkegII6>jb0qBC-bD-sPOb#aG=OmGdGqpGGh1k zug5Dgxs8 z?{rc_+ndGHZo45R^I~JiA6g}R2n)$r6r(SD#-8=%*|l*^Ek?-x5i*og%-bFpvR%LI zuCAdb5Hg*l-_;rP;`&b~DuZ0@6=L**FSm;Ozt-EqUf1#7<>^0K-lg2V*EH9(V^?M0 zqW!D+-bw#Q1o~21+~#Xum%lG0Zx&1C0yARQ?=^91{28XLKKLG_b2~rW>hfPHZUxu@ z4n+OsaO~2AywkL@9yt3&;_#~7#&6Gy!vV4<9$4#Zp2w#Ztjf5i=*w2{NOqPuExNjN zmwW?KR(|Db{Jf*=Y;q;?Kd~?GFJ`|Bj{?%vFbr#_lhTNtW z(rz6hoU4M7X}n?)uX#iNF4lsWTK0jis!QWldr5*@dUjrikf?6v6g6yD>hw8W8MSUx zcP8R_5zFA|?m%=jZq&M55LedEJeWBgga8A$n@Q?Fs z{#nw44pWyudz}J*i9wR_MA+iMm)w25UZd@K`L{1_ze~gZGCMBnk!a*1i`xIweLF}! zi*nCyy7;JHOwR|u`R8~+>)R`r<@$|{3YXQgqNJZbj@SnI} zvX|Vu4XnaQUe@uVFU4O^Uxd7*d#x2lB|Y$7BiMqf4jPJH#rSA6tkEKOlbG(lq1ot)kjZDs%R zht%RxR-jyCYVbYYg%HWHmaod0=S35|Udg;B4Ec7?-g}MgS5Y$&)8+E<9^}j|6PeBQ zaCN-uy+NH0JrAt}G1AlCgljLfD9t>F zufv77%vV%R7h&oqZscw$K5~{yGVbC&LH8zJHY;Ewfxu^w&b-8Gg6s(eP&D~_0Q+&; z%w%d!L#MPfPMBhC6)9kN%2k}l3b{c3tPXWb&HKFL*)G2d2xnfq)tPr5sWGd~)?)X7 zS1T1jS1`-L)iDnVIe3nSOENd>#V~Im+~M+$+qyDZ#`1*Eoh>PHv)@teCUp8T>_906 zHcu2dv#q|I-COh!8gFI;?F5bliNhwtB3+hQ$8#O3JB$)Gf0 z9XHUdT$v*PbTL7ubSlbk8<+K1e(hJy;&egTBsVo>-f*n%#V~(w-tOei!^2KIwrZK%FOZaMEl~w zS2o08E1T*xfse>D9+c6{XCRLhbBuaVtaH0dJ!@$6H1R=j9a}bO#!(;g<(n; zK>2WjbrKTDQcXc#%sVvk_eLk8tBn)i>3+rwjn3RDbc~nT89H=d(*}xq_Yc6B*-*1% zFslHl%tkU+{iy`@V2S*)VUqyZb{Rtzb;$EX>C6p@8K)|apT0V;n*)R%raG} z(lMnc6#2o|1!`M+!Q1yBZGhuAX_5HvaRwi+r?d==Z0T+5RG8@xLrw>{$pxQmkn(ll zVy%Xn32fXNpzi;<)+!tBzIzt*sMNOK&B5uEGE=hs)8}yy`_xG7p1U&+r6QC*-oq8FcDc3We_&kYfxUrg?a=PHSQbyc>D6w$Ro4M zV*3l8qdqdwxo5u%$^%#7>b^>OvRm*^r9GnLhqvo>H5Dai#H?}Eu1DqewWt|@c7aR2 zOAisknlTD9YIW2k&KsSejJNz%3+cg6`U6Mk)ooTt%!Fqh@vhOIWRn4MtFfa~mo8(X zWA|bEMLoZ65N%no9(W8My7M#BX#?#$9$rIqk6JMO83*0G8ZogB+^QZkx=hadYsa?# zcqjgL8NMewN%)M7x?@QAbyDGtSTF9YHz!1U?M_>c_c2k=v>XQW>1}rKvZ`}hBS(I* zE0TPxLh95#sx@^p!5$F;f5XA|xOVCAMo@i5p-}tGmiML1A!hjxz}5F0&lqHhDlnOZ zN4~9)4NQSklCJ1A%*QdC-|?7TdV z6WRR;tSXLh5dAJ<2z~AArWiJ%IkgsI@WIh&MkSbSahi`r#A^l+khF= zV0#Im1{h3{W*rnmm)?qKN*29Gu;0Aqp51Q|dGqX2Nz{nxCDEB$lPqS=%4G_1DpcQ0(`1GLF+eCcE*jLoX8%)_;t85oHeF%I7>wb}c^HacV z8+f0PJsP-(BFj`)Sw#GO>@6y=tBRJB4o!`pJiB)C_^C~^)2$CuFKFGHfN4{$OI6t$ z@wXuor9M%a6CAW=wJMiMg5G!7E?3Ey8yLgt4!01={vcCJ=`Y#F|wQLt#7?yRnS_f(r78PJ~>}Bi{;Q8EWA0Btq zn}DO~^QSgSmoVoAaPj+V*p2xo&sf|suiRetdC6@hP)97-sg~^t0ae|#x8rh?f|K*w zU5==F!$JeJGHsXY~SMY}B#!ni)UJ@2=Ny zh_vt{VgcH>rUlOT5$L>ebf!%TxkT_Ig8Npl_)eVQ-NDg~4oN(j#ICsar>gsk_YZ%} zB*dX5lGt-1^`LpJE!|tjC*IZHAt27YsqdQfzYluNkQWF9FBcTQ;4v?O@9;G6Y_Tj+ zo%V+^#j>Y~nCY;>I?@emu8Dg05PJ;+k8I_Q6LL5vvYx;?S9?rw-$a za#K~>#2cGuWS0dr{!V|QUb9S%4mg6aSrqYtsReXv!6$)B)#;#x$6RTYF9DM__*BdK za<72_Sm4LWC}3E#Ja!;{B?E6edCExnu8@|SRGqorx%z--Rt=7C4dZXK%K0e+h!YLY zh}BbAUg`V{=WOcWvTu5O@6=r)k(JFDVaD`!OJagJKINe{S|A$2c;P?~{x;y%)33^h zV9^Mfs<}8D>V=;%lqBA%i*P1)gSIg_!_3SBG#Dt<_X&h~C|m zDkfrK)cJ=6yJxKp_?Op2REVK_31=1W(L3F0!A;f z_uQW>g>>mF!UAGwG2-L}!=2EtG^3+)pL`PU?i0NJQuPo_-%DJeN5)y5(Sv^sw+f1$ zYtN*Z1Y#oeAgXFn>a<@76=CK+KW_=|NJx7KeBZ)VV5ez#r$?)hPJUX~oj^2nSSZ>n zT-4k4SIZT|OD@0ekm-qQ2oB5szc}OdK|26}Q60QNY~8r=4$)ib-`Hk>dW{IEy8fHfCguoy zz*eds`(GpP6lJ1CzFCIrhK;pQsaVuwUaT{p#uW+lcM?+wjuUUGGVgAq4h4LXW{Alb z-Zy4^+@2h~}{(jC-T!=<;*FwU*^uux#g*OYfK>Y;~gV zQ~ongSk=Jlj3SYH zU#Y~y`;RuO%l4i%>!*GZ)qcQlkh(Y5ZX9%0RgvEK?<=;if_szj=2nSxP#&jVo~gi& zM~6>*(VDsr@`GApN0{z0a0sBMB!g7X-bp(`4GQJGcMWVJ(- zcAD!M?cWMewvAco=H+QA?Z{X$MqK5qW*e{K7cXAIf_zYk_?Ox4TNLc;bzJ~BF_I!xF{`oo3LZXstxMqn=Z$%_%w?W-US1;>>Z0> zGBc;xNMY%)Fg9(w-x;x%?1|M%lb@yepEh}HCp96gD6yy2)rjWtOjg+*0Zm}&*Ok)? zD`^vTt|JSzYf6<)Snj|OzurR&Q+mMS5Ob7&iYS4Q#7 zt%yqdh7k8!Jxtf7t|QAsc;2B1686+2+$fbya#AL3``TfjW9!;3H(=s$f#JZ7?hc4O zruu$zxt-%6q{BUZhW9XPE!e=?dM)X@T>anBMGZlf?dnTb-cC~-(odLt$M}R!pA6Ws z->wk@eBIXiMnhC!?)aB)py=h^1#?D}HJZwJ&(?6&*3`i+B0_0CtboQ3gOSSsL9++) z3@6K~?1)RO&sf$-Khf_unJ`$D&Cf7c?2%DSx0;}okK_MMy3B&Ny2<(B=qcwxEz07U zxYgJ{49k@mFu|Tgk-QtjqP#v_INqxWyz;VUDMke!4 zuJy9E-Ly%dA%b__{pB)B2AWND1P!Nmh0rlGYsR9pM`QN(S z<*!uYjbf{Ay<(r>xSPZWs246*`u~9EaxjZ7rbVhuMv9+4(9-0CL!51j*l`Hd>L0Yg zstox%9Q`Vwt?y*@R~0XJyJKsIS*;kasgvQG#CD={&Ngl&$pazPD8^S3Zwqo{F5 zHM^rjM&(+w+xlxkA8`c;o&#I;KCUBVZVVK?gIZ$UJ`t5Vs89^qc^JX{8WhT2_)63} zni!+2<>S^WKAo3r`^!MTuG#WSq@)CdKlt>!eJi5XWY}$6zRLIZ>hs!FuGzk|2hSaO zBCkNI^h11qOZbLSb;hOGxEMK=%5Q4-|9~pT#^&-)VZXop#P@xP9h*87uoi+!;fm9- zoxTYc$FSwIVY%kQ;-fedS)gEo&pk*J8~XT0gR_EgL|4!I1h15#gJVp4b>GSNJvkLb zwBN3Uv^9mPBRIizf4$m4tKal~*~z#0^_Im1x;PkYi+xVuQh(-Dr9du+ftYt4wpzyg z{*nw9GeOO(hiR}vXII0))iUHd{~SNThm$(zh=jNC?EZo2Z7Z5HuZik0lvhCmQsuU@ zmv?ReMr+VvquqVpq{kfK@entp5+Gj2RViSkB95>bL-7WErYHK;3mgc!&R@Cv=_OU0 zeT@V0;0@<|;mMi@PilXm znMn)H@4uEm{@+%PHl*t1UG)^d0R8a4UH6mVLGvnukK4gXRkI z0QyqrmO`&-yfWWmlk8gxwraANjPL3fOOM?a&_~HXz2+K&h~yiWv^Vz#oQrJ$uD;h$ zM$`)gb^n>jKHAFBZEz6V8L`nonJ!wXjINyxU30eoBq_1r-|%;@22C@EdOOMcT8Em} z+wnPGpB|RZIy_0&&XbgSp;f(Puv*4Ita@@}R&73Gebx>0Ev$!ZY|>{&R5ee>bT=4% z_0V-dT>!VqjSk+Ea{j5%Qgqxp#guoCpB&et{AieU*={}U;RMnT+sd&4s7`15iX)-MnAIWKO)DrPo-GnfmX)r*xv8T z_TJRc37N#B$VF`GVZGCrFW2Z8f5DbI%H*0KP~H`r_1gJW_d%%i&~~(0>(q&1YRhh7 zMf3dKcdDMU$8C5?oqONBz$FB@sGHje7bju=elq-U?1oXvs97ly(@L@xuxKcEbp!JbpfSu7 zq19|di|;(%1XNB?2FEwNc!^pLUwW0%>?qUb@AR#5TxPdDj8nL3M6xT2Ldla0N~n(f zB$tmmM0ek+yZGt^;LGkKc(B8fN=|k}tr!5&AMy5{ijV1x;oaFYjarEM(urVw*vJ13 z;$bP3Wk4Q}uPk8|^GlmyFh>;XSXD7ECPdCQhbcReN!@L0B>=5gc1%Al>cM#miZcJA zaf)E|3^C+L{}NG#9ySHjwTNyj1_y;7_23PiafhI*KSMJa4hNgG z8qbs_6D`k!jrno0cl7}m*heU7RB({0*%HGWyd}$T&AgNz_&P|EA89*lu?(dLtV|h? zV=-I1D-{=#2;P&Y?tcemDf3zKuqPDSl#@!V8TnBiuWF-3MDyG?QIS!Nc~;(uLALMN zytC_LxYqCH>dr+P;d(NUMY7cXI+wXRz3;j3g#Eu@#^MPAv##NlaSOEOPpU&H#B0gr zvAj&R>y(72wASA&vo8JKBH=Cbw8-^Ys_K(du`RG=KuLvJxbeekH*j6%8Lb$oZYpP{AF8p znf--1(WYJ(`QQ1WD#g88sg13d@bRH5#P01B_q%ae;FL~!NE75i)gM&W9Ytg>L~d;* zZD2TJl`eFJ`#}cs7^8~(QyA@UkXk{^>+O%EFUgnNMAc854!NDZUyxn!Zxy6ywEpO3 zo%vOVHX)SFOG0tzxyt@u!e-K*!w^IuaTM#70*Se(i%H#a2?Vqxf_Cam7KdY)XX2~< z)_afAidVMBl5FBouUi^ZKgGILX}^~lGF!KFIARRmYh(C&{Oo|7?g&>|VC419DH>@)u8D=zf00*PblwWEXvzDvJ`x-ly|6rlxBt z)(u*8uU~12{{d+#p0Tn|{E9l{k-yL=Ef;3ZYiJKdek=Ohvjqz+O7p1s09y}!EJdoi zZ`!eha9&Do*Ie0FV9zh-2bT31DpvO%{)1~4Bk+O$-(8X!r)DehGVO!aFWeuR7A={` z8oq*Cr>p#pQtg{PsUT1|4!SlcSE_rp&W$f&`6ThIm*J6T2$>^-10g>iJw)F6c@`+F zaNJPesQQ(;MLDU+^@*uS+rtr8T$WQZ`zdMlb`d~h4bJqcG$pXE!#F6Jzq14(9OsKf z<7?d5#>vUQ#0H~&0Q$_4re67GF@6uf7u}sbInwAEG9SyGRv3*OiUm)A@FFKi)%^bm ziolErdKMg!W!7Y6cT5JrF}Tc!Z@K0pg}|v=GIwrISYU_ zyTw_V`G`);F%Sq?+RCCld%D<3A(vqIqKKIruvjb|+hH{?#*Ubk3<`jMhUg>0_}75V z$((|a$jaHLZv>y=3Gu8}oETaG=?0n?Cm)aX?qlyUWovb*B^uD(o4~XFFtW|6`I>|M zt1(fOsQY=;(e*pVgCE&*ec>RWuL1AJwYwX>79pgN9h}<@sjVIrj`L^@BBf$!uYY%iX ztS~(*FQyW>co^1h2F%@#44&;FQbhN{9i+ABwGhr)9oV%xX2zlHAz4rq%us|ZRltU5 z!B0b||EbRk?|Wx^bLU!<~% z_}!kowZ`F>PsH0+ti@h^??29X5-?DX{8n&2UTY9UPuSp}!Sy!7iJXXl+n)@F*^#h3 zn(E?@?Rf>?ir2iqobTMGpvH<0X=~(=4LfVKiYKOduH~)*{omuIT*?`f>pzcHWi1US z9UrykECv=Y9)||z!sGpJZ+~c#_ls$cS{Yh`0BVXL}^AKGYri_e-ytTk}uZ=w?F9(jY6uG|% zSBEI1&(JdtBVC()WL?2$0A8q(3O7?l@%(cLP0SkP0^b^$eG01($r|Q;EVgR?=sm}E z9c|~8vf{Y)^p|6Z9%mwe{itP!b)t5Kb+9QXLlyWkq7d*DPQva4Oqa3;RWM$-6aG}r zRXEFyD6)AG-&;Wg-vkTChC6UCg8a%9TO4`ZiLhZHq<96w`IGh{3vDK(lNG9RqY=WdZXpWjSZD3y`ar?gIEK_zR|6W`)A?MYane z2b0|U-k<991vOhT5Z1mSE19()f*Xi%6WK$br)NZ_h}h0f&9m%7 zOBMvh+bS=Hl$sLP;a{)Jp78nHl9JZ&@+153?N@5Q;_BZ=?Q#FR&&etEg^Y)f&6Tsq z?_ECep?GtM*N4=|P;P($7I`zCT3dANa zJ*m8A>+Xcl9J`T;E|RwZV-;fFtV0$%h6s6-V1b3%QpLe56Xn>WQwwq{wB5Jgm8;u% z1$8-jTB(PtfZuxhFXT`Hs05pW`8yG#FD?heT4T_`K_idX+{L=TUpk0mr(;r9x2&|T zfkW^2VaUvyK4mDKrYfUI;PKEpb+izSw6R8J1?GuS?8*ta8l`2--k13@)(!0caH<`$ zv$`3Eg_{UsRgm}BQmY1b#HhdOqx`?B#lV7V$#qMce}nCin)_8zf}F}x(#`On?7N-P zx4V(#a06cQY$_tlnmW===K4i9-eo+M$yp(9Rbowf17^?@TN7Jr=uHl_S_@g(J{nki zl#pNl*-&)Y+e0Ya(m#Aim9%=H9)j++e)$v1rfynZ`nMyB7-U|oD)O47N+cV**IYuw ze2&{aF^89P;_$h2WKEa%{Ubq2(!jc3O(^dqBlF0~|o@R;drc<@tW zhhll$_2)>Vm6G_Gpzh&osr|6Y2a}&Ic(21B_CeHmow{EUcV6jAJ`^*!4T=pst2ed( zndYwNc88exuO3#4Sc;7Anq4hz7-k0UW9dcBwCp+-Df?-7E33QB9-K-4Ab*A`C2IBP z-^!HZQCOqgGr=Q5smCXUJiRK*N=i?}oA;^>L8d>>d++gy0-(7WpCmxKD8aJhhd)xr!c6N+% zyX0nHL_Sb2GyQRmwC*e-m!>TF=dhm*$ORYbR`cKoYQMK_D);6wxuC-*j>pQm6{OVK zT)z4Cw2qF{GD%+~|L?E<-VeK#e_v=Cx1N^S#THk^JoWnX5&WefSc^6AVLN2D-TEDA z4B}>d1VlC%#m7bD*^7`2raX2io!G#gD4Xs(-21RLk(>Y=3*V)8P4^fH8X#yZp ziI$)SHNhyKO-Jh5ABOte977>D7}VpHTq1Rc)sOTmr5-tw^ejU%eJ#I_0OWP$RfaGU zcwpqTVel`WI)6o^PYgtd@PSfQ^rDQQ3XfT$qy*A?drndUXFh$N6dbHe!=Z`3%kw6( zd!2P2rZ@QqEUVbj119ny?m;sjp_7l>oCMr9r|byRX}`tx_?6bm-22y_AdAC%P;q}w zUaUY|olf$8yTy4;l?wYlm8^Y84K>Yf;~G$ zJ&q^-fo4Z^*+dK_zp2 z1Fz(jyRNikOx)z}qr|W-`hF)pHMXs+#&Gke-uTrGdpj`aRgt)$;m7^(;SAcG9o9OhUvYV}Vi4NlHV`|kfIfHzB@X0R1(x4#$UG`+71u6R z4oO9PKO(}r)qy*(dF11-u8GLScFy-e#O{zYS3HvZ9EPLg=-(9qQ)G=xI`5x0d~c94 zlIk(3Y!r)=Vgd0(ggB&s>XiY%eXYnx304yyawWBc#!hd-uiO*yNuao_M~|Cz?C@Jl z?-mzbtshjs@RCMTKhlzk7n=`nAcz~bhLPRWBd2kH%HAlGGNoK}wDkQp5`gz@=a$F*+_b${aNb9^X<%R z-O*=9Yb*V)PM=iNJU8X6ns<$4cLS|6&AFmW);8r|*h@I&T`ZaIRC5t=jX5I^R9kg5 zWV|aZ6@r|Zk&O))4u^_y*eLu`rGlZyij*%+2ARw}6kfBVeJvDgqq?{KALkb5T0Z;^ z9)9D++!d@x{)be98b2KCQ@o)4e0{%MpTy?Gp95v*%JCR`+Pze{r6n zsU+;zgG?Cm!!noa)rj2!D~|ov+*N-2iR_ow+is@50fe_jveGnm`T6-qzBkGF?umj_1(?&zh|-UE)u*?fG>_{ zmg{*A=C2#tNH?nR)=bvq);>5BZC_t*X5Hu=`-A^*_n7J@vjIts7x9`Ny}s$O9}6kv z73BzZ4PNAvn?%Qcj-S@>Lh?-UQOM=RI`5clpL1|{PNaBu(b2yvOt}X$BlwR=frDpx zBURF`fQvyPx|c5v!wlK-?o08Gc8-NWfOc%XSA77km(2QO1<{GSA@#gEqn*Do^DS_} z;9pTC7buRrUyOU_z*2TDuiSB@~^X^DdWc6p6gjdM^@MXLKkdj&5Y&r4TYk+2Knp+U{F+cEjNYK7Ov-$7PKYl6uJ!TR(Mj?xj zSDuIgbd`A>wU!anojtwHG5e(h8`X12aB+E)qw9=+>P5|j*#O+!KsKnB;rHKw$BLAw zsrk>1p@9P**8`S&6wyDu8p&B<$0}kiOsz&W+~t}xv;>2qp!O1D4Mo@1%6k? zNSA2Jj$LksN5oTm-7_x7^?I6G+x~z}&B7ej#O|W!l0DMptaDe6L^Gd1`J^{{LwUz? zNivx?o#bLn!aMA0;q=;-B;0p*-lZAa@Xp{PGql=9DGKppNJo$8R_4EUcKoZLyv{e1 zoS&rBA#-_3f`>z7!-(t`WO~GH>HBP{*OSxfMpr~H<@Eb5*nE3e@w5I4L1fzeHfTDI zrt|LDXWoaX8{!%M0*UDKWOZEWjt!Iy(?l*LtS@KST^&TN-F+JV37RYMAbUxO28&I)pH}EaZOE24o0jq#B!8w;lPpy9LZ+Np zOi_RTIJHHHIK)11H~wEy8IPt2yfh&=jGej+n%Jr=EaC8ib`&}U+;1VO&$#)(4om^~ zZTBeu^I%>HAERr($aTgz`1VgEowJ0qW<1syX;dEf$Ns=vej+G#tyhqziiJx5vGd{X z1)5K@p-`?KQF09Pk1oRNgmNC61w<_j59LGhs~Va7LSKG2Ntz(R0BF@>C$15`#nhUv zhxLs;aK0bA6!?87gqx7(U zfJ2%6M`zL*WK}{Lew5weYL>J#FrPWEvoN+)$*XZdL(gV+S}i$6s57nGpl+n7axeIO z_B4(WWU=#Ay1;o9Bp(Fx6T=2{|kx=onsvX4T&_V@^mpaz(&d*=lBxq zEppcyll7?X5&lS=k;>xc7IBcAPi}-T=#;1hqD*_lp&|D1fd-k(n)8AY!9{e9LvJbP zE%K?tAZLKz%xyiy&>ket=PaGaM?-;-AVw=aqdoBGeCiB2;MnSejI;btak26hhYpo< zWgalp#zVcG&K1-bsosf-|NHg2*k<@8bCKs4r{qW?5jW}`#5p z#B}VyBzsnp-=;v6TGlcDfEtLxRblwxad5Zo(6Nsg!A51aBCqFhwv2aKNQVg0xrRQS zd^~p)d%=$O428k->Hybr0#%N`+dEXX5ti+2I-{?ATY+;?r7Eyt43u?XdGo@?qqFya zptpy|EUoYzjxo2ufm>ti2Smqz7M1x;q0Bg>A>`b2WQ0?MD5k{ReF?C$bZ~e`u#@fu z5DXDMVr1)BkG}P#PO@964#=He>UI3so8#r@5zOuWq?&%lIpa~8A_cm-G#Jscp_Mo+ z8fF17^XjFDJ#FqPIEWzciWtN!?{6IxekJ-XI|2GRBil)uWmkT)k^j*H4!cj@ofOL$XL%Yj5Z|2OAfzz+m*daoYwTB$*IJI2uw9DKhp=6nOA$g>HrVRZ zX6rY5h5j(biuvq$VMDq;J;Q+XvDr2_j;P<501GzVy1DQAjNB#F<|<#6B(4Rh|D%14 z&l7q)EO*A6e`dvSngrKpbymgebjiTt85uanot(noQ5L~X*m(6Oli!b{?!r!i>5EOt zGrLrpV477`o&T8_%@OuAxou}-iAx9`ZnY+wopfe6Ae8kJ({eC zg7rM735%kn&`+_Ighp_`aG+UBMYCH#&*6pjNc@^_-^%LFcqg+9*2y@xVdfH4Pw@oV zQ!g(l9-$0y+$NWb`zi^Hk5oSruouzg`5(6j9OB1GujPX=+c5lfWKoCddW{YgxfY&` zQSm3F#@Y>65k?wT7L|AOxYclSV+;@*G-yxvs-=rupboD+xCMbdk5c7~Fr~umXGVqW zgDkIzYqO={$bvlk{z)&b34Ib~mb+pCa^mFUeM-!M^ZfQ8pG)XI@79UJwUlsgz_q$q6&LD%ze{lqUrwJ&d$EE(5rAgObYne zF#VnE&|A2MpuSMtc9jELZmQ=VCfTNAo`Z%&#c8b{?KP75rcxhov&jZ|=8<`SVo(+V zJk}HP;rMoCwKV53TplAM5GPE$_n8((qvj48$6}*1$wO?ODPGp1Lk30D&xii7M{tfV8>x0Af;z9i6!!8NLCsuC<$UPC`lhYl{kpG5FuF(w=65?-M zxTts~V&#M2v_V#yg7u{@yueTAxYcGBErbdbrjgo)AJgX;sVuA+p8=>S%U_#v8=jwckGao|K`i;S>YjCliD!n!%t%1YdgNQN*5 z+6#F-eSbJ|NIi@pQZOqO0S>T-?V70raKBPR0KDjsN(9w%-q(STrcQ%lBI6bOYvkUK z_<8l);cQpZWfsLvekt7w9JD%?t!8EwAd%lsTK*`=Ms{BnySL44AU85jBQhzuDkZ{# zCV|v}csh=Aql+Jm;+GDX$Z86WGq18Z9#lZ>?wv;#Tr>YlALq8?{QAK7Cb#$++B>vw zTJilWeZhS7`0xDb@6hIn%kZQ>)xrqA7nHJ~iyvLBxm?S|V@0gZ?^s=727~b2I!Akgfe7KTP z4HCTlYZ+f>#W@c7p*5AuyzQj`jp2<8@*NbgM5rf(Rf~^@-jp#{TbbiFsu|~7%abgC zVJ&o3hv<GLXHtr)OKl}py z7D~f_S!b|nz_~oO$u9(=pK%kV8=S`XsL*pMiW_qG8nosc%wFA~jbcq%*ZcSG*YL+x zfnbhpQpRN>x)ZF&8x7RJTwhJ|pXPROqLM()?(F5Q$1EL(Ga8~Ko@>ybI3LThWi3XG z=mGXE@7E!h;>0y6W>OU}B%55dEbp1U{OA$^(Q;Z^2v>u_^GrYYndMBM_ zq{UmhSw9C~K%4FqFNzs>4)fnwL*Q}ppG$2$~L}O@KFOa0LJ0!<`cDIvB$Xl z;ghFHh>_YHCm<_~dRy87Z^>;T!04OJ0q{Ko3qjQnr02z}>fro(s68yGyDt9uEF;m!zP7nZAPl^#34;_K`c9;%O9$^HMtDH(F3vf9Q;Q=& z8?00`qp+s8kZwE9NI2_VjxDd|+FAwf?(}XHd|;DPiR{43 zxKPd_8!9tr0{j+G(=NaRHpuXQ8+Hg$&2!^`Vg(g`nJEoFA8ZQl=B8%5IWSM9IJJ`= z3ad}RDTOc^(UQ#WlJ*EGq-P>KC=PbF;y1u0wwmXZ_&dUxabsZZjmgNi4gccY?kYw- zOpmS)XZhu096dL^-eM_Wmp=NQeKrCjJ=t)9bx@1-hu4D|-2SV|N)-5TC4&C?2BWoH zaZL=wG}g}oH-cjJ8`>^F0H8TBjRPyJe@Bmr<^Te|RB}9o<_Il{Q`!QkS-nM(pA~Nm zGzd%tEE}AfN*K|RS_K0S{mnmedHa?!yX`4WC z<%GZtiDbqpv@_c@7v|Can43}CK?CC37Z8jcz^o?_?1Z?6J1R}HZRhch@k%)+{l3pC z^$~N2`Md1qpLWzP6n8c3vf%sJzf_u0p3w{0YTqGx!o{)uSrO`72U{9NDy();^~7cJ ztt|Jc7q+Hf)F0vg3z7QJ>4^g(>FylAyMtHCGV>IlJQgGO>ol`<3SAgIT$yXNTX|5vetc z2j}HpSeVe49DUrID^-36t9}ln@0}8R6W}bl+VX1tvqde*FfxiZ_EhF@Y5}^imz95!B7Y@QK&{Z^w_L(nnTOyZl>Rysxgr_l=NzI6vn| zV8g?ZJlK4rQPEJGa7`stU7vrdlI6G=8M-CbyvpJZ76pZDJ# zyWI!1Un}XeCc$gYWL-3wH;1IK7{v`51Ho9C?6@J)_3+9057t$sq1AD6|LM4!yKR-H znRUvP%lSO{z1PFJ^rchEa=z4|;<1rW_e+{(L=eaIFD<@c9by`7PsAf>RWg%yQ}d;S z+em%jv6ia9hbAh=-Wn>pW{~yYaX-8tJP2B?cFY{MNN}8ZR&%gRqVosp&x75A>C?Ek z+`(t*4&BlV56xLU*V9g7_l_?aNX3+Q$%v2!E0$`}^^Ph7MQP7FpDFq6?R-!M z@H)Fcb6f@*GG1f99(oSBuLV&SAideH{yaQJzGh?Q5$v`Z_4fWN6b8&&A**hP|E%c`F(1b-LT)zfu-rIFptc_3t{=Fkf!3?X zxp|x)SCiCyx9FE4?|;u~7ITE7w9qaz#kuMkd(N5Xx6&O_l|-0VbRHOLo|7){Sjy4- zej~U>p=m9!(OLQT+jn_vlH(X8y7qL$uCeF$&wCkxcE5mlhn`v3joqsbNF$n(DQa@F z4b~q3-bF_{CGhHvJXHP@5K5~P`oUYoF;6VY7MX^@!<`V~m_5MijSQYBur(fN0Z>9i-W?PIQp za~$#;v>tyNf4`oMmjo78PIV>Pf(hPDl5IZ2{55HW_l&&=hP!N#jhQ}(j0ed%faw)c zUj~P`>UV}uo(GAco#+vS;KYI2Q;U@BK!2fob+3yXO_5S$+O z0t$M4y=_s(!s#Vrge0a5<#OvgsZ}!{r!Rnv@u&Ut&mRD2@5Is7V%pgz zyx3V|#N{B*wri`DFbu#5T4=&j{$d9Jf$ni(D&Mz|=@`%YN(P8AxsBPDUJo$chAPpW zlLWF6SAUq&OFKvmEYs5PHKNy18Z;H!z0Upd{<-?H!kZ**t@na6wV$LTV%2*}Z%!B^ zOSV~e;b;Sz+ObjFmnF#C)a>Gjmd%7a(+eUszSkIMhd$1Da)UtitRS{He`=VKoR*o( zeLOj<#?Tg&IPWc69!?0q%>`F17@pOo0p?ag(_cV)26seVU6qTNFQw^EX(z{@uyy%a z!1vNV0CE7Z*8Jonsh%^F+NZ$nS3no`9jiONTgy}gD|03tVX{6ny|C3)@?v1CDS!Im z-lnpkr<5nZJe{qP^YP-NB?kxIMC#e39?g^AS8%D?`uEIb{yiHB2gb0Q7X9L0xd)(= zJ!X0_&tT%Yq0w0M z+V#hk9?IIT`K%1XKZ-Auo|ooatsU4ZwxX|yUpRN+qQ~Kk#ipJ%$V0l7PSYs4VO`l3 z=;ejfpR8a1okMUjh*ZEVpxqRpx*~TH15K({Vjf+;4h0idyf^COB6loDeY5829=THT}-5?yVkO zQp6>3WH3Aa+%^%+&!VxdNvjDcPeH;U@YBZ&%055&856N)MWh`!nlw-S6c`1Yf?6(^ zjbk(Cn|2!sP3B1MTU^pcc&JAtN($i_8P``;i3r0rcTwZ%Vpqa?N6e zqy)-jNu#gN;gIIJzZSof5_9|&Me@)1K{JxWle6oUa#ZM(fvZnP>tN5$=lk8Na@W2v zmwStTL48&}F|e+*v+Eaj|K`ff+bp!aqwBkhx5I~nGtBCv9c8UP?K2J1bngh=+-KZS z`0sS5`w6kU@JDu@eZtJFXVZ&^b}MQv^5hJX{=9dU-)64c8eH5^_ucNfR;`KrT=}ws zAFcKKt3$sJn3%ZBdf*aL&^FCeF|S4Mm`Ni}{<1|$fYX76gpc<W9#93#EH@=u4Z- zuY|)WU0{p}r3WE`iX}4^tlHj~#s#!k7*{`2*%ZGQufEg=kqaO}f82_Ekz~-XO?fmq z>z#ypu-&FfoR|kSigIBgw!DXg>GQ}G6yKyo1U5)pxJ~b5^lluRGGPCpL_+@B=0h41 zSSiw5v}4aeGg-#ggdS&H;y91AZME2gkVLXaay>T6mx$~}=lEH+G$Fq)n|*Y_JTW3} zOV~A7f*FF%s%7E{K4$qttw6z9ur1|Y&<_G3WTM>?#f?d&-YUx3T9xL=!!HP0&yr>< zBjB@!+0+^0lQSXVQ5OuDTuXw$wcrehXcaD(;X}QNv78c z&)aKhny=0P_iwba3}U3^7TE*vptT<1UR#MCnO!)x72zTM8qPWeqA!MBT;xkdNH%WxW$vqi~(?Zo-uvJt*n7NWo14G%ys#V^Z*-5P6VV zwd|UUHi6_

to}NHCHOBDDLRMKrm(P(;6)fY!rg2tT?TI@uynh!(Oq!bEnm_!6ev zA&a3gcfNdtFz7s6XDsETGEJC-ub{Sh2Uem0sEAF%N5Vf0@dl{t;wXuG9>^Ks;N5V_ zwTo(vkLl$Ur#2xjw$>5DsRxiEQV2isv*&>WR-D0org1T1V}C(At;DM{`vk3MZz zibOkpM3pUb2O&u~p3`Qsa62AqrIb!AT4}P{(O8hQuq^LY|wJ=Pu(C{0hropY#QL6;#Lqm#7dH9{vM+=^DodX4U& zxifD9eesWRKg8U(m7B4qQ+=|RP{h0%660jcO6}ongI+*ftr=G#zV756slnY!hw4^# zq$TDno9l5DIibjv$dW1Q(Xlw@)*NzDnqM2(6Ayn$VD@b#Gw*U!4F9W}C#N-t(Xy)Y z{B@;LSJ}5`lDWNtAhY+Pr4A~0OvQq0W0U&__vI^Yc7j|RQJ2{TzX zbw)evfCDg6u9Gd-ocfxbWt9-AYWK;FsbzEU-I}ZwEU~+O`)?w~H*M}+pCSfHYH~Kc z_{DTLW>O_|EQkHxpvlD3>6(n|tR(#g3AsfT1+y9~p)Uy$2DSp9&7JIknFU?sCyWeN z8?T7ijfF-=y`fi#mi23>6w&%*gLX`_f7j+ji*cN0a&GzMY!7*Ixrc z)8Zspa5`kYU}IuS8#KAoc2Hi{Q`lEkCRpqCtb6{j^P}>*v}x1sKJ)dA##D#x-qeNF z{={Q4Z@{eDI*=;Xi73U)MC`R`p`HIJKg z10YB-X#W~>DtX#+T|Sx7$#oOt*~C*IqYwx)-(*a2y|A?FM9%L5hVu9Dcy4O)Jt#t6 zlXcYydv_|64^f7Fnux0RO)HO68{vwE8%$YC0ob!c>jN>Eu^}x)bTuzV#_Q@nh=(C7 z<6}OrTr#ae^Q*lANKo@m{tFz>_W-1>^171?7qpj?wL+Fw1J0dWbue)N{Ovt3JOil( zS!2XCH*l+&cs6&B&%f(+A1rqMJLDCe=Kl>lJjVSXwJ>lVz-iYw2r;e(=UVu+{U{%seOs_pf)RGVtzJR>nZ0 z<%?!k9U_(>52hiTFv4d|-n@Q$BeRHb81c*Uf$5Hilx7G1py?n#@gR8-u9c0`KbrzuGRLD~K92>qtCfFK~W) z7Ek^lGT?kgP5*o|ieuxBB#TpjxDt6M2oS+)*li3kvM~E5EttI$GI9PIJ_~^g`rDbU z2-*4SKNm7<5YLeMhz((|sCf|3>HN zP0r`Z`B28j9ERCu?7Z(jKYag$>-M^?*L6Lg&->%?FwbJ439H!yZdgwBX>xkoBvMBp zx3S@tNMI~Vn|l#vd;L*Ut{z~I`W$h&`U#69{Bs4RW~rJ@8_~s z4cDH!nAa9YSGcD-d9l$ zh4l3*PK|y|o{Hog0stEF=Qr4Mh!$~F(9!$0U3^zrY27)cSZ zS%8dH78x-Q|9C(c0WWtV_32mmj}IXFLh3S!8Ms+F8F>h^hiL}`4YqO}!&?a>Br$txB@ah>7NC?(L=KfBX(ajx!W8%>m~!h85J#?K11AtBp?sjZt8fJ&d&l zwl)9D6ZS!7<}$7{jsA(6BKnaHm6?A_?ifCYdhz#!=Ec8B*zGfskl~Y<1n-~zX9}SQ z`7Nl8q2I7 zBssPL(H(4CCA=V@AkJmVYv6?MTpQ3+AXY*@hg{*u6x93i!Ki<4*tNeN0)ip}GolHU zK_s#N$*yb+w}$8r?}nD%Utx~aT1-PAKkv8Er|IW5i0pu`FR;{j?X-y=6LNFQn>oDD ze8A9Ut#_7}!_#;`v~U$p4PR}<FkS^C=#Mj%QxP_&<>{YL% zd}z@cUGA-YpJ_)a^Ke*smnZ2|5~Ec-?kUR zhMJ8%ftctsGu-gLI5VcTeNH*15eCwCHx*V=qtYms?5Hm^w(r5s5j_>Yk8w?U$KhRa zwz|Zbp(e6AIcwu_uc$CX!2oSR42PE5t4H%2;PiKbSy1fRQ@yU@4nyt@zDiiTVdAzN z;sNN?*l+AeD(FLA4qznjt-CSgH_8ygykj=C2}H(zDG0A)LCqLUd>Zc z!O1CnVf24cwYdpRG#I`S_0ekG`=HW9Owyy*GcM^?Yh8K*=mo)Q>%m3$pT(*oR|wB0 zDiW*yY;v*l-a?%dbsK6Pihs&`a}fIQ)m75!!9Mku6S?F@yQ{Vd;sSsWc6)%+m-Bitcwog zh!hrxPm`gAwc2mb2~mIF?*0(KzLDYzdiPI5TB(eN!L!~4dalH|@5S?b04I3Xv=(BU z!5V<=(AX1fT-TdlU^OZETKE3ixDs;h&p;P>^&&l8eL8QM_99PsvNlq{SP9Bo=zEck zfZ~Vax!Dpa_*gLjqh9LSU~2Me>Q^xXroHD;GSkGvtqRgIAWjgmc!<0Ns9@&CUyoZd zf{yUpd>ROQwYaq^@DB17VDS3FWR0L_VSDiXBalN9#w0i3;|P8>Z@>-1+lS1ab*I_- zwFjXIsj&snlwy%-4^cox$kjA8U9CahxFG&GUPpc1=-6+smEwz)#40`A#bcRj1re8x zR{uuKx@(@|jo)oGQ^v%_Z6gWOf~L)SKyLEN8e3W7beTF{A7c~|F zp_4h)`QY;?mI;k6u|(DyAPJjhcFe}nVm}EA{+cS*?D7A9FMu&$zx&)P2r!Y!I~Lsd z0HrJRMY*!~gqdC3CKl$4Zd9_iGKJh_i>kjH#t}BMt!~I}Th2bGZ*`W>@mc#~&2KpJ z&LqgJabujQv%<$OJ5Df5x(Z_K#yT(9!yZ0!-W68hmY}C}^%Th>46U=p0iuYITHl^U zo51ildyvVJEyTVca8z9-o*V$H`&&&tQR+l>di~z7ai*(7T1&-3e+>obpn1qIgx+f{sLF6W^)Tc7;e0_-1#5(G+`9S zI^xu7H*FL~Xd2nx{;hVOl8@_2hKwC3CaH%12`v_X6eT8djm3uvH?rPbf58X&&U*UZu_l>LU>EwO8t2R=a%yQutx}1O%#nJ3A@L1?ar8PJ4 z8FC;hs`dpzLki@5g11^AfS6yCfmd|8=gz>I0Vex_L%Jj&>oc-<^-u_w5%hk-d_@LVSR$z>3#>ws^OFrT+)E={xi5y*h72ctyRMhWeNB~I)wGKTItmUGUx+L_R_)KdWfuFsg0_X15KaNih9gQc0upsodIXe@V`n7M|&Za9t z(i=}+a?$Fl+z4Pr>4|xUz(%{VZ-lA8n8w*<@&F<``4MTRwG^Q7X^hSNFoOuoCsu;T zcrqwyuJ#5u4sZq5R+qdg7yB!}oP>& zi&x*L6+wTlxe*=_(t$MKLZt8;>IJG?>jW@!kxXsl#-#ZkmV6>zTM^e2T+xM#V{zI& zO4(#z@LgsRc3mkG9&0}f6F{>iPr!!=Ajo_YbAy?JuJf#{AU-u^f7vi>s0hi`dLj-b zd`*^Orj@tq&6sn-&0>mKF;o)@H~&U0;k*D1A+N$(tmkld>rv%KS}o+}w7DI#G4N_g z58Y9ih8(qmBP7;T>915!VYYY8S~;j`%GQGJmzB zdjgoa2Ds3jL}gw$C~%%=J~ErXT1@Rzv9DH1av(B@&3{G*;KoWl+*h#J%-Zt@4+CWq zYRePP^<0Rd$M?i_LVO?I_w~%;1;2Gq#rirCXDp}@!;9TJj&_g=dkrPJd_~)CXt!fx z8rK_BM3`xT8%Z3|4aFk`kE|fvDD|}8cx)A~AGxMnim0zd*RUP1`z~cGQjMse;vT;<`cL^q)Sue$T&Qk)HpDb?@)gP*CV7MNIa)m8`L4fJfQkW z7D_`Lds7pgN$Q8lC_P3>S^h}I`y`0GLgZMh@#YaplXd}lW1S&$CdrwoPW?u`tno=r z__OuJbm(NA7fjU39H@c|j(+!82I=?(AsVgCwH7~%Hf_(sNvNzj?8?io;xY9MLkvo^ z31uVXS#O}jM4Gvj73f5&9_uT<#fE^$AbJfl0!Z$ zYAnki6bn+Izeu)kiw)F7l^N8xSHwx@QKVKRoy#4ITonnQG`A%MHK!7?p>L4idXKBZ z7xJJ8hOh_>ISgjGv&&1Z0A#=VUG+jE=1!Ixn}$44rvXidBm{AXrR0qddw4(>IRlR* zohnrcW8RAksPB@yoDx)3s=8(%v(W*Lcl#b6&1KgnCd-*q&Xj&9aq_HVj7={&{g$~t-{)R)RwbU78mR+SU?zDX0>z#a*Vwi7J6LMq)m3x99%Mk$n-dw=x*5JT`Jp5qg>gQVT+f;rJ_PvzWmfsK)hX?)FF>ajxBO!uRWQ*ocl8LG zFSixv%YK`^@_4sxtGUZldWjiDElVUhPR#95t_pTB3`&0{dkUPz5Ja( zk-o8@IZrajs>B@tKi|v_gMD)as}C?wuM3V#`fJ>gIg82lomWsWhCWQCp^Y*PMfK@s;WP62GYjCl9FzT9b{M@Gb}r%#otsH zZAgbcJK*J~-_R<;7n8HUb^k^RW75XEannHb2@o0WD4t-aQNv-w941;+7kpUIG8<+m z=tN8U)?|<+IWXd+&~ZwYTEWjpz9ze^9&A>3rhmvZv0gBOi{@VviRdfiq);A?H;a^c zb*dzZPh+NN=fkMcSqqf|**< z2#5S~qe;; zWF~rf0-OjPfSeYsT0x>8e22D2Xev2-(Z3Bxk9NjVwv`Oq_Ym!-(=Kp@@1)E8Z~g8r zFo-o+&1)`5l% zmvb(cO|(eqQ%-Y{>Gt)^rUB1M{vKiH7XJ>e8>&{in->uUpja6`h=@2L1wy1`FFJ(2 zc2-K9+z2kOf<8``;I$(8G&W!uk{FGeGS0w)(X{pTK_O^~{$n^DuXU$Q6+`sP9?g@S zWW4O==T-5tW4}`b>PyYW`S5%8UGC{HM^+nO>lIr8k`#c&wb>iBo7mx&;*K0j687I4JBA6gx~QAPDKMwHTM+ZO$#^Cl5w+Fp zA%^A5%sJ}4T+8440=#PjD<8^snkiptjYd{=V5`&~cR`ojuAO6AU7<61}_bJc$qVVvHl@uuI+t zDSN(F**`py`_4U-J-%20c?)Fr2t&n(UHYNO`kEQyuyKfima-iA_}(vpJ7fjBKRH&% zrzuNg6}uEL{qDl!t+G=Pxg!DsDiRx>>zS#+;akecR*x4lct+z>?#h~ZrB!dN;&lol z15HNriX-1-5UTipH(7G>TV8|zoxtAVY%UnyvZ}EDQ%l2>`EvREJc&h3_Z2qQG^;*r zvGVy2DS{|ho`!tdr?<7a;zq;Lec9WdmxL$$(^`2w?;FWIxugrMdrM)@(!?=Ja@MF6 z0M%Nl7wUpPpocACH!(p#t&b##M&A$Yr=$ni`cFgzv4eaa(h(}Ci_oL69ps6j%}*+5 z55m52Kid<7LjE~Io{p_81ySPIFt)*c9oW9Q#pE57fI0*H<9~&gY0+;Nx6aW{a|}KA z+e$A$0SbRnvU|;v4X`u^X_oa|{Dh_T? z1RL!*3`KNCcP_ew$HK|B;?0GXR@*sg*1YVTBCs<0zJNehLlBh*&0jobJVD znD6FQ?1R_ZHg7xq;uAX-XC$1mg0uiH2z~kO1%&hUj3Y2iqG&a3`EUX&jRZM0{sHDb zxo(~EaojdTOQ>y}q5le}={@H1whryW`KqK_f=SwfYqfvW9^u$kKprWi<<*oW(tCCV zx8T|!Z9&6NP+v8kpev`2+b~ka8TcVM|8+j`BsQS_8u&nHfFUtTsqQ==T@$*y_%F@) zW~^mA`MAd3(Di#y(Gg#G^C{28E$_E>m4EhGtB^Fff5g5-U1~3c>mR^t6mIi)h4w?M z&1)MuN^(i1@Dh~{nSLXrtNR@*4yBGwK z$yr-&c?Ih=-sbz_aO|#-klB8Jf+OALq`<3{TPL<(QhrzpO^lY^^0j2zs{SBp-7@A} z74k1scm}g%$ut2-Ij@b!9h-_T_-y1yug}WX-QcMYd7s^q;VMI?{=W6Q(4|MluqaZl ze74HZ?&9M(-ZOLA%Vq{Ql+R407d$ZH@RxL)jy>Kw240cbRyV=bN@d&A-?`tfy{@BF z^^}&@{3lFB&#c-z&T4#USGIx~@G`I``fp@WaG~C?-{XhxquFt1j*OXto$T61IU zc^FGRSN}ay^+CaqelAJY;oju&C$jfyx@&Ri%?jAXoP}#?pqJ-&!U?_cbt=1ldv8du z(ZTh}1o$-~=O2Kg%mCQ7O&6?#r9jfyzinX+Fjiq>^299|mH0id*@~*}i1L0#s+)2? zDs*V7nCksdL2=jSS%b)HC?#ypM8SOU6eW$w|F<9q5a42!+Wz87{*{M_N+YBW7CjHL zyc``zWxM0Hs+z35TeuXB8N%54NoRNc`u$n_I|a?z`URi3T}R1Qy`O5R%+t5Pcvb~W zDDCAVd-T7g280dlQfM}eoRz(6`5@01hY$Wi4eFH4LiXrPdogVQ9cAgNqFW2bf7K9#hJ#)A z3YLLvUB46u*pX8cb|alf&Q}PH)*VRo&H8@p*&Ek_nsDH#OZzRhXx-(s8qFUnN9ArR zd1~3ZKo_V7Pd%+afcx_JA;Zofzd`g7`s^@ldfoTzo;+0l!~rYHd#V*#wH8C1x55u@ zA!d|yqKA}1)??-3texT~RGiY(0i!|mbdGC*uwqDCt+LDStnfBIAN;|%#5rdh*E2AV z|LgVw-XGs-gIgX>;@I-KkfV$QW9DPgSwee_{oFY42-5`L!%M_lnCp>;kTO~VJf)ax zS5MtkJ&5JUB;zAcr4Zg_WRF7iSHRL^BETCV2Wiwy&;}bo)2;qu?UyozX}s%orvV=T zv|DtWUZC)Yk0~}?Vb0t)1zL3roEa^bwFjjIXx`60B6+UNIG6Zuxa2rAom6e|k+ndC zl{mUuAj2g{^eeIsR7q7Y;9qO;JVOo3DghOeJ&O@#x;WTE(1!7B82UjE)_FWz=;0ho zA57%TAp4~fpdo^wr$$Zg5C$+4kPvLvGO!42yF09|MMAjShdCACSvc;aiP@ktGef@W zS@R?7RLjX#J!U?;AibXA*lSk`kASs4NqX6Wyo~k(QP+5?llfXIKGmucO-D0E16~C( zU9$e$xO)Qxb;a>K{ijFuW_Ab^q?Sn*{l=h!soV+bPZr+5B^y@0Ohdmh?1xg{CM_Q> zrPna~iab^6Ki*`Dl7bV1dw6O}lioMbNaCJFy3|>R-@?zV=T0CmIUBkp*8~z~gPTJg zop|`8-yNmarWMt{dr+B7FXO`G?4*zQ8U9mHi@|d%@qsYP7)WhimuwAWw+lT5FQYFV z>XpB4R$A4e*;GoyD$Xk{H+`J$H2GHwzk>ax5+4kFJ-8lrS7t2ywYQ01_AwnUL+)6V zh3mAEN*)|#-}9P!PHWwPy9XXqr1#`BPxF_y>BIx{0YIfigC*q8YUI&33PxQvc`MG> z)aEYXX@C$fMQeVZi6wQV{NyLal6h@IBR}*)>#>ae=XSLpZi&zwMH$KY?WuWua$YYn z?ruSX@A36;XU6rI(~s_k=C$?@w;!4Mklvyvk8pvrw=J(G5Kk+3(?(V?-*6r7TOz`j z`eyuo)%@8dlQC`NQblYH22bRaQXPvY7&YAZN06E;F|Dwr>TO;EfwgDyPwrI*(O}W! zH9UW~v30PaZqZXHNv%$Riu$T~>6{5+k)-R{Z#!g^cgv9jcVro5^Md*-yZIAk#~zH6 zOClW}XMXjTjr(v+=pAy)2K7Bb_JyJPeSgA1$KSEB_b+_AGA(PgB$B0fFrx_Tw>eR+ zH~S`@M~oJ;CJi;?{lZx3A2PCEeN@|2oQRxP@8%PT~C-l}bgWS*{i((kO1vlV>Oh!evD4Awzn%7xB6XM2b=KI)IKltW_< z0AKc{e0)_-?)(G$C&>stfH#rs4P-*m38G%!&GQ4X$GJYm03>cG;3Li!HI7i@)o?SJ z_f=_6R&ZZ-6c~79@2?VZ_ZqKyqc3z}JE{V9{umP<5~c1tZB8g=7jOP@DQe%R(AIyt zSlHNdNumv60GYV_0sPoA05(n<7umK6{=T+y8mR@Gno3v)0ya3cq@W~bwQvl_DnGJv z4cSHC9N32MT~)+0Fh<<|Bf{d>M0k3*wY`_!nwe zoze-*BTuc-*CrOY$(+h^HwNyDf#vcLsbBwp%%Q z_!Z^ik4nOc%i;dCG;Za3id@R#-}X4j=73j}2;-q1qYUnK@*G?b%KQD$7-ib+uiZfG z#4Zh<2eW_c4l1G|RoQbR%67q9rg@%An)r4*@o2D6KDQGR zf}J+KQ`lOtz;-{E9P)rzftZx=S^h#hjUxL60keFK8qz5;(}K(iLf@OoO~>WV=%E%i zgk2AWK{0@{T$I_I1^a~JjL3Lnf=5AEEqW`H`pI`E)6ueqm>vG}sXXh(WBT;_=w`Cq zpmZ>{I}X-5Mlc0;&t%0C7KGLaCV!Z7VtmGoG8gP8e$nU%>+S1Zjx0bHVpsc?Xju9Y z&AQy)5xbf?^j&VS!YuLQG4O;?RcIpliLP4D0Bi#!lqgN!sN8X6I^>+%zU8!;JfZ1r z9N|1VFUbiz6Z{QzsK=CC3Pox4Wl22&tO~h*chTitM#b1y+X-v2_SN0exfJ^1uD|Cc zb+n)<2zz-1hG#Lu`JsqJlL#+hSzS{x=A?WQBSm z4iK}13Nmc15g>m}xc4&u#MoziI&oW@?Oug-dA+gd*HYnBDA#PC=81M4w5)AZ?4}3f zRSGj%+s+utSGRttd=Snu2@eTTOCu(N_zdniM6C&g$oN5{dW;8YaMB$M?ZkTUfQr`XWH2NtJKc)J-=ta3z z$bT-?$@Nv6Afr3nhg+eKt^?5LMma0jPuHo9Y{{y2F+^=GpyVA%r@?ebg4=cH$ZGby z*S76$S;lt>Z0*W2WuLOlk&4!mMXhBsydh!jlH)qCufaqRCTcJo4MH5(Xj30e2b|EK zHDYcHSQY*kq!7v;VGqouvHzQ^T2!V2DAkC+P=W!9O|-(lu`7|gmRH41-at2B2xCXz zW7d>({C4*h&BZV$A(=wI{olWs|afXMoe*>p(Mj7b;OX zXlZ0$P`oj-SNQ}Nha*vyt{v$85 zU~}PV5{*ZGEoaqO#Zf@juoC!(NEtX&azhv0&bYMM4sin+LdOmnvgJoQft#0XT>iz% zwke|S0-8LQ)J1AZBMSU~!42WmO5BVtpOQUM$Pjqy8~Zviw!@GW#7i{DCY zJ(L{dxTGL;Y;Fa}dyXHl62~+pl$>#(+~*Y3zR)lNx-bp3rcxo(E$vVLItT+$cW|%U z?%zrJFKNWiKIb!@M%R^}@z7G!UtC`IQc+qun|!X#j=Pu8AvuU%#`~MK-qKnej5B7K z?zgwUpAj5>hqQx}391R%Z@dU>QNU}mRM^hkJw#?2Vt)JU;0itdPoFU`}@?+mPpBJ#Edv5qbW- z4J~5*jNg&oZX(6Yan3BMU}-M!iAL~q`mf61#RAa%uuGc$^`Et71Dq_thJrT(amFif zyk=!l=rXQ^f#Y|M;Kse#qM3HPIzSEyQ9>=Iz3^%h=LEd?Rx%gR25aa-{cc#6rkNi@ z-6-aKejX0s=}}rus?b5aD*C(+$R%G+~4!TBTo;CTXT4LO(E4;3n?lpV&^RUlR+N5yZU)=}6;sMZzF1i9G=7b8;l_?UyKvB3cZ``|N>b}X%B zNzZZEuL7yRdb6&sx7>=|fH4YpMtxaCM~}sPPGwZ6!#?qHEDRgAhk0 zrlrZr@bi#%WL6rpOxKu_a88iK(_td&AAtr3c)7_i@X|P)1+PC1%}31RyU+@j7JEwXCH?oz*m z@%oSMb9$JL5BJI(qx7~K9Q?UX!jt8v^mmncV1_znUH?YfL@GMo11#*bI+73qqK`CD zU3zj>es`{pChmFO@$`zZI_=xORZuv3XmN8`EErv$o6PDcL_GCR2c^$5SOe)w0Gz3E;?I)rAe50u?+o7s6j z@T2H*&kFrnDSs|LP>&y>n7Hin3B3@qmvW764VGDp|Hz;HMlGKtj&^} zyZ>lh5I^VI?=L*l*PFJOP_?db|7z0mVs(K?rai0e-0$f_=XVApg1Q#7B;&x*&&q3x z?y0_ao@s1wFLQ=Q_Q3BVzV^iheZ8aDM;3c^ph%Uo*emm?w^+>v{9FG%6#6**A)BoE zdM-Nv`QP4zCkY+nn4t29yO(v%+ehaF`^>QUnsctFp`tN-yvb>XPY0aSz1i+dPDKlE zd{0vJmf$m2L6s2B;#85YNn^#m*h}uk`>Av<#ri}`vlQRMS${l6lt)|6U$Huu7_LKN zUkKc7iTDn!Zi_qXqgZ!_1Z>92WqW_s&JHIuS5yxN-Nz7zsbk$LmqgF&b?zPb;mv5t zA^Z+^yfUR_OHm(sDmEx%^c8C$ZlfgIjtoPwbpO8$6Ia=sopM9=4ZqxuZ}ecuVQZX* z<-2`ncWJ0R2>Ii3dCr@%$!oz;eRZ@g;KLHJ5xz#_D(d^5gp`mSh{H9UcgT5FZ>Bvx zp|v86u1!twoyU#6??D%nz|sV0`HYMP{TTi%OCJNb!`8 z45Kr6bHDGgyuGJutRX}H=u&_XKXktLo)ZkyK^*lHH)+Yy**1aSjOu=dO)8xxr)*@v zBa(UXt@~l4lG`rL(yDjSj z4!8)MwL;vk%K#2JFTaNIB>6Q(I93%gY+6Y6N@a}duii3G8_)msuy^O&zz5C8j!Tu0 z6iy*;3w>v_m0&j!l7&P#KrS+j0Awi#0uFQt#@3ztlWio0U0Iw9O2S`I z!6N)VttXh|xl_C1dBM-!#X;;$>NDR|Mtd=9Vm=9R96aN}JWIdRYAv@h6< z5$!!h3dUf=qFqje&ARr!{5XbuT^he*|E56Wt_$yHpz~gx4?*|77pB^ONPEBbR@SS; zNpy65d+qZ(X(sMp3kPv`E;38ZaVSWTvs=1@Ttc4W^Gsb zYRB#eJBRH8K7?Vc)pE$EpkWK&di>|_fxgK+ct_uLQT>@@Yk{UcEVexip96>n`q^OQ zJzfz*TzS^W1MI9CFPv(}#V)AmC}zUuo$nVi>w_BWdCep8<89g#arOhfGn-{zx84Pq zy?CuB=ma=+f%ZgRdykGaR!aLZ3sTQSgb?rayRLZFo9}BG@1Ub_XayxL%9R;Ld=Ep4}Dq8XU4xu9US=Eg&o{m zz`v^=Y){RV3$1IC+eCk3{G($w-+J%X&n)t-!Wo~vRVR_I8F_=bqEo2DUrHi??|;8! z6Qx0JmDBlOD~3g%v@^BS0lpKjK63v=cE|yEck4P_OeSfF_y9Oy7>$ZJL~@`0_5`I< z0}7AMo;$rO{{6nT1k9Gcq=|>4cVpz_Sr_bBYBImpX?>|D5o!e~|9ry!4emV|nhozzCnEqj7x>oFt zxlg{UM}BHGTbUjfquS&rDHHaxj<{873J#X=o?Kj2<=NO8w6amV2c3^8mfaFRo~W){ zwLyiUtuM4j%*A!v)VY2EuKLk>*2zC4H>I3`Z?x1_RFOzm2W>`mVa(z~{NbP*O3b_) z0i>PgiL9s#qE0PM0My$rr7c!HDjAVbEbZUYgwM?>?QUykm1*am<{W>0@fmXXm%`#@ z;ePZ^6AU{}{LiP?F}Rub6_pR)c)^*uLeAF%3$h;eV$mg-baziI-`7W6;o=6NE==-j zDA@vQA0F+EH{v*=4`@Om?U^>#TR7JEc4RpYvp+h-%9Q?vAT_bs0j*F9>9==WO`}MC z2CS-GC0?s+O=VL;qg~+h9^#Uj-)&p9mV$e9$n4*?mj* z+I~?~T{81tVej%KkIt8sY);8fisC_HQ~QSFg1UHTO|u=($|~@=>g=6snQLRcBjjpu zK7%&9>+O%kXCl9Z7*a?vqrZQo_CfLnC0e!%n1e@u@#7d0S`Bu0AKlmeJ@qxWa=GI; zTq=QTO~ZR!xzD^;5}yiLb0xHKjezw-+Ww8j8{{*P&mfvJ)$+aYfXia026_-aaVk3J zJFE{HX87jAaPlv`TIM#JUOV=PIgKst!S~jzM%ZdXm|ZlN?Ep@GF3N}5I7cL|?%3rP zI;1=7VJ!J3zUtLm(Vp9bUp?P?LWKkv9?K1DRQNDKU+UU(7+wN3LXRDjm_mHWEM*Lr z!?J*AIi!<**y##_ov#T;`+>$iR=DIuV|_zYaWh^e44_TChFOc8Vy03{DJpWD7nzF( zUnB6-w^ltRZ()H;>X4m-?1%%spDDyKNXavpAPuIRf#)#zhKPtGKPj;#AiK83-}@w| zz}4J>8^}AxE&$vjnVU*Da@^^ahf|40HT!s%@+QvEb8s4g6@h-xMyCzb1y9va2=a4E` z5Kg41Rh=W-O`fdVWZT_#9Tq^r+dEN=;HFp>>cZcBQe^3Vi!yI*F>T$kSbZiiH_E%( zD$7s&41#5P@JcueJR7!Yn>VNuqk|5}+)$!AFjN!mme}|k%+&KKqOapgsnOHovV8?J z@v5LGwsnZ7cjF#xH)(mTuW0($fjJ8!tR*TkGtVRW~bzML8>91f6XdX961IyGydH)+^4h%zDasvta9;oM&MG|!0T|yS&$u(QDca?l~PFH1`>~3?EnDISFT9(j9Y=;$+PLfaH0>$?zI4aYm zmA5cM*1Fctet~?M6wm@VteWJ049fAli#X6SG*>J_Rz1<8@GkY*tVRo;h4m6oHu4I2 zxk85>W}G_Kaq{}13|5Qif`3w68ma;?eV1LFRq)dVMx5F*88wGmss*fyM7O?4o@*r( zQ06On!t3If$svSPIlum1o;NDySt_ovrhDWiL2V?-C#*piuyI>61sj;P-mGjpbUf=g zKnrS4HlN%}oHRDj;w5mNZEQGT5qiuTjy^9&;LwMiHUizoi15wSLSe~R4a>=x=iq5h zP_vqa%qf}_MYCMPhK~*15QM&Cm@RcmEA*M(I5T9U>x1&-R{mB9>X8?F2fOAxta~7x z?ANG$`*e406e)5qms`Md=!jL7@{d#76wUtp2djKbqU4%We;~&A?&lYXTG%m*0-AhS zldkY2qT7u^PSX}d!PZDWCbWYN5l$+pfTGXovF8?WXRSh( z>^acjvJI*dyFXnab2d>S$jFwGMux=LD-$VQen-s{=ya)$?hsaw+7BH2rnOv4i)P)O zIkAgx_4lu2*X4tOn7!n4?wZCRKYnW^Y??2DsGx_eP8$+We&JS@>{NDq>3zPe z<(*(dmwDiXp7%2{4I9Rv9qu&UcVxbuiu9s(v6DB4+hvbw2fZPwGmFDdF;xZH_FlL`;WTj`x2T6z%U!Sz{pEoBAHQ--)h>+|i-WFBTD^t=UEHkuBq>{aUUAAcV zw)?WA_VD?Q7|4f;V+SF;Jj}U{vAJ6CevY4}5;Ry#N`eD*$ zZ@Fl1Al6c9KOz}dt5;mt<=`L}1A~s~HM(myC+W5Qd=J77SpaSR6Wggpd%{Jt9j4p>Kn? z!)Ep{Q&16DwyxxaRw9sJ%(h=mhK!EzJXU|7AhBEc$H5NhBa-jfB{z_cuQR+`ZUWYX ze72m%Z}yz2KwiL*lcobwHfWA<#&lh+>V^vHc8wWmgNf2$frexe$$&$Ki9N6h31gK= z6nc<{9Yr6}OHC^?o$ht$Z!VN4qTSk@yA1O|W#50)uzK(yJ(3qe`bUFi0#}@4ESRsQ z+O_q)&^QQ1!F)x53xAKMxY1Six`7vw$~ZfTCiNTR-6C&74c6^$1UNSyx8Vi068xBa zZeBwLdzoN=@pezflMkZ%0hB9X14*+kNB(+?c5hHIdZy|84|1`)AuQ+PuqX1j5=jv)qEQ=LWLtsl*yodNH=@`wMyH7Yn9!_{TGVczGgVHxlu%)m?2+2NM z@|x&}J_hnyMlq_cFMgBbBh{ieN(X8&SsO!+g}@|lU}!Ng74`Ro^8qw-=ZB5y&k3J z^?`W0A0NN-5i;RHTxRq8XvHhF`wr_)wH!BR#$Kp$U71zAm9~CPUOif^;2C)PgRJ1( zx6M_0#J&srOLsnJ;*A@u-Gj#r)d969Ge$8}p!jfw4 zOe>!m82t?zn9sNjzLgu_remlcTRi#{qKW?|w#AzlZRvE73P|%3yfpzbz9gigE7FJ=7B+ z9R5VGE2=0mIjn^=GWvmhKS*_+5wr0Ssn+(I;Iv<}bjJ;iQAs~%-f z(v~u{#~*vYmc!Q$?0p%!{r+#Ru9Aa;_M4A~<3HncO}|FSy@zaW)eFvVE8Y6~{qG=7 zcHxOPx)zCZT%NbgQow8#*JfSg9hy~%>LLmBn_>0kgEGq|%2oN`@Bg7&?FAJ!g`En( zguo^FG{E_f^E}xz8)+PMl<;K4objeU08men`OehkgUxoHVv5FnQS>?_uiE>ya z+$H9awy{GZGv?L+3$@x4IBZskJ&a=(zynTIs`2KeN1Mlm7y$;XEgLE{z zS3Uv$s4WJvpGbGYE;wFSmCCgRuQzl_ZLwJ)Id`ARu+I8{3R8sC<>gL)+_D|`jpV%I zuJVV%AMb|lbdn*wY0tr9o&)~8Q#;BJ!3MFZvIayZ$P&>=enI+-VAtL9qi&TS zCInK-Bm>O>0>=rn3&b~|wLS91)!%5J5N!eS&D?Y1vq|h99g91tMG$^K?Erb1afzg~ z117-hzWd3Kypk1RiHc_3O{Lfx(z0z}kcy}1hAgxP>?Sy{Q}~tT*uBczS%Q*2c(1_> zmy8_;X#)g)NFE7-K1#g{ZBiaZ6s2#E?x1~FveiHnXk=6p$FnIaoHI+f1|K7a11;$!5t;i^u+6hmCi!QaFI> zNCw{!c<8T!yuyrbG48LH+sx*50w6FvM0fZvzDd0Pgo?68y~7Ul&qDqmcZ&Z*e3Y^V zI(DyM$?_I%0eEM&1q0m&y#~8>uL~^nU-?a(853SoX2H9W(j#9b$8n>hvz~(xy>1=QOg}DGqH0Ek1*qiN#&3?G7 zbG@;l%Ts+6^s@IBbzGC#=(O4Za6$L#@IjyH;%!?V%8Oa28_s&LPq;JHoawUPtvs8$ zYsG204|nDJq--^`JD(C^sK+|O3w>16+4|a(y6TuKxhSHDMIPD>SfRmsd|Lkj7i%6)oz5~ebJJhbGefH_CvQ1Hu;TRVu8lf zj(0sr)AR?gd0TFuIJ4Dv_ro(IGf_<7yWqHI^PWrP!yDcNu67-Mk*&RmHyN+xNZRkT zQG3qD(!cSN-b0-Vi`MehFBSl!G%|DW=AVrkCD$$hG9+ez2xz>7{P1Bt-tpIET2_Ka z*)xeU)ky^Dbb{QURqN2zx&NW)!7!@eb&UFQfx8OU_K>@iiuhctxMp#Omc_l}wrj7? zn>+Q{01Z`CUDlh8d+*FC-BjpL$gA5^2=A3yv@?VNX>3!OKweRCeL$sj4};|uYs zJA&l+$}i+;qn<+iMz0Wn;jjX;!FJHv(6$=xAqlN2#E3eq=d=g0qitCqy-|+jL99p6Oi-0Mzr6&kbPy6jek!re!#~deu&`t95w0fdEh>0K7<&}<%k#$ou;mYezGg|Sd6^B8R zI=WB)Z`f>8yIu&LAVrE>n}$vCHTuda@|-7DGe~tCGC?d6q5i-YlXW+RReLKmxK}~q z0nLd;cU3N=Mr8Z^Iw3Jn`Vlv7hO3eMaIY+aTEVzPaQ$!M-b*ZRF;eJSeQs5{h-fQT zIm<<}28ZH6$Ktq>1SkIE)bvT_0_{6WG)EQ(z}_EEMD@mi8MFq#{CAKz(OfaZ^dMYZ z66*7ds55}*u?$5;qiDrxA0Vy!)d{ZYS2`W8sP~lQ-TTXQMTj|Zm}tTTcl8Ty5#D%v z^o^AoQgLGeYDqT}f`8NT=BZ0+qL)6rS>!r>=J>j&{AVO7fvs}k^5Bvx)oaoWhciqZ zr+;J44Y8Fz`S@;c*)*!hw|YkYMaEck zrgc4y!d+Wudq_D%=∨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

vl?g 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

gYaqx}>-alav+ZAm>C)x$qJ&hd% zxC9Xn1={Gs>z@W#YzHh$?wFyYLHcPZd-S2(;kefxuK!T1P-2p7@N_Qn7zppDcx2vE z+3hg@_0QpGqb;-TE6S~Q)_i`?|0VKphXU_k=+GDCn8>p`cKF=VyCII8y^6{ALO2G| zj^R+?1&&w1`G%r#GlsW9JNgB6U>0zVzD~3+fdf!*XT67Q?hU0sZQOB!tWcYNtT)!r zTRZP_=6>iOKXd!-s@wICyKpMbcK;ISp8^M0r(<_>oiBgXy^i`RGcC}O@ljH*o4^U# z_e}1fdBr_2EtVg5aZI@3NH`IfppSVj(B=1Z*X=h!edV1VYr5^xXCJs%bvG3Fqo%@v z2z!mY{wP^2JEr@?g4dKz0rb&?d0;A>!QOtGVbNeBzB@CY{s261v?8&q*{SJ)?BDC_ z4h1+As6QPFzSG>QH#kU5iT@jqb@u*1^t?y0Qa` z&Ie29y&SwdXV~bM@T(GU%Y7C7;ZT^3;|l$5eo80Apo?pt+@p7$AomlryAXP^(fM*} z-Vlyc$UFoNjEAPbExRoz-Eu6B{eA0Bxd^Zxj`HoX!=~=mOPk^67oT^dr@bXdC+qF8 zB^E~LoMBzjhfeo&JaGheAoTBY5GKouU0?2IwEFDjSRDfHw!>!Ptml!+?XfCvj_sAV2M?;q0SQO(C1nzDn9o?aD7#71`!@}89kb-ikTpio)jqz(ecS4T`u}c_Z z2fz=y@Cer!mogr93dZKRl#z0;x+;!GJaDG$NNv;Y0i;E}S{_md3D_H<%=3aBa&iWKxpc8J=Z6VhlPePvPy78KH}a$1kez`~^po@)-?H+U zeJYlx(sl=4ygbgIX@H#lXfLbp49$KL0zQp{P$nMgm!^}Cw{rz>ECAy}JgW#Wo8kWx zd8m(OoCHtQ_(37TH+=xF}Dwi`WNpF_c^M zCDfe>Ko9maJ93a`J3aFBIPl>L48}9Evq9LI;^Bdz_+7s^K$JBFe^`c+bM!4?)cPL=X7cV{B97ilTnV*Hux6hDA z16|6$Db54lfcqNQ`SPMIIvselg2xG-r9CwK`9@z3lhr%=*Iru~daonLm?>D{Rgk$;Bb3Et%({L7TDbB;`;Mw$edi3d7 z5%}75>N{EB>+N10ThtDb!N)SJet+`=wpxSEHgGQRc)|nNCBZm7^}OJ(afkaQZuD5s zr{8uW@P2V8T{ubXJ`O7lv_q?|VQrz;5(j!b7Enp9``x(067+LTJPzy-Pic1?RXQ&ecc5O z<iT%Eu#b{C$y zk2?wzjAL;G!r+YW^%ov24i4U-z*XpQ>oCfhwwGfESY0C?wZkI}~^vgM6DDu(fN~6L%_nzAW_r zY$um@t0#9K&?&+5**)Rp;2jFbT`&um_{DPK`RqQO_I7kA@O(MtwQ|vZQTyF~XY*Gc z=unu3e&r9TPt8G(cQagl*UQ+J{bA^j$iMaBwd5Q>_uw^+Wt%r;G<#ae zod>+6uS37bMed#*z~^q`!*bH^C0FaaVY`0+VdV2E9F*(f{)$G}h4H?72*(K~-_*?A zJn9YiC>#I}-_+EN82dKfKf=oP5tyjG??#M!TjYKK6Zt9|tl^%26Dz9)&pngg#bs?j z$`K1XORl-+Rp`7Vt5;HQsAnTMh5DVfH*B?BFE>o+@<r>_xi1zA@Zq*G*AoJomr4966w!2uJ4v?;&__#saB7{ZVGu-2F<4oELYj>zZQ1 z+Oa?HQ20TPr}Rc0VB7lqYpmFb9yT6Xj!S}nb|bK}g?CGg!7-JY&n$(b5G&V-zN4}0 zVO30)cu$0-AKj>?I}dkS3_#iNo&!r~$onq%Gn(9u!H0KC3?K6boLWnh`j?Ia((#hE zPs%eEjx!!{>3tJ-;#j?)E!M+sk0xku3sC;AX*-7VfewW$(Fbe}=g33AodsR4fRj<| z>-DaUbN+W>hYyd547u+W9L;Gew7HYP>YWUr;gm?rNaE!D#csth?cQ?>!Mg6v>L*d$%_>~9jP`Jn2 zAN};j9qVDtQw!hQPh}iKTLN6BDSYSdjYn||qlw?C$M4$|tm5nV5SM0RL1;X_&2+3^ zcI(p^7t$e(@gL-&ljXj_+!cYJs=Rx??2h8mMIMvrdEFE8o#0LY>dCRl=)g2<1S1DPO(ax5Q-sU_b8pQ^qgMkK>*<1fIt? zb=-4b#P@ceKH?<7JFy2Gj-VUwP#7(7y+ffP#%6Qf^tt4p+@a8AwA2ggcQkh>oY4T| zR_suCR(F`#cZrS{{!#=NckY|?s=NQ1)-sN1dDa86yN-NKuMo1lC0*-ppU%2)b=27p zpihb8O#2?w&V<*Wxojl&GU)g>+s>Q$9Sk?$KMxB{uekfJZj152x~|z7_hR7&I}X5C zcPJbNXTsAmHc#bi-FO#w@tFs^3kFY@`xMwNY==VQQ}2|qC+#6)YmC{a<08xcH)2O8 z;H17I++o|QZq$%=Zp`%8-BlxW+@tl4J4>~`5FXumoQFUziCa40GI1cp?`yW7Q@&Vc z0zH!>Gmjx3;S2txgZeFYP2deLgejbdxA~&ji{*!Obqo}gFZiW))&43EmyDl6eTenn z^ih7GC;Y75SeWDE<&ypc`az6LJ&SRs$Nt~agZ=@p3_bw=i9EVPfjv_4KtAtJfgpHi zT%Y(R@emC!AzAQ{tOmAx3q3iZ49kdzg=xepc!*{MGua_SQe!O7$0J36!i12`k_`_S z2eHz00HEMwUO>Q$hcki}PeJ%DHAxGSRxt1!mlbBH2aj}sX*H%;u#5x&52<2alR)Tr zfdoVEP?(BK8F};TF`e&II$mJjDKK=v(YQhPF*o@!46rc4pE}}H{NC@oZoo~mQ$p?< zTmW-Oy_&8SwsC!o+x3kzcMtGFnQ78-&BpfJ4Y4KdBxXk4h1?C zaOB~(ld%o%JvRVHDWqk2`0IK$g{QlQyBdy;DUZJ^XZhF0PH+CSoW0$la&Ns&bF3uzm6E&*7t7j@6WHaEzg`?ogQQcPQL) zylnkze~kZ3tBmt!JxMz+V#9dQ+44tVf#BHN)bM(lS*_e0zv`_*uVpFUDSawF zrFcLF`9|enoW~s8;}AXaaP1sP?t`tO+@Wv`b{+7tDSLR~B3E6mz(rSd0;|a-gAC4IC+^HOS z2zMwb9cv$h&p%jJxURqF1sQDeLd~_YO?vhn$B9Fs2OJ7~F7Z1QI7sEM7{~*GjtCBg z`GSAk5j!{@gW$^CYq*>%eJ0}A0w?aeLxC$Y*@xvmbyzELD4dRM$lCn*;mMX4v22Gz zn;uvh#Flb-P|lqA_r(_ELD=rhiD26!ws+^?zJ%`hB?WHzRlRBQN^)F;+aoy$<&lT5 zvWbaD{^42wak%X5H#qSw#jXS%f#8vX5jb+87KJUaJAykDc+bGqcfTa%Wp?KM1KerA zI}Er5p3eYWvZ%)kxEp}>pq~H2V4HU+z$wsUCY*uGWI}e%iMzY2;0&Nn_R!JAiwJqC z9?#Sh{bGOQfky_2t4}4FOmcD>cPJQ@Y#4VaOba^{iZjoc$}wp@POiz=o!8<9**JV2_LyZA8DgOm(H(ISgF4hJ1b7Oc(yq1ZtZ)p`xCeFPs2_OI%m$le6H@Q zL75N0gw!n^#skogT`$O&fk_(&cUtKO`90Z%sd`5Sm_zIcm56OTxeakcb@^Ce~Di4XCvWI0EX2|3t2y>+|pe7&t5k^hqi=^E5S>SiJV(c zcPPN2z=`@OI7!CLTIg=UJrOCPyDmFael?&29108JP^huxdblX^F!vztlHi>ZFQYk06+jqL_t&&;8cs!I9%w*BTWb4a@Ln{SHlN@#SR7k6O(ix zfVG=C^eFjG()pJ@Z5r1`U$qDN3OFCpuCDA}-_^%4oWswUAm{0g56_8nR|bD^g)8zr zwm_%l%kO;YF2)Xy!RIx=*85GdBLYr=r7al=QrfU(Va z+yNM$eRtX1-PEUvhh5+<@7@qjx*D!A#}l|WLmb|}DUa2YOtoHlns0N_w# z)?Ft_yS?D5N97oWl#@Tc$%T}W828Z5yo{PVS#8{-M3&2UY3|6=?bC9 zoPkd>j4SMCBjv~g((F=3E+W~}x=9^((HZu$kvQ^z3@v^3zpKizR(?PF-td?lfw*VF z%WfEsm}UTlm}2JZN4plg;l6|ea1>Vmt$PCIsQ zKMuz+1_(0ff+NDuMt^3HLM&y>pwd!CKo&g&3plq_F^TPA`}o1uw1$kOhX}q z1TwJ4=gSTQsX=Lmy(1)C!J~HL{5ua&6sP|A^pt2KR|!4eL3nU6C*Da-)KAIqJq3`w zEMM$U=!pd^V@SbDD1b7Wy>UQxzJLS1kqIQ2K!Ni!loT)_Y|KM;7N0SN4getqFL=^) z9~A>=dI`QHfMV$kN~kG4<|CSl>2oz;MqWPyP{d#_R5`|HIyQfc;Vv@8-~ZZ-P_-MWl&<^mb?}h%`a|N>dc22uPPE9TgBPh+RQC zNKrr$4uT3QAW{VdMQMUGX$o@g`_5!0lkD#A`#_(2?{lBK2fl2QDep`s`R!)2S=F!F zD3~%8RhM6?_uK)mJYa>w4*Oq}H{Fpcd|F6X zDC~h13ctdH0zX}MiLFrh;v^*k$QiI{-?iW6gu;V5p&&Ktj~lQ|k1G^Da_D7vdOIWb zDA*3~b#f&Gm+h(kBllcKHUqLBR+e+7ozfp>V)SlSCd@2)r9lY%okAHZQn=%Rjj9;ODocsAr@x*Jow8_UVklAm>@22Z4E?-%=5lebyLIHf-1d&hr zx7vpj3S2&@2QRMW1|ApheEP*NDSQcgDDdJ~H$_vo^VN&b@3)pPZTg8ze}Naxupj;7!+8B*2fT)G4E99e(@b7mb6K@K*+d!JwS~u5 z7RbY=Z~UYnm$%2y)^W#nJ^|*ZCqIIlI41Y{8Dmqt^Kawp5g*5D06g8^ ze9tT7X`?!0GJMaC6?K&XCvTQmWVZB;BiEA~)&o!ZIrz1I(ATFPxF&AEv8o22(_{I8 zSV`c#SmtfVhV)Bbq41*{^ahzXt*xDh@AeK^p|Ck_e!0&D>$wu_vM;_%#+xm0Bl+?x zEXAh>r=1E*ruAL>t@gp>qBsn7ppSyjIdKD-Q25TJzsE+K7z%h2T!CY`|n*K0dnDTQT`IE1oj{8n0!%B5`yu zp70;{4QwdO2?akWNb$310lX%07GA61Mw9z~j`3C3lV%6Jp0V@hZ^2h7ZcCS7vWfg> z9=pEop|A@#&J)MwRO55**{7A&75wtTLD(*it!&E3^UEWSm@Tfek=NEp? z|J;URH&-Y)JkXwlNgQ3Fz;@sfk_fS|q9SPt4^u`BKhNo`0CioU6hn|6sy-(zh z`_Kga+*FdAdG2v6Zi+EUG8Z-{YjxhzBs@nC(X$P$>;}s_P{j(Ladx-wR8=qjjrutMS6$6%rb6A!x_&My=^CmXMx zfqhf1zvUt9Z@@mQ$A`CEI_>!0rDbg7N+G^3#L0CVBO>3Y}0OzxY2V`byhsnEdAN5T0=3pRG{X5}Q6M3b5ehVCdiq1x_eD zlqXFWo}Vie-Xj|_o`^BoexJE%?{|)S7gihn1xw(6rcYu~I}sDq{LTE<#kXV9CLX{>jqk_Tj`sQ>t|xHK!B-&6z>jaYV!ocZR<0+w z>EdD7Eb?ehC}6JzqvPwRmwn~^xIX#|UUj|NisfrkTy3G(J$F#OJRGU7dnjfyR(;{R z2b&|FCX)}p6IxC_(7w&F`hdvaC0}`1TUIE@zEj}S*CM!w!a2gjKU?w|3M&*iG4W$; z5UD^*|N1C4+2+1he}SL)O2_8-io|31J*AhqN`}{Q+((Okl!H#>Kq3?guUyTOzIojH zWP`>1@ZiYW_oLgcgpIma#D<^O$U`ZaP}pO=bmW&fp>VJBXE7rBW81ErcG-GG$Fdn7 z(y_nkaDZ1Hu!q8tcx{5KazD7=`Lg<#jGT z<*Jom4Y2V=?{|br{%CpThaAa^KUFMI5AuVJZs(*jHAxeQ)cVhu6BdR)I=&K-@kyd~ zs%0$Tk?W1$inS7@{QaUO`Dn;H{2j7}KkA`av0v{GO@*cg#1vYsmFK+pn|2j05sLy# z1%DQU6$%Ghjm{eYAD>i;0OctD>EttA*6r2Ok|<=s$fG523Ch)ETTxz(6Sc=n8d8>b z4+~`H@{>Rt9cmGu{i6X3Go2471mbi!&yKFsOy_(cBVBt`3SuQ0L$hc$5SXx_z!-$D zdtn@y!)f8y35A{HbBSCo_x;O$n;yVsH2mDmMr$saF2WZajy-*n@KzHFn7xb#Kgalm zPj8C%<>r&mJjz!dmYi2UEy)}6eUIk__`ii^&37!CPTX%JEP;FuyU9Kv-%VZ{0~;q7 zcoD}H3islb2iug9s~e6u^&0hm_WPlDm0>gNjc_?uFZ>dlLvnA14X{HkzX5zRKHIp5 z?4gjbq#jGrFr&*K2!6r9j=gp$uRPca1$u?wD)v_%@X1A;Q20Pzp>SPhpNt6wu29fd z9%O|AYRs!QoV~NY@_-czJTAnKAioX$%?odpABKs*$vqT!0m)hL?_#4x9-L5M881Tl zWAhvAWv~QxDBgavW$^SF8{B=G@2&F*E@=I;k>?>dK{m7e;-MRh+zYO}3m2(>lTS-+ zg?9(}`KW_Vg8zCB;`qkV?~y0N=U;WV-0-iz$|AD!^Xcc@oW6to9oU~_LIJqmxBG?C z4xH6L2|G(KkEd-v`}JRNbNLUssF@C*Gvm9*I-zi_^pj8H$&Rj2&Dp(_+t#|0kt zP{1n>bl`>l*+{NX$a^TrW>~n8lXq98ST3$FK2=|N(Dz;w-l={gp02GWOKX3IPoZ%Y z0N<?{Q&^`|#wq}zZ=(*wE2M@kVmiFs}LVoueHwt|RH+6PRzA%v0 z3b}q6U?o{G@c5H2%1tsiw%YQ9ovh$_VY%J{6ELWgT%5uZkqW`@!gNT4i{HCLCFaPeO-e4FVqtXoa{IOH^{n& z0#L;9I2*G4yO#u}w*u2+SaJ1Sx(%3U>*_1KAszLJm2pG%6kgML0DX0e^uF~Ml~)fA zJmp4gD)+dV)k!&_z^__x`9F2@=6i9(#I~C(F8eO*b>a=_MLrEg`|}C0>%q-8CmCE1 zp43M@{FLLV2dp9bxWB^}@U;mZOJfr0%ZIEb=a){x7a#C>NjqkmVd`|!r&hUI!puE1qjTJAt8vPYx+ZGcS z!)Fp_5^R6?^V2eBocH;SWQD?UU#nL=aa9N>6l6tA2EO#-b7BvRwb7Q(;Aa1EnNa)w zkM2#!@O2!l24SDO4t;OVS*Mp33gqV=9o)2Zr_Gnb|BSasvFV}R)DmeqWI_QeCfHwj zLCw_|e}4E`$X-BRH{q&?BffHz^mVS_x&VDtUwQbA&@X@u1iyqy0Ul>!OyNY?+L&$fk#Bo~fpF@~Rdz}lEtnhjq=ctG}i;EE7_;e}s)+559U6CHew#3vNEssQb` z7RFnC4wkQzd<^@w@HhXH|FZ(doh1=he?`Ckt9BUXD$n@y{j{^pyv$ zGQbK2nNZ*gg`$Ig?M^6U01}X#jL5G%;J4}un@~6@e?viT)S zr^U_Q55KadtoXPFlTG~k48Nf9ua{rJ#OW$&vvn88Z^T2gN`f0b{?DdM%lNq^Ce|4r zxC*nD8qOuUxK_WS0Azs=V@i`CaXm*ndnY%o3Yy62Ef%XJT~rTE)wD-<@to&@}w zguL>A*HWq9_E``bxz116Zv$U9I_AAtq4XqT_+fks{druc^1+uLoB+Ax%O8+F&1=&A zKl@{=!X}a{;{SKx>r@Y>y}8l09bvqpnosSrIyRYp8?Lt=z@A|bq$Tm{04FjyN%;Ox zo{LGvmvHS6Rwzuu#1{bvIn2+E>nDCflH&uvVz&Q@oS-0~9{j=?S2?g9`9&#y)q!6P z*#=*NcdL=V{Rr`IiQCGJ%>oD z{0F)!52l!Z6?wUjQ##R$dJ!*lnV)o#uhCub7BVI2#~Is?bhOjenf^vckw=2IvMpfV z0JpRupULD60~8l2I5YO1bi(4;L&5HdZIeLbC^JgR$qvfpNVe&r)N{mMQ;+`|9>0UezOeC`fx5o?3rDKji23 zp}+Yq65E6C;9Y*kPPk#dM{c;cd-rm3Q~u=BFQgy;{62g}@&aM8vYrkp9VYWu7ywZEG*w3<^XlWEq_X%gA5LSrk{T227>%7&vI{hgM7m060BZW z4ErH`;62M>pMdkRuK_+AIagkxfOq5g%7bp^r|~iaCNPfPdjt6#5OLi5rzh|({`L4Y z-bPsN`z%%mTmpS~<>BLbg#soN9>FUQ8ZQ&lp4gP}1F}MadnjO&upBQt@XH0*LqS(4 zJOT_eVuiwXu=&1p6yDS0%p>D%y6L9E3WXhIg~EPVc_93ZC&;c=UuCvL-0Vh28Ny)Dry=nUP#lOY(g!P@`i}1tBwmbH#H{i<{tK#*LS>=N4j(Z=6 zZ9kW#iWct|*eeM9jAQOUGtV?#ItbsQUS-+&Wx|7dOI&gNA7#~o_&?*5_Lun4cwFzD ziza@iiW31m_yc$$zMgOfR!UeuIbXiHt(zrU{7ygJH2AF7vZ8O+nWmL5F?<^rFK2)5 zy?H|6I(eUtrkrkSno50Z-;2*V^0q z|Mb&Mkv@ZWL04H0pDx9}`|t^^&tet8@q4c+ugdIp6erNQLIEoRFrl!utWe<1tB!9Q zu3BC(;1f2^kWWADG;&kC>hfq0#0%f`<;5;H_gin}1=FT`T#5+=zQfJ_Yrk}AAMx?s z=Dk12&tA?UH}Aag{>H_3VzWN(5dk{UA#R*A9@w|xs(j+NvaC?}5uN~29^;lb z7dHU(Kc5Kt3I%+P!2HwVldm9PkAZzYdp&M$xeUGF=hH@R z1EhK-?$|=*uCvPO53FV~5O?RLkzhB(k^AfC_n0dyj)BY#lDElQy z9OUtzpH(ps)SsWsWk1=FuRP=x3RnF?H)zw}kMesoHCCRS z#~bV^aZ|p}mGbJ0j2jsr<4*BTNGI;Is%((>;Ulg^AA7cUg+kju7g=DI^cg&X=R5Me zxw`e9C-6m+-={AhyjJ=i{P7KZk-_@&%5R%n_A6Lsi8<4Qn4Ds)Es9r2w#MEQyI>N7 z69p!JBEGV~6&zfS4pT8H`n>GHz{w-Z=OzH zo{arbpr5~&_It(t&d)}2f`j`Y+>cM*ZM(^m_?_iG0 z!kClaSHNFvpY!vkk6U5lK=C3D@J~K1ycQ-D_Q8Y#Cfe<~ZS(c znyK(4{aJa<;d^*x(Z&-#9Jv^uW#)bhe7LgB#!JbBIe(X~#=Zile)l)pPa%)?abJT2 z@l~T$mR+F#dIJ921a`^_1$=Uvn-Q~pq<;b5BKX}sZlCpV-7{;s?!n{&KR5kteC_G< zbGYH(t9Uq~*FDGJx@Z4z-NP?79e>6Rh|y=!o;rS)S3SAe+tB>@yK7Ll#SW9`z$URN#cS#xo}qK8#6) zUtmIkU+yx0NYhA?M?O7?RSuuUb@ht)O!^w{SVVqbIa$Dc7cTiJ zzp|F&19r`WJs1wyb!~h)cwrf{&i&zS;Jse#TkMUqr+s$Dt7=QlkA1lMb8?g7W~Z3I8@OTFrMe#n#G6S+TAf3g4Qc-bc} zf}ee^f^CB7oR#+zR6^L`2J0Z&Jt``h9Tdhsug-y`|aP7$B%x#9f${WSccJtSV3 zx9i6if6N4E@$bW z%trt&fK-7&`1|S!1PAr80nm_x2gT|APR0#Gg)wu8x*`4sKeG&+h}Qyu;wUD{V?O&w ziy5#=Mso9~!!dp<$ow*&APmhP;^?)Xj2RB`N=HFniiyMy6h!~CKH!%u@d}^u#I*3+ z3WdwBy&J0lu7+v27{MgNW4Q4v8XG~(GX8UO7RgG7>jzxW%#3BwkRd`?E&wwr@-`r_ zBv&7cPd4&9xD$8yCO%JwC-Evy0opABYG#dp?PB@vEPlmZzD z=>IHF6`R3gP~~sOl@*9NAgkDs=T`%Gv;Gopf+}~I0AYlXoX$S$baIjZf=tFxI4klI z+us;+Jsuq6U3j$NQ_ss1TZ}i|!^~k#);Gs&Gl(x`d0oa&Yv~W~E-YZb^@75WGx>_e z*`McL26v?|e2+JzJhB2wwWP9N8Z47ZHRywV%B}5T#oC{^|Y`r?@oPc;Q{Sw8)${;@R3vkH(;i6;$nqAmX>PtUV7GsJ}l29b|^ z9v}HbKMO8`%4-E681TP{qd!BvxEJCmR3+_OxdUc%EuF87YjqHsXj!RJ6hKOuc& zi=`7k-M8)jSILBnp=T<4C}2W?H!@t#%*h1a)bbSwKa4>Td1*QEdKM{i>6ey6Jtrcb z!WS6$ZmN>Ih1MWNUVA1CnLfs!=?(GIvPvFww243T`i^l!WpY9>S152y;XVtD&$;KE z4&&Cp{PUTmfxr~>^X9apr$>HJHBS4LgBN7Hd43E}|7D_?#s5Y56)wxP@-1(v*>8EI zbIdv|o@)QQXZ$pwAvHb}$$k+l&5uuj{s^yeaMA`xsGoJFX~b@+vvTi0R=_kIR_sMq zps9^dv6Opd@P?7!dzUetaTnsBdy8;#z2&m;9cV8aeCu-`HI~$PAxy)Dkj1ZwPeUVX7#U z90cNErm-T6$^1E&&CA!3G}q(HDddEc`rJq6pIC*W_$a97u=ZqC&@W>x;`#6VtzkJ2 zrqDMZCQdHKtCD=(gBvdM#%^v*AoD3V;Zz6qwXo|ujt`uScodTxHa<+oV$%sz(hj7w zr)@8*fY3Q-o4#E4NIRmi@sH93DGt%hYTmM^-%?09wb8Z9w}%!&Pys2}kAI?t>#rkAk#L{^kiCH-Ru z^YpLvf2p@hq{#1vPq6QdS0&!}@v|_|$=583LR+E0PfPL>le|8dX$G`8UV)$;6(AEE z)Ju_z(+Z9Uv*4A_C!WNs711E$7rCBsI3}iu&n3Bi3P+(}nYbTuWnt{NO-~fu`cDMl z56hWU{sSZP?f7H)ESLRH;x_Yp^YDb%%ZP82uc-k-IS%F5`(Z7yzof(A!K^1=q1W*+_}d)sdIP>5|H)S#io7CN_}!B#jkS&+=kj`% z5-LIGZ!ND3xOKU+MFlQ57+@YNfHP|&uOmmv;)SN`bUm>o%gb`28_fR769af64B_k0 zMV&q8U^0E0YG4*T%-auHi6@y50t5P?UvDa1BM*Wso_h5Fl9kWPJrvHcjTZS7w&%!h zQzQY8krv=q(w~BkyYg}s!ueO;fn9;`&UE-;!#ir{VpB%0F8Cn6yigE!MTt5Xz*G-E z3HfZH8ET|RNnIDW{DC;03R&GQT0O)+P|o5SK-MxuUzd;B-y&u?&-__$X|5c1LPJ3L zCc8;m4dlxv2b??!`(eBy7bJ{JegbRz_bi?E$1c)8$9uD8W}RleD6GqK z9&#AJI*=1W#?RB9gK#&*)17TMc?)*Yz7J0-%BD+P274wpWqcU#Antr9mJU{OdxW8g z+LWxE)s#(nldWlcO&mYPZjjsfq3V>MpA(!KvsIkv zmjvfeCeL1hrhJ z^7d0P+%I8jO!#xsgsTfyfBQmdlMkPX)r9(*-0XNg=~FwemR3Xg;a|80uk8G})=$B7 zFy;0hTHbMAhjy~;-7qz7?D;@$54@tV1~%^AXqRsR3s)ZUK#M@!yVt>M6I|th2?cJD z-g`KltY5iHtBnAp?QZc{#}%cOxX>t&Jml4UO2=tVi9ay92oyR5o+&_(pgjrK`>6xeW9{7&ZzGqo9?%iHQqFw#>04-Mg~HWo`uq)ujma>J+dNykXID5 z5JyX=rQKqstJw>#;wr`IdBYRLD%z~K7TAMF3G9Yn#Pv{7Jmq$er~nj(M;EEhg(1Q_Z@r+hhG%nyK4MABtP}I z`r8-AP3dI3qxPe8%bgErjkTU!*h$py@PqgxR%d=D1}9eM^HN>T3WG5+H3raGF^UQo z&-#v`@=WUjhUjv6RZReO9LIL(?RO1*i8B?Z3l^mlwXa@%i)HCW|%W10QRm1cV1gY$=x>Q|L zja!>R?)R6mXFa8%tfEfoy6PBk=RR%p}Wt+MQ6as*K;V1F8EN zVe`hX9=49GaG6-!;GAalfW{Qdx6{d?9tV(in?mbpGP)7n+j9{hd$4ogqsje^NjHK?}&`F(Ll zRC@)^bGbcXWII&#BCY2S>AHvGL3ORROD_`&*pyLMDCh>6Hm159s4%p0Hi)xs54+xo zsY)UpuTwI;o7=^w*5&e{Y9+#77vv>8sr82{@w4U4!U^f@leWU%MzdRmyrQu4L3o8l z@Sz;avzVfm1wBV0=&6iF1N_-9rcZvDp?&1E1t z8Dx-lgWl}N80R)l_Tx02u0RT6dl^NQIyq0EVez#N@}i268F84&+43Lnl@lkyvx@wa(>CkePwK|Z^U?9gXMxdE_Bq^-QtUna=T_J{1YF5Z8CD4qMm z+l8w`4++%E^6D@`uke$a3<|A3u!6I~d@t>t_$=k@SbF`)ACT{HZ7KDzmV>J;3<3_@{gEc#1dvXtYHg(r`QB$j=m&HG4d)EL%9I(qfkeCnKg zoDk^a*!Y+mh;yHo-UE(x{+7Vi_(`T1;%MpcWsgoQX4pB~AAS(7Z9D*lOSiS1)@@ctIdD;*T-nffC=fX*p2ON!@LOE0s z`NAh-!PDZNuo(7G-~|gEKLML1@!coh2uMROQBO5gHZ{8GNs_q9*PBl^sK;0^v&`~&@s@hbM!_}EU=&mRKO z-}=+@R?nR`K*|AXjQCf1ZTy>l#iROlypVQ)J@xnz{nyhz@JDW1#c%Cl@nHCo7XO<6 z=x@VQ>|;FI=07oBl)sN2^2EO;&*U>L_E^7G`|PFEG3@Kb&kN6t1NGH-kJl8c@x8TA z;!)$UvWNa*|D(Pte%n0p_V8OH49TzRLwlp#;@{+2TH$m4K0M~{jGu8yd!#?r^szln zPpjYZ!cTvgJn;|g=kG_=-lP0c>(~Bmcw;>GkGGxpgdYrdh0pwBc*n}qKi1xreXYGY zKP0ck)0-c%H`?FdUSrx1eLyIeROkp2zg2%gy|t(LtuN2G=!+N8@BX3u-2S8JoBq+K zPk;Y7{16}gGeUoLJ+*~LI{qdev6t}{?DO$~`m(&L{|wQa zJmQJ?NZ-xB`YP=6xQX^f`hve)pQ1kCaetdVRr_TAKriv&dbOV8qW=CAKhR&re&DBn ztM=mcduTr!|6rHe8~st_LQ%#aycE7~<0Ip8|7k}sYA%DmJkk_==tGNG)*T0It@vr#X{2Tqp>t~B6#W{$d zc%waTU%<=yUVjDuG@biDlm8pX6H>$~Nsg<0BB>-Bt{2W@@Z=V+#(sXYu? zq8PrgbDsL~9C9P=giQ@-9HYTBLLtFIP%;Krf+EwND=4)Rj&)1QC7|237)0p_$hp-I3cp%7~#^e0j8F)S3n># z4Xx7fQfC*~)mE3E57xejzzh3UQp#oTMC5*HKZ!}aH(rnT9R$YG*~7d-Kkq$-^hW+o z6!qX%KP?38Y+ep5Tie+EYlQf_=CIZ9*98xM7`2_aq(kWz3^@9c`|!OyO~-at;!niWN%bd3 zY-D^A`X{C9{5!D^2A})fdd056$W}48xWbWumuvC1c59tdO%sC?-1uiJ2Ug38^Q0Sv zkz-re%!p4Gt6ZGk@qFi6d8ww9o9Qij^awp>mQ4hZzFH@J;M zDkY0}iMlGX>p5e{_M(8#L;|t$+5f)_-J+V zZJct9*1VUUva51()POb^z3Z-z(?|A|Mx!E^`;hS9dqJq<%@9;slc&x z8yiPEFi_Je~ zKeZEFw3*N2FJ@5&nUSt%ACCZ>6>x9oOu6^72)^c|FfPP;L4AMJ`_*l=gxdUjr@DAU z7Vf&&G1U4}*;h<(P=+3&T8A3_3>wNar{4inl=TNL9R&}b<)In0$p5hAFL-z$Wkb{6 zNqt!Mk=`ZCqT_AC?r09Fl((|qDlYG zK3^?*>O6_FnVj2kex-zUvmpk_2;w%dON%j^Uq41=VD2fK4_$mCrfv?>g5UydEIq>j zRYT7yz|(IefxBgxwG_q$aPF3(b_m))2e-L>W;r0Bm3QP$QW7(}{`TDMXwoo0!XBgX zNUpJj8fZW%3tY`cf$MLbed`W@SE17!SrS5!qdMJ<0Y&{cq7Ku;u1a45m*SP8$y10* zMrWKlJu&EL!}!UE;S6OB0pLwlCF9n8VuA^r%)c80p?DvCtd6AT1-)b&3v;OK4qdze zv4nGRoyl#vWk{9IWJaD!o4W;uqpXg`%14lm^;1A=y6ur!46SFqSa4-zPzf02Ig0=&zKEpCF?c)iwJp%OXa@}k!+y%gpD@vB48gGHN=?O=%Iwnduppp z3+{F3Xy{o&_wnf~mZ*!N``g{;VK0m5Z@j9kb^~CML5HG7V}0z!Sdo${cxSLbG9W$D zwv83Ep9Z@LnTe+NM?M}d*?rvP3u~8MSr7mT9C5~kwFBuE%XReorDJ`*vVoc;Hrh)? z^Bbc2rzwv#J?d@JMGT88Kq-SiAODw<1lcomk~03hCt#4Tva3^HDS9%sw3x&#I0-HS zM?H+*_>%Kf+6hMYP-2<|I-K!RyV=l_b9b}nOi+%|wDPF_xk&nKN`n50TC%}h6?|!A z`DGRv+B~xD;ExD$`Z4l=f64%w_~n?&R5s(= zA|QEad?7%HS@qb&>3LVbQ&5*4)SES4y?ggRc~D?IMm}w&g`M#cRJt==ubURr)G zr)f>}{ijYnMeRzb-j=EqH0L>-kE*g0wOmqjGHF~de%S4mQ8BhIv`M^yfpQv@D*nnG z6LRsF^+~dsFD^Q~xjW}0o&}uBd;lM3zPE)*@eWcuDniE3{VIj0FRu)*xU6Ti_C}i= znmtBek?3~5G}h7fHbD5ix@7|!d7e{;y;lQPgS|00(B3eXno^pOd;9d^gh1Ex{Ld{n zar&NI2;4QM{wbB7`MvD$$A(HbvUxp-59e0p)j7g7dUHLJ zM^_UeQV-r0U!wf9Vb@w&ICE<6judW-yhc8As{MRzc zmj%>me4|rf8hjmf+6@~;#y^kFhm9x4X>+;(n%N%*J~QIT9lm6ve^Vx z#|K^pylK*EX~*?e2Ic~OT@=L2F1)8R$VKIzj{dOVtbKQ77;rxhJVEynRy6b_3%wdVeae$DDwx!W%jphHH3QG-2i$A*lMvP z`RCD}@5Fz!oXiD46>h1A=uDDEaE0#S;4=07bH8Qx`Ei@AV1_^AQA3%STPE>ve#b)b z&M(g-B9wj}k1L&tzX%YU>6@el#_-*M!nrG7P1an%P^05S{ zrdKM4**#|v{6tCLw&%ULsD1H0V2k-MkH>`#dCa^ApeI*Y`Q2&U7elUBLxk?3(&u(~ z8M@`8t;*jMy?ykQ*$_htyHJ!yH-EEZ)r8;=uQv3JvM2AyPhZpiF<(UPD~*jl30Y!? z<VNe~ly6tLtwaUcDwBqW_+;-*fIQ$5ZWZ%M#+( z!-&rw_8*XBY8K<}#^rPmed(9={Pd0=oC5+p{5{uoRKJz0?sM6$FAYIsj3Y7FxkvQ; zX06;m!_YE#AC4)FlD;2u3VMBL`u21h;ZY&Uf#h6vHqi5vph}0l$-|%fis&goOm?-u z0Z()GJAB!nv}VI%PKPMSAfUDu^qTEyKj4=0vUQUm`+Z6xNCHH#pZmG&$eRi&=tB#JB(%e@Cf`|8T)z`l&Pa6Pp!K(bQUDN%E+i&bHq z%Y1?w-Rt0cuiuaShRer^aJyZKl!~9&9Gc9$I>#waYdk`8p?efBrlO$>eY_kxfQ)V< zf2QHiL0th#ExU*P^B;*pdZL|T_x-9*Yt(tX@$CxVKk2oos*>gOGD6MWUWf1+%rjnE zKI8*|Lc3dX1w?$9H0?j5SuU0Dm1U>gX(%EXt@d={n#&Kolh^kvCFID%4#;TorZr{g zJN0^ImN`7v0Au-%5q!K|xz}-SZX`4BuCm$?{eock)fqv=93;4WAE5}>Y>Ir)CG)_x zOS$Pj&1Np$*>IR6 zzYt!R7r#10D>Fa5rO_<{Sc#=(34hLKN}DbVMHkM_S7HuGCP*<;4!?^so$zlwe;(Up z|FKQUB2Rw`#@xRlP`A=;0x_Fgb=5d(a9lVIJoJ3-e%A^h@JpbB#%H z%c1YyWw35!E^Gj^A5_F1xy04jrGrMfz%EE-iP)qp?2iX(BZMZk&{H$d-0I!wOWp@VVHK9Kz)z+US^>ga@cUvjmYUorf6X|@Q_HE-AP#t|p++wkJEPMl zCfLiFj0Z09&|XDGNi0MYUovbNNh?tueegoB+;ljmjuz^1s`*R2-{$;}(r?>7A3e#_ z@g!k)A|xMTM!M;l>Zu9=wzL9NBIAGAS}7Zd^DZ$i-3vK_P00F2up-r0L%-ziCQl7h z2k3vION!8w1e#6Eh%zW473jjq+icIE7-dd^VtweZy?F;uCF2#2RGou>lxg@4t}C0e ztA*E)6U+YTPw98Jcdcy<<_Nlt#f)462jIj82bcgX7nD-?2L}n+K^3v`d6+u~Z~)8) zkwrB?<)1^v zc!-ztOD*Peh~>>rU8%rjF7XUD$D(MZdqJ&SDSL{(5gg;AJ%U}&%`!N(?F_kYXgD44 zo0>5_CDpHHXk7wdbMM(eML-CT-P|*MTElj~oRD_30~{?H4cu^Oj@3Cn$b~0aho3#s zt(0cg5mIsQnJaV7H1G8JHDNh>uJ#!>8j3_bs)Fy4fMbV*0l)cA=nq`(g%u;E82v#WNe< ztXxnh{`AE|jQkbekVVBvgMZG+WbXq7Anm<@>@LEuGHXbAcZlw(}B2M=^_@)1ie^F7TqF60g&L*kLOBLXl^K@k@d^i>)ZfQ5l>;%SL zTD#q70WhmxF|hkNeD&6894GIcx<42-rxQPI-pCHPjVJNZ<}b&cG#sRSw;rXO`z~n^ zjydRFDG$S-Rn9vT-HR(-=Y&d?3J(t&a?3BC##G=-FIv!7#XVJptRA}}`^P1_)|R5@ zxU~>{+G<6y9jEP6U!6muAHIFFtTwg0!!NUb8|isxDf*W&v~vS+Qu|q#YhdbwD9yWP z4Qg^u1+SuW{@hRyAdTg59gm4&0^IxV>Z&oPzWwg@i&9fDs-;v1k!@UG1||s}`S(Vb z_ZN|RzU)Mb&t|cKJ%fhRZ1VEh;jn9M*YB0V%aYmn6ILEu5PIWv(;ARIDdG!tr!K&n zJfpm;W!EeLSQ+=`wrZa+=CITXP3z5MOF!V~{*_z6%wytJ#hFGpVE+PU5=i8u$sF~& z;|m$pJTz@oqDaPKDMHF!&^D2_h14N6M;WP)) zG14pf_nnYxBqMnDntQxr1j=6@G$Xagb0;3>09>CP?A3^D9|5=?=^ehMcf288pg1vm z4VR!>j?L5{Plx^BdQFfF{62h?i*HIVj|#?P>E~CBpmE!H9od#^^CVrhZ>YJuFt_PM z2&nBW)3b2^SP9FW-I_0jNR2(VF~^@HBhNz|!O?wPRbil|dx$6<_!euSih6NK`>fg~J5W`omk&%^;S z42Ibr3S%9iU|0tiTlXsS(h>1AoK$#Nsl#NUbsDRga)?z^_|PBtFe`EX329AWDaJ!T7>mG32PFx(Nk<#)d4HKzwamJ#82!)0j#1Zb0*| zZv{vctqP(-6+X_wUb@S=)DQxGKHMiYdr9#6ZR!*pMzm*EY>u8245?$lF7smuim(Z0 z|ID`LzLdCub)ya@S$*Ua7pWLrK|J`-4RG@-0d)mUxfOSXQu~OmhXFgG%oWla13(_Z zNGnuh#wFeyS<QK5G-KRi11?h?w;0`@^Uir~ye$%J_sl2>Y z#g?)JU}{F@NPSL{-W!}>tx}52h zkmuO4UMxREPKzC$6E~F!{5-g~zHp_2Ey`OA@d>kUF{s1hMh(AF{R=YiOTzj_?N>2O z!K>TrWycg+$N3YWh@+hn5COHct;@Oszbry8L?IlSD4WuZye`m-e_kQ$X5jFHONg%F z8I6-_cv*PKbQ{Bvp$i#jN3B-b{a{b&itCCWi#McY4+HYVR1&S}{KV{>bhJm#t+i0R z{U_w^mLT`iZKkT1Kf`j}08|;=AN{S=IX9gOCK7q?rzW~ z0XDqr;nvhsMD)tB;+rmvUWdkx%FL6aR5`PGglqL?{Ws=C_Zdoe!;9MxQ$t1@f1&OI&T7(n{(-FG&ME-ckbIGO!GExHJY6W zOb7AWscI5{K4QPz6)Z8Tj9J>=h~z%n5;2|^EbOpcG-(ze>UM!8=xJ_xHD-G>IZOjr z9+?;5hH^aBq;bju8YFPGEUqje)C-$W6$KkvY&jFIe%cLK_ORK#TX5LAiNW=A9pOlA7=zS=!8rxCIG~ zVVz$pcRGfG>RScz>M}8&Z-`@?plsRtGWEdV<45cL?UmlEgvm_vSdEx5-z{fNZxqXR zA(>|reWFMvTOCB#E@|i1vK2QQdA>!bg&))fz-nh{x<3p%)cUTzWPj9GG2lNjvPq>i zA?qTm!6qI`)KWjzh$|7pcF&xXSIq`L&D+KttJ_~i*9%p!w|%W_EZvhNXc8!rh~9Jpi^Tq-#K@*TV1vfQVXe4=p@&B_tAF zN1IP}zFKq)6=zeFS7K}*XY7h3D&w``%Z+a|st^qZGEd9*F#@Gnysx%bA#mZ9l8 zp2^&=5R#*%)Uz|$j;P%Z#za^6_fO{~_azD=i9+~0bx2ac zbhu9Y@O0eFn~Ds1_qv(os3GyCVwy>b4&Ankx6WdHeSQ}H2hug9;XgV$UFes{zw9?F z3~@lBuL!vScFgc!dYng}{CmNysK3<6KG(}^VG2-c@h7lB@FsEDHsA!f`mg@KPrzC6 z+$!(0v@kAs6vmhtRiI zT8(Q&JW~)Q_cwsnP$AZ1QO(Rv?SQkLZu#>J4&?`M?mKq8QPJ&PBG0rD(S;(R=&Cu- zm|aL$pKp!tGUbd~HgjVS9OP61(}yM{lP)$6%tx!WU&RTvj>nf zhmFEN;q)uARckzk0#dXv`9Ez{%4pxa@K7Piop8v>f8ReUcRYGhAS6Yhi?G1qEd1Gv zeaA+EDY^++Gltrbc-#dBzW}`-smoTosx7m#O;_IBUU={;1hV`{r$d&elqFF0tblnP zG^h?;F_!qP;%%46UYLdy$l_f+#hR-?r4~rRewZj`Oy!Mjh z#^;$dS&2Qw4eu zmABE}f1%=r5M@^R7OQgkQWFp6mE;*BMs3%IC{>4}N4xwIxohv@`D)dgsgS=4e4oDj zDyRmme?*UG)ZzB^3eA!;q=^1wyo9M^55pgOCuiX4qTXz$TPzl|80tw`!Mfm#pq{JJ z%PFYa48YdU{r&22o_*YsQ|E`SSFQz!rX8>8gFVIl4ru~A{Ivr-$n4V7#&?ybDl7dn zqtSJsiJ5d=6y?`n>4AHrW6tGM1z@E5;bVVhu*J;=@xsrUo;cX^7yZ)yv>hK}j8B+G zSCy@xTq5-pa7J5H_tY4g#_)JdN-)YMxkv8z0|*0Fvf|c3a{$h>c()rlM*SEv0(%66xKp7A-#Tt zGw*nE!URwwQ?O*a`7iUd=t=Ob!r;H-2=1$T>v0h*<10QPUM0|xHs(w3YMtfWR?0$$ z2QRhihalnys#$GMhoP-uYK&Nsy?7VO?D6@<>fiQ4h!Culm1Xe>htiV{o=f{q&6e;e z`9{02`f-hQ4`vqV$7jX^(bJeob}Q1y|4JDJ__~w=ZAzpi~vrTHIMynG&V#dr5C=k5`=hKOtq zE7BGpC+J};&OzYE8u4uv=sYj1^6IiQfY5aj9^N%RVuqA6P?TtuL}8R5wI;gJ{$r$5 zH%by9eL}Y}TC!;@|s7asu#Ow! zck~bubT%%0$C337F26Qc-p@aE(Zl>ehRICX&b7gZ+u&VG$W9u&dgf(C^pe1J5{4wN z5U_r#8jTH}CJvms*W4<@^sYN&m*g5~x^iDi(REodFf&5z`^fh%dM|FAn~WVRRz9_| z1TEl1IP2_odc|up%MsehZcW&AbRs`p#&;O9Zc(Qig~`G0I5zBdXi;!JZ|d)0cT;}= z^VqzCryQtXGGqP@1D8>n?@p63Z9_gT%Z{ww9$qPQX6N#FOsK8YqP#F_(M)x&asM|V{<{&ipHP?Q z3WdMG2Y!W#XDUqv{?%?fdZ7Pg_M0SwyGa1Gn9pdZt{fDi=LC3n^whnTY$tSd!qsZf zQSbBXyMzdzN8z$55u&c3PUGd3d0x7PGxmXh)y%FC=mL_pP#_9@xheUu8;YBX^;z<)G1Bmo;;E!j z)P@d81|i$jN|w$b$egvr>xxqs&B`4Y^-dbV}z9M6|@eQBikBZPd5q3`H4mjhq5`mgKP zp8j{q>O)1ZY(C7XMs4*X=p^5oonBTmSFwi@{zS&*RDw&0q++YA=^{7?J1$}`8@7AT zJfes44{_0K|JRT1?O@A?-Hlmn{ukx1a5pVMGG6rsitX2C4RD<$d7ne>?x9;fJ>eJf z>rrRxgcj(AZuC`r$TdNpTRZn_8uIFXE3AhToFjNzf8|`$(dhuWp3)2c-0F|~6&O43 z`^=7~R`^-7FzwwZqm$_3_0ayGK1Ofi^1G~Eeys@TOZ9t;DSi07c8alja_>wH$>?wp z`Hfqr^fcK^nAPzxVnvg0vs*#3Y{y62d?wg4hh(3Cz8<|X)?#B{uloDN{QJ`|W}DUr z%&d5e&HcTzCWVJUjR{ZMwsR^XNC8fmG(qoms~>vZ|T;2o=u_@Sl*IIGar%vHDcf9LR% zV=T)4X#;wIBp(h%bsIbdsL^dw1@y*};iFpw2)ZftUki&srtAGl@x&(7$~NrWA}}#b z33ZNn@!HK@XIuRnP0)E%L1E?N?ClpPlpNFHKfLFIhSs54lBv*g!tkZhuu===K#735 zW163EHTIVCv~z(z;$$sGZNJIPOnT;^Y=?p(ZJeHw7njeCp1+GbOF%Ec*lN$UZ^Z^+ zfvAYrL2KSJGp@%R3q4HZb`O~z8FlCS|vTP|lTUDEkoX*;uo=T-`0=Xvj0DD6zEX zJiNK+oE3Xv&%RY{K7BM_mAP|YvW%JXF8HKHyLU{^)88=3>fxVy{oy!&yKlZz-o)Tz zoK)N~|A?DYwII_aqPm+d9}eEuv{7Fs$}3kASKGddK+e-z8!v$&%?tm$_iVvosLY4J z8V7$e^7^IJ+XHHhF~T57L%On^v`!Io2?O;6ofFcT)kuH(NapVu-QeM?i99Z2WFrCE zMpQzRm(#R5`DBKdwGxBe9`OwN&~syoP5H?=fk>FPZtNvaNA;&qM2E{$OWWj68JZsi zpyTkm_I_@k<99kJ=J^dd2?7Td^PT4JIPP1<8%0<%pT1f%JrR>t)HkF%vdDTU^=8+p z=*x<_PH5Ae9Z|#Gp`RNcjPokmPgn}Sa#Rs~tLBz^<|i;hH7B!G^NXjLrgua7nU~4O zA6B9hy_9HZ=XN-D(u`|QBo4)LAFmL;I`K_z{3XHD9X z#rdc61{)+#Fz76}R%$7p)`dA`y0N2kHaGD2FgwT*GT+e{DDyIvC@8(U-9PV)x+Hrj z=Mawg@^~py{(BcPe)2O1V5uEnQwH7pgTo#RV0^u8yr18w?x!_h84Y4qi%29@d=XQ| zC!4B1aBaS-kjs3a_WVIBx-+W~^Z3XKHetuzM4jLHt}+floB`@dE3MY3+hkB7j5v`F zhR$U9(9355uNnGZAx>Grpd$-v(Hu#yAYPWKs1-3()JJ`J-5l(%tHX--eU3gq^pqte z{zmXjJNf>(-5>iUl#fIch6^t~XF+0aL?cyZU+Bt8g4F@K7TNj#@u;^D z*J^<4ciscrMW@wUjFem7NvxfEEBAQ-#OgZogJ>L-dk=$IUqwIXb)4aZWXDQf3=ICQ zD3={eDv!)(9TDr_rNXC+zakZPoFIo-G9~igBlzQATh-AQpwrV1@nD-2X1IvKoUb^k zvJM{tGnYD4m3$VXfuHc6X>K}iu4d&NBR?|Rvcn_A#mDI8CJ^-ooD;vd`d%0Fo`!nt zIVz6vk62>MgI~RQOdIA!7^u3}eht--I>iTKOn9rh=MfhS$l(Fanv!~@TQqB6{3~b5 z%G$U9H|qw!id;*~{GOQeO5H%lgDD2qzHnMjTg5l|%}9sYDtKlKaogQqS%~B^?H{B) zs#E*oo~M0R3~H9@p|WWG@g)`S8@n(sJ=`KwATXyE8uv11t&?0Fk4O}U+d!=pZ9aVV zUNG#-)5HYoO}i{zb8fi47Mn%_i-tCHbRef7ce1JP$5&RL9l_oTH7GkO%#fVw)RJP3 zR^141^y@tUQBbi4$6u$wb4Vu5&GPqG?=h^!Q*!4a=#YPZ;$@m^0PJvKe8iro|Le14 z*OAEYvr3zjH9AL(IZQjOl`BBG()+iaOwWJj<_Yj15wa%6nt!3$$a z>{G19K@HD#+~kA+H%K#u0e{x2qQNW(bm8itxA?LuEn4H`FK$g8D`YA zdcLvjyONv}mH}W$5Raxr(I6C6f17?+k zzHJ3~c;{E!PTY-!^O@g=sGUPa{k{^JF7!36LKgF}R{_pvW36sp%J??-TYwPpN@f?v zt@$WTO`U8OP{MG@udO(eSW=+e8KRHuZf=*vM`HY%Lo}By1IQ%y+X&XWBD(8YN1q{) zDP`NQsnb7du!KlA-TfJ8Zy%`HVzK6%eDkn9^(rFr(cMV6$&2!NPV!E`(S7<-))tU` zxm*7VzO5Y5Gt{)`y0#x%1*0R_qgU6q1LIzI-@p``+F=)qboq&?(@}MO`BH< zQOlbmZ#(&gi`?g97&Xk_PP+qlS35tY-^2R2;Q7f>vY>v9`9s$5on`6r^c$ZidEkl? zeaB+9Ao=HIFBgPyy6MGA(fT*RCpS1W?0&sa)4#F)sqoh!j=XcUtJai}SI|8)^;mXn z8OK-p&7b;c%?IBEL3qYaO8gW+;`s-Jz!L)<$2rm}s~=9d947Xx|E!NdU5t_C-^ZVi z)XG8*Jwc8<_{U`Eh}0U$X%@3y@6D-4JdOe(!!hkz5p&5>f#>?`iy}# zG&E!U)NfMD(-v>y*%T;K4y3{hqDV*E7B4Qi+^rd%>Dkvm>P~q39e!nwlO9{H%kKR* zboQgUtfS-b^X1)G)y;a!^0R}0gI~I|`>0(Ae7fuSC{!3LH3n2!wu)24pEb$X1OL6j z*x1L8K7vpaw<0S*c24!oB%P6iJ1ouAS2XF-!EM-kE1w?a(ZY&wG3cyslvD8UR47VT zEL^0l@gL$Q>}cfZHRtamIpfNIx_gE3mBoMauQ}W%T#~7FvdB*t?z6n2U z;7;2&0vZu;6}B^qJ8zfjxFJ2#b5#EA62v3PyGt7b#&FDaR_reF&)mAM_$#4?)BJ`9 zfK%1}=s2fWK>xMTp)TjBN=Rv$_}O*`<9Dp|1KW z$3a^^D)3+9$2{QNPV#+g72Y1&jk8kIK(-#!KTylC7oHi~N)?iY3jWYrR zq%%1?PC&bHmgnK~>2QPwY$tY;18DI*kko26iWwe0%wuJO)Fnt-D1915f)FO}&i0q1 zR4e5wjLsA2K%Ql#%j?jAq>is+HW#F9vRlDx8n$mTY>OK%Y;&v0E9f=b9T;XLY_@(#%u*|~_;RElb2z znbq|Lw2m`r=oC1dQrj@`XO8DC9rz!oI|@U(3_#P_^dyr*ISsu4fq~z$maf~WC`INf z^>_aL#1=mBy^m}~WVe>_P_@&=b#8zz_T%lDdzP6Oe+T(!VojZ%-fHC));4<8-4~Uf zWF7i)BQ&n6b+SoV${aaX5?-p3+H~$)oAN`0M~?Od2OH_=*Uy1O9)He9njP;#ZFy{( zD!q3uYfDzVs|Ejb4CyI)Zgjczg*ZckQW50!&|%qXb{aP!0oLd)p=$B5$H>3VcSsr< zQy_np_7Xmfec0eL`Srj+beACGrb34&0Dp4y%Ek`_|# zXk_=`W0zn)3aC0=Y@w<$as?X#xY`cn$0bh#PMMTB1yYQ>R;$r!#}|8VO(SF_{z;ZT zPuqI! zDx6T$2*q7avbEo@-dhC4r%5G|#v}GLRL`T&sU_|+XAN$B!{@|H_KI_>E*4aY@{fE( z+R2bkdCREvtajc)5+7LVC(WU}CNl0ldo^H_uN{`&3~dg66Gm&RLF}gjnw`#+K7OGl zw!dP{C`gsLNVRIULp7gKB-MJcfolQQVk(sp4%?{S5ync=cZm#oapGtSi0(jJ%}0FF zcZ&;NO}h%)3{%LLuBDFEc)efeZto%adbRA%tm>w1c`9W7SS$1>0{J=_-e|h&_P+JQ z&we-~aZNAu<-O(V_x}t9AxBwHeeq551!9V}YJX`*nA`zoYLaE(J~^0SZfL={P;#jS z*64aTX%01H-hGqF3q`kftq_}Ot*uDBb zfW~dEb}Qmc#=t%;yy<2oJH3isQb>by2HL3io$P07~KdfM# zYzeuRdrqA1_Gb&rxk~aZLGhyoA4o%nR?r?1A8DBRUA*hRiBRM^R{CoLxLcXyo=p1* zZmkx!3n%HrcWZ3GE*vgleYrNTaJzRLmQ8e5D&}Px6`YkqJ9rld_kC(sF0kEtD5C9V zPQX(VVsIf1{)>5vHGIjOixsB`6mT?} ziaNdfYPSklHu;>Q(>h$FsKWc-a;pED?AOE6s~5W#Qr;!oAlonrxl{wA<5cqM6W@=G zEkE+-Iv#MW&cz7lIs`YyODWrlVmgsBMPQqXGb1O5DAkdv?VE77{A1cZL7) z*^&Mg16u|DsbU`nC!*2<3tNDwaEQ{2(^KxII4=!tiWMaF%VZ( zb@y-_1vHcL#f4-d_6`q6gzYRery{rK{J-Uw4gCn zh5-W2|C03~)HG7BM}WNsi5tiQ$xd2^kC8v z{Xfi6ITOK?xgZ--xE+Yi+-`+dGIIz8Gpr;&CC>O0t!)NE9{|Cq0&E4aP3^sYsQN|8 zje;oOmCxnB&dOY?zt7}TD~`tAYkhG2^jr-#@t%0)yiNKs#&>LThRa`roY^^Q_(H5z zr0m%X`@zDNI?@xwnC}!Ro`w+K0_{9#O2b@9>fcj`&2@V!Gc795GSg-LCD${Um97q! ztZIUK0Q0iunZt8Ktsh(YpzR#o?h$~NJL*ws8*Yj=|G_RQ{%I83i}W5sdGcT0@wo8% z(JcABGHY}e+)7H=SAh@JZE^>L7ZO907vFC@5*7V<9Mn)jVaAW}`yOj{rC;k8-f#X! z@sB9HFy3hlKeYNm$?aIa z-!cH)!ZW6^)5{SZDx~vAV)1AqB>i&QQ%RQxjAey02NQ&!CQ`kd{5FJh#5@q+q-P4b z^Zj<$>rvFmJ>TG^F^2iG`KD!!=!V;K=?|=(va9>z6!YFAAyOH=&(5n6*Sfx@mDLzc zyI@>L;wRHSDa~#Nv~FvC!v?eaym-QZ|M`z}bjG*yD>`EKtAN7Rd!HSJ)BhHCNDhdr z@P&woH_7Sh&71rdoGb_EIqLG`4v+==R_hr~AZv0^SW55qg8JqO;c4 zdFixLTIbc)TD5AYRy*(8?~mXA*B{q)-LC6-d%hme$MbRD>1da?Y9edR>;dohdU5C5 z49qP!4m&Yv*K>yppW{Aq5Ve2X0SS1m(3BObt7ZItK)z5Br3MJbo2ztUT{ivqP=B;o?|I^h2O{ zfZwqt52zbS#~nP5v>HA)mM@z6FOD1Y8+p7f{L)JUY|3zf=Bn2$GOYZED7Gru7m-Ns zrKRBL!>>b>0c5%-G%%Fh7<>nxm}f@1gO}ts+Kc+6)&s$3Xq{bxhG3drAbJ2-n&~!j zOyUlqA9$h;mURzYuQR*Xg*-4a1l_4z$`qiDA_iC~ctz`YjrA1aJy}+)ty1+cWmlHL zK!Gsrd6x!%&Xmw=s9JPo;qt)foe0yo!N|2Lp&lG9+wT}0v1fxL z&lT>56{KMJo1GTa%-bG12gK<$*FDrraob1wuA_{yG^@;?$R zhjUfedOgMPf|nk88$W}#?PZ*+yNA#D;78^B&tvtqWx6DxEuty$4s88JrGqdja|X1w z<(Wh5>N3%4qr2P9%_G*6n}4H?Zh2^@ZP4j3?WnHzb3$yZul2K}l3r2^*&*ns`op5E zu99ykIsoM^D64LMpEm?3y%zH5rmcsYDT5^Qf}sZu;KBB$| zXMfIZ@53qhKHOLgR!3E1%zbfE?R-ce-X7>0C!eaoG{lzOoHx}O1g+b5K%(vf#yb5VQ34R02ms`=B?Ym`a93%txnuP_X&QU5S6#v*v{w0 zTQ}f0$DG3k?^o;FnFSordls>w>2aCop7RFlE)#a%|FVJSd;WH8+8H^uQc&7k-5cAB zTTm*oCjutktF=^CF^PAH4_|ZxD~AQR#VSNip$Lf@RLL;bjO8}?VaSA)$yX{z9431t zVTyiFv9xq8llx9~OIy*BX&2I~p}I#~2)T(m27FZ;lhlYM8amHP*=?J19S~`lF4gTt=TH2ggvAAu7Pi zIDF%N>ewyJle(pVFp?C^_tthpADSAC2*qPCl!jX_I`t5y7V5$^CN9|RkW%e1i=M&m z+pfJAuxoTyO2iBSCK$&S&`kmfR6ffwcr2i)ZqYoKFOeVu*ARcY8)=N>6s6c_RCA@` zW{q?6(A#u;B5Z-i?pLjC7)F)VCPYN?^hL%GS>=SAv5iTtr2E1xN{A+Iz-lcLi*9mO zDJf15&dsNrT34J%LhO+JFJSwa#W)f(Pz9#~5Qa;wfJAUN`zIxs^A3h-=DOpAOh?4R zX(;l*VgX{lvlTgdSE2`jFqd|2m-l;vL4|p|HZ&ga?^xG z41l~17%-i9m8Iqi?#qXvsNauc>Tjwa{i@CunwyZ+X8}~q^0|kyaMkTKlFzdVEL~G% zL}Z8HOwFoQDrM&)wzxG|v*6#y43d3MG38XQ!4z!)t;5uH@3yMGo`pZ)I30N!g&0~>yJ#nnh!{D)!q}IvRwP$Ly3R6w#Yg`+ zWBU|865W0KKM@^+hsKWjUA>WnH^40GSi$Qu;$~Wc*a$)p1Jk1Jiiw@<{0l3S7@%X=-3M^I@P^@X#AS1{Ihm9#7^L)<9h>m z*Bq7v951-<&XdkPdq%eOtG;PD250J6?$aFJeDhf+#O}7SvS_WOcTXo(^(t%YiC^Nfy&9^JrTRQ zm0^t@QrmL}9S0{^EktoN)tr()vgbhx{ubQ7$@ZV0z=xrjU%1hnDHK6<4{u7%0aTfg zzvRw4&oWSzl(p5W`<1!4=2ocqg``A1Az0{dU$O5H(fqKUv9iKr-^h!|ua{N~81J>; zf-W)HE7bw*3oox5wSs%7PKlrU-ZsIK${h;d=21D_3CZhaw=s?0)FNbJsY6t!zeAD2 zvixbb=vH)_W`>~ta;U2ArsgU|a$4Ex_m3fi!@<;ANK{)z=V^`nQRKL{Tyip3Ymc&I zt{oCphhgrnT0y4ehD@2Ws?{AV)oI9U;%7=XF;=R$>gq+AHKe^krk0~@*7uf!Ygq}@ zzZQNI<5deV>51UqD9yUA;}J_`BL#ev&NKY9#I3M9HCYurKCN7X=w-c&sX+XvlNU#MZAPh07 zRT?QOLHZc6*qttj9U%uoOjrWkR_m6&=NB^uN|r}+RB3%Aiv#E z%SE{=k-A=i+HN}nmRw!O>RV8Z zu3AO?p^gYRG-|aLD6_`Tir1iy#bXb!(^0jbW}wO`K(XFV-~+w2Xu=A~uvjW5siLC^ zbxQ0sU^HJB^ZWw?&ka#8rt6Nr3e&de;CJUtbEKkwlXa=TL)kVd$aU|S6-!_f?U&&< zS{#4|%ytl6NM|U-B#LTvHusFQxR*o~3+KsdbM3D~99!kEwfru3Z?x*V0q*oi22?!E zGGip8YPfpTxe!N2tp&1)Wa>P^x4}!rP)_(0a--)adFc~@B8OGtz8x~UVX+F+=8Kn! zOJQigxVZ*rJcGOy-lTTIM~n#~X(0Ao%oFfbF7OVb8%=|$p^;Zs^NzejHqlhrX?x*A z{p_>x?nY)u3h*P1LVZ}=mnEl~DS5_lj}`QYwq3-xQ$1^CV(6d&r**Mlx%AayjgAre z@EBsuhp1#Nf&#PU<1tk#-GKedA-wq20)JBg5J(KUB{W~BYI!l7vn*ObaF1W&Kl4T( zK7`_zV?+wgVS)NaItMeOlWnPJRWbGJ$^l; zHb$vOsx4=4(AdL;*T4}0-%&A|Y#N5pJq=PD!`&gTwN)}5pmb^DI7(a$!|h#4WW#%C zwlN^=4EfQR44~Xex;I?Yscj(+N8T3I@PkIBaxm>9%R-$741t}(8| zSvJcsPKW1&P zYu%}>&Hx>&qjc4^kHLBvi)J)}aPK?OLURnxvGc(cAUB@yEb-C_OA3E$>`@Z+(R)93 z*7`qBgru&O8Xe&HH}8GJ_psE9nWbk&jpxCLq4=VWo3&n+1wm$cJqZTVo3!$>Lwil? zsa`+cK-b+KbA1rBdOTxh`#OL1E|)3a^hdF*UlGKZ=Qn%lZ)j5lJ}4@pNGXVNcWv8h zu;4{`S=gxe&?EdSk0ZwasA@*eoBlBh_h;nkcLxpr!mbN3RqhM@~1l z$O^XVgi>K%{}xk31>Jfb2G zD|TluPogCV3TPT`0z|C@(TK1cK-C+(T)a(|THXXq(AC$(sv1U%A%dKAX2Wc+fGGGV z={~nnlOb3*mQKeu4EA}>TWhyLZ;Yvv>0vPT*xd?)_kpSd$Am+Ty2hJ4-QJRI9S zK*nE2nn%lgJm%~^K*_3;i@z{-kjK100HY@3bQr}m9%>;sgP(btf;fSy^P=qz7vVSH zuCsYT>5;#bV&et9DsclEGtu1FQ0pZs$&%q{((#bA&jLm zXHG;v_Xv7nswaE(`cb3>lAs%?VWo$tfiw)d*tsri#Zn*x5Azqsd23*!T3iiI8mrbe zSp-l;RfwnLlN6aa8-Pw|zsxiu-O&!}xZxhz^mj`r;}Jj;!1~$Ir64n(OXq zo#O6^BDC9bju-$90Z@~8GW$Zg$(}j?QzE^mo^4i5^)?}NZ+UxUi|-A04NPzPq^&(Q6tefBLVl< zaHN0kZkN?sL3oT4WjC&t&2wbkHvK$DrL;J(2Ip2^4P0uqQDJZcTQm9qobBrmP#TSSPu-~IB8k5LQxUIFg3MBRVqoX!4B zwEnNv?s6NjbuTA)YEsg=?12TP?T)|I7XvY*hUSLf8)XN4RQ^DD82Tdmvd`d)SCfhA zBT;C)&ghjdmG>F4gES+%bg|?(_Th=W)?PE~H|_C~2bmkXjW|GOLS$<`NzSJ7%G~{m;?IXhQXE%x9$Y`Jn6h(E>i6m_fMEo z4;p+ph)|e~OarVF@D9Wsli0PHcRuAvL~y3#oU}1=@c5w2IJ>HrD(Gju56?9ildL=f z%{ce;N-+l+VB@#)w7`tK@?-#=DC!9z@dz*Me?V3~-*wR9*463Fg|bg;SH<`z>vkMI zy|exhBZ(dS(a!70x${ZO*WBHt$uI126rF(NXOEo&Mqlvgv%&4Z1sRVZte}cJSDQUI z*t*bkK6%p$WOc6aozks3XB_0gD8TeMjy_?Jf#%_`C+gYw&S zt(_TXf;sOg>vB|>CCFOn(&44F=_~?eW>;i@+|scqv+t7n>xwO)7>4}y(0D%8=mu>n zDW)}F#ZX;?KXw{S%#)jWbxXFZuzFjrFd$1FQbqjD(d#3RXl1{(c1oSR={8p9Ph>o_ zCu2q*ehVhK?K!ue@h^0?KHKWhOCa|$w$-PjDyxT{+Q5uW^9UNFf$Q#R&zL@50sxH+ zb5AYRa4GJu(hb)f*OYL#8@liqI+z8%mh7@=)Go7jdeu!~4m1haow|rzAh@ixM1Oaw zwl;-NX?KF48+E&zy4gg|`hivUvsvWA%j&0ONTHgBkH>)1mu-~GqMnE?+nG&aWzl#pV zuyuHW8`4>C_9tF;a?iStrfVkDD!C1E5lz9N%IDMAgB$b*L`x zY2huYF54FsPRZx!EbVt}?{U&!E4Yge#_+VE*{Y5OJGnbaX;HD~E|aSUYK|=&I;^?; zXgEhm099g^jXc8r$sPGa#R&tOf0NYx!_TW&+;-9Z1XxpoEq)4n$tMZ5x)j-Otl3(`NA}VY6a+1nadcu_W*;4O})6~yg?R9250!N0$8UQ{RD4*oOcBMBN?z2 z3j%w_FH>=!0&pbfDzGUuP(Dr;BIp%woQWW!sSwa!IBWkUAaCKYjktmm9|V=^!ig5+ zV&RFs?5ruSEIWP2Kftjs!}1@(Fb!NvUSg@mjIQ}y=**e~j{9k64E!d^k%`OMH^AuZ zfhHYifOf_|`w?;ZbcUrgnp48B@NoPuJ^FKA8RrP_u1_l?x0Pr^LgnK`FI9I4m?l%m z4$EEx35yb;-VI0i^~UO#^oFLYbvH>7S@enb3Ure#Bg>}Y5tQFIg`nB?+xMvR|?R@B~Vseh!4@I`gkpOKBkQUTwW z_ik>n%W;kV&?N7doAA=?HOh9TtTSr_R#_a`|6BeybvP%;zA$LUFQR|?jf0~0@m9it z5k=4^G_|5XrXj+v+WPpBZ2OYcMWnuS$h0cMa-7h2CuG&Yd~E}{bAOc{jI;=&3RduK zyfEKCh(j73sH*WyR#*ZyG?%2g37>tQ5&bHr0jBQIjdW0MAb4W77(9a_QxavU%vyTH z5qxvxb(E@Oz#J&zqPYJ`yEw(;TswF6b&Zan$R)+U59Z24h}j!b~ z={k(TF{Rv`=q^Ue?$@Mcmg_>^k)G63wi+~vo@Ge0I5keL9nSJ`BeK;Vvi3Mk>EVilsqSV=G9{xSulifPU*rFt+GE=W14q`7N{Ul)Q%o(X)fCES z1!gNw2yP;UQ27+5w=S#V!xG?z6Vrn?MJylnG^fd@0K|~(s*TI){Pp)yk?b96*eOS$Sz!c|b|7L^ePA6%Xonu$zC z=WvoDV(Rf45dKEAOp>Ddq{^qwn$EU!3UPwPf5QqdVFZk*e5wl{F-58%szgvx$oA)p`D0g}kQOG(f07+3 zo7fAw6{s5LAwX<5vxM{>GoA-!Qeh;Q=&R@DDipX!w6q8fjT;_=+2ZPB)IY1Iuz;Zh zBB+O^av?C5x&mxMDw8;vsM3~)gJMPAj)=r0dxl!XYFCT~9s;U0fC`FkHm%0_CuVq} z-hsA^@m}UJR9QO{m(l?t7nFa9LOtHOgY z-HUsO-`tT)F+q44P#9{%5@Ttx@}0sSl`qtqQ?X1kBT)Zs_2ck%ALuy9Ne%J42Pejr zK!HaXg+W6IE96h8K8JFsrb6Pkk1FuO^TlZ_v0gf~i4nXuopwPCfXu|F>y91H{O$p7 z9`)Okt@?osy)SzKt6QR^!^9)gs3<1aR@>n}8ggC`Dq4zO-`5l+I@5;G6lm{2^;_JH zvXx{!9S*WyFhEAgd%S3+f%irO4^q5&exgn@;6%Iu~}_kKvB>gye@x=ujS$&;K_05mAA({pmVP2T15z`8Z)FTepr_Q&tBxv z65RbY`lzU^SI8vo9IA_G7)^2gUA*L!D0v5PkF72;i59$H2m$}jlO&<1xgua3#^bxp z89#wq1b~wWz;b{~;0P)il?Y&eWb)DkuX%D!Dr*#9l#ecLNa4^roZ3n3!w|Hp-2X=x z4}BiUkhwV0TJH0#7LNq%q#83%S0}5cC|d_THOIiQ9<{kW{$dOCOMFrQw_v)Ke-g_h zR}j?6AVoB;xomI@y-MK(&muR90`Q4Z<>lif%(S$O$)WmeXYoVkVY6StKU&>2j`_XH zk=vGy`ZmkSA~xlhx`Dq!$>k<7EtdjvXrWHP*Bp6BPt|k<&z^H$^j8$?fh&Ta_xgA7 z0#t~&Us7gMo&rmvk8+}!iy5I1hj8P?n&Q}XcqjZb--g|s+(;z9!ky!;@JMaL;J7wq zm(g`w$U(BS4Z^zkf9l`tDT(=5{EF94NU4I4WhQfKOlthW<3Qd0163bMey5H{r12@` z7+=WzLzv>-e1(oVUUzi2fCHKIw37#s%HjUt6;Q4YNC`nkPm!Bo97Ba3kSPH__Lv4? z8f@pQteVFhgbC#F4%JPH%~kZ}nG=YLE`WO)@a<=+?8^adPCj)<354G{v#N0X%Y(0f zUa3oG7yRUg>J5xPOTs!m5%Q$H>v^%_AT3WdleG9-W`ndB=Vo`v1@kBNH`!~uQJk8x z_5|gN1*EZapN}i=h2l}M%Uw%%TiAt*?$μwrQ}qd?N(k}Mj3CI0|^5Vm6IiRwNc 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

LYb>BOQ~A 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 z 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

NLAQm$he+!oJ16*ct-CpH;$<{bydt3Z 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 { + const litAuth = useOptionalLitAuth(); + return ( + + Lit logo + + } + centerSlot={

} + rightSlot={ + litAuth?.isAuthenticated ? ( + + ) : null + } + /> + ); +}; diff --git a/apps/explorer/src/_config.ts b/apps/explorer/src/_config.ts new file mode 100644 index 000000000..cc1517338 --- /dev/null +++ b/apps/explorer/src/_config.ts @@ -0,0 +1,83 @@ +/** + * Application Configuration + * + * This file centralizes all configurable settings for the application. + * Modify these values to customize the application behavior. + */ + +// WalletConnect Configuration +export const WALLET_CONNECT = { + projectId: "YOUR_WALLETCONNECT_PROJECT_ID", // Replace with your actual WalletConnect Project ID +}; + +// Application Information +export const APP_INFO = { + copyright: "Lit Protocol", + + // Global service URLs (with defaults) + litLoginServer: + import.meta.env.VITE_LOGIN_SERVICE_URL || "https://login.litgateway.com", + litAuthServer: + import.meta.env.VITE_AUTH_SERVICE_URL || "https://auth-api.litprotocol.com", + + // Network-specific auth service URLs + authServiceUrls: { + "naga-dev": + import.meta.env.VITE_AUTH_SERVICE_URL_NAGA_DEV || + "https://auth-api.litprotocol.com", + "naga-test": + import.meta.env.VITE_AUTH_SERVICE_URL_NAGA_TEST || + "https://auth-api.litprotocol.com", + naga: + import.meta.env.VITE_AUTH_SERVICE_URL_NAGA || + "https://auth-api.litprotocol.com", + }, + + litAuthServerApiKey: import.meta.env.VITE_AUTH_SERVICE_API_KEY, + + // Discord configuration + discordClientId: + import.meta.env.VITE_LOGIN_DISCORD_CLIENT_ID || "1052874239658692668", + + // Other URLs + faucetUrl: "https://chronicle-yellowstone-faucet.getlit.dev/naga", + defaultPrivateKey: + "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", + nagaLitActionsDocs: "https://naga.actions-docs.litprotocol.com", +} as const; + +// Blockchain Network Configuration +export const NETWORKS = { + chronicleYellowstone: { + id: 175188, + name: "Chronicle Yellowstone", + network: "chronicle-yellowstone", + iconUrl: "/logo.svg", // Add icon path here + iconBackground: "#27233B", + }, + enabled: [ + "Chronicle Yellowstone", // This must match the name above + // "mainnet", + // "sepolia", + // "base", + "arbitrum", + ], +}; + +// Wallet Configuration +export const WALLETS = { + recommended: ["rainbow", "metamask", "coinbase"], + others: ["injected", "walletConnect"], +}; + +// Layout Configuration +export const LAYOUT = { + maxWidth: "48rem", // max-w-3xl + contentPadding: "24px", +}; + +// Application Features Toggle +export const FEATURES = { + showWalletBalance: true, + enableFlameAnimation: true, +}; diff --git a/apps/explorer/src/assets/2fa.svg b/apps/explorer/src/assets/2fa.svg new file mode 100644 index 000000000..31c1c7406 --- /dev/null +++ b/apps/explorer/src/assets/2fa.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/apps/explorer/src/assets/copy.svg b/apps/explorer/src/assets/copy.svg new file mode 100644 index 000000000..aa0a515ec --- /dev/null +++ b/apps/explorer/src/assets/copy.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/explorer/src/assets/discord.png b/apps/explorer/src/assets/discord.png new file mode 100644 index 0000000000000000000000000000000000000000..db85fdfe94298a8fa93a360e665c31d319a9c2f3 GIT binary patch literal 4613 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 \ No newline at end of file diff --git a/apps/explorer/src/assets/global.d.ts b/apps/explorer/src/assets/global.d.ts new file mode 100644 index 000000000..80948ccef --- /dev/null +++ b/apps/explorer/src/assets/global.d.ts @@ -0,0 +1,457 @@ +declare namespace Lit { + export namespace Actions { + /** + * Check if a given IPFS ID is permitted to sign using a given PKP tokenId + * @function isPermittedAction + * @param {Object} params + * @param {string} params.tokenId The tokenId to check + * @param {string} params.ipfsId The IPFS ID of some JS code (a lit action) + * @returns {Promise} A boolean indicating whether the IPFS ID is permitted to sign using the PKP tokenId + */ + function isPermittedAction({ + tokenId, + ipfsId, + }: { + tokenId: string; + ipfsId: string; + }): Promise; + + /** + * Check if a given wallet address is permitted to sign using a given PKP tokenId + * @function isPermittedAddress + * @param {Object} params + * @param {string} params.tokenId The tokenId to check + * @param {string} params.address The wallet address to check + * @returns {Promise} A boolean indicating whether the wallet address is permitted to sign using the PKP tokenId + */ + function isPermittedAddress({ + tokenId, + address, + }: { + tokenId: string; + address: string; + }): Promise; + + /** + * Check if a given auth method is permitted to sign using a given PKP tokenId + * @function isPermittedAuthMethod + * @param {Object} params + * @param {string} params.tokenId The tokenId to check + * @param {number} params.authMethodType The auth method type. This is an integer. This mapping shows the initial set but this set may be expanded over time without updating this contract: https://github.com/LIT-Protocol/LitNodeContracts/blob/main/contracts/PKPPermissions.sol#L25 + * @param {Uint8Array} params.userId The id of the auth method to check expressed as an array of unsigned 8-bit integers (a Uint8Array) + * @returns {Promise} A boolean indicating whether the auth method is permitted to sign using the PKP tokenId + */ + function isPermittedAuthMethod({ + tokenId, + authMethodType, + userId, + }: { + tokenId: string; + authMethodType: number; + userId: Uint8Array; + }): Promise; + + /** + * Get the full list of actions that are permitted to sign using a given PKP tokenId + * @function getPermittedActions + * @param {Object} params + * @param {string} params.tokenId The tokenId to check + * @returns {Promise>} An array of IPFS IDs of lit actions that are permitted to sign using the PKP tokenId + */ + function getPermittedActions({ + tokenId, + }: { + tokenId: string; + }): Promise>; + + /** + * Get the full list of addresses that are permitted to sign using a given PKP tokenId + * @function getPermittedAddresses + * @param {Object} params + * @param {string} params.tokenId The tokenId to check + * @returns {Promise>} An array of addresses that are permitted to sign using the PKP tokenId + */ + function getPermittedAddresses({ + tokenId, + }: { + tokenId: string; + }): Promise>; + + /** + * Get the full list of auth methods that are permitted to sign using a given PKP tokenId + * @function getPermittedAuthMethods + * @param {Object} params + * @param {string} params.tokenId The tokenId to check + * @returns {Promise>} An array of auth methods that are permitted to sign using the PKP tokenId. Each auth method is an object with the following properties: auth_method_type, id, and user_pubkey (used for web authn, this is the pubkey of the user's authentication keypair) + */ + function getPermittedAuthMethods({ tokenId }: { tokenId: string }): Promise< + Array<{ + auth_method_type: number; + id: string; + user_pubkey: string; + }> + >; + + /** + * Get the permitted auth method scopes for a given PKP tokenId and auth method type + id + * @function getPermittedAuthMethodScopes + * @param {Object} params + * @param {string} params.tokenId The tokenId to check + * @param {number} params.authMethodType The auth method type to look up + * @param {Uint8Array} params.userId The id of the auth method to check expressed as an array of unsigned 8-bit integers (a Uint8Array) + * @param {number} params.maxScopeId The maximum scope id to check. This is an integer. + * @returns {Promise>} An array of booleans that define if a given scope id is turned on. The index of the array is the scope id. For example, if the array is [true, false, true], then scope ids 0 and 2 are turned on, but scope id 1 is turned off. + */ + function getPermittedAuthMethodScopes({ + tokenId, + authMethodType, + userId, + maxScopeId, + }: { + tokenId: string; + authMethodType: number; + userId: Uint8Array; + maxScopeId: number; + }): Promise>; + + /** + * Converts a PKP public key to a PKP token ID by hashing it with keccak256 + * @function pubkeyToTokenId + * @param {Object} params + * @param {string} params.publicKey The public key to convert + * @returns {Promise} The token ID as a string + */ + function pubkeyToTokenId({ + publicKey, + }: { + publicKey: string; + }): Promise; + + /** + * Gets latest nonce for the given address on a supported chain + * @function getLatestNonce + * @param {Object} params + * @param {string} params.address The wallet address for getting the nonce + * @param {string} params.chain The chain of which the nonce is fetched + * @returns {Promise} The token ID as a string + */ + function getLatestNonce({ + address, + chain, + }: { + address: string; + chain: string; + }): Promise; + + /** + * Ask the Lit Node to sign any data using the ECDSA Algorithm with it's private key share. The resulting signature share will be returned to the Lit JS SDK which will automatically combine the shares and give you the full signature to use. + * @function signEcdsa + * @param {Object} params + * @param {Uint8Array} params.toSign The data to sign. Should be an array of 8-bit integers. + * @param {string} params.publicKey The public key of the PKP you wish to sign with + * @param {string} params.sigName You can put any string here. This is used to identify the signature in the response by the Lit JS SDK. This is useful if you are signing multiple messages at once. When you get the final signature out, it will be in an object with this signature name as the key. + * @returns {Promise} This function will return the string "success" if it works. The signature share is returned behind the scenes to the Lit JS SDK which will automatically combine the shares and give you the full signature to use. + */ + function signEcdsa({ + toSign, + publicKey, + sigName, + }: { + toSign: Uint8Array | number[]; + publicKey: string; + sigName: string; + }): Promise; + + /** + * Ask the Lit Node to sign a message using the eth_personalSign algorithm. The resulting signature share will be returned to the Lit JS SDK which will automatically combine the shares and give you the full signature to use. + * @function ethPersonalSignMessageEcdsa + * @param {Object} params + * @param {string} params.message The message to sign. Should be a string. + * @param {string} params.publicKey The public key of the PKP you wish to sign with + * @param {string} params.sigName You can put any string here. This is used to identify the signature in the response by the Lit JS SDK. This is useful if you are signing multiple messages at once. When you get the final signature out, it will be in an object with this signature name as the key. + * @returns {Promise} This function will return the string "success" if it works. The signature share is returned behind the scenes to the Lit JS SDK which will automatically combine the shares and give you the full signature to use. + */ + function ethPersonalSignMessageEcdsa({ + message, + publicKey, + sigName, + }: { + message: string; + publicKey: string; + sigName: string; + }): Promise; + + /** + * Checks a condition using the Lit condition checking engine. This is the same engine that powers our Access Control product. You can use this to check any condition that you can express in our condition language. This is a powerful tool that allows you to build complex conditions that can be checked in a decentralized way. Visit https://developer.litprotocol.com and click on the "Access Control" section to learn more. + * @function checkConditions + * @param {Object} params + * @param {Array} params.conditions An array of access control condition objects + * @param {Object} params.authSig The AuthSig to use for the condition check. For example, if you were checking for NFT ownership, this AuthSig would be the signature from the NFT owner's wallet. + * @param {string} params.chain The chain this AuthSig comes from + * @returns {Promise} A boolean indicating whether the condition check passed or failed + */ + function checkConditions({ + conditions, + authSig, + chain, + }: { + conditions: Array; + authSig: any; + chain: string; + }): Promise; + + /** + * Set the response returned to the client + * @function setResponse + * @param {Object} params + * @param {string} params.response The response to send to the client. You can put any string here, like you could use JSON.stringify on a JS object and send it here. + */ + function setResponse({ response }: { response: string }): void; + + /** + * Call a child Lit Action + * @function call + * @param {Object} params + * @param {string} params.ipfsId The IPFS ID of the Lit Action to call + * @param {Object=} params.params Optional parameters to pass to the child Lit Action + * @returns {Promise} The response from the child Lit Action. Note that any signatures performed by the child Lit Action will be automatically combined and returned with the parent Lit Action to the Lit JS SDK client. + */ + function call({ + ipfsId, + params, + }: { + ipfsId: string; + params?: any; + }): Promise; + + /** + * Call a smart contract + * @function callContract + * @param {Object} params + * @param {string} params.chain The name of the chain to use. Check out the lit docs "Supported Blockchains" page to find the name. For example, "ethereum" + * @param {string} params.txn The RLP Encoded txn, as a hex string + * @returns {Promise} The response from calling the contract + */ + function callContract({ + chain, + txn, + }: { + chain: string; + txn: string; + }): Promise; + + /** + * Convert a Uint8Array to a string. This is a re-export of this function: https://www.npmjs.com/package/Uint8Arrays#tostringarray-encoding--utf8 + * @function Uint8ArrayToString + * @param {Uint8Array} array The Uint8Array to convert + * @param {string} encoding The encoding to use. Defaults to "utf8" + * @returns {string} The string representation of the Uint8Array + */ + function Uint8ArrayToString(array: Uint8Array, encoding?: string): string; + + /** + * Convert a string to a Uint8Array. This is a re-export of this function: https://www.npmjs.com/package/Uint8Arrays#fromstringstring-encoding--utf8 + * @function Uint8ArrayFromString + * @param {string} string The string to convert + * @param {string} encoding The encoding to use. Defaults to "utf8" + * @returns {Uint8Array} The Uint8Array representation of the string + */ + function Uint8ArrayFromString( + string: string, + encoding?: string + ): Uint8Array; + + function aesDecrypt({ + symmetricKey, + ciphertext, + }: { + symmetricKey: any; + ciphertext: any; + }): any; + + /** + * Claim a key through a key identifier, the result of the claim will be added to `claim_id` + * under the `keyId` given. + * @param {Object} params + * @param {string} params.keyId user id of the claim + */ + function claimKey({ keyId }: { keyId: string }): any; + + /** + * Broadcast a message to all connected clients and collect their responses + * @param {Object} params + * @param {string} params.name The name of the broadcast + * @param {string} params.value The value to broadcast + * @returns {Promise} The collected responses as a json array + */ + function broadcastAndCollect({ + name, + value, + }: { + name: string; + value: string; + }): Promise; + + /** + * Decrypt and combine the provided + * @param {Object} params + * @param {string} params.accessControlConditions The access control conditions + * @param {string} params.ciphertext The ciphertext to decrypt + * @param {string} params.dataToEncryptHash The hash of the data to encrypt + * @param {string} params.authSig The auth signature + * @param {string} params.chain The chain + * @returns {Promise} The combined data + */ + function decryptAndCombine({ + accessControlConditions, + ciphertext, + dataToEncryptHash, + authSig, + chain, + }: { + accessControlConditions: string; + ciphertext: string; + dataToEncryptHash: string; + authSig: string; + chain: string; + }): Promise; + + /** + * Decrypt to a single node. + * @param {Object} params + * @param {string} params.accessControlConditions The access control conditions + * @param {string} params.ciphertext The ciphertext to decrypt + * @param {string} params.dataToEncryptHash The hash of the data to encrypt + * @param {string} params.authSig The auth signature + * @param {string} params.chain The chain + * @returns {Promise} The combined data + */ + function decryptToSingleNode({ + accessControlConditions, + ciphertext, + dataToEncryptHash, + authSig, + chain, + }: { + accessControlConditions: string; + ciphertext: string; + dataToEncryptHash: string; + authSig: string; + chain: string; + }): Promise; + + /** + * Sign and combine ECDSA signatures + * @param {Object} params + * @param {Uint8Array} params.toSign the message to sign + * @param {string} params.publicKey the public key of the PKP + * @param {string} params.sigName the name of the signature + * @returns {Promise} The resulting signature + */ + function signAndCombineEcdsa({ + toSign, + publicKey, + sigName, + }: { + toSign: Uint8Array; + publicKey: string; + sigName: string; + }): Promise; + + /** + * Run a function once + * @param {Object} params + * @param {boolean} params.waitForResponse Whether to wait for a response or not - if false, the function will return immediately. + * @param {string} params.name A unique name for this run + * @param {Function} async_fn The async function to run + * @returns {Promise} Whether the node can run the code in the next block or not. + */ + function runOnce( + { + waitForResponse, + name, + }: { + waitForResponse: boolean; + name: string; + }, + async_fn: () => Promise + ): Promise; + + /** + * Get the RPC URL for a chain + * @param {Object} params + * @param {string} params.chain The chain to get the RPC URL for + * @returns {Promise} The RPC URL for the chain + */ + function getRpcUrl({ chain }: { chain: string }): Promise; + + /** + * Encrypt data + * @param {Object} params + * @param {string} params.accessControlConditions The access control conditions + * @param {string} params.to_encrypt The message to encrypt + * @returns {Promise<{ciphertext: string; dataToEncryptHash: string}>} Contains two items: The ciphertext result after encryption, named "ciphertext" and the dataToEncryptHash, named "dataToEncryptHash" + */ + function encrypt({ + accessControlConditions, + to_encrypt, + }: { + accessControlConditions: string; + to_encrypt: string; + }): Promise<{ + ciphertext: string; + dataToEncryptHash: string; + }>; + } + + export namespace Auth { + /** + * Array of action IPFS IDs. + * @type {Array<`Qm${string}` | string>} + */ + const actionIpfsIds: Array<`Qm${string}` | string>; + + /** + * Array of authentication method contexts. + * @type {Array<{ + * userId: string; + * appId: string; + * authMethodType: number; + * lastRetrievedAt: string; + * expiration: number; + * usedForSignSessionKeyRequest: boolean; + * }>} + */ + const authMethodContexts: { + userId: string; + appId: string; + authMethodType: number; + lastRetrievedAt: string; + expiration: number; + usedForSignSessionKeyRequest: boolean; + }[]; + + /** + * Array of resources. + * @type {Array} + */ + const resources: Array; + + /** + * Custom authentication resource. + * @type {string | `"\\(true,${string})\\"`} + */ + const customAuthResource: string | `"\\(true,${string})\\"`; + } +} + +// Add ethers global declaration +declare const ethers: typeof import("ethers"); + +// Global LOG_LEVEL +declare global { + interface Window { + LOG_LEVEL?: 'silent' | 'error' | 'warn' | 'info' | 'debug'; + } +} +export {}; diff --git a/apps/explorer/src/assets/google.png b/apps/explorer/src/assets/google.png new file mode 100644 index 0000000000000000000000000000000000000000..0f7e3e772fcdbbff13690b38615c980d63d0f1ca GIT binary patch literal 17050 zcma*P2{_d4`!_r@49$=%W2+dVX+m}>yRi(4jI7yrQXzzFGZ=eJl4VpFDI~Pn%OFc3 zMhitE(NvN$AzSY??)&$9-s68f@B2LWadcnTb*`WDyv}Qx`Oa6mwH1CRayJqJf$TIl zGq!<1xKQAq+71ptkuN^b2O3%HuqpA zoGQGf0OWUs+gP21XkQJBrx%XeX*HbzG(?D*Qy2uoBgFm(g;1}FK_F5Pb7Mo>sB7Qf zf3bJ&&#fdp>q%YM{IJ4HALruzdOv+2?dadh7L5yK6&q=02sEGd;Lq-y1f7kj)i?cr zXV(9|9sMiZ%lvBu2{=ga5<}YvY$hl}(3`dNQcf2a1R0Wco>!?OGM;O$KH!Y4CvJ1=F^KsM<6bk$ens4T*M!?)gAZ|$l^h62KUl#ZzGmG zlz*#=#_WnZGy-`g%YDER3yl~PaqSs~`1tEIQB@%azZi1(LIfE}ih0nn5-C;%FTIxK zf%1hce_ZG8LU7b`>lWh0i4_vRJ+wR_`920aWO?bhGg%@YUJ!e!9XtYDQh8D}cu^w1 z;?>dpymZ^ddYxif559sO??ox&?CW=8oTvvQYPv$<^V| z)#C!EU&5!9ObkScni=$jaOm@soRdq@vXujo`F{#Rp{MU3{;1sod5wkLc9Joaeq(yg z--WoF7vW+dDy3~QrS-;)Qn)WfcLw&!$85^J2i|8Y5a8uPJdPq=Xn`CR6J#2TcqBZ@ zH8{}%(N>ckzOF#8l_jafiXjf)+>zz&LVPSHC^pyx8Mo&2Q&yz&@gk1P@YHLWdnh`~ zIu`CzE(wLc@iCK1Q=ngzB^lg@1Q9rC%`QY=GnhOD?nrtp&|hzo7?4Z1@qz9;2_>{1YHaT`%Z{V;c^Xj-iL@%IKNWhNAQB!?n`Rd z_91L%lFSwlmEbD&Y0IwW_H$O}!dDAqtqT?C_*{d~T9GLwbBN}P#o~3}D9=>Rg@S1b zCx|&Qa-LFYDL5t51tXioHjas4pKq$h4)UcZPAGLX#_C)>FAKH0XGB94%N*&gHxNIJ z4}ogSW>7ervLpoIV|zPhd3j|0!#EvO6ev_#`Xe9G!!y}aA{Wd)`5YΞ0+-2~J%| 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 wzZLp9yCD?%&zus`=szV{Tfr$^*uUIkHoL literal 0 HcmV?d00001 diff --git a/apps/explorer/src/assets/lit-primary-orange.svg b/apps/explorer/src/assets/lit-primary-orange.svg new file mode 100644 index 000000000..8bc001472 --- /dev/null +++ b/apps/explorer/src/assets/lit-primary-orange.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/explorer/src/assets/loading-lit.svg b/apps/explorer/src/assets/loading-lit.svg new file mode 100644 index 000000000..d63fac983 --- /dev/null +++ b/apps/explorer/src/assets/loading-lit.svg @@ -0,0 +1,184 @@ + + Lit — Loading + Animated “LIT” loading screen with flame fill, subtle wobble, embers, and progress underline. + + + + + + + + + + + LIT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LIT + + + + + + + + + + + + + + + + + + + + + + + + + + + ... + + + \ No newline at end of file diff --git a/apps/explorer/src/assets/passkey.svg b/apps/explorer/src/assets/passkey.svg new file mode 100644 index 000000000..5c15f8fe8 --- /dev/null +++ b/apps/explorer/src/assets/passkey.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/explorer/src/assets/phone.svg b/apps/explorer/src/assets/phone.svg new file mode 100644 index 000000000..4536d0bd7 --- /dev/null +++ b/apps/explorer/src/assets/phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/explorer/src/assets/react.svg b/apps/explorer/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/apps/explorer/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/explorer/src/assets/slash.svg b/apps/explorer/src/assets/slash.svg new file mode 100644 index 000000000..1ad0467ff --- /dev/null +++ b/apps/explorer/src/assets/slash.svg @@ -0,0 +1,14 @@ + + + \ No newline at end of file diff --git a/apps/explorer/src/assets/web3-wallet.svg b/apps/explorer/src/assets/web3-wallet.svg new file mode 100644 index 000000000..b642e02a4 --- /dev/null +++ b/apps/explorer/src/assets/web3-wallet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/explorer/src/assets/whatsapp.svg b/apps/explorer/src/assets/whatsapp.svg new file mode 100644 index 000000000..70a6571d4 --- /dev/null +++ b/apps/explorer/src/assets/whatsapp.svg @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/apps/explorer/src/domain/lit/chains.ts b/apps/explorer/src/domain/lit/chains.ts new file mode 100644 index 000000000..dc154eac0 --- /dev/null +++ b/apps/explorer/src/domain/lit/chains.ts @@ -0,0 +1,184 @@ +export interface LitChainConfig { + id: number; + name: string; + symbol: string; + rpcUrl: string; + explorerUrl: string; + litIdentifier: string; + testnet: boolean; +} + +export const SUPPORTED_CHAIN_ID = 2888; +const CUSTOM_CHAINS_STORAGE_KEY = "chains.custom.v1"; + +export const DEFAULT_CHAINS: Record = { + yellowstone: { + id: 175188, + name: "Chronicle Yellowstone", + symbol: "tstLPX", + rpcUrl: "https://yellowstone-rpc.litprotocol.com/", + explorerUrl: "https://yellowstone-explorer.litprotocol.com/", + litIdentifier: "yellowstone", + testnet: true, + }, + ethereum: { + id: 1, + name: "Ethereum", + symbol: "ETH", + rpcUrl: "https://eth.llamarpc.com", + explorerUrl: "https://etherscan.io/", + litIdentifier: "ethereum", + testnet: false, + }, + sepolia: { + id: 11155111, + name: "Sepolia Testnet", + symbol: "ETH", + rpcUrl: "https://ethereum-sepolia-rpc.publicnode.com", + explorerUrl: "https://sepolia.etherscan.io/", + litIdentifier: "sepolia", + testnet: true, + }, + polygon: { + id: 137, + name: "Polygon", + symbol: "MATIC", + rpcUrl: "https://polygon-bor-rpc.publicnode.com", + explorerUrl: "https://polygonscan.com/", + litIdentifier: "polygon", + testnet: false, + }, + arbitrum: { + id: 42161, + name: "Arbitrum", + symbol: "AETH", + rpcUrl: "https://arbitrum-one-rpc.publicnode.com", + explorerUrl: "https://arbiscan.io/", + litIdentifier: "arbitrum", + testnet: false, + }, + base: { + id: 8453, + name: "Base", + symbol: "ETH", + rpcUrl: "https://base-rpc.publicnode.com", + explorerUrl: "https://basescan.org/", + litIdentifier: "base", + testnet: false, + }, + optimism: { + id: 10, + name: "Optimism", + symbol: "ETH", + rpcUrl: "https://optimism-rpc.publicnode.com", + explorerUrl: "https://optimistic.etherscan.io/", + litIdentifier: "optimism", + testnet: false, + }, +}; + +export const SUPPORTED_CHAINS: Record = DEFAULT_CHAINS; + +function isValidUrl(url: string): boolean { + try { + new URL(url); + return true; + } catch { + return false; + } +} + +export function validateChainConfig( + cfg: LitChainConfig, + _allChainsById?: Map +): { ok: true } | { ok: false; error: string } { + if (!cfg) return { ok: false, error: "Missing chain config" }; + if (!Number.isInteger(cfg.id) || cfg.id <= 0) + return { ok: false, error: "id must be a positive integer" }; + if (!cfg.name || cfg.name.trim().length === 0) + return { ok: false, error: "name is required" }; + if (!cfg.symbol || cfg.symbol.trim().length === 0) + return { ok: false, error: "symbol is required" }; + if (!cfg.rpcUrl || !isValidUrl(cfg.rpcUrl)) + return { ok: false, error: "rpcUrl must be a valid URL" }; + if (cfg.explorerUrl && !isValidUrl(cfg.explorerUrl)) + return { ok: false, error: "explorerUrl must be a valid URL if provided" }; + if (typeof cfg.testnet !== "boolean") + return { ok: false, error: "testnet must be a boolean" }; + if (!cfg.litIdentifier || cfg.litIdentifier.trim().length === 0) + return { ok: false, error: "litIdentifier is required" }; + + return { ok: true }; +} + +export function loadCustomChains(): Record { + if (typeof window === "undefined") return {}; + try { + const raw = window.localStorage.getItem(CUSTOM_CHAINS_STORAGE_KEY); + if (!raw) return {}; + const parsed = JSON.parse(raw) as unknown; + if (!parsed || typeof parsed !== "object") return {}; + return parsed as Record; + } catch { + return {}; + } +} + +export function saveCustomChains(chains: Record): void { + if (typeof window === "undefined") return; + try { + window.localStorage.setItem( + CUSTOM_CHAINS_STORAGE_KEY, + JSON.stringify(chains) + ); + } catch { + // ignore + } +} + +export function getCustomChains(): Record { + return loadCustomChains(); +} + +export function getAllChains(): Record { + return { ...DEFAULT_CHAINS, ...getCustomChains() }; +} + +export function isCustomChain(slug: string): boolean { + const custom = getCustomChains(); + return Object.prototype.hasOwnProperty.call(custom, slug); +} + +export function addCustomChain( + slug: string, + cfg: LitChainConfig +): { ok: true } | { ok: false; error: string } { + const existingCustom = getCustomChains(); + + if (!slug || slug.trim().length === 0) + return { ok: false, error: "slug is required" }; + const safeSlug = slug.trim(); + if (Object.prototype.hasOwnProperty.call(DEFAULT_CHAINS, safeSlug)) { + return { ok: false, error: "Slug collides with a default chain" }; + } + if (Object.prototype.hasOwnProperty.call(existingCustom, safeSlug)) { + return { ok: false, error: "Slug already exists" }; + } + + const valid = validateChainConfig(cfg); + if (!("ok" in valid) || valid.ok !== true) return valid; + + const updated = { + ...existingCustom, + [safeSlug]: cfg, + } as Record; + saveCustomChains(updated); + return { ok: true }; +} + +export function removeCustomChain(slug: string): void { + const existingCustom = getCustomChains(); + if (!Object.prototype.hasOwnProperty.call(existingCustom, slug)) return; + const { [slug]: _removed, ...rest } = existingCustom; + saveCustomChains(rest); +} diff --git a/apps/explorer/src/hooks/useLitServiceSetup.ts b/apps/explorer/src/hooks/useLitServiceSetup.ts new file mode 100644 index 000000000..23cb72610 --- /dev/null +++ b/apps/explorer/src/hooks/useLitServiceSetup.ts @@ -0,0 +1,144 @@ +/** + * useLitServiceSetup.ts + * + * React hook for setting up Lit Protocol services with proper configuration. + * Handles network setup, auth manager creation, and storage plugin configuration. + */ + +import React, { useState, useCallback, useRef } from "react"; +import { createLitClient } from "@lit-protocol/lit-client"; +import { createAuthManager, storagePlugins } from "@lit-protocol/auth"; +import { nagaDev, nagaTest } from "@lit-protocol/networks"; + +// Configuration constants at the top +const DEFAULT_APP_NAME = "lit-auth-app"; +type NetworkModule = typeof nagaDev | typeof nagaTest; +const NETWORK_MODULES: Record = { + "naga-dev": nagaDev, + "naga-test": nagaTest, +}; + +interface LitServiceSetupConfig { + appName?: string; + networkName?: string; + network?: NetworkModule; + autoSetup?: boolean; +} + +export interface LitServices { + litClient: Awaited>; + authManager: Awaited>; +} + +interface UseLitServiceSetupReturn { + services: LitServices | null; + isInitializing: boolean; + error: string | null; + setupServices: () => Promise; + clearServices: () => void; + isReady: boolean; +} + +/** + * Hook for setting up Lit Protocol services + * + * @param config Configuration options for the setup + * @returns Object containing services, setup state, and control functions + */ +export const useLitServiceSetup = ( + config: LitServiceSetupConfig = {} +): UseLitServiceSetupReturn => { + const [services, setServices] = useState(null); + const [isInitializing, setIsInitializing] = useState(false); + const [error, setError] = useState(null); + + // Use ref to track if services are being initialized to prevent multiple calls + const initializingRef = useRef(false); + + const setupServices = useCallback(async (): Promise => { + // Prevent multiple simultaneous initialization attempts + if (initializingRef.current) { + throw new Error("Services are already being initialized"); + } + + try { + initializingRef.current = true; + setIsInitializing(true); + setError(null); + + console.log("🚀 Starting Lit Protocol service setup..."); + + // Step 1: Create Lit Client with singleton pattern + console.log(`📡 Creating Lit Client...`); + const networkModule: NetworkModule | undefined = + config.network || + (config.networkName ? NETWORK_MODULES[config.networkName] : undefined); + if (!networkModule) { + throw new Error( + `Unknown or unsupported network configuration. Provide a 'network' instance or a valid 'networkName'.` + ); + } + const litClient = await createLitClient({ + network: networkModule as unknown as Parameters< + typeof createLitClient + >[0]["network"], + }); + console.log("✅ Lit Client created successfully"); + + // Step 2: Create Auth Manager with storage configuration + console.log("🔐 Creating Auth Manager..."); + if (!config.networkName) { + throw new Error( + "No networkName provided for storage configuration. Pass 'networkName' to useLitServiceSetup." + ); + } + const authManager = createAuthManager({ + storage: storagePlugins.localStorage({ + appName: config.appName || DEFAULT_APP_NAME, + networkName: config.networkName, + }), + }); + console.log("✅ Auth Manager created successfully"); + + const newServices = { litClient, authManager }; + setServices(newServices); + + console.log( + `🎉 All Lit Protocol services initialized successfully. Network: ${config.networkName}` + ); + return newServices; + } catch (err: any) { + const errorMessage = `Failed to initialize Lit Protocol services: ${ + err.message || err + }`; + console.error("❌", errorMessage, err); + setError(errorMessage); + throw new Error(errorMessage); + } finally { + setIsInitializing(false); + initializingRef.current = false; + } + }, [config]); + + const clearServices = useCallback(() => { + console.log("🧹 Clearing Lit Protocol services..."); + setServices(null); + setError(null); + }, []); + + // Auto-setup on mount if requested + React.useEffect(() => { + if (config.autoSetup && !services && !isInitializing) { + setupServices().catch(console.error); + } + }, [config.autoSetup, services, isInitializing, setupServices]); + + return { + services, + isInitializing, + error, + setupServices, + clearServices, + isReady: !!(services?.litClient && services?.authManager), + }; +}; diff --git a/apps/explorer/src/index.tsx b/apps/explorer/src/index.tsx new file mode 100644 index 000000000..56394a477 --- /dev/null +++ b/apps/explorer/src/index.tsx @@ -0,0 +1,90 @@ +import { useState } from "react"; +import { Outlet } from "react-router-dom"; +import { APP_INFO } from "./_config"; +import { LitAuthProvider } from "./lit-login-modal/LitAuthProvider"; +import { Header } from "@/Header"; + +interface ErrorDisplayProps { + error: string | null; + isVisible: boolean; + onClear: () => void; +} + +const ErrorDisplay = ({ error, isVisible, onClear }: ErrorDisplayProps) => { + if (!error || !isVisible) { + return null; + } + + return ( +
+
+
+ ❌ +
+
+

+ Error +

+
+ {error} +
+
+ +
+
+ ); +}; + +export const HomePage = () => { + // Error state management + const [error, setError] = useState(null); + const [isErrorVisible, setIsErrorVisible] = useState(false); + + // Function to clear error + const clearError = () => { + setError(null); + setIsErrorVisible(false); + }; + + return ( + + {/* ---------- Header ---------- */} +
+ + {/* ---------- Main Content ---------- */} +
+ + +
+ + {/* ---------- Footer ---------- */} +
+

+ © {new Date().getFullYear()} {APP_INFO.copyright} +

+
+ + ); +}; + +export default HomePage; diff --git a/apps/explorer/src/layout/AppHeader.tsx b/apps/explorer/src/layout/AppHeader.tsx new file mode 100644 index 000000000..39add233b --- /dev/null +++ b/apps/explorer/src/layout/AppHeader.tsx @@ -0,0 +1,36 @@ +/** + * AppHeader + * + * Sticky top header shell with left logo slot, centre slot, and right actions slot. + * Mirrors current spacing and borders used in the app header. + */ + +import React from "react"; + +interface AppHeaderProps { + leftSlot?: React.ReactNode; // e.g., logo/link + centerSlot?: React.ReactNode; // e.g., search + rightSlot?: React.ReactNode; // e.g., auth actions +} + +export const AppHeader: React.FC = ({ leftSlot, centerSlot, rightSlot }) => { + return ( +
+
+
+
+
+
+
{leftSlot}
+
{centerSlot}
+
{rightSlot}
+
+
+
+
+
+
+ ); +}; + + diff --git a/apps/explorer/src/layout/BurgerMenu.tsx b/apps/explorer/src/layout/BurgerMenu.tsx new file mode 100644 index 000000000..f79740c00 --- /dev/null +++ b/apps/explorer/src/layout/BurgerMenu.tsx @@ -0,0 +1,50 @@ +/** + * BurgerMenu + * + * Small-screen floating menu button (top-right). Consumer passes the menu content. + * Visible only below a breakpoint (default: lg). + */ + +import React from "react"; + +interface BurgerMenuProps { + menu: React.ReactNode; + buttonAriaLabel?: string; + positionClass?: string; // default fixed top-2 right-2 sm:top-3 sm:right-3 + visibleBelowBreakpoint?: 'lg' | 'md' | 'xl'; +} + +export const BurgerMenu: React.FC = ({ + menu, + buttonAriaLabel = "Open menu", + positionClass = "fixed top-2 right-2 sm:top-3 sm:right-3", + visibleBelowBreakpoint = 'lg', +}) => { + const [open, setOpen] = React.useState(false); + const visibilityClass = visibleBelowBreakpoint === 'lg' ? 'block lg:hidden' : visibleBelowBreakpoint === 'md' ? 'block md:hidden' : 'block xl:hidden'; + return ( +
+ + {open && ( +
+ {menu} +
+ )} +
+ ); +}; + + diff --git a/apps/explorer/src/layout/GlobalMessage.tsx b/apps/explorer/src/layout/GlobalMessage.tsx new file mode 100644 index 000000000..802a8bfcc --- /dev/null +++ b/apps/explorer/src/layout/GlobalMessage.tsx @@ -0,0 +1,40 @@ +/** + * GlobalMessage + * + * Sticky, dismiss-less message bar that appears below header/nav on md+ screens. + * Responsive: not sticky on small screens by default (keeps layout simple). + * + * Usage: + * + */ + +import React from "react"; + +interface GlobalMessageProps { + visible: boolean; + message: string; + className?: string; + /** Tailwind position classes controlling sticky offset on md+ */ + stickyOffsetClass?: string; // default "md:sticky md:top-28" +} + +export const GlobalMessage: React.FC = ({ + visible, + message, + className, + stickyOffsetClass = "md:sticky md:top-28", +}) => { + if (!visible) return null; + return ( +
+ {message} +
+ ); +}; + + diff --git a/apps/explorer/src/layout/StickySidebarLayout.tsx b/apps/explorer/src/layout/StickySidebarLayout.tsx new file mode 100644 index 000000000..cdb3bd864 --- /dev/null +++ b/apps/explorer/src/layout/StickySidebarLayout.tsx @@ -0,0 +1,53 @@ +/** + * StickySidebarLayout + * + * Two-column layout where the left sidebar is sticky and the right content scrolls. + * - Sidebar hidden below a breakpoint (default: lg) + * - Matches spacing, widths, and offsets used by the current app + * + * Usage: + * }> + * + * + */ + +import React from "react"; + +interface StickySidebarLayoutProps { + sidebar: React.ReactNode; + children: React.ReactNode; + /** Tailwind class controlling sidebar width */ + sidebarWidthClass?: string; // default w-[18rem] + /** Breakpoint at which sidebar becomes hidden */ + hideAtBreakpoint?: 'lg' | 'md' | 'xl'; + /** Inline style top offset for the sticky sidebar */ + sidebarTopOffsetPx?: number; // default matches current header+nav height +} + +export const StickySidebarLayout: React.FC = ({ + sidebar, + children, + sidebarWidthClass = "w-[18rem]", + hideAtBreakpoint = "lg", + sidebarTopOffsetPx = 7 * 16 + 38, // 7rem + 38px +}) => { + const hiddenClass = hideAtBreakpoint === 'lg' ? 'hidden lg:block' : hideAtBreakpoint === 'md' ? 'hidden md:block' : 'hidden xl:block'; + return ( +
+
+
+ +
+ {children} +
+
+
+ ); +}; + + diff --git a/apps/explorer/src/layout/TopNavBar.tsx b/apps/explorer/src/layout/TopNavBar.tsx new file mode 100644 index 000000000..d338bbd6a --- /dev/null +++ b/apps/explorer/src/layout/TopNavBar.tsx @@ -0,0 +1,62 @@ +/** + * TopNavBar + * + * Sticky tab navigation bar that sits below the page header. + * - Tabs scroll horizontally on small screens + * - Sticks under a standard sticky header height + * - Provides a right-side slot for actions (e.g., account/burger menu) + * + * Usage: + * } /> + */ + +import React from "react"; + +export interface TopNavTab { + id: string; + label: string; +} + +interface TopNavBarProps { + tabs: TopNavTab[]; + activeTab: string; + onTabChange: (id: string) => void; + rightSlot?: React.ReactNode; + /** Override sticky offsets if your header height differs */ + stickyClassName?: string; // e.g. "sticky top-14 sm:top-16" +} + +export const TopNavBar: React.FC = ({ + tabs, + activeTab, + onTabChange, + rightSlot, + stickyClassName = "sticky top-14 sm:top-16", +}) => { + return ( + + ); +}; + + diff --git a/apps/explorer/src/layout/index.ts b/apps/explorer/src/layout/index.ts new file mode 100644 index 000000000..d75209f6c --- /dev/null +++ b/apps/explorer/src/layout/index.ts @@ -0,0 +1,7 @@ +export { TopNavBar, type TopNavTab } from './TopNavBar'; +export { GlobalMessage } from './GlobalMessage'; +export { StickySidebarLayout } from './StickySidebarLayout'; +export { BurgerMenu } from './BurgerMenu'; +export { AppHeader } from './AppHeader'; + + diff --git a/apps/explorer/src/lit-action-examples/entries/crypto-jwt.ts b/apps/explorer/src/lit-action-examples/entries/crypto-jwt.ts new file mode 100644 index 000000000..14bd45a20 --- /dev/null +++ b/apps/explorer/src/lit-action-examples/entries/crypto-jwt.ts @@ -0,0 +1,79 @@ +import type { LitActionExample } from "../types"; + +const code = String.raw`(async () => { + // Shim + const { Buffer: NodeBuffer } = await import('node:buffer'); + globalThis.Buffer = NodeBuffer; + + // Crypto + const text = 'Hello, crypto world!'; + const encoder = new TextEncoder(); + const data = encoder.encode(text); + const hashBuffer = await globalThis.crypto.subtle.digest('SHA-256', data); + const hashArray = Array.from(new Uint8Array(hashBuffer)); + const hashBase64 = Buffer.from(hashArray).toString('base64url'); + console.log(hashBase64); + + // JWT + const secret = Buffer.from('mysecret', 'utf8'); + const payload = { userId: 123 }; + + // sign short-lived token + const token = jwt.sign(payload, secret, { expiresIn: '2s' }); + console.log("token:", token); + + // header sanity (alg/typ) + const [hdrB64] = token.split('.'); + const jwtHeader = JSON.parse(Buffer.from(hdrB64, 'base64url').toString('utf8')); + console.log("jwtHeader:", jwtHeader); + + // verify immediately + let jwtVerify; + try { + jwtVerify = jwt.verify(token, secret); + } catch (err) { + jwtVerify = { error: err?.message, name: err?.name }; + } + + console.log("jwtVerify:", jwtVerify); + + // decode (no verify()) + const jwtDecode = jwt.decode(token); + console.log("jwtDecode:", jwtDecode); + + // verify + let jwtFail; + try { + jwt.verify(token, 'wrongsecret'); + } catch (e) { + jwtFail = JSON.stringify(e, null, 2); + console.log("Fail(expected)", JSON.stringify(e, null, 2)); + } + + // set results to JSON so we can parse it as JSON to see: + const result = { + hashBase64, + token, + jwtHeader, + jwtVerify, + jwtDecode, + jwtFail, + }; + + Lit.Actions.setResponse({ + response: JSON.stringify( + result, + null, + 2 + ), + }); +})();`; + +export default { + id: "crypto-jwt", + title: "Crypto & JWT", + description: + "Hashes a string, signs a short-lived JWT, and verifies/decodes it inside a Lit Action runtime.", + order: 30, + code, +} satisfies LitActionExample; diff --git a/apps/explorer/src/lit-action-examples/entries/custom-auth.ts b/apps/explorer/src/lit-action-examples/entries/custom-auth.ts new file mode 100644 index 000000000..7d9f16753 --- /dev/null +++ b/apps/explorer/src/lit-action-examples/entries/custom-auth.ts @@ -0,0 +1,37 @@ +import type { LitActionExample } from "../types"; + +const code = String.raw`(async () => { + const dAppUniqueAuthMethodType = "0x..."; + const { publicKey, username, password, authMethodId } = jsParams; + + // Custom validation logic + const EXPECTED_USERNAME = 'alice'; + const EXPECTED_PASSWORD = 'lit'; + const userIsValid = username === EXPECTED_USERNAME && password === EXPECTED_PASSWORD; + + // Check PKP permissions + const tokenId = await Lit.Actions.pubkeyToTokenId({ publicKey: publicKey }); + const permittedAuthMethods = await Lit.Actions.getPermittedAuthMethods({ tokenId }); + + const isPermitted = permittedAuthMethods.some((permittedAuthMethod) => { + return permittedAuthMethod["auth_method_type"] === dAppUniqueAuthMethodType && + permittedAuthMethod["id"] === authMethodId; + }); + + const isValid = isPermitted && userIsValid; + LitActions.setResponse({ response: isValid ? "true" : "false" }); +})();`; + +export default { + id: "custom-auth-check", + title: "Custom Auth Validation", + description: + "Validate username/password, ensure the auth method is permitted, and return a boolean result.", + order: 20, + code, + jsParams: { + username: "alice", + password: "lit", + authMethodId: "example-auth-method", + }, +} satisfies LitActionExample; diff --git a/apps/explorer/src/lit-action-examples/entries/decrypt-and-combine.ts b/apps/explorer/src/lit-action-examples/entries/decrypt-and-combine.ts new file mode 100644 index 000000000..025a8a881 --- /dev/null +++ b/apps/explorer/src/lit-action-examples/entries/decrypt-and-combine.ts @@ -0,0 +1,161 @@ +import type { LitActionExample } from "../types"; + +const code = String.raw`(async () => { + const results = { + step1_getCurrentCid: null, + step2_generateEntropy: null, + step3_encrypt: null, + step4_decrypt: null, + step5_verify: null, + }; + + try { + // Step 1: Get current action IPFS CID + const currentCid = Lit.Auth.actionIpfsIdStack[0]; + results.step1_getCurrentCid = { + success: true, + cid: currentCid, + }; + + // Step 2: Generate entropy (32 random bytes) + // const entropy = ethers.utils.randomBytes(32); + // const entropyHex = ethers.utils.hexlify(entropy); + const entropyHex = await Lit.Actions.runOnce( + { waitForResponse: true, name: "generateEntropy" }, + async () => { + return ethers.utils.hexlify(ethers.utils.randomBytes(32)); + } + ); + const entropy = ethers.utils.arrayify(entropyHex); + results.step2_generateEntropy = { + success: true, + entropy: entropyHex, + entropyLength: entropy.length, + }; + + // Step 3: Encrypt with access control locked to current IPFS CID + // When method is empty, it uses check_condition_via_signature which does string comparison + const accessControlConditions = [ + { + contractAddress: "", + standardContractType: "", + chain: "ethereum", + method: "", + parameters: [":currentActionIpfsId"], + returnValueTest: { + comparator: "=", + value: currentCid, + }, + }, + ]; + + let encryptResult = await Lit.Actions.runOnce( + { waitForResponse: true, name: "encrypt" }, + async () => { + return JSON.stringify( + await Lit.Actions.encrypt({ + accessControlConditions, + to_encrypt: ethers.utils.toUtf8Bytes(entropyHex), + }) + ); + } + ); + encryptResult = JSON.parse(encryptResult); + console.log("encryptResult", encryptResult); + + // Convert ciphertext to base64 for transmission + let ciphertextStr; + if (encryptResult.ciphertext instanceof Uint8Array) { + const binaryStr = Array.from(encryptResult.ciphertext) + .map((byte) => String.fromCharCode(byte)) + .join(""); + ciphertextStr = btoa(binaryStr); + } else { + ciphertextStr = encryptResult.ciphertext; + } + + // Convert dataToEncryptHash to hex + let dataHashStr; + if (encryptResult.dataToEncryptHash instanceof Uint8Array) { + dataHashStr = ethers.utils.hexlify(encryptResult.dataToEncryptHash); + } else { + dataHashStr = encryptResult.dataToEncryptHash; + } + + results.step3_encrypt = { + success: true, + ciphertextLength: ciphertextStr.length, + ciphertext: ciphertextStr, + dataToEncryptHash: dataHashStr, + }; + + // Step 4: Decrypt using decryptAndCombine + // Note: In production, you'd fetch ciphertext + dataToEncryptHash from the smart contract + // Here we're using the original encrypt result formats (not the converted strings) + const decryptResult = await Lit.Actions.decryptAndCombine({ + accessControlConditions, + ciphertext: encryptResult.ciphertext, // Use original format + dataToEncryptHash: encryptResult.dataToEncryptHash, // Use original format + authSig: null, + chain: "ethereum", + }); + + // Convert decrypted result to hex for comparison + let decryptedHex; + if (decryptResult instanceof Uint8Array) { + decryptedHex = ethers.utils.hexlify(decryptResult); + } else if (typeof decryptResult === "string") { + decryptedHex = decryptResult; + } else { + decryptedHex = "unknown format"; + } + + results.step4_decrypt = { + success: true, + decryptedData: decryptedHex, + decryptedLength: decryptResult.length, + }; + + // Step 5: Verify original matches decrypted + const matches = entropyHex === decryptedHex; + results.step5_verify = { + success: true, + matches, + original: entropyHex, + decrypted: decryptedHex, + }; + + Lit.Actions.setResponse({ + response: JSON.stringify( + { + success: true, + currentCid, + results, + }, + null, + 2 + ), + }); + } catch (error) { + Lit.Actions.setResponse({ + response: JSON.stringify( + { + success: false, + error: error.message, + results, + }, + null, + 2 + ), + }); + } +})();`; + +export default { + id: "decrypt-and-combine", + title: "Encrypt, Decrypt, and Verify", + description: + "Encrypt data tied to the current action CID, decrypt it with decryptAndCombine, and verify the round trip.", + order: 30, + code, +} satisfies LitActionExample; diff --git a/apps/explorer/src/lit-action-examples/entries/sign-basic.ts b/apps/explorer/src/lit-action-examples/entries/sign-basic.ts new file mode 100644 index 000000000..f00177cbe --- /dev/null +++ b/apps/explorer/src/lit-action-examples/entries/sign-basic.ts @@ -0,0 +1,28 @@ +import type { LitActionExample } from "../types"; + +const code = String.raw`const { sigName, toSign, publicKey, } = jsParams; +const { keccak256, arrayify } = ethers.utils; + +(async () => { + const toSignBytes = new TextEncoder().encode(toSign); + const toSignBytes32 = keccak256(toSignBytes); + const toSignBytes32Array = arrayify(toSignBytes32); + + await Lit.Actions.signEcdsa({ + toSign: toSignBytes32Array, + publicKey, + sigName, + }); +})();`; + +export default { + id: "sign-basic", + title: "Sign Message", + description: "Hash a string and sign it with your PKP using ECDSA.", + order: 10, + code, + jsParams: { + sigName: "sig1", + toSign: "Hello from Lit Action", + }, +} satisfies LitActionExample; diff --git a/apps/explorer/src/lit-action-examples/index.ts b/apps/explorer/src/lit-action-examples/index.ts new file mode 100644 index 000000000..7fa15043a --- /dev/null +++ b/apps/explorer/src/lit-action-examples/index.ts @@ -0,0 +1,49 @@ +import type { + LitActionExample, + LitActionExampleModule, +} from "./types"; + +const modules = import.meta.glob( + "./entries/**/*.ts", + { eager: true } +); + +const dedupe = new Map(); + +for (const mod of Object.values(modules)) { + const example = mod?.default; + if (!example) continue; + + if (dedupe.has(example.id)) { + // Later files override earlier ones to make local iteration easier. + console.warn( + `[lit-action-examples] Duplicate example id detected: ${example.id}. ` + + "Overriding with the most recently evaluated module." + ); + } + + dedupe.set(example.id, { + ...example, + // Normalise code to always be a string (helps when snippets accidentally export undefined). + code: example.code ?? "", + }); +} + +const examples = Array.from(dedupe.values()).sort((a, b) => { + const orderA = a.order ?? Number.MAX_SAFE_INTEGER; + const orderB = b.order ?? Number.MAX_SAFE_INTEGER; + if (orderA !== orderB) return orderA - orderB; + return a.title.localeCompare(b.title); +}); + +const exampleMap = new Map(examples.map((example) => [example.id, example])); + +export const litActionExamples = examples; + +export function getLitActionExample(id: string): LitActionExample | undefined { + return exampleMap.get(id); +} + +export function getDefaultLitActionExample(): LitActionExample | undefined { + return examples[0]; +} diff --git a/apps/explorer/src/lit-action-examples/types.ts b/apps/explorer/src/lit-action-examples/types.ts new file mode 100644 index 000000000..7c9c2b10f --- /dev/null +++ b/apps/explorer/src/lit-action-examples/types.ts @@ -0,0 +1,34 @@ +export interface LitActionExample { + /** + * Unique identifier used for lookups and navigation. + */ + id: string; + /** + * Human friendly title displayed in the UI. + */ + title: string; + /** + * Short description to help users understand what the example does. + */ + description?: string; + /** + * JavaScript code that will populate the Monaco editor. + */ + code: string; + /** + * Optional order override. Lower numbers appear first. + */ + order?: number; + /** + * Lightweight tagging for future filtering or search. + */ + tags?: string[]; + /** + * Optional default parameters to merge into the example execution. + */ + jsParams?: Record; +} + +export interface LitActionExampleModule { + default: LitActionExample; +} diff --git a/apps/explorer/src/lit-actions.d.ts b/apps/explorer/src/lit-actions.d.ts new file mode 100644 index 000000000..0f36e5d23 --- /dev/null +++ b/apps/explorer/src/lit-actions.d.ts @@ -0,0 +1,616 @@ +declare namespace Lit { + export namespace Actions { + /** + * Check if a given IPFS ID is permitted to sign using a given PKP tokenId + * @function isPermittedAction + * @param {Object} params + * @param {string} params.tokenId The tokenId to check + * @param {string} params.ipfsId The IPFS ID of some JS code (a lit action) + * @returns {Promise} A boolean indicating whether the IPFS ID is permitted to sign using the PKP tokenId + */ + function isPermittedAction({ + tokenId, + ipfsId, + }: { + tokenId: string; + ipfsId: string; + }): Promise; + /** + * Check if a given wallet address is permitted to sign using a given PKP tokenId + * @function isPermittedAddress + * @param {Object} params + * @param {string} params.tokenId The tokenId to check + * @param {string} params.address The wallet address to check + * @returns {Promise} A boolean indicating whether the wallet address is permitted to sign using the PKP tokenId + */ + function isPermittedAddress({ + tokenId, + address, + }: { + tokenId: string; + address: string; + }): Promise; + /** + * Check if a given auth method is permitted to sign using a given PKP tokenId + * @function isPermittedAuthMethod + * @param {Object} params + * @param {string} params.tokenId The tokenId to check + * @param {number} params.authMethodType The auth method type. This is an integer. This mapping shows the initial set but this set may be expanded over time without updating this contract: https://github.com/LIT-Protocol/LitNodeContracts/blob/main/contracts/PKPPermissions.sol#L25 + * @param {Uint8Array} params.userId The id of the auth method to check expressed as an array of unsigned 8-bit integers (a Uint8Array) + * @returns {Promise} A boolean indicating whether the auth method is permitted to sign using the PKP tokenId + */ + function isPermittedAuthMethod({ + tokenId, + authMethodType, + userId, + }: { + tokenId: string; + authMethodType: number; + userId: Uint8Array; + }): Promise; + /** + * Get the full list of actions that are permitted to sign using a given PKP tokenId + * @function getPermittedActions + * @param {Object} params + * @param {string} params.tokenId The tokenId to check + * @returns {Promise>} An array of IPFS IDs of lit actions that are permitted to sign using the PKP tokenId + */ + function getPermittedActions({ + tokenId, + }: { + tokenId: string; + }): Promise>; + /** + * Get the full list of addresses that are permitted to sign using a given PKP tokenId + * @function getPermittedAddresses + * @param {Object} params + * @param {string} params.tokenId The tokenId to check + * @returns {Promise>} An array of addresses that are permitted to sign using the PKP tokenId + */ + function getPermittedAddresses({ + tokenId, + }: { + tokenId: string; + }): Promise>; + /** + * Get the full list of auth methods that are permitted to sign using a given PKP tokenId + * @function getPermittedAuthMethods + * @param {Object} params + * @param {string} params.tokenId The tokenId to check + * @returns {Promise>} An array of auth methods that are permitted to sign using the PKP tokenId. Each auth method is an object with the following properties: auth_method_type, id, and user_pubkey (used for web authn, this is the pubkey of the user's authentication keypair) + */ + function getPermittedAuthMethods({ + tokenId, + }: { + tokenId: string; + }): Promise>; + /** + * Get the permitted auth method scopes for a given PKP tokenId and auth method type + id + * @function getPermittedAuthMethodScopes + * @param {Object} params + * @param {string} params.tokenId The tokenId to check + * @param {string} params.authMethodType The auth method type to look up + * @param {Uint8Array} params.userId The id of the auth method to check expressed as an array of unsigned 8-bit integers (a Uint8Array) + * @param {number} params.maxScopeId The maximum scope id to check. This is an integer. + * @returns {Promise>} An array of booleans that define if a given scope id is turned on. The index of the array is the scope id. For example, if the array is [true, false, true], then scope ids 0 and 2 are turned on, but scope id 1 is turned off. + */ + function getPermittedAuthMethodScopes({ + tokenId, + authMethodType, + userId, + maxScopeId, + }: { + tokenId: string; + authMethodType: string; + userId: Uint8Array; + maxScopeId: number; + }): Promise>; + /** + * Converts a PKP public key to a PKP token ID by hashing it with keccak256 + * @function pubkeyToTokenId + * @param {Object} params + * @param {string} params.publicKey The public key to convert + * @returns {Promise} The token ID as a string + */ + function pubkeyToTokenId({ + publicKey, + }: { + publicKey: string; + }): Promise; + /** + * Gets latest nonce for the given address on a supported chain + * @function getLatestNonce + * @param {Object} params + * @param {string} params.address The wallet address for getting the nonce + * @param {string} params.chain The chain of which the nonce is fetched + * @returns {Promise} The token ID as a string + */ + function getLatestNonce({ + address, + chain, + }: { + address: string; + chain: string; + }): Promise; + /** + * Ask the Lit Node to sign any data using the ECDSA Algorithm with it's private key share. The resulting signature share will be returned to the Lit JS SDK which will automatically combine the shares and give you the full signature to use. + * @function signEcdsa + * @param {Object} params + * @param {Uint8Array} params.toSign The data to sign. Should be an array of 8-bit integers. + * @param {string} params.publicKey The public key of the PKP you wish to sign with + * @param {string} params.sigName You can put any string here. This is used to identify the signature in the response by the Lit JS SDK. This is useful if you are signing multiple messages at once. When you get the final signature out, it will be in an object with this signature name as the key. + * @returns {Promise} This function will return the string "success" if it works. The signature share is returned behind the scenes to the Lit JS SDK which will automatically combine the shares and give you the full signature to use. + */ + function signEcdsa({ + toSign, + publicKey, + sigName, + }: { + toSign: Uint8Array; + publicKey: string; + sigName: string; + }): Promise; + /** + * @param {Uint8array} toSign the message to sign + * @param {string} publicKey the public key of the PKP + * @param {string} sigName the name of the signature + * @param {string} signingScheme the name of the signing scheme + * one of the following + * "EcdsaK256Sha256" + * "EcdsaP256Sha256" + * "EcdsaP384Sha384" + * "SchnorrEd25519Sha512" + * "SchnorrK256Sha256" + * "SchnorrP256Sha256" + * "SchnorrP384Sha384" + * "SchnorrRistretto25519Sha512" + * "SchnorrEd448Shake256" + * "SchnorrRedJubjubBlake2b512" + * "SchnorrK256Taproot" + * "SchnorrRedDecaf377Blake2b512" + * "SchnorrkelSubstrate" + * "Bls12381G1ProofOfPossession" + * @returns {Uint8array} The resulting signature share + */ + function sign({ + toSign, + publicKey, + sigName, + signingScheme, + }: Uint8array): Uint8array; + /** + * Sign data using the Lit Action's own cryptographic identity derived from its IPFS CID. + * This allows actions to sign as themselves (not as a PKP), enabling autonomous agent behavior, + * action-to-action authentication, and verifiable computation results. + * + * The action's keypair is deterministically derived from: keccak256("lit_action_" + actionIpfsCid) + * The same action IPFS CID always generates the same keypair across all nodes. + * + * @function signAsAction + * @param {Object} params + * @param {Uint8Array} params.toSign The message to sign as an array of 8-bit integers + * @param {string} params.sigName The name to identify this signature in the response + * @param {string} params.signingScheme The signing algorithm to use. Must be one of: + * "EcdsaK256Sha256", "EcdsaP256Sha256", "EcdsaP384Sha384", + * "SchnorrEd25519Sha512", "SchnorrK256Sha256", "SchnorrP256Sha256", "SchnorrP384Sha384", + * "SchnorrRistretto25519Sha512", "SchnorrEd448Shake256", "SchnorrRedJubjubBlake2b512", + * "SchnorrK256Taproot", "SchnorrRedDecaf377Blake2b512", "SchnorrkelSubstrate", + * "Bls12381G1ProofOfPossession" + * @returns {Promise} The resulting signature that can be verified using verifyActionSignature + */ + function signAsAction({ + toSign, + sigName, + signingScheme, + }: { + toSign: Uint8Array; + sigName: string; + signingScheme: string; + }): Promise; + /** + * Get the public key for a Lit Action's cryptographic identity. + * This can be used to verify signatures created by signAsAction, or to get the public key + * of any action (including actions you didn't create) for verification purposes. + * + * The public key is deterministically derived from: keccak256("lit_action_" + actionIpfsCid) + * and will always be the same for a given action IPFS CID and signing scheme. + * + * @function getActionPublicKey + * @param {Object} params + * @param {string} params.signingScheme The signing algorithm. Must be one of: + * "EcdsaK256Sha256", "EcdsaP256Sha256", "EcdsaP384Sha384", + * "SchnorrEd25519Sha512", "SchnorrK256Sha256", "SchnorrP256Sha256", "SchnorrP384Sha384", + * "SchnorrRistretto25519Sha512", "SchnorrEd448Shake256", "SchnorrRedJubjubBlake2b512", + * "SchnorrK256Taproot", "SchnorrRedDecaf377Blake2b512", "SchnorrkelSubstrate", + * "Bls12381G1ProofOfPossession" + * @param {string} params.actionIpfsCid The IPFS CID of the Lit Action + * @returns {Promise} The public key for the action + */ + function getActionPublicKey({ + signingScheme, + actionIpfsCid, + }: { + signingScheme: string; + actionIpfsCid: string; + }): Promise; + /** + * Verify that a signature was created by a specific Lit Action using signAsAction. + * This enables action-to-action authentication, verifiable computation, and building trust chains + * between actions without requiring PKP ownership. + * + * @function verifyActionSignature + * @param {Object} params + * @param {string} params.signingScheme The signing algorithm. Must be one of: + * "EcdsaK256Sha256", "EcdsaP256Sha256", "EcdsaP384Sha384", + * "SchnorrEd25519Sha512", "SchnorrK256Sha256", "SchnorrP256Sha256", "SchnorrP384Sha384", + * "SchnorrRistretto25519Sha512", "SchnorrEd448Shake256", "SchnorrRedJubjubBlake2b512", + * "SchnorrK256Taproot", "SchnorrRedDecaf377Blake2b512", "SchnorrkelSubstrate", + * "Bls12381G1ProofOfPossession" + * @param {string} params.actionIpfsCid The IPFS CID of the Lit Action that should have created the signature + * @param {Uint8Array} params.toSign The message that was signed + * @param {string} params.signOutput The signature output from signAsAction (as a string) + * @returns {Promise} true if the signature was created by the specified action, false otherwise + */ + function verifyActionSignature({ + signingScheme, + actionIpfsCid, + toSign, + signOutput, + }: { + signingScheme: string; + actionIpfsCid: string; + toSign: Uint8Array; + signOutput: string; + }): Promise; + /** + * Ask the Lit Node to sign a message using the eth_personalSign algorithm. The resulting signature share will be returned to the Lit JS SDK which will automatically combine the shares and give you the full signature to use. + * @function ethPersonalSignMessageEcdsa + * @param {Object} params + * @param {string} params.message The message to sign. Should be a string. + * @param {string} params.publicKey The public key of the PKP you wish to sign with + * @param {string} params.sigName You can put any string here. This is used to identify the signature in the response by the Lit JS SDK. This is useful if you are signing multiple messages at once. When you get the final signature out, it will be in an object with this signature name as the key. + * @returns {Promise} This function will return the string "success" if it works. The signature share is returned behind the scenes to the Lit JS SDK which will automatically combine the shares and give you the full signature to use. + */ + function ethPersonalSignMessageEcdsa({ + message, + publicKey, + sigName, + }: { + message: string; + publicKey: string; + sigName: string; + }): Promise; + /** + * Checks a condition using the Lit condition checking engine. This is the same engine that powers our Access Control product. You can use this to check any condition that you can express in our condition language. This is a powerful tool that allows you to build complex conditions that can be checked in a decentralized way. Visit https://developer.litprotocol.com and click on the "Access Control" section to learn more. + * @function checkConditions + * @param {Object} params + * @param {Array} params.conditions An array of access control condition objects + * @param {Object} params.authSig The AuthSig to use for the condition check. For example, if you were checking for NFT ownership, this AuthSig would be the signature from the NFT owner's wallet. + * @param {string} params.chain The chain this AuthSig comes from + * @returns {Promise} A boolean indicating whether the condition check passed or failed + */ + function checkConditions({ + conditions, + authSig, + chain, + }: { + conditions: Array; + authSig: any; + chain: string; + }): Promise; + /** + * Set the response returned to the client + * @function setResponse + * @param {Object} params + * @param {string} params.response The response to send to the client. You can put any string here, like you could use JSON.stringify on a JS object and send it here. + */ + function setResponse({ response }: { response: string }): any; + /** + * Call a child Lit Action + * @function call + * @param {Object} params + * @param {string} params.ipfsId The IPFS ID of the Lit Action to call + * @param {Object=} params.params Optional parameters to pass to the child Lit Action + * @returns {Promise} The response from the child Lit Action. Note that any signatures performed by the child Lit Action will be automatically combined and returned with the parent Lit Action to the Lit JS SDK client. + */ + function call({ + ipfsId, + params, + }: { + ipfsId: string; + params?: any | undefined; + }): Promise; + /** + * Call a smart contract + * @function callContract + * @param {Object} params + * @param {string} params.chain The name of the chain to use. Check out the lit docs "Supported Blockchains" page to find the name. For example, "ethereum" + * @param {string} params.txn The RLP Encoded txn, as a hex string + * @returns {Promise} The response from calling the contract + */ + function callContract({ + chain, + txn, + }: { + chain: string; + txn: string; + }): Promise; + /** + * Convert a Uint8Array to a string. This is a re-export of this function: https://www.npmjs.com/package/uint8arrays#tostringarray-encoding--utf8 + * @function uint8arrayToString + * @param {Uint8Array} array The Uint8Array to convert + * @param {string} encoding The encoding to use. Defaults to "utf8" + * @returns {string} The string representation of the Uint8Array + */ + function uint8arrayToString(...args: any[]): string; + /** + * Convert a string to a Uint8Array. This is a re-export of this function: https://www.npmjs.com/package/uint8arrays#fromstringstring-encoding--utf8 + * @function uint8arrayFromString + * @param {string} string The string to convert + * @param {string} encoding The encoding to use. Defaults to "utf8" + * @returns {Uint8Array} The Uint8Array representation of the string + */ + function uint8arrayFromString(...args: any[]): Uint8Array; + /** + * Decrypt data using AES with a symmetric key + * @function aesDecrypt + * @param {Object} params + * @param {Uint8Array} params.symmetricKey The AES symmetric key + * @param {Uint8Array} params.ciphertext The ciphertext to decrypt + * @returns {Promise} The decrypted plaintext + */ + function aesDecrypt({ + symmetricKey, + ciphertext, + }: { + symmetricKey: Uint8Array; + ciphertext: Uint8Array; + }): Promise; + /** + * Claim a key through a key identifier, the result of the claim will be added to `claim_id` + * under the `keyId` given. + * @param {Object} params + * @param {string} params.keyId user id of the claim + */ + function claimKey({ keyId }: { keyId: string }): any; + /** + * Broadcast a message to all connected clients and collect their responses + * @function broadcastAndCollect + * @param {Object} params + * @param {string} params.name The name of the broadcast + * @param {string} params.value The value to broadcast + * @returns {Promise} The collected responses as a json array + */ + function broadcastAndCollect({ + name, + value, + }: { + name: string; + value: string; + }): Promise; + /** + * Decrypt and combine the provided ciphertext + * @function decryptAndCombine + * @param {Object} params + * @param {Array} params.accessControlConditions The access control conditions + * @param {string} params.ciphertext The ciphertext to decrypt + * @param {string} params.dataToEncryptHash The hash of the data to encrypt + * @param {Object} params.authSig The auth signature + * @param {string} params.chain The chain + * @returns {Promise} The decrypted and combined data + */ + function decryptAndCombine({ + accessControlConditions, + ciphertext, + dataToEncryptHash, + authSig, + chain, + }: { + accessControlConditions: Array; + ciphertext: string; + dataToEncryptHash: string; + authSig: any; + chain: string; + }): Promise; + /** + * Decrypt to a single node + * @function decryptToSingleNode + * @param {Object} params + * @param {Array} params.accessControlConditions The access control conditions + * @param {string} params.ciphertext The ciphertext to decrypt + * @param {string} params.dataToEncryptHash The hash of the data to encrypt + * @param {Object} params.authSig The auth signature + * @param {string} params.chain The chain + * @returns {Promise} The decrypted data + */ + function decryptToSingleNode({ + accessControlConditions, + ciphertext, + dataToEncryptHash, + authSig, + chain, + }: { + accessControlConditions: Array; + ciphertext: string; + dataToEncryptHash: string; + authSig: any; + chain: string; + }): Promise; + /** + * Sign with ECDSA and automatically combine signature shares from all nodes into a complete signature + * @function signAndCombineEcdsa + * @param {Object} params + * @param {Uint8Array} params.toSign The message to sign + * @param {string} params.publicKey The public key of the PKP + * @param {string} params.sigName The name of the signature + * @returns {Promise} The resulting combined signature + */ + function signAndCombineEcdsa({ + toSign, + publicKey, + sigName, + }: { + toSign: Uint8Array; + publicKey: string; + sigName: string; + }): Promise; + /** + * Sign with any signing scheme and automatically combine signature shares from all nodes into a complete signature + * @function signAndCombine + * @param {Object} params + * @param {Uint8Array} params.toSign The message to sign + * @param {string} params.publicKey The public key of the PKP + * @param {string} params.sigName The name of the signature + * @param {string} params.signingScheme The signing scheme. Must be one of: + * "EcdsaK256Sha256", "EcdsaP256Sha256", "EcdsaP384Sha384", + * "SchnorrEd25519Sha512", "SchnorrK256Sha256", "SchnorrP256Sha256", "SchnorrP384Sha384", + * "SchnorrRistretto25519Sha512", "SchnorrEd448Shake256", "SchnorrRedJubjubBlake2b512", + * "SchnorrK256Taproot", "SchnorrRedDecaf377Blake2b512", "SchnorrkelSubstrate", + * "Bls12381G1ProofOfPossession" + * @returns {Promise} The resulting combined signature + */ + function signAndCombine({ + toSign, + publicKey, + sigName, + signingScheme, + }: { + toSign: Uint8Array; + publicKey: string; + sigName: string; + signingScheme: string; + }): Promise; + /** + * Run a function only once across all nodes using leader election + * @function runOnce + * @param {Object} params + * @param {boolean} params.waitForResponse Whether to wait for a response or not - if false, the function will return immediately + * @param {string} params.name Optional name for this runOnce invocation + * @param {Function} async_fn The async function to run on the leader node + * @returns {Promise} The response from the function if waitForResponse is true + */ + function runOnce( + { + waitForResponse, + name, + }: { + waitForResponse: boolean; + name: string; + }, + async_fn: Function, + ): Promise; + /** + * Get the RPC URL for a given blockchain + * @function getRpcUrl + * @param {Object} params + * @param {string} params.chain The chain to get the RPC URL for + * @returns {Promise} The RPC URL for the chain + */ + function getRpcUrl({ chain }: { chain: string }): Promise; + /** + * Encrypt data using BLS encryption with access control conditions + * @function encrypt + * @param {Object} params + * @param {Array} params.accessControlConditions The access control conditions that must be met to decrypt + * @param {string} params.to_encrypt The message to encrypt + * @returns {Promise<{ciphertext: string, dataToEncryptHash: string}>} An object containing the ciphertext and the hash of the data that was encrypted + */ + function encrypt({ + accessControlConditions, + to_encrypt, + }: { + accessControlConditions: Array; + to_encrypt: string; + }): Promise<{ + ciphertext: string; + dataToEncryptHash: string; + }>; + } + + export namespace Auth { + /** + * Stack of action IPFS IDs tracking the call hierarchy. + * When a parent action calls a child action, the child's IPFS ID is pushed onto this stack. + * @type {Array} + */ + const actionIpfsIdStack: Array; + + /** + * The address from the authentication signature. + * @type {string | null} + */ + const authSigAddress: string | null; + + /** + * Array of authentication method contexts. + * @type {Array<{ + * userId: string; + * appId: string; + * authMethodType: number; + * lastRetrievedAt: string; + * expiration: number; + * usedForSignSessionKeyRequest: boolean; + * }>} + */ + const authMethodContexts: { + userId: string; + appId: string; + authMethodType: number; + lastRetrievedAt: string; + expiration: number; + usedForSignSessionKeyRequest: boolean; + }[]; + + /** + * Array of resources from the SIWE message or session signature. + * @type {Array} + */ + const resources: Array; + + /** + * Custom authentication resource string. + * @type {string | `"\\(true,${string})\\"`} + */ + const customAuthResource: string | `"\\(true,${string})\\"`; + } +} + +/** + * Global reference to Lit.Actions namespace for convenience. + * This is identical to using Lit.Actions. + */ +declare const LitActions: typeof Lit.Actions; + +/** + * Global reference to Lit.Auth namespace for convenience. + * This is identical to using Lit.Auth. + */ +declare const LitAuth: typeof Lit.Auth; + +/** + * The ethers.js v5 library for interacting with Ethereum and other EVM chains. + * Includes utilities for wallets, contracts, providers, and cryptographic operations. + * See https://docs.ethers.io/v5/ for full documentation. + * + * For full type definitions, install: npm install --save-dev ethers@5 + * Then import types with: import type { ethers } from 'ethers'; + */ +declare const ethers: typeof import("ethers"); + +/** + * The jsonwebtoken library for JWT encoding, decoding, and verification. + * See https://github.com/auth0/node-jsonwebtoken for full documentation. + */ +declare const jwt: { + decode: (token: string, options?: any) => any; + verify: ( + token: string, + secretOrPublicKey: string | Buffer, + options?: any, + ) => any; + sign: ( + payload: string | object | Buffer, + secretOrPrivateKey: string | Buffer, + options?: any, + ) => string; +}; diff --git a/apps/explorer/src/lit-logged-page/LoggedInDashboard.tsx b/apps/explorer/src/lit-logged-page/LoggedInDashboard.tsx new file mode 100644 index 000000000..2c3c74a86 --- /dev/null +++ b/apps/explorer/src/lit-logged-page/LoggedInDashboard.tsx @@ -0,0 +1,754 @@ +import { useState, useEffect, useRef, useMemo } from "react"; +import { useLitAuth } from "../lit-login-modal/LitAuthProvider"; +import { + PKPPermissionsProvider, + PermissionsDashboard, + WalletOperationsDashboard, + PaymentManagementDashboard, + TransactionToastContainer, + BalanceInfo, + TransactionToast, + TransactionResult, + getAllChains, + PKPInfoCard, +} from "./protectedApp/index"; +import { + TopNavBar, + GlobalMessage, + StickySidebarLayout, + type TopNavTab, +} from "@layout"; +import { useLocation, useNavigate } from "react-router-dom"; + +import PKPSelectionModal from "./PKPSelectionModal"; +import { useState as useReactState } from "react"; +import copyIcon from "../assets/copy.svg"; +import { getAddress } from "viem"; +import { formatPublicKey } from "./protectedApp/utils"; +import { PKPData } from "@lit-protocol/schemas"; +import { APP_INFO } from "@/_config"; + +enum LOGIN_STYLE { + button = "button", + popup = "popup", +} + +const LOGIN_METHOD = LOGIN_STYLE.popup; + +export default function LoggedInDashboard() { + const { + user, + services, + initiateAuthentication, + isInitializingServices, + isServicesReady, + authServiceBaseUrl, + currentNetworkName, + shouldDisplayNetworkMessage, + autoLoginWithDefaultKey, + isAutoLoggingIn, + forceNetworkSelection, + autoLoginStatus, + } = useLitAuth(); + + const hasAutoStartedRef = useRef(false); + const shareAutoLoginTriggeredRef = useRef(false); + const hasInitialBalanceRefetch = useRef(false); + const blockWatcherCleanupRef = useRef void)>(null); + const lastBalanceUpdateAtRef = useRef(0); + + const navigate = useNavigate(); + const location = useLocation(); + const autoLoginRequested = useMemo(() => { + const params = new URLSearchParams(location.search); + const flag = params.get("autoLogin"); + return flag === "1" || flag === "true"; + }, [location.search]); + + useEffect(() => { + if (autoLoginRequested) return; + if ( + LOGIN_METHOD === LOGIN_STYLE.popup && + !user && + !hasAutoStartedRef.current + ) { + hasAutoStartedRef.current = true; + initiateAuthentication(); + } + }, [user, initiateAuthentication, autoLoginRequested]); + + useEffect(() => { + if (!autoLoginRequested) return; + if (user) return; + if (shareAutoLoginTriggeredRef.current) return; + + shareAutoLoginTriggeredRef.current = true; + + autoLoginWithDefaultKey({ forceNetwork: "naga-dev" }) + .then((success) => { + if (!success) { + initiateAuthentication(); + } + }) + .catch(() => { + initiateAuthentication(); + }); + }, [ + autoLoginRequested, + user, + autoLoginWithDefaultKey, + initiateAuthentication, + ]); + + useEffect(() => { + if (!autoLoginRequested) return; + if (!user) return; + if (currentNetworkName === "naga-dev") return; + + forceNetworkSelection("naga-dev").catch((error) => { + console.error("Failed to switch network for share link:", error); + }); + }, [ + autoLoginRequested, + user, + currentNetworkName, + forceNetworkSelection, + ]); + + // Core state + const [showPkpModal, setShowPkpModal] = useState(false); + const [selectedPkp, setSelectedPkp] = useState( + user?.pkpInfo || null + ); + const [balance, setBalance] = useState(null); + const [isLoadingBalance, setIsLoadingBalance] = useState(false); + const [selectedChain, setSelectedChain] = useState("yellowstone"); + const [, setStatus] = useState(""); + + // Transaction toast state + const [transactionToasts, setTransactionToasts] = useState< + TransactionToast[] + >([]); + + // Tab configuration + const tabs: TopNavTab[] = [ + { id: "playground", label: "Playground" }, + { id: "permissions", label: "PKP Permissions" }, + { id: "payment-management", label: "Payment Management" }, + ]; + + // URL-driven tab state + const pathToTab: Record = { + "/playground": "playground", + "/pkp-permissions": "permissions", + "/payment-management": "payment-management", + }; + const tabToPath: Record = { + playground: "/playground", + permissions: "/pkp-permissions", + "payment-management": "/payment-management", + }; + const activeTabId = pathToTab[location.pathname] ?? "playground"; + + // Toast management + const addTransactionToast = ( + message: string, + txHash: string, + type: "success" | "error" = "success" + ) => { + const toast: TransactionToast = { + id: Math.random().toString(36).substr(2, 9), + message, + txHash, + type, + timestamp: Date.now(), + }; + setTransactionToasts((prev) => [...prev, toast]); + + setTimeout(() => { + setTransactionToasts((prev) => prev.filter((t) => t.id !== toast.id)); + }, 8000); + }; + + const removeTransactionToast = (id: string) => { + setTransactionToasts((prev) => prev.filter((t) => t.id !== id)); + }; + + // Handle transaction completion + const handleTransactionComplete = (result: TransactionResult) => { + console.log("Transaction completed:", result); + addTransactionToast("Transaction sent successfully!", result.hash); + + setTimeout(() => { + loadBalance({ silent: true }); + }, 2000); + }; + + // Load balance function + const loadBalance = async (options?: { silent?: boolean }) => { + const silent = options?.silent ?? false; + if (!selectedPkp?.ethAddress || !services?.litClient) return; + + if (!silent) setIsLoadingBalance(true); + try { + const { createPublicClient, http } = await import("viem"); + const allChains = getAllChains(); + const chainInfo = allChains[selectedChain as keyof typeof allChains]; + if (!chainInfo) throw new Error(`Unknown chain: ${selectedChain}`); + + const chainConfig = { + id: chainInfo.id, + name: chainInfo.name, + nativeCurrency: { + name: chainInfo.name, + symbol: chainInfo.symbol, + decimals: 18, + }, + rpcUrls: { + default: { http: [chainInfo.rpcUrl] }, + public: { http: [chainInfo.rpcUrl] }, + }, + }; + + const client = createPublicClient({ + chain: chainConfig, + transport: http(chainInfo.rpcUrl), + }); + + const balance = await client.getBalance({ + address: selectedPkp.ethAddress as `0x${string}`, + }); + + setBalance({ + balance: (Number(balance) / 1e18).toFixed(6), + symbol: chainInfo.symbol, + chainId: chainInfo.id, + }); + } catch (error) { + console.error("Failed to load balance:", error); + setBalance(null); + } finally { + if (!silent) setIsLoadingBalance(false); + } + }; + + // Load balance when PKP or chain changes + useEffect(() => { + if (selectedPkp) { + loadBalance(); + } + }, [selectedPkp, selectedChain]); + + // Ensure balance is (re)fetched after hot refresh when services become ready + useEffect(() => { + if (hasInitialBalanceRefetch.current) return; + if (isServicesReady && selectedPkp) { + hasInitialBalanceRefetch.current = true; + loadBalance(); + } + }, [isServicesReady, selectedPkp]); + + // Live balance updates: refetch on new blocks (polling if ws not available) + useEffect(() => { + // Clean up any previous watcher + if (blockWatcherCleanupRef.current) { + try { + blockWatcherCleanupRef.current(); + } catch { + // ignore + } + blockWatcherCleanupRef.current = null; + } + + // Preconditions + if (!isServicesReady || !selectedPkp?.ethAddress) return; + + let cancelled = false; + (async () => { + try { + const { createPublicClient, http } = await import("viem"); + const allChains = getAllChains(); + const chainInfo = allChains[selectedChain as keyof typeof allChains]; + if (!chainInfo) return; + + const chainConfig = { + id: chainInfo.id, + name: chainInfo.name, + nativeCurrency: { + name: chainInfo.name, + symbol: chainInfo.symbol, + decimals: 18, + }, + rpcUrls: { + default: { http: [chainInfo.rpcUrl] }, + public: { http: [chainInfo.rpcUrl] }, + }, + } as const; + + const client = createPublicClient({ + chain: chainConfig, + transport: http(chainInfo.rpcUrl), + }); + + if (cancelled) return; + + const unwatch = client.watchBlockNumber({ + poll: true, + pollingInterval: 5_000, + emitOnBegin: true, + onBlockNumber: () => { + const now = Date.now(); + // simple debounce to avoid overlapping calls + if (now - lastBalanceUpdateAtRef.current < 2_500) return; + lastBalanceUpdateAtRef.current = now; + loadBalance({ silent: true }); + }, + onError: (err) => { + console.error("Block watch error:", err); + }, + }); + blockWatcherCleanupRef.current = unwatch; + } catch (err) { + console.error("Failed to start block watcher:", err); + } + })(); + + return () => { + cancelled = true; + if (blockWatcherCleanupRef.current) { + try { + blockWatcherCleanupRef.current(); + } catch { + // ignore + } + blockWatcherCleanupRef.current = null; + } + }; + }, [isServicesReady, selectedPkp?.ethAddress, selectedChain]); + + // Sync selectedPkp with user.pkpInfo + useEffect(() => { + if (user?.pkpInfo) { + const mappedPkp = { + tokenId: user.pkpInfo.tokenId || "unknown", + pubkey: user.pkpInfo.pubkey || "", + ethAddress: user.pkpInfo.ethAddress || "", + }; + setSelectedPkp(mappedPkp as PKPData); + } else { + setSelectedPkp(null); + } + }, [user?.pkpInfo]); + + // PKP selection handler + const handlePkpSelected = (pkpInfo: PKPData) => { + console.log("PKP selected:", pkpInfo); + setSelectedPkp(pkpInfo); + setStatus(`Selected PKP: ${pkpInfo.ethAddress}`); + }; + + // Authentication and loading states + if (!user) { + if (autoLoginRequested) { + return ( +
+
+

Loading shared playground…

+

+ {autoLoginStatus || + (isAutoLoggingIn + ? "Automatically signing you in with the development wallet…" + : "Preparing your session…")} +

+
+ ); + } + + if (LOGIN_METHOD === LOGIN_STYLE.popup) { + return ( +
+

Starting sign-in

+

Launching the authentication popup…

+
+ ); + } + return ( +
+

Not authenticated

+

Please sign in to continue.

+ +
+ ); + } + + if (user && !isServicesReady) { + return ( +
+
+

Initialising Lit Protocol Services

+

+ {isInitializingServices + ? "Setting up your authentication context..." + : "Loading your PKP wallet..."} +

+
+ ); + } + + return ( + + navigate(tabToPath[id] ?? "/playground")} + rightSlot={ +
+ + Network: + {currentNetworkName} + + setShowPkpModal(true)} + /> +
+ } + /> + +
+ + + + setShowPkpModal(true)} + userMethod={user.method} + selectedChain={selectedChain} + onChainChange={setSelectedChain} + /> + +
Resources
+ + + } + > + {activeTabId === "playground" && ( + + )} + + {activeTabId === "permissions" && } + + {activeTabId === "payment-management" && ( + + )} +
+ + {/* Status Display */} + {/* setStatus("")} /> */} + + {/* Tab Navigation moved to top nav bar */} + + {/* Tab Content moved inside DashboardContent main area */} + + {/* Transaction Toast Notifications */} + + + {/* PKP Selection Modal */} + {services && ( + setShowPkpModal(false)} + authData={user.authData} + authMethodName={user.method} + services={services} + disabled={false} + authServiceBaseUrl={authServiceBaseUrl} + onPkpSelected={(pkpInfo) => { + handlePkpSelected(pkpInfo); + setShowPkpModal(false); + }} + /> + )} + + {/* Tailwind handles animations; no inline keyframes needed */} +
+ ); +} + +function AccountMenu({ + selectedChain, + onChainChange, + onShowPkpModal, +}: { + selectedChain: string; + onChainChange: (chain: string) => void; + onShowPkpModal: () => void; +}) { + const { user, logout } = useLitAuth(); + const [open, setOpen] = useReactState(false); + const [copiedField, setCopiedField] = useReactState(null); + if (!user) return null; + const pkp = user.pkpInfo || {}; + const publicKey: string = pkp.pubkey || ""; + const ethAddress: string = pkp.ethAddress || ""; + + const handleCopy = async (value: string, field: string) => { + try { + await navigator.clipboard.writeText(value); + setCopiedField(field); + setTimeout(() => setCopiedField(null), 1500); + } catch {} + }; + return ( +
+ + {open && ( +
+
PKP
+
+ {Boolean( + pkp.tokenId && + typeof pkp.tokenId === "bigint" && + pkp.tokenId.toString() !== "0n" + ) && ( +
+
+ Token ID +
+ +
+ )} + {publicKey && typeof publicKey === "string" && publicKey !== "" && ( +
+
+ Public Key +
+ +
+ )} + {ethAddress && + typeof ethAddress === "string" && + ethAddress !== "" && ( +
+
+ ETH +
+ +
+ )} +
+
+
+ Actions +
+
+
+
+ Chain +
+ +
+ +
+
+ +
+ )} +
+ ); +} diff --git a/apps/explorer/src/lit-logged-page/PKPSelectionModal.tsx b/apps/explorer/src/lit-logged-page/PKPSelectionModal.tsx new file mode 100644 index 000000000..8ad6cad8a --- /dev/null +++ b/apps/explorer/src/lit-logged-page/PKPSelectionModal.tsx @@ -0,0 +1,82 @@ +import React from "react"; +import PKPSelectionSection from "../lit-login-modal/PKPSelectionSection"; +import { PKPData } from "@lit-protocol/schemas"; +import { LitServices } from "@/hooks/useLitServiceSetup"; + +/** + * PKPSelectionModal + * + * A reusable modal component that displays the PKP selection flow. + * + * Usage: + * void} + * authData={any} + * authMethodName={string} + * services={{ litClient: any; authManager: any } | null} + * disabled={boolean} + * authServiceBaseUrl={string} + * onPkpSelected={(pkpInfo: PkpInfo) => void} + * /> + */ + +// Configurable constants +const MODAL_Z_INDEX = 1000; + +export interface PKPSelectionModalProps { + isOpen: boolean; + onClose: () => void; + authData: any; + authMethodName: string; + services: LitServices; + disabled?: boolean; + authServiceBaseUrl: string; + onPkpSelected: (pkpInfo: PKPData) => void; +} + +const PKPSelectionModal: React.FC = ({ + isOpen, + onClose, + authData, + authMethodName, + services, + disabled = false, + authServiceBaseUrl, + onPkpSelected, +}) => { + if (!isOpen) return null; + + return ( +
{ + if (e.target === e.currentTarget) { + onClose(); + } + }} + > +
+
+ +
+ + +
+
+ ); +}; + +export default PKPSelectionModal; diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/PaymentManagement/AccountMethodSelector.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/PaymentManagement/AccountMethodSelector.tsx new file mode 100644 index 000000000..a837cbe10 --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/PaymentManagement/AccountMethodSelector.tsx @@ -0,0 +1,320 @@ +/** + * AccountMethodSelector.tsx + * + * A reusable component for selecting and creating accounts using either: + * - Private key (viem account) + * - Connected wallet (wallet client) + * + * Default method is connected wallet for better UX. + */ + +import { ConnectButton } from "@rainbow-me/rainbowkit"; +import { useState } from "react"; +import { privateKeyToAccount } from "viem/accounts"; +import { useWalletClient } from "wagmi"; +import { APP_INFO, FEATURES } from "../../../../_config"; + +// Code snippets for documentation +export const CREATE_ACCOUNT_PRIVATE_KEY_CODE = ` +import { privateKeyToAccount } from 'viem/accounts'; + +const myAccount = privateKeyToAccount( + process.env.PRIVATE_KEY as \`0x\${string}\` +);`; + +export const CREATE_ACCOUNT_WALLET_CLIENT_CODE = ` +import { useWalletClient } from 'wagmi'; + +// Use your connected wallet as the account +const { data: myAccount } = useWalletClient();`; + +interface AccountMethodSelectorProps { + onAccountCreated: (account: any) => void; + onMethodChange: (method: "privateKey" | "walletClient") => void; + setStatus: (status: string) => void; + showError?: (error: string) => void; + showSuccess?: (actionId: string) => void; + disabled?: boolean; + successActionIds?: { + createAccount?: string; + getWalletAccount?: string; + }; + successActions?: Set; +} + +export default function AccountMethodSelector({ + onAccountCreated, + onMethodChange, + setStatus, + showError, + showSuccess, + disabled = false, + successActionIds = { + createAccount: "create-account", + getWalletAccount: "get-wallet-account", + }, + successActions = new Set(), +}: AccountMethodSelectorProps) { + const { data: walletClient } = useWalletClient(); + + const [isCreatingAccount, setIsCreatingAccount] = useState(false); + const [accountMethod, setAccountMethod] = useState< + "privateKey" | "walletClient" + >("walletClient"); // Default to wallet client + const [privateKey, setPrivateKey] = useState(APP_INFO.defaultPrivateKey); + + // Utility function to format error messages properly + const formatErrorMessage = (prefix: string, error: any): string => { + let errorMessage = prefix; + if (error?.message) { + errorMessage += error.message; + } else if (typeof error === "object") { + errorMessage += JSON.stringify(error, null, 2); + } else { + errorMessage += String(error); + } + return errorMessage; + }; + + const createAccountFromPrivateKey = async () => { + try { + setIsCreatingAccount(true); + setStatus("Creating viem account from private key..."); + + if (!privateKey.startsWith("0x") || privateKey.length !== 66) { + throw new Error( + "Invalid private key format. Must be a hex string starting with 0x and 66 characters long." + ); + } + + const myAccount = privateKeyToAccount(privateKey as `0x${string}`); + onAccountCreated(myAccount); + setStatus(`Successfully created account: ${myAccount.address}`); + showSuccess?.(successActionIds.createAccount!); + } catch (error: any) { + console.error("Error creating account:", error); + const errorMessage = formatErrorMessage( + "Failed to create account: ", + error + ); + setStatus(errorMessage); + showError?.(errorMessage); + } finally { + setIsCreatingAccount(false); + } + }; + + const createAccountFromWalletClient = async () => { + try { + setIsCreatingAccount(true); + setStatus("Getting account from connected wallet..."); + + if (!walletClient || !walletClient.account) { + throw new Error( + "No wallet connected. Please connect your wallet first." + ); + } + + onAccountCreated(walletClient); + setStatus( + `Successfully got account from wallet: ${walletClient.account.address}` + ); + showSuccess?.(successActionIds.getWalletAccount!); + } catch (error: any) { + console.error("Error getting wallet account:", error); + const errorMessage = formatErrorMessage( + "Failed to get wallet account: ", + error + ); + setStatus(errorMessage); + showError?.(errorMessage); + } finally { + setIsCreatingAccount(false); + } + }; + + const createAccount = async () => { + if (accountMethod === "privateKey") { + return createAccountFromPrivateKey(); + } else { + return createAccountFromWalletClient(); + } + }; + + const handleMethodChange = (method: "privateKey" | "walletClient") => { + setAccountMethod(method); + onMethodChange(method); + }; + const successKey = + accountMethod === "privateKey" + ? successActionIds.createAccount + : successActionIds.getWalletAccount; + const hasCompletedAction = successKey + ? Boolean(successActions?.has(successKey)) + : false; + + return ( +
+ {/* Account Method Selector */} +
+ +
+ + +
+
+ + {/* Private Key Input (only show when private key method is selected) */} + {accountMethod === "privateKey" && ( +
+ + setPrivateKey(e.target.value)} + placeholder="0x..." + disabled={disabled} + className="placeholder-black/70 text-black" + style={{ + width: "100%", + padding: "8px 12px", + border: "1px solid #ddd", + borderRadius: "4px", + fontFamily: "monospace", + fontSize: "14px", + opacity: disabled ? 0.6 : 1, + color: "#000", + }} + /> + + Default test private key is provided. Replace with your own for + production use. + +
+ )} + + {/* Wallet Client Info (only show when wallet client method is selected) */} + {accountMethod === "walletClient" && ( +
+

+ Using Connected Wallet:{" "} + This will use your currently connected wallet account (e.g., + MetaMask). +

+

+ Make sure your wallet is connected and you have test tokens. Need + tokens? Visit the{" "} + + Chronicle Yellowstone Faucet + +

+ +
+

+
+ )} + + + {hasCompletedAction && ( +

+ Account linked successfully. +

+ )} +
+ ); +} + +// Export the account method type for consumers +export type AccountMethod = "privateKey" | "walletClient"; diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/PaymentManagement/PaymentManagementDashboard.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/PaymentManagement/PaymentManagementDashboard.tsx new file mode 100644 index 000000000..5fa35ba71 --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/PaymentManagement/PaymentManagementDashboard.tsx @@ -0,0 +1,1042 @@ +import React, { useState, useEffect } from "react"; +import { UIPKP, TransactionResult, LedgerBalanceInfo } from "../../types"; +import AccountMethodSelector from "./AccountMethodSelector"; +import { useOptionalLitAuth } from "../../../../lit-login-modal/LitAuthProvider"; +import { triggerLedgerRefresh } from "../../utils/ledgerRefresh"; +import { usePaymentManagerInstance } from "../../hooks/usePaymentManagerInstance"; +import { useLedgerBalance } from "../../hooks/useLedgerBalance"; +import { useWithdrawStatus } from "../../hooks/useWithdrawStatus"; + +interface PaymentManagementDashboardProps { + selectedPkp: UIPKP | null; + selectedChain: string; + disabled?: boolean; + onTransactionComplete?: (result: TransactionResult) => void; + services?: any; + initialSource?: "pkp" | "eoa"; + presetRecipientAddress?: string; + onBalanceChange?: (balance: LedgerBalanceInfo | null) => void; + // When true, disables using PKP as the account source (EOA-only) + disablePkpOption?: boolean; + // Show only deposit-for-PKP and show balance for the PKP address + fundPkOnly?: boolean; + // Override user address for balance and deposit-for-user (use PKP address) + targetUserAddress?: string; + // Hide the account selection section and show as streamlined steps + hideAccountSelection?: boolean; +} + +export const PaymentManagementDashboard: React.FC< + PaymentManagementDashboardProps +> = ({ + selectedPkp, + selectedChain, + disabled = false, + onTransactionComplete, + services, + initialSource, + presetRecipientAddress, + onBalanceChange, + disablePkpOption = false, + fundPkOnly = false, + targetUserAddress, + hideAccountSelection = false, +}) => { + // const { data: walletClient } = useWalletClient(); + const optionalAuth = useOptionalLitAuth(); + const user = optionalAuth?.user; + const litServices = optionalAuth?.services; + const currentNetworkName = (optionalAuth as any)?.currentNetworkName as + | string + | undefined; + + // Determine the correct unit for Lit Ledger balance + const isTestnet = currentNetworkName === "naga-dev" || currentNetworkName === "naga-test"; + const ledgerUnit = isTestnet ? "tstLPX" : "LITKEY"; + + // Account state + const [account, setAccount] = useState(null); + const [accountSource, setAccountSource] = useState<"pkp" | "eoa">( + initialSource || "pkp" + ); + + // Step/tab state for hideAccountSelection mode + const [currentStep, setCurrentStep] = useState<1 | 2>(1); + const [fundingSuccess, setFundingSuccess] = useState(false); + const [fundingTxHash, setFundingTxHash] = useState(""); + + // Enforce EOA-only when PKP option is disabled + useEffect(() => { + if (disablePkpOption && accountSource === "pkp") { + setAccountSource("eoa"); + } + }, [disablePkpOption, accountSource]); + + // Reset funding success state when target address changes (new PKP selected) + useEffect(() => { + if (hideAccountSelection && targetUserAddress) { + setFundingSuccess(false); + setFundingTxHash(""); + setCurrentStep(1); + } + }, [hideAccountSelection, targetUserAddress]); + + // Balance preferences + const [autoRefreshBalance, setAutoRefreshBalance] = useState(true); + + // Deposit state + const [depositAmount, setDepositAmount] = useState(""); + const [isDepositing, setIsDepositing] = useState(false); + const [depositForUserAddress, setDepositForUserAddress] = useState(""); + const [depositForUserAmount, setDepositForUserAmount] = useState(""); + const [isDepositingForUser, setIsDepositingForUser] = useState(false); + + // Withdrawal state + const [withdrawAmount, setWithdrawAmount] = useState(""); + const [isRequestingWithdraw, setIsRequestingWithdraw] = useState(false); + const [isExecutingWithdraw, setIsExecutingWithdraw] = useState(false); + + // Success feedback + const [successActions, setSuccessActions] = useState>(new Set()); + const [error, setError] = useState(""); + const resolvedAccountAddress = + targetUserAddress || account?.address || account?.account?.address; + const activeChainLabel = selectedChain + ? selectedChain.replace(/-/g, " ") + : "unknown"; + + // Success feedback helper + const showSuccess = (actionId: string) => { + setSuccessActions((prev) => new Set([...prev, actionId])); + setTimeout(() => { + setSuccessActions((prev) => { + const newSet = new Set(prev); + newSet.delete(actionId); + return newSet; + }); + }, 3000); + }; + + // Error handling + const showError = (message: string) => { + setError(message); + setTimeout(() => setError(""), 5000); + }; + + const clearError = () => setError(""); + + const { + paymentManager, + withdrawDelay, + isInitializingPaymentManager, + } = usePaymentManagerInstance({ + account, + services: services || litServices || null, + onBeforeInit: clearError, + onError: showError, + }); + + const { + balanceInfo, + isLoadingBalance, + loadBalance: refreshLedgerBalance, + } = useLedgerBalance({ + paymentManager, + userAddress: resolvedAccountAddress, + autoRefresh: autoRefreshBalance, + onBalanceChange, + onError: showError, + }); + + const { + withdrawInfo, + canExecuteInfo, + isCheckingWithdraw, + loadWithdrawalStatus, + setWithdrawInfo, + setCanExecuteInfo, + } = useWithdrawStatus({ + paymentManager, + userAddress: resolvedAccountAddress, + onError: showError, + }); + + // Create a PKP viem account when PKP is selected as the source + useEffect(() => { + const hasAuthContext = Boolean(user?.authContext); + const pkpPublicKey = selectedPkp?.pubkey || user?.pkpInfo?.pubkey; + const targetServices = services || litServices; + const canUsePkp = Boolean( + targetServices?.litClient && hasAuthContext && pkpPublicKey + ); + + if (accountSource !== "pkp" || disablePkpOption) { + return; + } + + // Reset current account when switching to PKP + setAccount(null); + + if (!canUsePkp) { + return; + } + + let cancelled = false; + const derivePkpAccount = async () => { + try { + clearError(); + const chainConfig = + targetServices!.litClient.getChainConfig().viemConfig; + const pkpViemAccount = + await targetServices!.litClient.getPkpViemAccount({ + pkpPublicKey, + authContext: user!.authContext, + chainConfig, + }); + if (!cancelled) { + setAccount(pkpViemAccount); + } + } catch (e: any) { + console.error("Failed to create PKP viem account:", e); + if (!cancelled) { + showError(`Failed to create PKP viem account: ${e?.message || e}`); + setAccount(null); + } + } + }; + derivePkpAccount(); + return () => { + cancelled = true; + }; + }, [accountSource, services, litServices, user, selectedPkp]); + + useEffect(() => { + if (presetRecipientAddress) { + setDepositForUserAddress(presetRecipientAddress); + } + }, [presetRecipientAddress]); + + // Format time remaining + const formatTimeRemaining = (seconds: string) => { + const secs = parseInt(seconds); + const hours = Math.floor(secs / 3600); + const minutes = Math.floor((secs % 3600) / 60); + const remainingSeconds = secs % 60; + + if (hours > 0) { + return `${hours}h ${minutes}m ${remainingSeconds}s`; + } else if (minutes > 0) { + return `${minutes}m ${remainingSeconds}s`; + } else { + return `${remainingSeconds}s`; + } + }; + + // Deposit handlers + const handleDeposit = async () => { + if (!paymentManager || !depositAmount) return; + + try { + setIsDepositing(true); + clearError(); + + const result = await paymentManager.deposit({ + amountInEth: depositAmount, + }); + showSuccess("deposit"); + onTransactionComplete?.(result); + setDepositAmount(""); + + // Refresh balance after deposit + setTimeout(refreshLedgerBalance, 2000); + try { + if (resolvedAccountAddress) { + triggerLedgerRefresh(resolvedAccountAddress); + } + } catch {} + } catch (error: any) { + console.error("Deposit failed:", error); + showError(`Deposit failed: ${error.message}`); + } finally { + setIsDepositing(false); + } + }; + + const handleDepositForUser = async () => { + if (!paymentManager || !depositForUserAmount || !depositForUserAddress) + return; + + try { + setIsDepositingForUser(true); + clearError(); + + const result = await paymentManager.depositForUser({ + userAddress: depositForUserAddress, + amountInEth: depositForUserAmount, + }); + showSuccess("deposit-for-user"); + onTransactionComplete?.(result); + setDepositForUserAmount(""); + + // Show success message in hideAccountSelection mode + if (hideAccountSelection) { + setFundingSuccess(true); + // Extract transaction hash from result + const txHash = result?.transactionHash || result?.hash || ""; + setFundingTxHash(txHash); + } + setDepositForUserAddress(""); + try { + const addr = targetUserAddress || depositForUserAddress; + if (addr) triggerLedgerRefresh(addr); + } catch {} + } catch (error: any) { + console.error("Deposit for user failed:", error); + showError(`Deposit for user failed: ${error.message}`); + } finally { + setIsDepositingForUser(false); + } + }; + + // Withdrawal handlers + const handleRequestWithdraw = async () => { + if (!paymentManager || !withdrawAmount) return; + + try { + setIsRequestingWithdraw(true); + clearError(); + + const result = await paymentManager.requestWithdraw({ + amountInEth: withdrawAmount, + }); + showSuccess("request-withdraw"); + onTransactionComplete?.(result); + setWithdrawAmount(""); + + // Refresh withdrawal status + setTimeout(loadWithdrawalStatus, 2000); + try { + if (resolvedAccountAddress) { + triggerLedgerRefresh(resolvedAccountAddress); + } + } catch {} + } catch (error: any) { + console.error("Withdrawal request failed:", error); + showError(`Withdrawal request failed: ${error.message}`); + } finally { + setIsRequestingWithdraw(false); + } + }; + + const handleExecuteWithdraw = async () => { + if (!paymentManager || !withdrawInfo) return; + + try { + setIsExecutingWithdraw(true); + clearError(); + + const result = await paymentManager.withdraw({ + amountInEth: withdrawInfo.amount, + }); + showSuccess("execute-withdraw"); + onTransactionComplete?.(result); + + // Clear withdrawal info and refresh balance + setWithdrawInfo(null); + setCanExecuteInfo(null); + setTimeout(refreshLedgerBalance, 2000); + try { + if (resolvedAccountAddress) { + triggerLedgerRefresh(resolvedAccountAddress); + } + } catch {} + } catch (error: any) { + console.error("Withdrawal execution failed:", error); + showError(`Withdrawal execution failed: ${error.message}`); + } finally { + setIsExecutingWithdraw(false); + } + }; + + // Quick amount buttons + const quickAmounts = ["0.001", "0.01", "0.1", "1.0"]; + + return ( + <> + {/* Error Display */} + {error && ( +
+ ⚠️ {error} +
+ )} +
+ Active chain: {activeChainLabel} +
+ + {/* Account Setup - Conditional rendering based on hideAccountSelection */} + {!hideAccountSelection ? ( +
+

Select a Payment Manager Account

+ + {/* Account source selector: PKP (default) or EOA */} +
+ {!disablePkpOption && ( + + )} + +
+ + {/* EOA account manual selection */} + {accountSource === "eoa" && ( + {}} + setStatus={() => {}} + showError={showError} + showSuccess={() => {}} + successActionIds={{ + createAccount: "pm-create-account", + getWalletAccount: "pm-get-wallet-account", + }} + successActions={successActions} + disabled={disabled} + /> + )} + + {account && ( +
+
+ Connected Account:{" "} + {account.address || account.account?.address} +
+
+ PaymentManager:{" "} + {paymentManager + ? "✅ Ready" + : isInitializingPaymentManager + ? "⏳ Loading..." + : "❌ Failed to load"} +
+
+ )} +
+ ) : ( + /* Streamlined tab-based flow for funding modal */ +
+ {/* Tab Navigation */} +
+ + +
+ + {/* Step 1: Choose Account Method */} + {currentStep === 1 && ( +
+

+ Choose Account Method +

+

+ Select how you want to fund the Lit Ledger for this PKP +

+ { + setAccount(acc); + }} + onMethodChange={() => {}} + setStatus={() => {}} + showError={showError} + showSuccess={() => {}} + successActionIds={{ + createAccount: "pm-create-account", + getWalletAccount: "pm-get-wallet-account", + }} + successActions={successActions} + disabled={disabled} + /> + {account && ( +
+
+ Connected Account:{" "} + {account.address || account.account?.address} +
+
+ PaymentManager:{" "} + {paymentManager + ? "✅ Ready" + : isInitializingPaymentManager + ? "⏳ Loading..." + : "❌ Failed to load"} +
+
+ )} + {account && paymentManager && ( +
+ +
+ )} +
+ )} + + {/* Step 2: Deposit for PKP */} + {currentStep === 2 && account && paymentManager && ( +
+ {fundingSuccess ? ( + /* Success Message */ +
+
+ + + +
+

+ ✅ Funding Successful! +

+

+ Your PKP's Lit Ledger has been funded successfully. You can now close this modal and log in to your PKP account. +

+ + {/* Transaction Hash */} + {fundingTxHash && ( +
+
Transaction Hash
+
+ + {fundingTxHash.slice(0, 10)}...{fundingTxHash.slice(-8)} + + + View on Explorer + + + + +
+
+ )} + +
+ +
+
+ ) : ( + /* Deposit Form */ + <> +

+ Deposit for PKP +

+

+ Enter the amount you want to deposit to the PKP's Lit Ledger +

+
+ + setDepositForUserAddress(e.target.value)} + disabled + className="w-full px-3 py-2 rounded-lg text-sm border bg-gray-50 border-gray-300 text-black" + /> +
+
+ + setDepositForUserAmount(e.target.value)} + className="w-full px-3 py-2 rounded-lg text-sm border bg-white border-gray-300 text-black" + /> +

+ Need test tokens? Visit the{" "} + + Chronicle Yellowstone Faucet + +

+
+ + + )} +
+ )} +
+ )} + + {/* Balance Section */} + {paymentManager && !hideAccountSelection && ( +
+
+

PKP Lit Ledger Balance

+
+ + +
+
+ + {balanceInfo ? ( +
+
+
+ Total Balance +
+
+ {balanceInfo.totalBalance} {ledgerUnit} +
+
+ {balanceInfo.raw.totalBalance.toString()} Wei +
+
+
+
+ Available Balance +
+
+ {balanceInfo.availableBalance} {ledgerUnit} +
+
+ {balanceInfo.raw.availableBalance.toString()} Wei +
+
+
+ ) : ( +
+ Click refresh to load your balance +
+ )} +
+ )} + + {/* Operations Grid */} + {paymentManager && !fundPkOnly && !hideAccountSelection && ( +
+ {/* Deposit Section */} +
+

💰 Deposit Funds

+ + {/* Quick amounts */} +
+
Quick amounts:
+
+ {quickAmounts.map((amount) => ( + + ))} +
+
+ +
+ setDepositAmount(e.target.value)} + disabled={!account} + className={`w-full px-3 py-2 rounded-lg text-sm border ${ + !account ? "bg-gray-50" : "bg-white" + } border-gray-300 text-black`} + /> +
+ + + + {/* Deposit for others */} +
+

+ 👥 Deposit for Others +

+ +
+ setDepositForUserAddress(e.target.value)} + disabled={!account} + className={`w-full px-3 py-2 rounded-lg text-sm border ${ + !account ? "bg-gray-50" : "bg-white" + } border-gray-300 text-black`} + /> +
+ +
+ setDepositForUserAmount(e.target.value)} + disabled={!account} + className={`w-full px-3 py-2 rounded-lg text-sm border ${ + !account ? "bg-gray-50" : "bg-white" + } border-gray-300 text-black`} + /> +
+ + +
+
+ + {/* Withdrawal Section */} +
+

🔄 Withdraw Funds

+ + {withdrawDelay && ( +
+ Security Delay: {withdrawDelay.delayHours} hours + ({withdrawDelay.delaySeconds} seconds) +
+ )} + + {/* Withdrawal Status */} + {withdrawInfo && withdrawInfo.isPending && ( +
+
+ ⏳ Pending Withdrawal +
+
+ Amount: {withdrawInfo.amount} ETH +
+
+ Requested:{" "} + {new Date( + Number(withdrawInfo.timestamp) * 1000 + ).toLocaleString()} +
+ {canExecuteInfo && ( +
+ {canExecuteInfo.canExecute ? ( + ✅ Ready to execute! + ) : ( + + ⏱️ Time remaining:{" "} + {formatTimeRemaining(canExecuteInfo.timeRemaining)} + + )} +
+ )} +
+ )} + + {/* Request Withdrawal */} + {(!withdrawInfo || !withdrawInfo.isPending) && ( + <> +
+ setWithdrawAmount(e.target.value)} + disabled={!account} + className={`w-full px-3 py-2 rounded-lg text-sm border ${ + !account ? "bg-gray-50" : "bg-white" + } border-gray-300 text-black`} + /> +
+ + + + )} + + {/* Execute Withdrawal */} + {withdrawInfo && + withdrawInfo.isPending && + canExecuteInfo?.canExecute && ( + + )} + + {/* Refresh Status Button */} + +
+
+ )} + + {/* Fund-PK-only simplified Deposit for PKP */} + {paymentManager && fundPkOnly && !hideAccountSelection && ( +
+

💰 Deposit for PKP

+
+ setDepositForUserAddress(e.target.value)} + disabled + className={`w-full px-3 py-2 rounded-lg text-sm border bg-gray-50 border-gray-300 text-black`} + /> +
+
+ setDepositForUserAmount(e.target.value)} + className={`w-full px-3 py-2 rounded-lg text-sm border bg-white border-gray-300 text-black`} + /> +
+ +
+ )} + + {/* No PaymentManager state */} + {!paymentManager && account && !isInitializingPaymentManager && ( +
+

+ ⚠️ PaymentManager Not Available +

+

+ Unable to initialize PaymentManager. Please check your account setup + and try again. +

+
+ )} + + {/* No Account state */} + {!account && ( +
+

🔐 Account Required

+

+ Please create or connect an account above to access PaymentManager + features. +

+
+ )} + + ); +}; diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/dashboard/StatusDisplay.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/dashboard/StatusDisplay.tsx new file mode 100644 index 000000000..d1ab159d1 --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/dashboard/StatusDisplay.tsx @@ -0,0 +1,107 @@ +/** + * StatusDisplay Component + * + * Reusable status message display with transaction links + */ + +import React from 'react'; + +interface StatusDisplayProps { + status: string; + onDismiss: () => void; +} + +export const StatusDisplay: React.FC = ({ + status, + onDismiss, +}) => { + if (!status) return null; + + return ( +
+
+ {status.includes("Transaction:") ? ( + + ) : ( + status + )} +
+ +
+ ); +}; \ No newline at end of file diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/dashboard/index.ts b/apps/explorer/src/lit-logged-page/protectedApp/components/dashboard/index.ts new file mode 100644 index 000000000..cc3e0ec42 --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/dashboard/index.ts @@ -0,0 +1,7 @@ +/** + * Dashboard Components Index + * + * Centralized exports for all dashboard orchestration components + */ + +export { StatusDisplay } from './StatusDisplay'; \ No newline at end of file diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/layout/ChainSelector.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/layout/ChainSelector.tsx new file mode 100644 index 000000000..b5e4c4fde --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/layout/ChainSelector.tsx @@ -0,0 +1,404 @@ +/** + * ChainSelector Component + * + * Purpose: + * - Render a selector for blockchain networks + * - Support both default and user-defined custom chains + * + * Usage: + * - Provide `selectedChain` as the chain slug + * - Handle `onChainChange(slug)` to persist selection upstream + * + * Notes: + * - Custom chains are stored locally via the registry utilities + */ + +import React from "react"; +import * as DropdownMenu from "@radix-ui/react-dropdown-menu"; +import { ChevronDown } from "lucide-react"; +import { + getAllChains, + isCustomChain, + addCustomChain, + removeCustomChain, + getCustomChains, +} from "@/domain/lit/chains"; + +interface ChainSelectorProps { + selectedChain: string; + onChainChange: (chain: string) => void; + disabled?: boolean; + iconTrigger?: boolean; + triggerAriaLabel?: string; +} + +export const ChainSelector: React.FC = ({ + selectedChain, + onChainChange, + disabled = false, + iconTrigger = false, + triggerAriaLabel = 'Select chain', +}) => { + const [chains, setChains] = React.useState>({}); + const [isAddOpen, setIsAddOpen] = React.useState(false); + const [addForm, setAddForm] = React.useState({ + slug: "", + id: "", + name: "", + symbol: "", + rpcUrl: "", + explorerUrl: "", + testnet: false, + }); + const [error, setError] = React.useState(null); + + const refreshChains = React.useCallback(() => { + const all = getAllChains(); + // Map to minimal view for rendering + const minimal: Record = {}; + Object.entries(all).forEach(([k, v]) => { + minimal[k] = { name: v.name, symbol: v.symbol, testnet: v.testnet }; + }); + setChains(minimal); + }, []); + + React.useEffect(() => { + refreshChains(); + }, [refreshChains]); + + React.useEffect(() => { + const onStorage = (e: StorageEvent) => { + if (e.key && e.key.includes('chains.custom.v1')) { + refreshChains(); + } + }; + window.addEventListener('storage', onStorage); + return () => window.removeEventListener('storage', onStorage); + }, [refreshChains]); + + function handleSubmitAdd(e: React.FormEvent) { + e.preventDefault(); + setError(null); + const idNum = Number(addForm.id); + const result = addCustomChain(addForm.slug.trim(), { + id: Number.isFinite(idNum) ? idNum : -1, + name: addForm.name.trim(), + symbol: addForm.symbol.trim(), + rpcUrl: addForm.rpcUrl.trim(), + explorerUrl: addForm.explorerUrl.trim(), + litIdentifier: addForm.slug.trim(), + testnet: Boolean(addForm.testnet), + } as any); + if (!result.ok) { + setError(result.error); + return; + } + setIsAddOpen(false); + setAddForm({ slug: "", id: "", name: "", symbol: "", rpcUrl: "", explorerUrl: "", testnet: false }); + refreshChains(); + } + + function handleRemove(slug: string) { + removeCustomChain(slug); + if (selectedChain === slug) { + // If the currently selected chain was removed, keep the selection unchanged upstream. + // The parent may choose to override. We only refresh the list here. + } + refreshChains(); + } + + return ( + + + {iconTrigger ? ( + + ) : ( + + )} + + + + {!isAddOpen && ( + <> + onChainChange(value)} + > + {Object.entries(chains).map(([key, chain]) => { + const custom = isCustomChain(key); + return ( + + + {`${chain.name} (${chain.symbol})${chain.testnet ? " - Testnet" : ""}`} + + {custom && ( + + Custom + + )} + + ); + })} + + +
+
+ + )} + + {!isAddOpen ? ( +
+ { + e.preventDefault(); + setIsAddOpen(true); + }} + style={{ + padding: '6px 10px', + borderRadius: 6, + fontSize: 13, + cursor: 'pointer', + color: '#065F46', + background: '#ECFDF5', + border: '1px solid #A7F3D0', + }} + > + Add custom chain… + + + {Object.keys(getCustomChains()).length > 0 && ( + + + Remove custom chain… + + + {Object.keys(getCustomChains()).map((slug) => ( + { + e.preventDefault(); + handleRemove(slug); + }} + style={{ + padding: '6px 10px', + borderRadius: 6, + fontSize: 13, + cursor: 'pointer', + color: '#991B1B', + }} + > + Remove {slug} + + ))} + + + )} +
+ ) : ( +
e.stopPropagation()} onKeyDown={(e) => e.stopPropagation()} style={{ display: 'flex', flexDirection: 'column', gap: 6 }}> + {error && ( +
{error}
+ )} +
+ setAddForm((s) => ({ ...s, slug: e.target.value }))} + style={{ border: '1px solid #E5E7EB', borderRadius: 6, padding: '6px 8px', fontSize: 12, color: '#111827' }} /> + setAddForm((s) => ({ ...s, id: e.target.value }))} + style={{ border: '1px solid #E5E7EB', borderRadius: 6, padding: '6px 8px', fontSize: 12, color: '#111827' }} /> + setAddForm((s) => ({ ...s, name: e.target.value }))} + style={{ border: '1px solid #E5E7EB', borderRadius: 6, padding: '6px 8px', fontSize: 12, color: '#111827' }} /> + setAddForm((s) => ({ ...s, symbol: e.target.value }))} + style={{ border: '1px solid #E5E7EB', borderRadius: 6, padding: '6px 8px', fontSize: 12, color: '#111827' }} /> + setAddForm((s) => ({ ...s, rpcUrl: e.target.value }))} + style={{ gridColumn: '1 / span 2', border: '1px solid #E5E7EB', borderRadius: 6, padding: '6px 8px', fontSize: 12, color: '#111827' }} /> + setAddForm((s) => ({ ...s, explorerUrl: e.target.value }))} + style={{ gridColumn: '1 / span 2', border: '1px solid #E5E7EB', borderRadius: 6, padding: '6px 8px', fontSize: 12, color: '#111827' }} /> + +
+
+ + +
+
+ )} + + + + ); +}; diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/layout/DashboardContent.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/layout/DashboardContent.tsx new file mode 100644 index 000000000..d6f2d0c3b --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/layout/DashboardContent.tsx @@ -0,0 +1,154 @@ +import React from "react"; +import { UIPKP, BalanceInfo } from "../../types"; +import { PKPInfoCard } from "../pkp/PKPInfoCard"; +import { APP_INFO } from "@/_config"; + +interface DashboardContentProps { + selectedPkp: UIPKP | null; + balance: BalanceInfo | null; + isLoadingBalance: boolean; + selectedChain: string; + onShowPkpModal: () => void; + onChainChange: (chain: string) => void; + userMethod: string; + children: React.ReactNode; +} + +export const DashboardContent: React.FC = ({ + selectedPkp, + balance, + isLoadingBalance, + selectedChain, + onShowPkpModal, + onChainChange, + userMethod, + children, +}) => { + return ( +
+
+
+ +
+ {children} +
+
+
+ ); +}; diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/layout/TabNavigation.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/layout/TabNavigation.tsx new file mode 100644 index 000000000..c443cd7c1 --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/layout/TabNavigation.tsx @@ -0,0 +1,70 @@ +/** + * TabNavigation Component + * + * Reusable tab navigation component + */ + +import React from 'react'; + +export interface Tab { + id: string; + label: string; + icon?: string; +} + +interface TabNavigationProps { + tabs: Tab[]; + activeTab: string; + onTabChange: (tabId: string) => void; +} + +export const TabNavigation: React.FC = ({ + tabs, + activeTab, + onTabChange, +}) => { + return ( +
+
+ {tabs.map((tab) => ( + + ))} +
+
+ ); +}; \ No newline at end of file diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/layout/index.ts b/apps/explorer/src/lit-logged-page/protectedApp/components/layout/index.ts new file mode 100644 index 000000000..d3f84766a --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/layout/index.ts @@ -0,0 +1,3 @@ +export { DashboardContent } from './DashboardContent'; +export { TabNavigation, type Tab } from './TabNavigation'; +export { ChainSelector } from './ChainSelector'; \ No newline at end of file diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/AddActionForm.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/AddActionForm.tsx new file mode 100644 index 000000000..be758a21d --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/AddActionForm.tsx @@ -0,0 +1,120 @@ +/** + * AddActionForm Component + * + * Form for adding permitted actions to a PKP + */ + +import React, { useState } from 'react'; +import { ScopeCheckboxes } from '../ui/ScopeCheckboxes'; +import { AVAILABLE_SCOPES } from '../../types'; +import { usePKPPermissions } from '../../contexts/PKPPermissionsContext'; +import { useLitAuth } from '../../../../lit-login-modal/LitAuthProvider'; +import { triggerLedgerRefresh } from '../../utils/ledgerRefresh'; + +interface AddActionFormProps { + disabled?: boolean; +} + +export const AddActionForm: React.FC = ({ disabled = false }) => { + const { addPermittedAction } = usePKPPermissions(); + const { user } = useLitAuth(); + const [newActionIpfsId, setNewActionIpfsId] = useState( + "QmSQDKRWEXZ9CGoucSTR11Mv6fhGqaytZ1MqrfHdkuS1Vg" + ); + const [newActionSelectedScopes, setNewActionSelectedScopes] = useState(["sign-anything"]); + const [isAdding, setIsAdding] = useState(false); + + const handleSubmit = async () => { + if (!newActionIpfsId.trim() || newActionSelectedScopes.length === 0) { + return; + } + + setIsAdding(true); + try { + await addPermittedAction(newActionIpfsId, newActionSelectedScopes); + + // Clear form on success + setNewActionIpfsId(""); + setNewActionSelectedScopes([]); + try { + const addr = user?.pkpInfo?.ethAddress; + if (addr) await triggerLedgerRefresh(addr); + } catch {} + } catch (error) { + console.error("Failed to add permitted action:", error); + } finally { + setIsAdding(false); + } + }; + + return ( +
+

+ ➕ Add Lit Action Permission +

+

+ Allow your PKP to execute a specific Lit Action. +

+ + setNewActionIpfsId(e.target.value)} + placeholder="IPFS ID (e.g., QmSQDKRWEXZ9CGoucSTR11Mv6fhGqaytZ1MqrfHdkuS1Vg)" + disabled={disabled || isAdding} + style={{ + width: "100%", + padding: "12px", + border: "1px solid #d1d5db", + borderRadius: "8px", + fontSize: "13px", + marginBottom: "16px", + fontFamily: "monospace", + backgroundColor: disabled ? "#f3f4f6" : "#ffffff", + color: disabled ? "#6b7280" : "#000000", + }} + /> + + + + +
+ ); +}; \ No newline at end of file diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/AddAddressForm.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/AddAddressForm.tsx new file mode 100644 index 000000000..5c821c24b --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/AddAddressForm.tsx @@ -0,0 +1,120 @@ +/** + * AddAddressForm Component + * + * Form for adding permitted addresses to a PKP + */ + +import React, { useState } from 'react'; +import { ScopeCheckboxes } from '../ui/ScopeCheckboxes'; +import { AVAILABLE_SCOPES } from '../../types'; +import { usePKPPermissions } from '../../contexts/PKPPermissionsContext'; +import { useLitAuth } from '../../../../lit-login-modal/LitAuthProvider'; +import { triggerLedgerRefresh } from '../../utils/ledgerRefresh'; + +interface AddAddressFormProps { + disabled?: boolean; +} + +export const AddAddressForm: React.FC = ({ disabled = false }) => { + const { addPermittedAddress } = usePKPPermissions(); + const { user } = useLitAuth(); + const [newPermittedAddress, setNewPermittedAddress] = useState( + "0xef3eE1bD838aF5B36482FAe8a6Fc394C68d5Fa9F" + ); + const [newAddressSelectedScopes, setNewAddressSelectedScopes] = useState(["sign-anything"]); + const [isAdding, setIsAdding] = useState(false); + + const handleSubmit = async () => { + if (!newPermittedAddress.trim() || newAddressSelectedScopes.length === 0) { + return; + } + + setIsAdding(true); + try { + await addPermittedAddress(newPermittedAddress, newAddressSelectedScopes); + + // Clear form on success + setNewPermittedAddress(""); + setNewAddressSelectedScopes([]); + try { + const addr = user?.pkpInfo?.ethAddress; + if (addr) await triggerLedgerRefresh(addr); + } catch {} + } catch (error) { + console.error("Failed to add permitted address:", error); + } finally { + setIsAdding(false); + } + }; + + return ( +
+

+ 🏠 Add Address Permission +

+

+ Allow a specific address to use your PKP. +

+ + setNewPermittedAddress(e.target.value)} + placeholder="Ethereum Address (0x...)" + disabled={disabled || isAdding} + style={{ + width: "100%", + padding: "12px", + border: "1px solid #d1d5db", + borderRadius: "8px", + fontSize: "13px", + marginBottom: "16px", + fontFamily: "monospace", + backgroundColor: disabled ? "#f3f4f6" : "#ffffff", + color: disabled ? "#6b7280" : "#000000", + }} + /> + + + + +
+ ); +}; \ No newline at end of file diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/PermissionsDangerZone.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/PermissionsDangerZone.tsx new file mode 100644 index 000000000..c69a5dfe6 --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/PermissionsDangerZone.tsx @@ -0,0 +1,58 @@ +/** + * PermissionsDangerZone Component + * + * Contains dangerous operations like revoking all permissions + */ + +import React from 'react'; +import { usePKPPermissions } from '../../contexts/PKPPermissionsContext'; + +export const PermissionsDangerZone: React.FC = () => { + const { revokeAllPermissions, isRevokingAll } = usePKPPermissions(); + + return ( +
+
+

+ ⚠️ Danger Zone +

+

+ Warning: This will remove ALL permissions from your + PKP. This action cannot be undone. +

+ + +
+
+ ); +}; \ No newline at end of file diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/PermissionsDashboard.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/PermissionsDashboard.tsx new file mode 100644 index 000000000..f0d874c57 --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/PermissionsDashboard.tsx @@ -0,0 +1,182 @@ +/** + * PermissionsDashboard Component + * + * Complete permissions management dashboard that combines all permission-related components + */ + +import React, { useEffect } from "react"; +import { usePKPPermissions } from "../../contexts/PKPPermissionsContext"; +import { PermissionsSummaryCards } from "./PermissionsSummaryCards"; +import { PermissionsList } from "./PermissionsList"; +import { AddActionForm } from "./AddActionForm"; +import { AddAddressForm } from "./AddAddressForm"; + +interface PermissionsDashboardProps { + disabled?: boolean; +} + +export const PermissionsDashboard: React.FC = ({ + disabled = false, +}) => { + const { + permissionsContext, + isLoadingPermissions, + permissionsError, + loadPermissionsContext, + selectedPkp, + } = usePKPPermissions(); + + // Auto-load permissions when component mounts or PKP changes + useEffect(() => { + if (selectedPkp && !permissionsContext && !isLoadingPermissions) { + console.log( + "🔄 Auto-loading permissions context for PKP:", + selectedPkp.tokenId + ); + loadPermissionsContext(); + } + }, [ + selectedPkp, + permissionsContext, + isLoadingPermissions, + loadPermissionsContext, + ]); + + return ( + <> + {/* Summary Cards */} + + + {/* Current Permissions Detail View */} +
+
+

+ 📋 Current Permissions +

+ +
+ + {!permissionsContext && !isLoadingPermissions && ( +
+ No permissions loaded.{" "} + {selectedPkp + ? "Loading automatically..." + : "Please select a PKP to view permissions."} +
+ )} + + {isLoadingPermissions && ( +
+
+ Loading permissions... +
+ )} + + {permissionsContext && } +
+ + {/* Permission Management Cards */} +
+ + +
+ + {/* Permissions Error Display */} + {permissionsError && ( +
+ ⚠️ Error: {permissionsError} +
+ )} + + {/* Danger Zone */} + {/* */} + + {/* Loading animation CSS */} + + + ); +}; diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/PermissionsList.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/PermissionsList.tsx new file mode 100644 index 000000000..e87e40e6d --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/PermissionsList.tsx @@ -0,0 +1,473 @@ +/** + * PermissionsList Component + * + * Displays current PKP permissions with ability to remove them + */ + +import React from 'react'; +import { RemoveButton } from '../ui/RemoveButton'; +import { usePKPPermissions } from '../../contexts/PKPPermissionsContext'; +import { hexToIpfsCid, getAuthMethodTypeName } from '../../utils'; +import { AUTH_METHOD_TYPE } from '../../types'; +import { getAddress, isAddress } from 'viem'; +import { useLitAuth } from '../../../../lit-login-modal/LitAuthProvider'; +import { triggerLedgerRefresh } from '../../utils/ledgerRefresh'; + +export const PermissionsList: React.FC = () => { + const { + permissionsContext, + removingItems, + removePermittedAction, + removePermittedAddress, + removePermittedAuthMethod, + selectedPkp, + } = usePKPPermissions(); + const { user } = useLitAuth(); + + const currentAuthType: number | undefined = user?.authData?.authMethodType; + const currentAuthIdRaw: string = (user?.authData?.authMethodId || '') as string; + + const normaliseAuthId = (typeNumber: number, id?: string): string => { + if (!id) return ''; + // Normalise EVM addresses for EthWallet type; lowercase fallback for others + if (Number(typeNumber) === AUTH_METHOD_TYPE.EthWallet) { + try { + if (isAddress(id)) return getAddress(id).toLowerCase(); + } catch {} + } + return String(id).toLowerCase(); + }; + + const isCurrentSessionAuthMethod = (method: { authMethodType: number | string; id?: string }): boolean => { + const methodType = Number(method.authMethodType); + if (currentAuthType === undefined || currentAuthType === null) return false; + if (methodType !== Number(currentAuthType)) return false; + const a = normaliseAuthId(methodType, method.id); + const b = normaliseAuthId(Number(currentAuthType), currentAuthIdRaw); + return !!a && !!b && a === b; + }; + + const handleRemoveAction = async (actionCid: string) => { + const ok = window.confirm( + `Are you sure you want to remove this permitted action?\n\nIPFS CID: ${actionCid}` + ); + if (!ok) return; + await removePermittedAction(actionCid); + try { + const addr = selectedPkp?.ethAddress || user?.pkpInfo?.ethAddress; + if (addr) await triggerLedgerRefresh(addr); + } catch {} + }; + + const handleRemoveAddress = async (address: string) => { + const ok = window.confirm( + `Are you sure you want to remove this permitted address?\n\nAddress: ${address}` + ); + if (!ok) return; + await removePermittedAddress(address); + try { + const addr = selectedPkp?.ethAddress || user?.pkpInfo?.ethAddress; + if (addr) await triggerLedgerRefresh(addr); + } catch {} + }; + + const handleRemoveAuthMethod = async ( + authType: number, + authId: string, + displayId: string, + isCurrent: boolean + ) => { + const typeName = getAuthMethodTypeName(authType); + const baseMsg = `Are you sure you want to remove this auth method?\n\nType: ${typeName}\nID: ${displayId || authId}`; + const ok = window.confirm( + isCurrent + ? `${baseMsg}\n\n❗️❗️ Warning: This matches your current session's authentication and removing it will block you from authenticating this PKP with the current auth method again.` + : baseMsg + ); + if (!ok) return; + + if (isCurrent) { + const typed = window.prompt( + `Type DELETE to confirm removing the current session's auth method.` + ); + if ((typed || '').trim().toUpperCase() !== 'DELETE') return; + } + + await removePermittedAuthMethod(authType, authId); + try { + const addr = selectedPkp?.ethAddress || user?.pkpInfo?.ethAddress; + if (addr) await triggerLedgerRefresh(addr); + } catch {} + }; + + if (!permissionsContext) { + return ( +
+ No permissions loaded. Click "Refresh" to load current permissions. +
+ ); + } + + const hasPermissions = + (permissionsContext.actions && permissionsContext.actions.length > 0) || + (permissionsContext.addresses && permissionsContext.addresses.length > 0) || + (permissionsContext.authMethods && permissionsContext.authMethods.length > 0); + + if (!hasPermissions) { + return ( +
+
🔓
+
+ No Permissions Set +
+
+ This PKP has no specific permissions configured. Use the forms below to add permissions. +
+
+ ); + } + + return ( +
+ {/* Permitted Actions */} + {permissionsContext.actions && permissionsContext.actions.length > 0 && ( +
+

+ ⚡ Permitted Actions ({permissionsContext.actions.length}) +

+
+ {permissionsContext.actions.map((action: string, index: number) => ( +
+ + handleRemoveAction(action)} + isRemoving={removingItems.has(`action:${action}`)} + /> +
+ ))} +
+
+ )} + + {/* Permitted Addresses */} + {permissionsContext.addresses && permissionsContext.addresses.length > 0 && ( +
+

+ 🏠 Permitted Addresses ({(() => { + try { + const normalise = (addr: string) => { + try { + return getAddress(addr).toLowerCase(); + } catch { + return String(addr).toLowerCase(); + } + }; + const unique = Array.from(new Set(permissionsContext.addresses.map((a: string) => normalise(a)))); + return unique.length; + } catch { + return permissionsContext.addresses.length; + } + })()}) +

+
+ {(() => { + // Build unique list (case-insensitive, checksum-normalised when possible) + const addresses: string[] = permissionsContext.addresses; + const normalise = (addr: string) => { + try { + return getAddress(addr).toLowerCase(); + } catch { + return String(addr).toLowerCase(); + } + }; + const uniqueKeys = Array.from(new Set(addresses.map((a: string) => normalise(a)))); + const uniqueAddresses = uniqueKeys.map((key: string) => { + const original = addresses.find((a: string) => normalise(a) === key) as string; + return original; + }); + + return uniqueAddresses.map((address: string, index: number) => ( +
+
+
+ {address} + {(() => { + try { + if ( + selectedPkp?.ethAddress && + isAddress(address) && + isAddress(selectedPkp.ethAddress) && + getAddress(address) === getAddress(selectedPkp.ethAddress) + ) { + return ( + + (PKP Itself) + + ); + } + } catch {} + return null; + })()} +
+
+ Ethereum Address +
+
+ handleRemoveAddress(address)} + isRemoving={removingItems.has(`address:${address}`)} + /> +
+ )); + })()} +
+
+ )} + + {/* Auth Methods */} + {permissionsContext.authMethods && permissionsContext.authMethods.length > 0 && ( +
+

+ 🔑 Auth Methods ({permissionsContext.authMethods.length}) +

+
+ {permissionsContext.authMethods.map((authMethod: any, index: number) => { + const authType = Number(authMethod.authMethodType); + const isLitAction = authType === AUTH_METHOD_TYPE.LitAction; + const isEthWallet = authType === AUTH_METHOD_TYPE.EthWallet; + const displayId = (() => { + if (isLitAction && authMethod.id) return hexToIpfsCid(authMethod.id); + if (isEthWallet && authMethod.id) { + try { + return getAddress(authMethod.id); + } catch { + return authMethod.id || ""; + } + } + return authMethod.id || ""; + })(); + const isCurrent = isCurrentSessionAuthMethod(authMethod); + + return ( +
+
+
+ {isLitAction ? ( + { + e.currentTarget.style.color = "#5b21b6"; + }} + onMouseLeave={(e) => { + e.currentTarget.style.color = "#7c3aed"; + }} + > + {displayId} + + ) : ( + (() => { + const isCurrentPkpEth = (() => { + try { + return ( + isEthWallet && + selectedPkp?.ethAddress && + isAddress(authMethod.id) && + isAddress(selectedPkp.ethAddress) && + getAddress(authMethod.id) === getAddress(selectedPkp.ethAddress) + ); + } catch { + return false; + } + })(); + return ( + <> + {displayId} + {isCurrentPkpEth && ( + + (PKP Itself) + + )} + + ); + })() + )} +
+
+ Type: {getAuthMethodTypeName(authType)} + {isCurrent && ( + + (Current session) + + )} + {isLitAction && ( + + 📎 (IPFS Link) + + )} +
+ {authMethod.scopes && authMethod.scopes.length > 0 && ( +
+ Scopes:{" "} + {Array.isArray(authMethod.scopes) + ? authMethod.scopes.join(", ") + : authMethod.scopes} +
+ )} + {authMethod.scopes && authMethod.scopes.length === 0 && ( +
+ Scopes: None (no permissions) +
+ )} +
+ + handleRemoveAuthMethod( + authType, + authMethod.id, + String(displayId), + isCurrent + ) + } + isRemoving={removingItems.has(`${authType}:${authMethod.id}`)} + /> +
+ ); + })} +
+
+ )} +
+ ); +}; \ No newline at end of file diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/PermissionsSummaryCards.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/PermissionsSummaryCards.tsx new file mode 100644 index 000000000..ea1536646 --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/PermissionsSummaryCards.tsx @@ -0,0 +1,167 @@ +/** + * PermissionsSummaryCards Component + * + * Google-style dashboard summary cards for permissions overview + */ + +import React from 'react'; +import { getAddress } from 'viem'; +import { usePKPPermissions } from '../../contexts/PKPPermissionsContext'; + +export const PermissionsSummaryCards: React.FC = () => { + const { permissionsContext } = usePKPPermissions(); + + if (!permissionsContext) { + return null; + } + + const uniqueAddressCount = React.useMemo(() => { + const addresses: string[] = permissionsContext?.addresses || []; + try { + const normalise = (addr: string) => { + try { + return getAddress(addr).toLowerCase(); + } catch { + return String(addr).toLowerCase(); + } + }; + return Array.from(new Set(addresses.map((a) => normalise(a)))).length; + } catch { + return addresses.length; + } + }, [permissionsContext?.addresses]); + + return ( +
+ {/* Actions Summary Card */} +
+
+ {permissionsContext?.actions?.length || 0} +
+
+ ⚡ Permitted Actions +
+
+ Lit Actions this PKP can execute +
+
+ + {/* Addresses Summary Card */} +
+
+ {uniqueAddressCount} +
+
+ 🏠 Permitted Addresses +
+
+ Addresses that can use this PKP +
+
+ + {/* Auth Methods Summary Card */} +
+
+ {permissionsContext?.authMethods?.length || 0} +
+
+ 🔑 Auth Methods +
+
+ Authentication methods linked +
+
+
+ ); +}; \ No newline at end of file diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/index.ts b/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/index.ts new file mode 100644 index 000000000..61c99d49b --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/permissions/index.ts @@ -0,0 +1,12 @@ +/** + * Permissions Components Index + * + * Centralized exports for all permission management components + */ + +export { AddActionForm } from './AddActionForm'; +export { AddAddressForm } from './AddAddressForm'; +export { PermissionsList } from './PermissionsList'; +export { PermissionsSummaryCards } from './PermissionsSummaryCards'; +export { PermissionsDangerZone } from './PermissionsDangerZone'; +export { PermissionsDashboard } from './PermissionsDashboard'; \ No newline at end of file diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/pkp/PKPInfoCard.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/pkp/PKPInfoCard.tsx new file mode 100644 index 000000000..ff87e4fc1 --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/pkp/PKPInfoCard.tsx @@ -0,0 +1,535 @@ +/** + * PKPInfoCard Component + * + * Displays PKP wallet information including balance and addresses + */ + +import React, { useEffect, useRef, useState } from "react"; +import { UIPKP, BalanceInfo } from "../../types"; +import { formatPublicKey, copyToClipboard } from "../../utils"; +import copyIcon from "../../../../assets/copy.svg"; +import googleIcon from "../../../../assets/google.png"; +import discordIcon from "../../../../assets/discord.png"; +import web3WalletIcon from "../../../../assets/web3-wallet.svg"; +import passkeyIcon from "../../../../assets/passkey.svg"; +import emailIcon from "../../../../assets/email.svg"; +import phoneIcon from "../../../../assets/phone.svg"; +import whatsappIcon from "../../../../assets/whatsapp.svg"; +import tfaIcon from "../../../../assets/2fa.svg"; +import { getAddress } from "viem"; +import { ChainSelector } from "../layout"; +import { Settings } from "lucide-react"; +import { useOptionalLitAuth } from "../../../../lit-login-modal/LitAuthProvider"; +import { privateKeyToAccount } from "viem/accounts"; +import { setCurrentBalance, useLedgerRefresh } from "../../utils/ledgerRefresh"; +// Replaced hover behaviour with a click-triggered menu +const account = privateKeyToAccount( + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" +); + +const AUTH_ICON_BY_METHOD: Record = { + google: googleIcon, + discord: discordIcon, + eoa: web3WalletIcon, + webauthn: passkeyIcon, + "stytch-email": emailIcon, + "stytch-sms": phoneIcon, + "stytch-whatsapp": whatsappIcon, + "stytch-totp": tfaIcon, + custom: passkeyIcon, +}; + +interface PKPInfoCardProps { + selectedPkp: UIPKP | null; + balance: BalanceInfo | null; + isLoadingBalance: boolean; + onShowPkpModal: () => void; + userMethod: string; + selectedChain: string; + onChainChange: (chain: string) => void; +} + +export const PKPInfoCard: React.FC = ({ + selectedPkp, + balance, + isLoadingBalance, + onShowPkpModal, + userMethod, + selectedChain, + onChainChange, +}) => { + const [copiedField, setCopiedField] = useState(null); + const [isChainMenuOpen, setIsChainMenuOpen] = useState(false); + const chainTriggerRef = useRef(null); + const chainMenuRef = useRef(null); + const optionalAuth = useOptionalLitAuth(); + const services = optionalAuth?.services; + const currentNetworkName = (optionalAuth as any)?.currentNetworkName as + | string + | undefined; + const isTestnet = currentNetworkName === "naga-dev" || currentNetworkName === "naga-test"; + const ledgerUnit = isTestnet ? "tstLPX" : "LPX"; + + // PKP Lit Ledger balance state + const [ledgerError, setLedgerError] = useState(""); + const [ledgerBalance, setLedgerBalance] = useState<{ + total: string; + available: string; + } | null>(null); + + // Balance change log + type BalanceChangeLog = { + timestamp: string; + before: string; + after: string; + delta: string; + type: 'increase' | 'decrease'; + }; + const [balanceChangeLogs, setBalanceChangeLogs] = useState([]); + const [showLogs, setShowLogs] = useState(false); + const lastBalanceRef = useRef(null); + + // Ref to track background polling interval + const backgroundPollingRef = useRef(null); + + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + const target = event.target as Node; + if ( + isChainMenuOpen && + chainMenuRef.current && + !chainMenuRef.current.contains(target) && + chainTriggerRef.current && + !chainTriggerRef.current.contains(target) + ) { + setIsChainMenuOpen(false); + } + }; + + const handleKeyDown = (event: KeyboardEvent) => { + if (event.key === "Escape") { + setIsChainMenuOpen(false); + } + }; + + document.addEventListener("mousedown", handleClickOutside); + document.addEventListener("keydown", handleKeyDown); + return () => { + document.removeEventListener("mousedown", handleClickOutside); + document.removeEventListener("keydown", handleKeyDown); + }; + }, [isChainMenuOpen]); + + // Helper to fetch ledger balance + const fetchLedgerBalance = async () => { + if (!selectedPkp?.ethAddress || !services?.litClient) return null; + try { + const pm = await services.litClient.getPaymentManager({ + account: account, + }); + const bal = await pm.getBalance({ + userAddress: selectedPkp.ethAddress, + }); + return { + total: bal.totalBalance, + available: bal.availableBalance, + }; + } catch (e: any) { + throw e; + } + }; + + // Event-driven polling: only polls after actions + const startActionTriggeredPolling = () => { + // Clear any existing interval + if (backgroundPollingRef.current) { + clearInterval(backgroundPollingRef.current); + } + + // Poll every 1 second for a limited time after an action + let pollCount = 0; + const maxPolls = 10; // Poll for 10 seconds after action + + backgroundPollingRef.current = setInterval(async () => { + if (!selectedPkp?.ethAddress || !services?.litClient) { + stopPolling(); + return; + } + + pollCount++; + if (pollCount > maxPolls) { + stopPolling(); + return; + } + + try { + const bal = await fetchLedgerBalance(); + if (bal) { + // Log balance change if different from last balance + if (lastBalanceRef.current && lastBalanceRef.current !== bal.available) { + const before = Number(lastBalanceRef.current); + const after = Number(bal.available); + const delta = after - before; + + if (Math.abs(delta) > 0.000001) { + const newLog: BalanceChangeLog = { + timestamp: new Date().toISOString(), + before: lastBalanceRef.current, + after: bal.available, + delta: delta.toFixed(6), + type: delta > 0 ? 'increase' : 'decrease' + }; + + setBalanceChangeLogs(prev => [newLog, ...prev].slice(0, 50)); // Keep last 50 logs + console.log('[Balance Change]', { + time: new Date().toLocaleTimeString(), + delta: `${delta > 0 ? '+' : ''}${delta.toFixed(6)} ${ledgerUnit}`, + before: lastBalanceRef.current, + after: bal.available + }); + + // Stop polling early if we detected a change + stopPolling(); + } + } + + lastBalanceRef.current = bal.available; + setLedgerBalance(bal); + + // Update global balance store + if (selectedPkp?.ethAddress && bal.available) { + setCurrentBalance(selectedPkp.ethAddress, bal.available); + } + } + } catch (e) { + // Silent fail for polling + } + }, 1000); + }; + + const stopPolling = () => { + if (backgroundPollingRef.current) { + clearInterval(backgroundPollingRef.current); + backgroundPollingRef.current = null; + } + }; + + // Load PKP Lit Ledger balance when PKP changes (initial load only, no continuous polling) + useEffect(() => { + const loadLedgerBalance = async () => { + if (!selectedPkp?.ethAddress || !services?.litClient) { + setLedgerBalance(null); + stopPolling(); + return; + } + try { + setLedgerError(""); + + const bal = await fetchLedgerBalance(); + if (!bal) { + return; + } + + // Initialize last balance ref + lastBalanceRef.current = bal.available; + setLedgerBalance(bal); + + // Update global balance store + if (selectedPkp?.ethAddress && bal.available) { + setCurrentBalance(selectedPkp.ethAddress, bal.available); + } + + // Start polling after initial login (first load is an action) + startActionTriggeredPolling(); + } catch (e: any) { + setLedgerError(e?.message || String(e)); + setLedgerBalance(null); + } + }; + loadLedgerBalance(); + + // Cleanup on unmount or PKP change + return () => { + stopPolling(); + }; + }, [selectedPkp, services?.litClient]); + + // Subscribe to ledger refresh events (triggered by actions) + useLedgerRefresh(({ address }) => { + if (!selectedPkp?.ethAddress) return; + + // Only refresh if it's for this PKP + if ((address || "").toLowerCase() === (selectedPkp.ethAddress || "").toLowerCase()) { + // Start polling after action + startActionTriggeredPolling(); + } + }); + + const refreshLedgerBalance = async () => { + if (!selectedPkp?.ethAddress || !services?.litClient) return; + + try { + const bal = await fetchLedgerBalance(); + if (!bal) return; + + setLedgerBalance(bal); + + // Update global balance store + if (selectedPkp?.ethAddress && bal.available) { + setCurrentBalance(selectedPkp.ethAddress, bal.available); + } + + // Start polling after manual refresh (it's an action) + startActionTriggeredPolling(); + } catch (e: any) { + setLedgerError(e?.message || String(e)); + } + }; + + const handleCopy = async (text: string, fieldName: string) => { + await copyToClipboard(text, setCopiedField, fieldName); + setTimeout(() => setCopiedField(null), 2000); + }; + + if (!selectedPkp) { + return ( +
+
+ No PKP selected. Click below to select a PKP wallet. +
+
+ ); + } + + return ( +
+ {/* Header row: avatar | title | actions (chain + settings) */} +
+ {/* Avatar (circular) */} +
+ {`${userMethod} +
+ + {/* Title only */} +
+
+ PKP Wallet +
+
+ + {/* Actions: Chain selector + Settings */} +
+ { + onChainChange(slug); + }} + iconTrigger + triggerAriaLabel="Select chain" + /> + + +
+
+ + {/* Balance shown outside of the info container, directly under the auth label */} +
+ {isLoadingBalance ? ( +
Loading balance...
+ ) : ( + balance && ( +
+ + {balance.balance} {balance.symbol} + + + (Chain ID: {balance.chainId}) + +
+ ) + )} + {/* PKP Lit Ledger Balance */} +
+
+ + PKP Lit Ledger Balance + + + +
+ {ledgerError ? ( +
{ledgerError}
+ ) : ledgerBalance ? ( +
+
+ + {ledgerBalance.available} {ledgerUnit} + + + (total {ledgerBalance.total} {ledgerUnit}) + +
+
+ ) : ( +
No ledger data
+ )} + + {/* Balance Change Logs */} + {showLogs && ( +
+
+ Balance Change History + {balanceChangeLogs.length > 0 && ( + + )} +
+ {balanceChangeLogs.length === 0 ? ( +
+ No balance changes recorded yet +
+ ) : ( +
+ {balanceChangeLogs.map((log, idx) => ( +
+
+ + {new Date(log.timestamp).toLocaleTimeString()} + + + {log.type === 'increase' ? '+' : ''}{log.delta} {ledgerUnit} + +
+
+ {log.before} → {log.after} +
+
+ ))} +
+ )} +
+ )} +
+
+ +
+
+
+ Token ID: + + handleCopy(selectedPkp.tokenId?.toString() || "", "tokenId") + } + title="Click to copy Token ID" + > + + {copiedField === "tokenId" + ? `✅ ${selectedPkp.tokenId?.toString()}` + : selectedPkp.tokenId?.toString() || "N/A"} + + Copy + +
+ +
+ ETH Address: + + handleCopy( + getAddress(selectedPkp.ethAddress) || "", + "ethAddress" + ) + } + title="Click to copy ETH Address" + > + + {copiedField === "ethAddress" + ? `✅ ${getAddress(selectedPkp.ethAddress)}` + : getAddress(selectedPkp.ethAddress) || "N/A"} + + Copy + +
+ +
+ Public Key: + handleCopy(selectedPkp.pubkey || "", "publicKey")} + title="Click to copy Public Key (full value)" + > + + {copiedField === "publicKey" + ? `✅ ${selectedPkp.pubkey}` + : formatPublicKey(selectedPkp.pubkey || "")} + + Copy + +
+
+
+
+ ); +}; diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/ui/LoadingSpinner.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/ui/LoadingSpinner.tsx new file mode 100644 index 000000000..23ad9921f --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/ui/LoadingSpinner.tsx @@ -0,0 +1,24 @@ +/** + * LoadingSpinner Component + * + * Reusable loading spinner with configurable size + */ + +import React from 'react'; + +interface LoadingSpinnerProps { + size?: number; +} + +export const LoadingSpinner: React.FC = ({ size = 16 }) => ( +
+); \ No newline at end of file diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/ui/RemoveButton.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/ui/RemoveButton.tsx new file mode 100644 index 000000000..db1bec9d7 --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/ui/RemoveButton.tsx @@ -0,0 +1,46 @@ +/** + * RemoveButton Component + * + * Reusable button for removing items with loading state + */ + +import React from 'react'; +import { LoadingSpinner } from './LoadingSpinner'; + +interface RemoveButtonProps { + onRemove: () => void; + isRemoving: boolean; +} + +export const RemoveButton: React.FC = ({ + onRemove, + isRemoving, +}) => ( + +); \ No newline at end of file diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/ui/ScopeCheckboxes.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/ui/ScopeCheckboxes.tsx new file mode 100644 index 000000000..ecfd8acf7 --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/ui/ScopeCheckboxes.tsx @@ -0,0 +1,90 @@ +/** + * ScopeCheckboxes Component + * + * Reusable component for selecting permission scopes + */ + +import React from 'react'; +import { ScopeConfig } from '../../types'; + +interface ScopeCheckboxesProps { + availableScopes: ScopeConfig[]; + selectedScopes: string[]; + onScopeChange: (scopes: string[]) => void; + disabled?: boolean; +} + +export const ScopeCheckboxes: React.FC = ({ + availableScopes, + selectedScopes, + onScopeChange, + disabled = false, +}) => ( +
+ +
+ {availableScopes.map((scope) => ( + + ))} +
+
+); \ No newline at end of file diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/ui/TransactionToastContainer.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/ui/TransactionToastContainer.tsx new file mode 100644 index 000000000..63070cf6c --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/ui/TransactionToastContainer.tsx @@ -0,0 +1,50 @@ +/** + * TransactionToastContainer Component + * + * Displays transaction notifications with links to block explorer + */ + +import React from 'react'; +import { TransactionToast } from '../../types'; +import { formatTxHash } from '../../utils'; + +interface TransactionToastContainerProps { + toasts: TransactionToast[]; + onRemoveToast: (id: string) => void; +} + +export const TransactionToastContainer: React.FC = ({ + toasts, + onRemoveToast +}) => ( +
+ {toasts.map((toast) => ( +
+
+
+ {toast.type === 'success' ? '✅' : '❌'} {toast.message} +
+ +
+ +
+ ))} +
+); \ No newline at end of file diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/ui/index.ts b/apps/explorer/src/lit-logged-page/protectedApp/components/ui/index.ts new file mode 100644 index 000000000..bd5857660 --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/ui/index.ts @@ -0,0 +1,10 @@ +/** + * UI Components Index + * + * Centralized exports for all UI components + */ + +export { LoadingSpinner } from './LoadingSpinner'; +export { RemoveButton } from './RemoveButton'; +export { TransactionToastContainer } from './TransactionToastContainer'; +export { ScopeCheckboxes } from './ScopeCheckboxes'; \ No newline at end of file diff --git a/apps/explorer/src/lit-logged-page/protectedApp/components/wallet/EncryptDecryptForm.tsx b/apps/explorer/src/lit-logged-page/protectedApp/components/wallet/EncryptDecryptForm.tsx new file mode 100644 index 000000000..33181d174 --- /dev/null +++ b/apps/explorer/src/lit-logged-page/protectedApp/components/wallet/EncryptDecryptForm.tsx @@ -0,0 +1,397 @@ +/** + * EncryptDecryptForm Component + * + * Form for encrypting and decrypting data with PKP + */ + +import React, { useState } from "react"; +import { useLitAuth } from "../../../../lit-login-modal/LitAuthProvider"; +import { UIPKP } from "../../types"; +import { LoadingSpinner } from "../ui/LoadingSpinner"; +import type { EncryptResponse } from "@lit-protocol/types"; + +// Default message constant +const DEFAULT_ENCRYPT_MESSAGE = "This is my secret message! 🤫"; + +interface EncryptDecryptFormProps { + selectedPkp: UIPKP | null; + disabled?: boolean; +} + +type ExtendedEncryptResponse = EncryptResponse & { + originalMessage: string; + pkpAddress: string; + timestamp: string; +}; + +export const EncryptDecryptForm: React.FC = ({ + selectedPkp, + disabled = false, +}) => { + const { user, services } = useLitAuth(); + const [messageToEncrypt, setMessageToEncrypt] = useState(DEFAULT_ENCRYPT_MESSAGE); + const [encryptedData, setEncryptedData] = useState(null); + const [decryptedMessage, setDecryptedMessage] = useState(""); + const [isEncrypting, setIsEncrypting] = useState(false); + const [isDecrypting, setIsDecrypting] = useState(false); + const [status, setStatus] = useState(""); + + const encryptData = async () => { + if ( + !services?.litClient || + !messageToEncrypt.trim() || + !user?.authContext + ) { + setStatus("No Lit client, message to encrypt, or auth context"); + return; + } + + setIsEncrypting(true); + setStatus("Encrypting data..."); + try { + const { createAccBuilder } = await import( + "@lit-protocol/access-control-conditions" + ); + + // Get the actual PKP address from the viem account + const chainConfig = services.litClient.getChainConfig().viemConfig; + const pkpViemAccount = await services.litClient.getPkpViemAccount({ + pkpPublicKey: selectedPkp?.pubkey || user?.pkpInfo?.pubkey, + authContext: user.authContext, + chainConfig: chainConfig, + }); + + // Create access control conditions using the basic pattern + const builder = createAccBuilder(); + const accs = builder + .requireWalletOwnership(pkpViemAccount.address) + .on("ethereum") + .build(); + + const encrypted = await services!.litClient.encrypt({ + dataToEncrypt: messageToEncrypt, + unifiedAccessControlConditions: accs, + chain: "ethereum", + }); + + setEncryptedData({ + ...encrypted, + originalMessage: messageToEncrypt, + pkpAddress: pkpViemAccount.address, + timestamp: new Date().toISOString(), + }); + setStatus("Data encrypted successfully!"); + } catch (error: any) { + console.error("Failed to encrypt data:", error); + setStatus(`Failed to encrypt data: ${error.message || error}`); + } finally { + setIsEncrypting(false); + } + }; + + const decryptData = async () => { + if (!user?.authData || !encryptedData || !services?.litClient) { + setStatus("No auth data, encrypted data, or Lit client"); + return; + } + + setIsDecrypting(true); + setStatus("Creating auth context for decryption..."); + try { + const { createAccBuilder } = await import( + "@lit-protocol/access-control-conditions" + ); + + // Use the same PKP address that was used for encryption + const pkpAddress = encryptedData.pkpAddress || selectedPkp?.ethAddress; + if (!pkpAddress) { + throw new Error("Cannot determine PKP address for decryption"); + } + + // Create the same access control conditions as used in encryption + const builder = createAccBuilder(); + const accs = builder + .requireWalletOwnership(pkpAddress) + .on("ethereum") + .build(); + + // Create a new authContext specifically for decryption with proper capabilities + setStatus("Creating auth context with decryption capabilities..."); + const decryptionAuthContext = + await services.authManager.createPkpAuthContext({ + authData: user.authData, + pkpPublicKey: selectedPkp?.pubkey || user?.pkpInfo?.pubkey, + authConfig: { + capabilityAuthSigs: [], + expiration: new Date( + Date.now() + 1000 * 60 * 60 * 24 + ).toISOString(), + statement: "", + domain: "", + resources: [ + ["pkp-signing", "*"], + ["lit-action-execution", "*"], + ["access-control-condition-decryption", "*"], + ], + }, + litClient: services.litClient, + }); + + setStatus("Decrypting data..."); + const decrypted = await services!.litClient.decrypt({ + data: encryptedData, + unifiedAccessControlConditions: accs, + authContext: decryptionAuthContext, + chain: "ethereum", + }); + + let decryptedText: string; + if (typeof decrypted.convertedData === "string") { + decryptedText = decrypted.convertedData; + } else if (decrypted.convertedData) { + try { + decryptedText = JSON.stringify(decrypted.convertedData); + } catch { + decryptedText = String(decrypted.convertedData); + } + } else { + decryptedText = new TextDecoder().decode(decrypted.decryptedData); + } + setDecryptedMessage(decryptedText); + setStatus("Data decrypted successfully!"); + } catch (error: any) { + console.error("Failed to decrypt data:", error); + setStatus(`Failed to decrypt data: ${error.message || error}`); + } finally { + setIsDecrypting(false); + } + }; + + return ( +
+

+ 🔐 Encrypt & Decrypt +

+

+ Encrypt data that only your PKP can decrypt. +

+ +