CryptoPunks
CryptoPunks copied to clipboard
Subgraph for the Cryptopunks marketplace
CryptoPunks
The CryptoPunks are 10,000 uniquely generated characters. No two are exactly alike, and each one of them can be officially owned by a single person on the Ethereum blockchain.

Subgraph Url
https://thegraph.com/explorer/subgraphs/2hTKKMwLsdfJm9N7gUeajkgg8sdJwky56Zpkvg8ZcyP8?view=Overview&chain=arbitrum-one
GraphQL Endpoint
You first need to create an API-KEY. See: https://youtu.be/UrfIpm-Vlgs
https://gateway-arbitrum.network.thegraph.com/api/[api-key]/subgraphs/id/2hTKKMwLsdfJm9N7gUeajkgg8sdJwky56Zpkvg8ZcyP8
Queries
A list of example queries you can make can be found here: Queries.md
Links
- Protocol: https://cryptopunks.app/
- Contract addresses:
- Cryptopunks:
0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB - CryptopunksData:
0x16F5A35647D6F03D5D3da7b35409D65ba03aF3B2 - WrappedPunks:
0xb7F7F6C52F2e2fdb1963Eab30438024864c313F6 - Opensea:
0x7be8076f4ea4a4ad08075c2508e481d6c946d12b - RaribleExchangeV1:
0xcd4ec7b66fbc029c116ba9ffb3e59351c20b5b06 - ERC721Sale:
0x131aebbfe55bca0c9eaad4ea24d386c5c082dd58
- Cryptopunks:
EPNS Notifications
Subscribe to get realtime event notifications from the subgraph.
https://staging.push.org/#/channels
Search for Cryptopunks Marketplace and opt-in.
Run your local Graph Node
ETHEREUM_RPC=mainnet:https://eth-mainnet.alchemyapi.io/v2/${YOUR_API_KEY}
Run the command: docker compose up
Logic for Transfers/Wraps
- Regular PunkTransfer
- In handlePunkTransfer:
- decrement from
- increment to
- set owner
- create Transfer event
- In handlePunkTransfer:
- Mint/Wrap
- In handlePunkTransfer (to = WrappedPunkAddress):
- decrement from
- In handleWrappedPunkTransfer (from = ZeroAddress):
- increment to
- set owner
- create Wrap event
- In handlePunkTransfer (to = WrappedPunkAddress):
- Burn/Unwrap
- In handlePunkTransfer (from = WrappedPunkAddress):
- increment to
- set owner
- In handleWrappedPunkTransfer (to = ZeroAddress):
- decrement from
- create Unwrap event
- In handlePunkTransfer (from = WrappedPunkAddress):
- Wrapped Transfer
- In handleWrappedPunkTransfer:
- decrement from
- increment to
- set owner
- create Transfer event
- In handleWrappedPunkTransfer:
Build
- Initialize subgraph (Subgraph Studio):
graph init --product subgraph-studio --from-contract <CONTRACT_ADDRESS> [--network <ETHEREUM_NETWORK>] [--abi <FILE>] <SUBGRAPH_SLUG> [<DIRECTORY>] - Initialize subgraph (Hosted Service):
graph init --product hosted-service --from-contract <CONTRACT_ADDRESS> <GITHUB_USER>/<SUBGRAPH_NAME>[<DIRECTORY>] - Generate code from manifest and schema:
graph codegen - Build subgraph:
graph build
Deploy
- Authenticate (just once):
graph auth --product hosted-service <ACCESS_TOKEN> - Deploy to Subgraph Studio:
graph deploy --studio <SUBGRAPH_NAME> - Deploy to Hosted Service:
graph deploy --product hosted-service <GITHUB_USER>/<SUBGRAPH_NAME>