The arbitration council has completed the investigation of this set of disputes. Thank you for the detailed description of your findings, processes and motivations @86b and @minato; your transparency has helped make this a smooth process.
The investigation sought to confirm the claims of both parties and determine whether the actions of the disputed indexer could be considered a contribution to the network within the spirit of the arbitration charter.
The fisherman for this dispute mentions two reasons for submitting:
- PoIs submitted on-chain do not match what the fisherman produced as a reference.
- The fisherman has classified observed behavior on the disputed allocations as “malicious/unethical” and generally not aligning with the spirit of the proposed arbitration charter’s specifications.
The investigation will test the two hypothesis proposed by the fisherman about the disputed indexers behavior.
PoIs
The fisherman has compared the disputed allocation PoIs against references generated from the fisherman’s own graph node and found that they do not match. As part of the investigation the disputed deployments were indexed on a local machine to have an additional reference.
Once the deployments finished syncing (reached their failure points) reference PoIs were generated for the disputed allocations using the start block of the epoch prior to the epoch where they failed. Initially the references did not match the disputed indexers submitted PoIs; however they did match the fisherman’s reference PoIs. The discrepancy could be due to a difference in the block number used to generate the PoIs, so more reference PoIs were generated by looping through the range of blocks each allocation was active and generating a reference PoI as of each block (using the graph-disputes CLI tool). I found a match on the reference PoIs generated for the failed block number - 1
. I consider this a reasonable interpretation of the Arbitration charter in its current state (still in flight) which states that the last valid PoI should be used
.
Analyzing the PoI tables shared by the disputed indexer, they’ve been found to be identical to the corresponding tables from the disputed indexer. This comes as no surprise after the above investigation, but is further evidence that the indexer properly synced the deployments in question.
In conclusion, the PoIs submitted with the disputed allocations have been confirmed by the investigation as being valid and correct. The initial investigation by the fisherman that indicated “invalid” PoIs used a different (equally valid) scheme for generating PoIs. The fisherman used the start block of epoch prior to failure
while the disputed indexer used failed block - 1
The fact that both PoI generation schemes produced different but valid results is of course a good indicator that further clarification in the charter is necessary; the arbitration has already been updated to remove the ambiguous statements around failed subgraphs and graph node work is in progress to support PoIs on the failed block of a subgraph so the network can come to consensus on failures.
Malicious behavior
The fisherman has classified observed behavior on the disputed allocations as “malicious/unethical” and generally not aligning with the spirit of the proposed arbitration charter’s specifications. The disputed indexer repeated a coordinated sequence of actions consisting of the following steps:
- Create and deploy a new subgraph to the network that is expected to fail at a certain block (within an epoch or two).
- Purchase curation shares on the subgraph.
- Allocate towards the subgraph deployment with their indexer and sync it until it fails.
- Close allocation using a PoI from the block before the failure.
Steps 1-3 created an exclusive environment for the indexer to collect rewards on the new subgraph deployments without competition from other indexers and in step 4 they were able to use the specific failed subgraphs exception in the arbitration charter to close the allocations of the now failed subgraphs with a valid PoI. The steps were repeated and optimized over time by the disputed indexer.
The pattern of behavior outlined above created a profitable situation for the indexer; meanwhile, did it contribute in any meaningful way to the network? The disputed indexer stated that the scheme was initially crafted to entice bots into curating on “zombie” deployments and thus wasting their resources. As investigators we are unable to find any other way to confirm this intention. Given the economics of the situation, with a real intention to grieve the frontrunning bots it would be reasonable to expect the indexer to attempt coordination in a public forum to alert curators and indexers of their behavior. The data that the indexer defined in the subgraph, curated to, and indexed indexes ERC-721 contracts, but was designed for the purpose of failing at specific times and did not provide any valuable data indexing to the network. The subgraphs were not queried on the network and all 6 of them are based on the same template with altered failure modes.
In conclusion, the disputed indexer showed a pattern of behavior that was intended purely to capture rewards without providing the intended value of an indexer on the network. Indeed, the disputed indexer themselves has been transparent in their intentions stating that “we did think that the exception rule can be used to create an exclusive environment just like described below.”
Conclusion
After investigating the disputed allocations with the goal of confirming the two working hypothesis we’ve concluded that the PoIs submitted when closing the allocations were valid attestations of syncing that subgraphs data. As for the larger pattern of behavior, it is confirmed that there was a coordinated pattern of behavior from the disputed indexer to create, deploy, curate on, index, and collect indexing rewards on these subgraphs. Based on the data available, the investigators could not find strong reason to believe this action was in any way beneficial to the goals of the network. As such the behavior can be characterized as being purely driven by a goal of exploiting the failed subgraphs exception (no longer in the arbitration charter but once considered canon.) The recommendation is that the disputed indexer be slashed under the clear expectation that has been set in public forums that arbitrators will be looking closely at the intent of disputed allocations behavior for each case.
Investigation Data and Results
Number | Deployment (IPFS) | PoI Table Divergence | Dispute | Allocation | Indexer Rewards (wei GRT) | Indexer rewards (GRT) | Indexer Rewards (% of total stake) | Failed at BlockNumber | Deployment (bytes32) | PoI | PoI_fisherman | PoI_arbRef (prevEpoch) | PoI_arbRef (failed-1) | PoI_rainbowMatches (arbRef) | CreatedAtEpoch | ClosedAtEpoch | CreatedAtBlock | ClosedAtBlockNumber | ClosedAtBlockHash |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2 | QmYLnK6HwxTn3qPe2tURFUQYcxa4VVxLLvdbt6hVpBXmzd | none | 0xa6e48245e348d1533e31cba5bac4da3125104c927c53b11fa99ab95a8ba15a27 | 0x5037caea050b4dda604ef5efe908715e5cb71103 | 1.004198911884378e+21 | 1004.198911884378 | 0.085388698525 | 12855677 | 0x949d775a90ef63b46d95fc90cf326dea9cceef9b3c4fcb04f9e16581dc7058ee | 0x82d3c31866310dceefbad6dd5e4c0721f32b7c16bd93ea16f89be91c870f4ff0 | 0xb429cb40d26ffa8aec1f0ec31eb6bd5d97ccf0e6062559a4570a521c97a5caac | 0xb429cb40d26ffa8aec1f0ec31eb6bd5d97ccf0e6062559a4570a521c97a5caac | 0x82d3c31866310dceefbad6dd5e4c0721f32b7c16bd93ea16f89be91c870f4ff0 | none | 211 | 212 | 0xc0d8ef23fefd3590ba30c0ffcc748c952637d7348ccc9d06de5031c43381ec67 | 12855756 | 0xe504360b3f50a5b7a62e92ed93e0afb97cf778c2a40303e578dfd46349e2a5a9 |
5 | QmbVGE6Ma2AqzVzKQip6S81dAiSuHeQLny47jzFTLa3DAq | none | 0x274b39de33d7cf9f4e9feaf3331f56078b0546884aecae156a1f292d42412af8 | 0x30740c34017407cc939e559b2bbe96b711e3d088 | 3.4239980482113584e+21 | 3423.998048211359 | 0.29114823132 | 12860424 | 0xc35cbc58760eae95e5accbd7f866dfb1f89060482b4feb525b795259cfc220aa | 0xc2d56a308c3560a511a0ca06ab4bf8d8f3c9891687c21980507e3a97c9ace7a6 | 0x5bdf4c32ef9498197f087e4c570a98eefa7a83de65818445434e311259939be2 | 0x5bdf4c32ef9498197f087e4c570a98eefa7a83de65818445434e311259939be2 | 0xc2d56a308c3560a511a0ca06ab4bf8d8f3c9891687c21980507e3a97c9ace7a6 | none | 212 | 213 | 0x1f2d50cac27c46ea67ebe48016aacc56529cea28fd95f20db163930103e0193e | 12862431 | 0xdd855884efe31cab39686d1cbe165f1a5f89acbf1f17e4fad8a69d32bac64b94 |
6 | QmQEGuJtXiwWni2bsmDDPPor9U1nfQ8s2kbQ6XYCwNjojG | none | 0xf6dd49f420750111fe0ec51b4e5c4f175ce2a65a864d6f714e7c2ef66829031a | 0x0b089eeed8cf24c41f9e74cc750fc654eb5f0fc4 | 4.001022239045631e+21 | 4001.022239045631 | 0.340213555022 | 12862507 | 0x1c153b5e9ba74823153c451300a053beb9dcdef20549b22901ef1d502e21d8eb | 0xb751485346603a1d165b822499aeb1bd2a5122542c5f40ae3720d666be18126c | 0xa2a9fae6226689dbb9755a9cbeed0b8c274d68f48e4ad16c5866f0bd29048cdf | 0xa2a9fae6226689dbb9755a9cbeed0b8c274d68f48e4ad16c5866f0bd29048cdf | 0xb751485346603a1d165b822499aeb1bd2a5122542c5f40ae3720d666be18126c | none | 213 | 214 | 0xc7f621c45794507aec687a72900de26a669d019aa1ba58839a677e4c5b90f937 | 12869026 | 0x929b7b23e791a2cc7c86ce2010fd99ede6cfe32c429c8e991849cf288168ebab |
4 | QmUxkM4kkYDyVEcUcBGWrvhj5Y6f2uvUTkPTmPjtm76A6k | none | 0xa2f6ba08ec3ad3e04c4f3ec2ed4344ebb32ba867923ec14b14e46311d954ff59 | 0xd9036a08e37d0810451a2da60056c1cc935069e7 | 2.346331016311035e+21 | 2346.331016311035 | 0.199512416734 | 12869144 | 0x6265679b3f40b30663c7e6f27828c5b1df274b0f422aeede33ac2008100a4df9 | 0xf9cb11c4cec2e710d80c8e1770a75b2a502c795c9b75b6836853738f3d26b6a2 | 0xe11d7fe5fc7b7d0701976c793336732c83bbb2ac9c4b5dfd5e8c2b071f478972 | 0xe11d7fe5fc7b7d0701976c793336732c83bbb2ac9c4b5dfd5e8c2b071f478972 | 0xf9cb11c4cec2e710d80c8e1770a75b2a502c795c9b75b6836853738f3d26b6a2 | none | 214 | 215 | 0xab6a0e71041e365deb0be08dc88e7a0f762adb73189d8d7c5ffd7247b07e55e9 | 12876424 | 0x7347437d0f83310d5e6e3348f0b7474ab3237b248ad13d4b65b47dc1a0b2d27e |
1 | QmVTUfdp5sJR4uNLq8jM1zR6TLyepejz9gd38YpNT9We5Q | none | 0x68982a39c7cd4ccc1f22e2bd00de0de20b06cd3e19cb3a65d931d7af410e05e1 | 0x347032a87c92a79f3eacbf2f4262dbb7eba5165d | 974522571664905000000 | 974.522571664905 | 0.08286527011 | 12876877 | 0x69c184d914985b6681499479840877426f9c1c3e369ba618d8e32a1ea65ff63b | 0x367e3cb4ab168ef8231ab1228a51cc6399bca1c17545515573a91b8ddd9cf532 | 0xeeac889fb37dac0b0cc1ed25a157d60f3ecbca4856bf9d844720b7eab13c97c0 | 0xeeac889fb37dac0b0cc1ed25a157d60f3ecbca4856bf9d844720b7eab13c97c0 | 0xcd7a76c99ad622a1f3bece7b495389546180e5444a1e6b5a272846304756ffd7 | none | 215 | 216 | 0x0654ccd498a1224b6bcacdd34689f4b8902aa70804975bd479ec7bd390b39be7 | 12883331 | 0x972dabc5337c9540d9e31212866832a07ec3c61956584d9a2986ce81b34984aa |
3 | QmafMrc51kqWZdBF9u3XzerN2gYAb8wUPU7dHiHuxWewjK | none | 0x21309e1849923a4e6997280130907daa7cf3e087438b0d23fc01e578e0461dc2 | 0x73f3810a241d4966f18d0427d5244afec9f2ecf1 | 495387889841351100000 | 495.387889841351 | 0.042123653669 | 12876871 | 0xb71738e2cfee4a013449cd09dd89fc1eeb2ead8941e2a8a006d1db605d761d26 | 0x02911d0e46f521bc791524d6aa9d858db2d82688a7ffdecde3caac0ff8f53a38 | 0xd39937dea78486c35c1127cee227487d72ff6bfdadf93dd3c7c926241bef932f | 0xd39937dea78486c35c1127cee227487d72ff6bfdadf93dd3c7c926241bef932f | 0x02911d0e46f521bc791524d6aa9d858db2d82688a7ffdecde3caac0ff8f53a38 | none | 215 | 216 | 0x0db22dbadd706ad2135bf5e4829852fd3f98402c6ab74508bf1bf23ccf5d68f9 | 12883325 | 0x1f691464f3df6c97da0b4f0a259674cb9aa7ec55b9f4d944a101f5b9a15ff2c0 |