Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion .claude/settings.local.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,12 @@
"Bash(pnpm test:*)",
"Bash(pnpm --filter @graphprotocol/graph-horizon-subgraph test)",
"Bash(pnpm --filter @graphprotocol/graph-horizon-validation exec tsc:*)",
"Bash(pnpm add:*)"
"Bash(pnpm add:*)",
"Bash(npx tsx:*)",
"Bash(cast sig:*)",
"Bash(npx tsc:*)",
"Bash(npm run build:*)",
"Bash(npm run test:*)"
]
}
}
88 changes: 88 additions & 0 deletions packages/subgraph/schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,18 @@ type GraphNetwork @entity(immutable: false) {
# Counts
"Active service providers"
countServiceProviders: Int!
"Active provisions"
countProvisions: Int!
"Active delegation pools"
countDelegationPools: Int!

# Stake aggregates
"Total tokens staked by service providers"
tokensStaked: BigInt!
"Total tokens provisioned to data services"
tokensProvisioned: BigInt!
"Total tokens delegated to service providers"
tokensDelegated: BigInt!
}

type ServiceProvider @entity(immutable: false) {
Expand All @@ -22,6 +30,86 @@ type ServiceProvider @entity(immutable: false) {
tokensProvisioned: BigInt!
"Tokens that are not locked in provisions"
tokensIdle: BigInt!
"Tokens delegated to this service provider"
tokensDelegated: BigInt!

# Provisions
"Provisions created by this service provider"
provisions: [Provision!]! @derivedFrom(field: "serviceProvider")

# Delegation pools
"Delegation pools for this service provider"
delegationPools: [DelegationPool!]! @derivedFrom(field: "serviceProvider")

# Metadata
"Block number when entity was created"
createdAtBlock: BigInt!
"Timestamp when entity was created"
createdAt: BigInt!
"Block number when entity was last updated"
updatedAtBlock: BigInt!
"Timestamp when entity was last updated"
updatedAt: BigInt!
}

type DelegationPool @entity(immutable: false) {
"Composite ID: serviceProvider-verifier"
id: Bytes!

# Relationships
"Service provider that owns this pool"
serviceProvider: ServiceProvider!
"Verifier address (data service)"
verifier: Bytes!

# Pool state
"Total tokens in the pool"
tokens: BigInt!
"Total shares in the pool"
shares: BigInt!
"Tokens currently thawing"
tokensThawing: BigInt!

# Metadata
"Block number when entity was created"
createdAtBlock: BigInt!
"Timestamp when entity was created"
createdAt: BigInt!
"Block number when entity was last updated"
updatedAtBlock: BigInt!
"Timestamp when entity was last updated"
updatedAt: BigInt!
}

type Provision @entity(immutable: false) {
"Composite ID: serviceProvider-verifier"
id: Bytes!

# Relationships
"Service provider that created this provision"
serviceProvider: ServiceProvider!
"Verifier address (data service)"
verifier: Bytes!

# Tokens
"Tokens currently provisioned"
tokens: BigInt!
"Tokens currently thawing"
tokensThawing: BigInt!

# Parameters
"Maximum cut the verifier can take (PPM)"
maxVerifierCut: BigInt!
"Thawing period in seconds"
thawingPeriod: BigInt!

# Staged parameters (pending acceptance)
"Staged max verifier cut"
maxVerifierCutPending: BigInt!
"Staged thawing period"
thawingPeriodPending: BigInt!
"Timestamp when parameters were last staged"
lastParametersStagedAt: BigInt!

# Metadata
"Block number when entity was created"
Expand Down
31 changes: 0 additions & 31 deletions packages/subgraph/scripts/fetch-indexers.sh

This file was deleted.

85 changes: 85 additions & 0 deletions packages/subgraph/src/common/multicall.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import { Address, Bytes, BigInt, crypto, ethereum } from "@graphprotocol/graph-ts"

// Function selectors (first 4 bytes of keccak256 of function signature)
// getStake(address) -> keccak256("getStake(address)")[0:4]
export const GET_STAKE_SELECTOR = Bytes.fromHexString("0x7a766460") as Bytes
// getDelegationPool(address,address) -> keccak256("getDelegationPool(address,address)")[0:4]
export const GET_DELEGATION_POOL_SELECTOR = Bytes.fromHexString("0x561285e4") as Bytes
// getDelegation(address,address,address) -> keccak256("getDelegation(address,address,address)")[0:4]
export const GET_DELEGATION_SELECTOR = Bytes.fromHexString("0x15049a5a") as Bytes

/**
* Encodes a getStake(address) call
*/
export function encodeGetStake(serviceProvider: Address): Bytes {
let encoded = ethereum.encode(ethereum.Value.fromAddress(serviceProvider))!
return GET_STAKE_SELECTOR.concat(encoded)
}

/**
* Encodes a getDelegationPool(address,address) call
*/
export function encodeGetDelegationPool(serviceProvider: Address, verifier: Address): Bytes {
let tuple = new ethereum.Tuple()
tuple.push(ethereum.Value.fromAddress(serviceProvider))
tuple.push(ethereum.Value.fromAddress(verifier))
let encoded = ethereum.encode(ethereum.Value.fromTuple(tuple))!
return GET_DELEGATION_POOL_SELECTOR.concat(encoded)
}

/**
* Encodes a getDelegation(address,address,address) call
*/
export function encodeGetDelegation(
serviceProvider: Address,
verifier: Address,
delegator: Address
): Bytes {
let tuple = new ethereum.Tuple()
tuple.push(ethereum.Value.fromAddress(serviceProvider))
tuple.push(ethereum.Value.fromAddress(verifier))
tuple.push(ethereum.Value.fromAddress(delegator))
let encoded = ethereum.encode(ethereum.Value.fromTuple(tuple))!
return GET_DELEGATION_SELECTOR.concat(encoded)
}

/**
* Decodes a getStake result (uint256)
*/
export function decodeGetStakeResult(data: Bytes): BigInt {
let decoded = ethereum.decode("(uint256)", data)
if (decoded == null) {
return BigInt.zero()
}
return decoded.toTuple()[0].toBigInt()
}

/**
* Decodes a getDelegationPool result (uint256,uint256,uint256,uint256,uint256)
* Returns: [tokens, shares, tokensThawing, sharesThawing, thawingNonce]
*/
export function decodeGetDelegationPoolResult(data: Bytes): BigInt[] {
let decoded = ethereum.decode("(uint256,uint256,uint256,uint256,uint256)", data)
if (decoded == null) {
return [BigInt.zero(), BigInt.zero(), BigInt.zero(), BigInt.zero(), BigInt.zero()]
}
let tuple = decoded.toTuple()
return [
tuple[0].toBigInt(),
tuple[1].toBigInt(),
tuple[2].toBigInt(),
tuple[3].toBigInt(),
tuple[4].toBigInt(),
]
}

/**
* Decodes a getDelegation result (uint256) - just shares
*/
export function decodeGetDelegationResult(data: Bytes): BigInt {
let decoded = ethereum.decode("(uint256)", data)
if (decoded == null) {
return BigInt.zero()
}
return decoded.toTuple()[0].toBigInt()
}
147 changes: 147 additions & 0 deletions packages/subgraph/src/config/arbitrum-one/delegation-seed.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
// AUTO-GENERATED FILE - DO NOT EDIT MANUALLY
// Regenerate with: cd packages/tools && NETWORK=arbitrum-one pnpm seed:delegations
// Generated: 2026-05-12T13:42:53.536Z
// Network: arbitrum-one
// Block: 408825706
//
// Indexers with delegations: 135
// Note: Individual delegators/delegations are lazy-initialized, not seeded at genesis

// Indexer addresses with delegations (for DelegationPool seeding)
export const DELEGATED_INDEXER_ADDRESSES: string[] = [
"0x0058223c6617cca7ce76fc929ec9724cd43d4542",
"0x01e110178f15aeec1cccc507939109175dc9c121",
"0x01f17c392614c7ea586e7272ed348efee21b90a3",
"0x047739cb42c227489cccd11aa5f28aa4eb46d2cf",
"0x066636093e6c3417a0b46c3ecfbd34b5bda00092",
"0x07ca020fdde5c57c1c3a783befdb08929cf77fec",
"0x089f78d8cf0a5ae1b7a581b1910a73f8cb3e4774",
"0x0b9d582b7fdd387ba13ad7f453d49af255a8ed5e",
"0x0df89dd9c34f78f70eb6a528a1eeac9a6238a2af",
"0x0ee8e5dfea4315fe69a4e0fe84f50cbfce8f1021",
"0x0fd8fd1dc8162148cb9413062fe6c6b144335dbf",
"0x1254cecc9da2b8c8ea40d3bc702ad7c17c9de7ad",
"0x17def1a43a323c711c7a32101ecf41e58eff54a2",
"0x19a4fe7d0c76490cca77b45580846cdb38b9a406",
"0x1b7e0068ca1d7929c8c56408d766e1510e54d98d",
"0x1b92e4cba0f82c85c1298af861247849988c788c",
"0x1bb75c83a3d25afe7dc216177d876b19a4d59ed5",
"0x1c151923cf6c381c4af6c3071a2773b3cdbbf704",
"0x2121bc6437100fc21d19a9eea30898419e020afa",
"0x269ebeee083ce6f70486a67dc8036a889bf322a9",
"0x2b3c7d1ef5fdfc0557934019c531d3e70d6200ae",
"0x2e15f3f0d37b191c33ee06e953c8cce4c493b47a",
"0x2e8d26e9b0d280738728e71c37bf05e70a636238",
"0x2f09092aacd80196fc984908c5a9a7ab3ee4f1ce",
"0x3185992ac24824097047f2eb9af066bde07919b8",
"0x326c584e0f0eab1f1f83c93cc6ae1acc0feba0bc",
"0x32bbd16a94ebb289edceebe77f35acc82664157b",
"0x345c9a221e4caa15f78fb8078c441745de48a225",
"0x35917c0eb91d2e21bef40940d028940484230c06",
"0x3717cef8020bddee7a18f4efb2bfa88fefdcb1bc",
"0x3863a65ce278a240f9aa2a4b4a48493be59e6139",
"0x38f412c8d6346a17a53ff9ceecd2e01acecd27c0",
"0x3b9ba748691f135b71582dc3292e5e3ed7e13341",
"0x3e1536fc83cd5bed83a521a26034ff3e59c6a7c4",
"0x3f74870f80ff7449fe4c6ff257da5fa72734c970",
"0x40a8acdebaf6c0ae0ef04ad375b0869f885c8d82",
"0x4207df52f7ff229364899b21e9c4ad36d3d42981",
"0x474e571ab6dd77489ec3c7ddf9cbc893fcba684c",
"0x475a34f498b0d63a90f9a930913c9a66d79198c9",
"0x4c2bcfd78a30931b7ca73c84f05670bb34ce58ee",
"0x4d67938e9b07681526fe0345a45b770bba88c659",
"0x4e5c87772c29381bcabc58c3f182b6633b5a274a",
"0x4f45530236e1c6603870301010dcab7b561125b3",
"0x4fc5a6f02862ce1d663cd031a60a6d9149a441e2",
"0x51637a35f7f054c98ed51904de939b9561d37885",
"0x53dbbc9d916b1840a2c4c26b150ba2e13f36e10f",
"0x550c1f4814a85aa10f5f061ca8c45e2ee9620226",
"0x563040fa6547054620b9c02ba288b6f7267ae6ff",
"0x594f52d3fccda979bb036bf14ea43a9d6f307f35",
"0x59749d1fa9635cd0413aeff5ee295490a7e87f54",
"0x5af569b692b0598721461027dbbecde74d465d99",
"0x5b3c8f7245dfbd9bea22d9c4b975df60a638e5a3",
"0x5d7c6e41ca423c4877e0124a9a3de0817dcb43f1",
"0x5ddee9720e17aad28febb55643cd8ab50c51c60b",
"0x600f2b53719e1dbacf340572b31a9df9921b82fa",
"0x63c9dc729ba7a22bb8605216b24a34b902e5fe94",
"0x65a077ebd29e5e7ed8997a4b923dc7dbdb7c98a3",
"0x665e4bc3571ebf27ea282fa4b2be995501ec883c",
"0x6c7c332a090c8d2085857cf3220ea01c6d45a723",
"0x6f3ce93a09f30f18d728d2364268b5fe9444b89e",
"0x6f8a032b4b1ee622ef2f0fc091bdbb98cfae81a3",
"0x6f9bb7e454f5b3eb2310343f0e99269dc2bb8a1d",
"0x748aefb5c1c30c4a4ea963a6c49e90c00bdca15b",
"0x74dbb201ecc0b16934e68377bc13013883d9417b",
"0x7bb834017672b1135466661d8dd69c5dd0b3bf51",
"0x80451b373f865f8143ee6a75445228c6c097ae7e",
"0x863e1fc588651c432a1bbb7c8afdf2c3d34921ea",
"0x8bbe94c2894f76406568dfb44e905dac4b7df699",
"0x8cc22436ba6f07a4d5dd2043e3109267eee5aab8",
"0x8d632dfc2454d624910fe982e85a5b15d2ae93c5",
"0x8d9b156dfe8fd8191b7a4e1c0f5903b0984afcd3",
"0x8f689a83dd52eaa1d5ad6a40c46189b4a0d70b06",
"0x9082f497bdc512d08ffde50d6fce28e72c2addcf",
"0x915b75d0f2a05efbf34342756942c55ece0944ac",
"0x918fcc24e6b7f5ec73b4cf766e2393d8fe707541",
"0x91f137715ef8e141d6a8074cbbbc53a0f76b09c5",
"0x920fdeb00ee04dd72f62d8a8f80f13c82ef76c1e",
"0x958ad15ea21fb79b935524cf90c90276031bee20",
"0x995349b0bba3300049f2e794920151f64a78c691",
"0x9a8be56015d32995e82745e14cb9d5dfb0cfac9d",
"0x9ada64ca2fa91318e2de0ff678a8a935859954f4",
"0x9d2adf4bbbe140020baf520ed084f8a1f38f643c",
"0x9da1017766bfeb2835db4f811516eea68996538b",
"0xa01b06b0e9feb016d5ab669ce89d059bc666e569",
"0xa181d0f242b3730f8a244cc94eda05faf17a43e8",
"0xa4d629ba2ffb3321008d8cec37cca077696bf24d",
"0xa959b5afe73c6faa803541b5c4edc0492dfda294",
"0xa9b5da22440dedd72535ec0525582ca0b63be5e1",
"0xaa988dcb035518bc0e20082a3148a5d3dfd1776d",
"0xaddd3e23599d2b7267067afbcd18830aefca640a",
"0xae9bfdf9eeec808f4f3f6f455cb1968445cc6f2f",
"0xb4b4570df6f7fe320f10fdfb702dba7e35244550",
"0xb54c7c9fa1a51300e6054b70ae9952c1fb2800b4",
"0xb8950c47e8b9e539601cb47a167de8bf4cb1289e",
"0xb8ca929e2bd96548cabcabc56cfc9a5147cef0ff",
"0xbb31364ed8192494371d94a6c1cab02351ebfcbb",
"0xbdfb5ee5a2abf4fc7bb1bd1221067aef7f9de491",
"0xc55c63563efb36f7cc65ac3060c52987c6694b37",
"0xc7c3c9586a10e4b40373f2f2f223b3a3c04cc6c6",
"0xc9014686f6336ad558b539565d5dff840b339082",
"0xcba919cf1ee9c537545975d9968718a09d20f071",
"0xcfd990b8297e7ff46f8acef32bec516f4395ac6b",
"0xd25b44bad8812d1c028e0db075f0466285424c37",
"0xd6a51a6cd8abc896f560e2bc9e1bdfc5ef4fa45b",
"0xda20dde459c8d918f81566995d899a046d4d8503",
"0xdc7daef4d0751a9f6ec28b06d6d9475b13eb0918",
"0xdeb712db301285ed483ef9e02dd08a1980f273f1",
"0xdec965f0604125be05cd8a136c85d02ef344d61a",
"0xdecba5154aab37ae5e381a19f804f3af4d1bcbb5",
"0xe0ceec6daa59cc951f3f71d6fc4221e55ef6c386",
"0xe13840a2e92e0cb17a246609b432d0fa2e418774",
"0xe2571c87f1433ea06be389e427af2a17bfd37fc0",
"0xe338631b024afcc15aad7c987cda6aa09bd50ad0",
"0xe4012a6392527d6e24df2b90b56c3fdb3f5598be",
"0xe63e935fba572784d5aa40715e372e7948bbdb12",
"0xe6de2325ef1aac1f058fae59d3c38a472f569846",
"0xe91273727203bcc827521fc8b0c762d435c3c5d0",
"0xe9e284277648fcdb09b8efc1832c73c09b5ecf59",
"0xeccdf8231326a9c5aad32df76a633aaa4c49b104",
"0xedca8740873152ff30a2696add66d1ab41882beb",
"0xeeeee689aa442c607105f29f06d00d2f748776b2",
"0xf00f7157fa8fd0420b87956d46058a16b2f23adc",
"0xf03e9a7e40f09772c3c368b9de14c6d7370717b9",
"0xf0e33495afe697dbe32168bd0743ba32ebb978a3",
"0xf435dee64819590c1a3f5913822e1c04afebe695",
"0xf57dcd881ebd1d81df99194abdfa90f9e0e92f11",
"0xf61dafa923a6cbcee6b73683c3f3ff099b713436",
"0xf671c6b83f44ead14ca1c5f4a629f1b9b18c8f29",
"0xf6a9bad58e74b5165dc31ef24be4377b192f274a",
"0xf7793bf9561c32ffbac603ce572fa55643f9cf72",
"0xf9123292b4d958c53aaad8c5df0138ee0e62944b",
"0xf92f430dd8567b0d466358c79594ab58d919a6d4",
"0xfb168335f5a3868a03696904ed38fa95fd167c0e",
"0xfc842f81490dcb37e82d416b2d28327dfb24ba9a",
"0xfeff9093f6b32d0e5cddba743b06a1fedb87c004",
]
Loading
Loading