Request for information about disputes #GDR-1

The arbitrators are contacting indexer address 0x5a8904be09625965d9aec4bffd30d853438a053e (p2p-org.eth) about disputes filed in the protocol.

To make the investigation as brief as possible, please provide the following information and any other relevant records about the open disputes:

  • Version of graph-node used.
  • Graph-node configuration in full.
  • Type and version of Ethereum node.
  • Table of PoIs generated by the affected subgraphs.
  • A dump of the call cache data from the database for the affected subgraphs.
  • Entity values as of the divergent block once identified.

This is not an all-inclusive list. Request for additional information may be made if considered necessary.

How to Get Relevant Data

You can use the following queries to extract information from the indexer software to be used in the evaluation.

# Get subgraphs schema
SELECT name FROM public.deployment_schemas where subgraph = 'QmTj6fHgHjuKKm43YL3Sm2hMvMci4AkFzx22Mdo9W3dyn8';

# Move to the subgraphs schema
SET SEARCH_PATH TO <RESULT_FROM_ABOVE>;

# Dump PoI TABLE - (from outside of psql console but on server)
pg_dump --dbname="<YOUR_DB_NAME" --host=<DB_HOST> --port=5432 --username=<USERNAME>  --table='<SUBGRAPH_SCHEMA>."poi2$"' --file='<FILE_TO_SAVE_TO>'

# Dump call cache (on some setups this table may be in a different schema, check it with `select * from public.chains`)
pg_dump --dbname="<YOUR_DB_NAME" --host=<DB_HOST> --port=5432 --username=<USERNAME>  --table='public.eth_call_cache"' --file='<FILE_TO_SAVE_TO>'

Once a divergent block is identified:

# loop through all entity tables and get changes for that block
# for each entity table in subgraph deployment schema:
select * from <entity_table> where lower(<DIVERGENT_BLOCK>);

Purpose of the Requirement

This requirement is related to the following disputes:

