From aae39cbe5e5141cd69b86b7c2519f7b13beddf7d Mon Sep 17 00:00:00 2001 From: Hadrien Croubois Date: Mon, 15 Jan 2024 15:45:28 +0100 Subject: [PATCH] Update dependency to 5.0.1, and add ERC4906 support --- generated/all.schema.graphql | 4 +-- generated/erc1967upgrade.subgraph.yaml | 2 +- generated/governor.schema.graphql | 4 +-- package-lock.json | 8 +++--- package.json | 2 +- src/datasources/erc1967upgrade.yaml | 2 +- src/datasources/erc721.ts | 39 ++++++++++++++++++++++++-- src/datasources/erc721.yaml | 8 +++++- src/datasources/governor.gql.json | 4 +-- src/datasources/governor.ts | 8 +++--- src/datasources/governor.yaml | 2 +- src/datasources/voting.ts | 8 +++--- src/datasources/voting.yaml | 2 +- src/fetch/governor.ts | 4 +-- 14 files changed, 68 insertions(+), 29 deletions(-) diff --git a/generated/all.schema.graphql b/generated/all.schema.graphql index 51d42ec..8e504fd 100644 --- a/generated/all.schema.graphql +++ b/generated/all.schema.graphql @@ -272,8 +272,8 @@ type Proposal @entity { governor: Governor! proposalId: BigInt! proposer: Account! - startBlock: BigInt! - endBlock: BigInt! + voteStart: BigInt! + voteEnd: BigInt! description: String! eta: BigInt canceled: Boolean! diff --git a/generated/erc1967upgrade.subgraph.yaml b/generated/erc1967upgrade.subgraph.yaml index 9c368b2..dea3a70 100644 --- a/generated/erc1967upgrade.subgraph.yaml +++ b/generated/erc1967upgrade.subgraph.yaml @@ -14,7 +14,7 @@ dataSources: - ERC1967 abis: - name: ERC1967 - file: ../node_modules/@openzeppelin/contracts/build/contracts/ERC1967Upgrade.json + file: ../node_modules/@openzeppelin/contracts/build/contracts/IERC1967.json eventHandlers: - event: AdminChanged(address,address) handler: handleAdminChanged diff --git a/generated/governor.schema.graphql b/generated/governor.schema.graphql index c52983b..e39c389 100644 --- a/generated/governor.schema.graphql +++ b/generated/governor.schema.graphql @@ -22,8 +22,8 @@ type Proposal @entity { governor: Governor! proposalId: BigInt! proposer: Account! - startBlock: BigInt! - endBlock: BigInt! + voteStart: BigInt! + voteEnd: BigInt! description: String! eta: BigInt canceled: Boolean! diff --git a/package-lock.json b/package-lock.json index d389c2a..69b52b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@amxx/graphprotocol-utils": "^1.1.0", - "@openzeppelin/contracts": "^4.8.1" + "@openzeppelin/contracts": "^5.0.1" }, "devDependencies": { "@graphprotocol/graph-cli": "^0.65.0", @@ -1169,9 +1169,9 @@ } }, "node_modules/@openzeppelin/contracts": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.8.1.tgz", - "integrity": "sha512-xQ6eUZl+RDyb/FiZe1h+U7qr/f4p/SrTSQcTPH2bjur3C5DbuW/zFgCU/b1P/xcIaEqJep+9ju4xDRi3rmChdQ==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.0.1.tgz", + "integrity": "sha512-yQJaT5HDp9hYOOp4jTYxMsR02gdFZFXhewX5HW9Jo4fsqSVqqyIO/xTHdWDaKX5a3pv1txmf076Lziz+sO7L1w==" }, "node_modules/@openzeppelin/docs-utils": { "version": "0.1.3", diff --git a/package.json b/package.json index f0a718a..22cda37 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ }, "dependencies": { "@amxx/graphprotocol-utils": "^1.1.0", - "@openzeppelin/contracts": "^4.8.1" + "@openzeppelin/contracts": "^5.0.1" }, "devDependencies": { "@graphprotocol/graph-cli": "^0.65.0", diff --git a/src/datasources/erc1967upgrade.yaml b/src/datasources/erc1967upgrade.yaml index 8b1f21c..0aa5da6 100644 --- a/src/datasources/erc1967upgrade.yaml +++ b/src/datasources/erc1967upgrade.yaml @@ -13,7 +13,7 @@ - ERC1967 abis: - name: ERC1967 - file: {root}/node_modules/@openzeppelin/contracts/build/contracts/ERC1967Upgrade.json + file: {root}/node_modules/@openzeppelin/contracts/build/contracts/IERC1967.json eventHandlers: - event: AdminChanged(address,address) handler: handleAdminChanged diff --git a/src/datasources/erc721.ts b/src/datasources/erc721.ts index c4659d7..bb39702 100644 --- a/src/datasources/erc721.ts +++ b/src/datasources/erc721.ts @@ -1,5 +1,6 @@ import { Address, + BigInt, } from '@graphprotocol/graph-ts' import { @@ -7,11 +8,17 @@ import { } from '../../generated/schema' import { - Approval as ApprovalEvent, - ApprovalForAll as ApprovalForAllEvent, - Transfer as TransferEvent, + IERC721, + Approval as ApprovalEvent, + ApprovalForAll as ApprovalForAllEvent, + Transfer as TransferEvent, } from '../../generated/erc721/IERC721' +import { + MetadataUpdate as MetadataUpdateEvent, + BatchMetadataUpdate as BatchMetadataUpdateEvent, +} from '../../generated/erc721/IERC4906' + import { events, transactions, @@ -99,3 +106,29 @@ export function handleApprovalForAll(event: ApprovalForAllEvent): void { // ev.save() } } + +export function handleMetadataUpdate(event: MetadataUpdateEvent) : void { + let contract = fetchERC721(event.address) + if (contract != null) { + let erc721 = IERC721.bind(Address.fromBytes(contract.id)) + + let token = fetchERC721Token(contract, event.params._tokenId) + let try_tokenURI = erc721.try_tokenURI(event.params._tokenId) + token.uri = try_tokenURI.reverted ? '' : try_tokenURI.value + token.save() + } +} + +export function handleBatchMetadataUpdate(event: BatchMetadataUpdateEvent) : void { + let contract = fetchERC721(event.address) + if (contract != null) { + let erc721 = IERC721.bind(Address.fromBytes(contract.id)) + + for (let tokenId = event.params._fromTokenId.toU64(); tokenId <= event.params._toTokenId.toU64(); ++tokenId) { + let token = fetchERC721Token(contract, BigInt.fromU64(tokenId)) + let try_tokenURI = erc721.try_tokenURI(BigInt.fromU64(tokenId)) + token.uri = try_tokenURI.reverted ? '' : try_tokenURI.value + token.save() + } + } +} diff --git a/src/datasources/erc721.yaml b/src/datasources/erc721.yaml index e337cbd..a80507a 100644 --- a/src/datasources/erc721.yaml +++ b/src/datasources/erc721.yaml @@ -3,7 +3,7 @@ network: {chain} source: address: "{address}" - abi: IERC721 + abi: IERC4906 startBlock: {startBlock} mapping: kind: ethereum/events @@ -14,6 +14,8 @@ abis: - name: IERC721 file: {root}/node_modules/@openzeppelin/contracts/build/contracts/IERC721Metadata.json + - name: IERC4906 + file: {root}/node_modules/@openzeppelin/contracts/build/contracts/IERC4906.json eventHandlers: - event: Approval(indexed address,indexed address,indexed uint256) handler: handleApproval @@ -21,4 +23,8 @@ handler: handleApprovalForAll - event: Transfer(indexed address,indexed address,indexed uint256) handler: handleTransfer + - event: MetadataUpdate(uint256) + handler: handleMetadataUpdate + - event: BatchMetadataUpdate(uint256,uint256) + handler: handleBatchMetadataUpdate file: {file} diff --git a/src/datasources/governor.gql.json b/src/datasources/governor.gql.json index 07333f5..c669c30 100644 --- a/src/datasources/governor.gql.json +++ b/src/datasources/governor.gql.json @@ -27,8 +27,8 @@ { "name": "governor", "type": "Governor!" }, { "name": "proposalId", "type": "BigInt!" }, { "name": "proposer", "type": "Account!" }, - { "name": "startBlock", "type": "BigInt!" }, - { "name": "endBlock", "type": "BigInt!" }, + { "name": "voteStart", "type": "BigInt!" }, + { "name": "voteEnd", "type": "BigInt!" }, { "name": "description", "type": "String!" }, { "name": "eta", "type": "BigInt" }, { "name": "canceled", "type": "Boolean!" }, diff --git a/src/datasources/governor.ts b/src/datasources/governor.ts index 627137f..1e4b9ad 100644 --- a/src/datasources/governor.ts +++ b/src/datasources/governor.ts @@ -43,8 +43,8 @@ export function handleProposalCreated(event: ProposalCreatedEvent): void { let proposal = fetchProposal(governor, event.params.proposalId) proposal.proposer = fetchAccount(event.params.proposer).id - proposal.startBlock = event.params.startBlock - proposal.endBlock = event.params.endBlock + proposal.voteStart = event.params.voteStart + proposal.voteEnd = event.params.voteEnd proposal.description = event.params.description proposal.save() @@ -76,7 +76,7 @@ export function handleProposalQueued(event: ProposalQueuedEvent): void { let proposal = fetchProposal(governor, event.params.proposalId) proposal.queued = true - proposal.eta = event.params.eta + proposal.eta = event.params.etaSeconds proposal.save() let ev = new ProposalQueued(events.id(event)) @@ -85,7 +85,7 @@ export function handleProposalQueued(event: ProposalQueuedEvent): void { ev.timestamp = event.block.timestamp ev.governor = governor.id ev.proposal = proposal.id - ev.eta = event.params.eta + ev.eta = event.params.etaSeconds ev.save() } diff --git a/src/datasources/governor.yaml b/src/datasources/governor.yaml index 7c8fe44..729290d 100644 --- a/src/datasources/governor.yaml +++ b/src/datasources/governor.yaml @@ -13,7 +13,7 @@ - Governor abis: - name: Governor - file: {root}/node_modules/@openzeppelin/contracts/build/contracts/IGovernorTimelock.json + file: {root}/node_modules/@openzeppelin/contracts/build/contracts/IGovernor.json eventHandlers: - event: ProposalCanceled(uint256) handler: handleProposalCanceled diff --git a/src/datasources/voting.ts b/src/datasources/voting.ts index e779243..ae19820 100644 --- a/src/datasources/voting.ts +++ b/src/datasources/voting.ts @@ -52,8 +52,8 @@ export function handleDelegateVotesChanged(event: DelegateVotesChangedEvent): vo const total = fetchWeight(contract, null) const weigth = fetchWeight(contract, delegate) - total.value = total.value.minus(event.params.previousBalance).plus(event.params.newBalance) - weigth.value = event.params.newBalance + total.value = total.value.minus(event.params.previousVotes).plus(event.params.newVotes) + weigth.value = event.params.newVotes total.save() weigth.save() @@ -65,7 +65,7 @@ export function handleDelegateVotesChanged(event: DelegateVotesChangedEvent): vo ev.voteWeight = weigth.id ev.contract = contract.id ev.delegate = delegate.id - ev.oldValue = event.params.previousBalance - ev.newValue = event.params.newBalance + ev.oldValue = event.params.previousVotes + ev.newValue = event.params.newVotes ev.save() } diff --git a/src/datasources/voting.yaml b/src/datasources/voting.yaml index 0b5c5fc..9b1cdb1 100644 --- a/src/datasources/voting.yaml +++ b/src/datasources/voting.yaml @@ -13,7 +13,7 @@ - Voting abis: - name: Voting - file: {root}/node_modules/@openzeppelin/contracts/build/contracts/IVotes.json + file: {root}/node_modules/@openzeppelin/contracts/build/contracts/IERC5805.json eventHandlers: - event: DelegateChanged(indexed address,indexed address,indexed address) handler: handleDelegateChanged diff --git a/src/fetch/governor.ts b/src/fetch/governor.ts index 2171211..4295e51 100644 --- a/src/fetch/governor.ts +++ b/src/fetch/governor.ts @@ -54,8 +54,8 @@ export function fetchProposal(contract: Governor, proposalId: BigInt): Proposal proposal.governor = contract.id proposal.proposalId = proposalId proposal.proposer = Address.zero() - proposal.startBlock = BigInt.zero() - proposal.endBlock = BigInt.zero() + proposal.voteStart = BigInt.zero() + proposal.voteEnd = BigInt.zero() proposal.description = "" proposal.canceled = false proposal.queued = false