The subgraph for the OpenAttestation Token Registry contracts.
This subgraph allows anyone to easily query the network for information about the records from and create opportunities for applications to build on top of your Token Registry contracts.
Configure your Token Registry contract addresses in the config.json
file.
{
"network": "mumbai",
"dataSources": [
{
"address": "0xabc",
"startBlock": 12345678
},
...
]
}
- The
network
field can be any one of the many network names supported by the Graph protocol, for eg,mainnet
for Ethereum mainnet,goerli
for Ethereum Goerli,matic
for Polygon,mumbai
for Polygon Mumbai, etc. - The
address
is the address of your Token Registry contract andstartBlock
is the start block of your contract. - You can index multiple Token Registry contracts by adding to the
dataSources
array
Next, install and generate the subgraph:
# Install all dependencies
npm install
# Generate the subgraph
npm run codegen
# You can also build the subgraph:
npm run build
After the installation, the subgraph.yaml
file should be automatically generated for you based on your configurations
in config.json
. If you have changes in config.json
, you will need to run the prepare
script to re-generate it:
npm run prepare
The deployment can be done either to the Graph Studio or Hosted Service depending on the network.
Authenticate with your Graph deployment key:
graph auth
Then deploy the subgraph:
npm run deploy:studio
This deploys the subgraph under the name token-registry-subgraph
. You can change the name in the package.json
file.
Authenticate with your Graph deployment key:
graph auth --product hosted-service
Then deploy the subgraph:
graph deploy --product hosted-service GITHUB_USERNAME/token-registry-subgraph
Alternatively, you can edit the Github username and subgraph name in package.json
and run npm run deploy:hosted
to
deploy the subgraph to the hosted service.
There are many interesting queries that can be made. Here are some example queries:
- What are all the document IDs and their surrender statuses in my Token Registries?
{ tokenRegistries { tokens { documentId surrendered } } }
- What are all the documents that the user
0xbabe
is currently a beneficiary?{ accounts(where: { id: "0xbabe" }) { id titleEscrowsAsBeneficiary { token { documentId } } } }
- What about listing snapshots of a document at the time of all actions (issuance, surrender, etc)?
{ tokens( where: { documentId: "0x0ddba11" } ) { tokenSnapshots (orderBy: timestamp) { timestamp action beneficiary { id } holder { id } nominee { id } surrendered accepted } } }
- Can I have the complete token transfers (including holder transfers) and approval histories of the document ID
0x0ddba11
? I want to know the beneficiaries and holders that were transferred to and from.💡 This query is useful (and also a much easier and elegant way) for building the endorsement chain of a document or just trying to retrieve the ownership details of any documents.
{ tokens( where: { documentId: "0x0ddba11" } ) { beneficiaryTransfers(orderBy: timestamp) { timestamp from { id } to { id } } holderTransfers(orderBy: timestamp) { timestamp from { id } to { id } } nominations(orderBy: timestamp) { timestamp nominee { id } } } }