├─ 0xfe748e4320d3346a18738b775520aa6a7f0f1d2b31af2c1da6cc56d1a2c98e48
│  ├─ Type: Indexing
│  ├─ SubgraphDeployment
│  │  └─ id: 0x500a8e47cbdeca7386448ae9e7d52578871b9942ebbef4892469da293bb661f9 (QmTj6fHgHjuKKm43YL3Sm2hMvMci4AkFzx22Mdo9W3dyn8)
│  ├─ Allocation
│  │  ├─ id: 0x2a34c9fbd175361f7e0a197f0f1cf0b436531f08
│  │  ├─ epochs: 133 -> 134
│  │  ├─ createdAtBlock: 0xc711c73a8ddfbc270a8c2b586c251853a0b85cff490cee41edd88d3fe8ca76e2
│  │  └─ closedAtBlock: 0x997b7cbed6f66ef74e5cef48bdd0c40d949959b6dea0336068cb8807176337cf (#12337460)
│  └─ POI
│     └─ submitted: 0x180c7d8769f274d9b5e311d63f0c3174c17d843c1cf6fe2f9edd69ae599619d4
├─ 0xa3770bc7eb1097f6b7a806ee22b7221f7664da3195befa2a0d21b2fc57745795
│  ├─ Type: Indexing
│  ├─ SubgraphDeployment
│  │  └─ id: 0x500a8e47cbdeca7386448ae9e7d52578871b9942ebbef4892469da293bb661f9 (QmTj6fHgHjuKKm43YL3Sm2hMvMci4AkFzx22Mdo9W3dyn8)
│  ├─ Allocation
│  │  ├─ id: 0x4b0ccf7e8e45549588d31b325de24a767fd9df28
│  │  ├─ epochs: 133 -> 134
│  │  ├─ createdAtBlock: 0xec9a03686bdfba2c97a66d4bac58e46d4b483d91f3fe44d51a1df31424f44b70
│  │  └─ closedAtBlock: 0xd93c0085badcf3dcbd1f80dab11528aee6b541465118d7c3a3286e8d16d74c11 (#12337465)
│  └─ POI
│     └─ submitted: 0x180c7d8769f274d9b5e311d63f0c3174c17d843c1cf6fe2f9edd69ae599619d4
├─ 0x6f6b765d937dbb774bbfce23309cd41658be4d39dea336c2729374eb3dd9d2b7
│  ├─ Type: Indexing
│  ├─ SubgraphDeployment
│  │  └─ id: 0x500a8e47cbdeca7386448ae9e7d52578871b9942ebbef4892469da293bb661f9 (QmTj6fHgHjuKKm43YL3Sm2hMvMci4AkFzx22Mdo9W3dyn8)
│  ├─ Allocation
│  │  ├─ id: 0x3b1361093cb7b4a98c05a6455e2c76fd5099acee
│  │  ├─ epochs: 134 -> 135
│  │  ├─ createdAtBlock: 0x8ecd3777e9b6515edc91df5db32adaa3eb971495ddc706650847d745b6df40e7
│  │  └─ closedAtBlock: 0x8f59b1da5aee48ed8cc08e727d9b44b5262db4825c075ba7615bfa36b8d261a7 (#12344118)
│  └─ POI
│     └─ submitted: 0x4dd1490991f7ffad896b7137de71b26347103bef3538bdda6cf5c49fef0bdc48
├─ 0x08e959b7cf82f4935a5063721d7b7a01a0b33ebf0c8056b4d7ce4d126e7049a3
│  ├─ Type: Indexing
│  ├─ SubgraphDeployment
│  │  └─ id: 0x500a8e47cbdeca7386448ae9e7d52578871b9942ebbef4892469da293bb661f9 (QmTj6fHgHjuKKm43YL3Sm2hMvMci4AkFzx22Mdo9W3dyn8)
│  ├─ Allocation
│  │  ├─ id: 0x3a8dace06b3db1f870ffa9c2d0f50e4f7945abf6
│  │  ├─ epochs: 135 -> 136
│  │  ├─ createdAtBlock: 0x964ecc7c754e9fefdb247c454d9e4442f9dd4f4012e504b2524af6a03135ee35
│  │  └─ closedAtBlock: 0xd35a922f46b36c226406eabe403e98f3d57407f2ac8f76a364d6f7ae5c7f1424 (#12353663)
│  └─ POI
│     └─ submitted: 0xb243b2356921faf3b59a4f22a3836157b98d224ed21afcb7261c1a435d95bcf2
├─ 0xeb77920c7a47d56106b11c2ea979116cfa956573578c82feff36a1ca807faa96
│  ├─ Type: Indexing
│  ├─ SubgraphDeployment
│  │  └─ id: 0x500a8e47cbdeca7386448ae9e7d52578871b9942ebbef4892469da293bb661f9 (QmTj6fHgHjuKKm43YL3Sm2hMvMci4AkFzx22Mdo9W3dyn8)
│  ├─ Allocation
│  │  ├─ id: 0xdc56c66b653aa668dd068ea438c9c7f6a3340852
│  │  ├─ epochs: 136 -> 137
│  │  ├─ createdAtBlock: 0x58d5b865c1cc5fb5bb91b6bbd7963e2a670518d74d50d3e8cab625d7b896f89c
│  │  └─ closedAtBlock: 0x284b6684b9e9ddcca878901d4204b991786008629dd54298c5ba8728f45e5698 (#12359930)
│  └─ POI
│     └─ submitted: 0x1885641b7ea26ff166ec6ac869be9c9efa49b1e596b956b1d82b678e44b363c8
├─ 0xa8b6762193318dcd253cbe6426cf335a0b194c8b63e07cf5fd2911a63ab9d50f
│  ├─ Type: Indexing
│  ├─ SubgraphDeployment
│  │  └─ id: 0x500a8e47cbdeca7386448ae9e7d52578871b9942ebbef4892469da293bb661f9 (QmTj6fHgHjuKKm43YL3Sm2hMvMci4AkFzx22Mdo9W3dyn8)
│  ├─ Allocation
│  │  ├─ id: 0x7ac5df68ed7f0980c91bceac750a7bb94f9cf89b
│  │  ├─ epochs: 137 -> 138
│  │  ├─ createdAtBlock: 0x1234b0cca6c9f35c407f180348d5898ee275eef08cd997519ee73f9c38adf66a
│  │  └─ closedAtBlock: 0x8402e7aa5accb0f4e85ce3f15232502b0c2a6e26570a7c8bf979b8e9969e42c9 (#12366454)
│  └─ POI
│     └─ submitted: 0x8fedabdaf98d0e980b5eec38e4db213d15ac3bf4d9791e6fa4d00e439acac3ee
├─ 0xf8ccaf6e7a1e9766ea5d77c24a4b17c84863e97f08f359f14bacdb1159a78736
   ├─ Type: Indexing
   ├─ SubgraphDeployment
   │  └─ id: 0x500a8e47cbdeca7386448ae9e7d52578871b9942ebbef4892469da293bb661f9 (QmTj6fHgHjuKKm43YL3Sm2hMvMci4AkFzx22Mdo9W3dyn8)
   ├─ Allocation
   │  ├─ id: 0xd3c9dc4a25e33e3c88355d47d1409e15c10e82fa
   │  ├─ epochs: 138 -> 139
   │  ├─ createdAtBlock: 0x91de0f8cf459f0f417dabac4bc197daa125212d04194f986df6d83b92f0aa443
   │  └─ closedAtBlock: 0xc2837e51a1970f135b1eb47f981a8dfedaf200e74cc0945607e30bf043d908d8 (#12372965)
   └─ POI
      └─ submitted: 0x478b9298466435e5daf878ea12166d8b0012a97746c395ca0943837b954abcb8

About the Procedure

The Arbitration Charter regulates the arbitration process. You can find it in Radicle project ID rad:git:hnrkrhnth6afcc6mnmtokbp4h9575fgrhzbay

For communications, please use this forum. Additionally, please monitor Graph Protocol’s Discord #indexer-software (https://discord.gg/9gg7XvfggW) for any arbitrator reaching out for more information.

2 Likes

Hello, @ariel we will prepare all info and post it here soon.
But, yes, this disputes for
0x5a8904be09625965d9aec4bffd30d853438a053e

Thank you, I mixed the addresses, I edited the original post.

1 Like

Technical information
1. Version of graph-node used:
graphprotocol/graph-node:v0.22.0

2. Graph-node configuration in full:

 index_node_1:
   image: graphprotocol/graph-node:v0.22.0
   command: graph-node --metrics-port=8040
   restart: always
   environment:
     BLOCK_INGESTOR: 'indexer1'
     ETHEREUM_RPC: 'mainnet:'
     GRAPH_ETH_CALL_BY_NUMBER: 'true'
     GRAPH_KILL_IF_UNRESPONSIVE: 'true'
     GRAPH_NODE_ID: 'index_node_1'
     IPFS: 'https://ipfs.network.thegraph.com'
     NODE_ROLE: 'index-node'
     POSTGRES_URL:''
     GRAPH_ALLOW_NON_DETERMINISTIC_FULLTEXT_SEARCH: "true"

3. Type and version of Ethereum node:
openethreum 3.2.3 Parity (we used QuickNode provider that time)

4. Table of PoIs generated by the affected subgraphs:

5. A dump of the call cache data from the database for the affected subgraphs:

6. Entity values as of the divergent block once identified:

graph=# select * from eth_call_cache where contract_address = decode('D17A9bc90c582249e211a4f4b16721e7f65156c8','hex') and block_number = 11273929;
graph=# \x on;
Expanded display is on.
graph=# select * from eth_call_cache where contract_address = decode('D17A9bc90c582249e211a4f4b16721e7f65156c8','hex') and block_number = 11273929;
-[ RECORD 1 ]----+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
id               | \x35ad8633ee1a4fab086e471df15b570b6c43a8b09a24da7178793654e00a4b6a
return_value     | \x000000000000000000000000000000000000000000002a5a058fc295ed000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000002a5a058fc295ed000000000000000000000000000000000000000000000000084595161401484a000000
contract_address | \xd17a9bc90c582249e211a4f4b16721e7f65156c8
block_number     | 11273929

Select * for problem block:

We made this query:

graph=# \dt sgd7.*
List of relations
Schema | Name | Type | Owner
--------±------------------------------------±------±------
sgd7 | audius_network | table | root
sgd7 | claim_event | table | root
sgd7 | claim_processed_event | table | root
sgd7 | claim_round | table | root
sgd7 | decrease_stake_event | table | root
sgd7 | delegate | table | root
sgd7 | deregistered_service_provider_event | table | root
sgd7 | guardian_transaction_executed_event | table | root
sgd7 | increase_delegated_stake_event | table | root
sgd7 | increased_stake_event | table | root
sgd7 | poi2$ | table | root
sgd7 | proposal | table | root
sgd7 | proposal_outcome_evaluated_event | table | root
sgd7 | proposal_submitted_event | table | root
sgd7 | proposal_transaction_executed_event | table | root
sgd7 | proposal_vetoed_event | table | root
sgd7 | proposal_vote_submitted_event | table | root
sgd7 | proposal_vote_updated_event | table | root
sgd7 | registered_service_provider_event | table | root
sgd7 | remove_delegator_event | table | root
sgd7 | service_node | table | root
sgd7 | service_type | table | root
sgd7 | service_type_version | table | root
sgd7 | slash_event | table | root
sgd7 | undelegate_stake_event | table | root
sgd7 | update_deployer_cut_event | table | root
sgd7 | user | table | root
sgd7 | vote | table | root
for i in audius_network claim_event claim_processed_event claim_round decrease_stake_event delegate deregistered_service_provider_event guardian_transaction_executed_event increase_delegated_stake_event increased_stake_event proposal proposal_outcome_evaluated_event proposal_submitted_event proposal_transaction_executed_event proposal_vetoed_event proposal_vote_submitted_event proposal_vote_updated_event registered_service_provider_event remove_delegator_event service_node service_type service_type_version slash_event undelegate_stake_event update_deployer_cut_event user vote; do psql -c “select * from sgd7.$i where lower(block_range) = 11273929;” graph >> all_tables_events; done;

And got results:

id | audius_token_address | claims_manager_address | delegate_manager_address | governance_address | registry | service_provider_factory_address | service_type_manager_address | staking_address | registry_address | total_supply | total_audio_minted | total_audio_burned | total_tokens_staked | total_tokens_claimable | total_tokens_locked | total_tokens_delegated | max_delegators | min_delegation_amount | undelegate_lockup_duration | remove_delegator_lockup_duration | remove_delegator_eval_duration | decrease_stake_lockup_duration | update_deployer_cut_lockup_duration | funding_round_block_diff | funding_amount | recurring_community_funding_amount | community_pool_address | voting_quorum_percent | voting_period | execution_delay | max_in_progress_proposals | guardian_address | request_count | total_staked | vid | block_range
----±---------------------±-----------------------±-------------------------±-------------------±---------±---------------------------------±-----------------------------±----------------±-----------------±-------------±-------------------±-------------------±--------------------±-----------------------±--------------------±-----------------------±---------------±----------------------±---------------------------±---------------------------------±-------------------------------±-------------------------------±------------------------------------±-------------------------±---------------±-----------------------------------±-----------------------±----------------------±--------------±----------------±--------------------------±-----------------±--------------±-------------±----±------------
(0 rows)
id | claimer | rewards | new_total | block_number | vid | block_range
----±--------±--------±----------±-------------±----±------------
(0 rows)
id | rewards | claimer | old_total | new_total | block_number | vid | block_range
----±--------±--------±----------±----------±-------------±----±------------
(0 rows)
id | fund_amount | block_number | vid | block_range
----±------------±-------------±----±------------
(0 rows)
id | status | owner | expiry_block | created_block_number | ended_block_number | decrease_amount | new_stake_amount | vid | block_range
----±-------±------±-------------±---------------------±-------------------±----------------±-----------------±----±------------
(0 rows)
id | claimable_amount | amount | from_user | to_user | vid | block_range
----±-----------------±-------±----------±--------±----±------------
(0 rows)
id | type | sp_id | node | owner | endpoint | unstake_amount | block_number | vid | block_range
-----------------±-------------±------±----------------±-------------------------------------------±-------------------------------±-------------------------±-------------±----±------------
creator-node::4 | creator-node | 4 | creator-node::4 | 0xccd0855b67f89ed9058e3bf2926d5380182bbbfc | https://content-node.audius.co | 200000000000000000000000 | 11273929 | 4 | [11273929,)
(1 row)
id | target_contract_address | call_value | function_signature | call_data | return_data | block_number | vid | block_range
----±------------------------±-----------±-------------------±----------±------------±-------------±----±------------
(0 rows)
id | delegator | service_provider | increase_amount | block_number | vid | block_range
----±----------±-----------------±----------------±-------------±----±------------
(0 rows)
id | owner | new_stake_amount | increase_amount | block_number | vid | block_range
----±------±-----------------±----------------±-------------±----±------------
(0 rows)
id | name | description | proposer | submission_block_number | target_contract_registry_key | target_contract_address | call_value | function_signature | call_data | outcome | vote_magnitude_yes | vote_magnitude_no | num_votes | vid | block_range
----±-----±------------±---------±------------------------±-----------------------------±------------------------±-----------±-------------------±----------±--------±-------------------±------------------±----------±----±------------
(0 rows)
id | proposal | outcome | vote_magnitude_yes | vote_magnitude_no | num_votes | block_number | vid | block_range
----±---------±--------±-------------------±------------------±----------±-------------±----±------------
(0 rows)
id | proposal | proposer | name | description | vid | block_range
----±---------±---------±-----±------------±----±------------
(0 rows)
id | proposal | success | return_data | block_number | vid | block_range
----±---------±--------±------------±-------------±----±------------
(0 rows)
id | proposal | block_number | vid | block_range
----±---------±-------------±----±------------
(0 rows)
id | proposal | voter | vote | current_vote | voter_stake | block_number | vid | block_range
----±---------±------±-----±-------------±------------±-------------±----±------------
(0 rows)
id | proposal | voter | vote | voter_stake | current_vote | previous_vote | block_number | vid | block_range
----±---------±------±-----±------------±-------------±--------------±-------------±----±------------
(0 rows)
id | type | sp_id | node | owner | endpoint | stake_amount | block_number | vid | block_range
----±-----±------±-----±------±---------±-------------±-------------±----±------------
(0 rows)
id | status | owner | expiry_block | created_block_number | ended_block_number | delegator | vid | block_range
----±-------±------±-------------±---------------------±-------------------±----------±----±------------
(0 rows)
id | sp_id | owner | type | endpoint | delegate_owner_wallet | created_at | is_registered | vid | block_range
-----------------±------±-------------------------------------------±-------------±-------------------------------±-------------------------------------------±-----------±--------------±----±------------
creator-node::4 | 4 | 0xccd0855b67f89ed9058e3bf2926d5380182bbbfc | creator-node | https://content-node.audius.co | \xc892c75fa17e8b641a4843d0aa620792857d217a | 1604105379 | f | 15 | [11273929,)
(1 row)
id | is_valid | min_stake | max_stake | vid | block_range
----±---------±----------±----------±----±------------
(0 rows)
id | service_type | service_version | block_number | vid | block_range
----±-------------±----------------±-------------±----±------------
(0 rows)
id | target | amount | new_total | block_number | vid | block_range
----±-------±-------±----------±-------------±----±------------
(0 rows)
id | status | owner | expiry_block | created_block_number | ended_block_number | service_provider | amount | vid | block_range
----±-------±------±-------------±---------------------±-------------------±-----------------±-------±----±------------
(0 rows)
id | status | owner | expiry_block | created_block_number | ended_block_number | updated_cut | vid | block_range
----±-------±------±-------------±---------------------±-------------------±------------±----±------------
(0 rows)
id | balance | total_claimable_amount | claimable_stake_amount | claimable_delegation_received_amount | claimable_delegation_sent_amount | stake_amount | delegation_received_amount | delegation_sent_amount | has_stake_or_delegation | valid_bounds | deployer_cut | min_account_stake | max_account_stake | pending_decrease_stake | pending_remove_delegator | pending_update_deployer_cut | pending_undelegate_stake | created_at | vid | block_range
--------------------------------------------±-------------------------±-------------------------±-------------------------±-------------------------------------±---------------------------------±-------------------------±---------------------------±-----------------------±------------------------±-------------±-------------±-------------------------±---------------------------±-----------------------±-------------------------±----------------------------±-------------------------±-----------±------±--------------------
0xccd0855b67f89ed9058e3bf2926d5380182bbbfc | 200000000000000000000000 | 200000000000000000000000 | 200000000000000000000000 | 0 | 0 | 200000000000000000000000 | 0 | 0 | t | t | 100 | 200000000000000000000000 | 10000000000000000000000000 | | | | | 1604017727 | 40665 | [11273929,11273945)
(1 row)
id | proposal | vote | magnitude | voter | created_block_number | updated_block_number | vid | block_range
----±---------±-----±----------±------±---------------------±---------------------±----±------------
(0 rows)

Summary of the situation
We found that we have 7 disputes regarding Indexing QmTj6fHgHjuKKm43YL3Sm2hMvMci4AkFzx22Mdo9W3dyn8 (Audius).
As you may know, we are one of few Indexers who close allocation every day, that’s why we got 7 disputes, 1 by each epoch with this new subgraph.

Our investigation showed us that it’s our backup ETH data provider is at fault.
Before all these disputes we had a problem with our Archive node with tracing and activated backup QuickNode node subscription while we resync our Archive node.

There were no apparent problems with Indexing to this subgraph and we thought that everything was working fine. Unfortunately, we didn’t compare our POI with other Indexers, nor we had dispute alerting yet. So, we tried to solve a problem with another subgraph (Livepeer) where were errors, we wrote about it in Discord. We tried almost everything for Livepeer on our side and when we found these disputes about Audius we decided to switch QuickNode as the last option to another provider - Alchemy because sync for our Node with tracing was still in progress. That helped, errors for Livepeer have gone, and POI’s for Audius also fixed.
Now we prepared a script for comparing POI’s: GitHub - p2p-org/graphprotocol-poi-checker: Python script to check POI across multi indexers for defined subgraph
And check POI’s before everyday closing, everything still looks good, which confirms that problem was related to QuickNode.

Thanks for providing extensive data around the syncing of the QmTj6fHgHjuKKm43YL3Sm2hMvMci4AkFzx22Mdo9W3dyn8 subgraph @KonstantinRM! Your continued cooperation has been helpful in the arbitration investigation.

I’ve compared the proof of indexing (PoI), entity state, and Ethereum call cache data you shared with corresponding data from several reference indexers to identify the root cause of the PoI divergence. I’ll briefly summarize my findings here and link to data and analysis for anyone who wants to get into more nitty gritty details.

What happened?

  • PoI divergence began at block number 11273929.

  • Upon analyzing the events emitted in that block and the subgraph mappings for QmTj6fHgHjuKKm43YL3Sm2hMvMci4AkFzx22Mdo9W3dyn8 I identified the handleDeregisteredServiceProvider mapping as the triggered mapping and the serviceProviderContract.getServiceProviderDetails(event.params._owner) call as the only data fetched by that mapping (making it a likely cause of Entity divergence).

  • I compared Ethereum call cache data and entity changes from the divergent block (#11273929) to confirm my hunch that the divergence was caused by a discrepancy in serviceProviderContract.getServiceProviderDetails(event.params._owner) results. Both the entity state and Ethereum contract call cache values differed between the disputed indexer and reference indexers in such a way to suggest the Ethereum call differences were the primary driver of the entity differences.

  • I believe the cause of divergence is the following difference in Ethereum contract call results:

    Function: 
        getServiceProviderDetails(_owner: address)
    
    Disputed indexer's results:
        deployerStake: 2.0E+23
        deployerCut: 100 
        validBounds: True 
        numberOfEndpoints: 1
        minAccountStake: 2.0E+23
        maxAccountStake: 1.0E+25
    	
    Reference indexers' results:
        deployerStake: 2.0E+23
        deployerCut: 100
        validBounds: True 
        numberOfEndpoints: 0
        minAccountStake: 0
        maxAccountStake: 0
    
    • I have not been able to reproduce the disputed indexer’s results of the Ethereum contract call in question.

Ongoing investigation

  • Why did the Ethereum call results differ between the disputed indexer and the reference indexers? I haven’t been able to reproduce the disputed indexers contract call results to confirm the reason for the difference.
    • While setting GRAPH_ETH_CALL_BY_NUMBER to true does introduce potential non-determinism in contract call results, the effect
      is contained to blocks susceptible to a reorg (within a reasonable range of the chain head block). In this case the contract
      call was made as of an old block, so this configuration value likely did not have any effect in this situation.
    • One theory is that the Ethereum node executed the contract as of a different block number (not #11273929) . To test this hypothesis I looped over a huge range of block numbers making the call for each in an unsuccessful attempt to reproduce the output results.
    • Could the Ethereum node have had issues that lead to an invalid contract storage state? I have tried the call in question against the Ethereum provider, but was unable to reproduce the results.
    • Could the graph node have sent different Ethereum contract call requests? Call cache IDs are deterministically generated using contract_address, encoded_call_data, and block_hash; since they match between the references and disputed we can reasonably assume that the Ethereum requests sent were the same. Logging from the affected graph node is not available to confirm the exact contract call request body.

Links

https://www.notion.so/edgeandnode/Dispute-Investigation-1-indexer-0x5a8904be09625965d9aec4bffd30d853438a053e-b8f0cf92ecc54814b58a66b82299935d

4 Likes

The Arbitrator decided to draw the disputes against P2P presented in this forum post. The POI submitted by the indexer differs due to confirmed determinism issues that are under investigation as explained by the report posted by @Ford. A more detailed post-mortem about the diverge will be presented by the team as well as lines of research and mitigation.

4 Likes

Dispute resolution transactions for the record:

https://etherscan.io/tx/0x06e38b76dccdeda22b67cb7f6453d01d94377ad8079fa858ae6f152092e8ee99
https://etherscan.io/tx/0x46e839fdc66d405d4989bb69a50fc5e5520447509bc8dea35d8805f98b597160
https://etherscan.io/tx/0xade0605c378cd35c423eb00d503aa5e5f9b06937b681389ac42506eecc3b7ebd
https://etherscan.io/tx/0x3405d092e02ecd6ade6a43f3ee38842b1e1c96c4a378682ae22fd3aa78a84790
https://etherscan.io/tx/0xf483c8d1aeea3c96758b7ac99373d6f162643f7bfd8634e21212d604f96477cb
1 Like