Developers
Coinbase Verifications
Coinbase Verifications is a set of Coinbase-verified onchain attestations that enable access to apps and other onchain benefits. A verification serves as a link between a user's Coinbase account and wallet address, and proves a specific attribute about that account without revealing any private information. Verified Pools specifically utilize the Verified Account and Verified Country attestations to determine trade eligibility with our liquidity pools.
For developers who want to integrate with Coinbase Verifications, please see:
You can also reach out directly to the team in the Coinbase Verifications Discord.
Querying Attestations with the EAS Subgraph
As a developer integrating with Coinbase Verifications, you can use the Ethereum Attestation Service (EAS) subgraph to query for attested wallets. This allows you to programmatically determine which wallets have specific Coinbase Verifications, which can be useful for building applications that require verification checks.
EAS Subgraph Access
The EAS subgraph for Base is publicly available at:
https://base.easscan.org/graphql
You can use this GraphQL endpoint to query for attestations using standard GraphQL queries.
Mainnet Schema IDs
Coinbase Verifications uses the following schema IDs on Base:
Verification Type | Schema ID |
---|---|
Verified Account | 0xf8b05c79f090979bf4a80270aba232dff11a10d9ca55c4f88de95317970f0de9 |
Verified Business Account | 0xf82663c0eac879bed1e09e3d4598752359a321f51b38ae669728f480abf3f474 |
Verified Country | 0x1801901fabd0e6189356b4fb52bb0ab855276d84f7ec140839fbd1f6801ca065 |
Verified Business Country | 0xf87445e61219642b989807bc418e5d5fa8e3adb49e230891055a997121f6c80b |
Sample Queries
Below are queries that you can use to fetch attested wallets from the EAS subgraph. These queries include pagination to handle large result sets efficiently.
Query for Verified Account Attestations
This query fetches all active (non-revoked) Verified Account and Verified Business Account attestations:
query GetVerifiedAccountsByAttester($take: Int = 1000, $skip: Int = 0) {
attestations(
where: {
AND: [
{
OR: [
{
schemaId: {
equals: "0xf8b05c79f090979bf4a80270aba232dff11a10d9ca55c4f88de95317970f0de9"
}
}
{
schemaId: {
equals: "0xf82663c0eac879bed1e09e3d4598752359a321f51b38ae669728f480abf3f474"
}
}
]
}
{ revoked: { equals: false } }
{ attester: { equals: "0x357458739F90461b99789350868CD7CF330Dd7EE" } }
]
}
take: $take
skip: $skip
orderBy: [{ timeCreated: desc }, { id: asc }]
) {
recipient
schemaId
timeCreated
data
decodedDataJson
id
}
}
Variables (example):
{
"first": 1000,
"skip": 0
}
Command Line Example
You can execute this query directly from the command line using curl:
curl -X POST \
-H "Content-Type: application/json" \
--data '{"query": "query GetVerifiedAccountsByAttester($take: Int = 1000, $skip: Int = 0) { attestations(where: { AND: [{ OR: [{ schemaId: { equals: \"0xf8b05c79f090979bf4a80270aba232dff11a10d9ca55c4f88de95317970f0de9\" } }, { schemaId: { equals: \"0xf82663c0eac879bed1e09e3d4598752359a321f51b38ae669728f480abf3f474\" } }] }, { revoked: { equals: false } }, { attester: { equals: \"0x357458739F90461b99789350868CD7CF330Dd7EE\" } }] }, take: $take, skip: $skip, orderBy: [{ timeCreated: desc }, { id: asc }]) { recipient schemaId timeCreated data decodedDataJson id } }", "variables": {"take": 10, "skip": 0}}' \
https://base.easscan.org/graphql | jq
This example uses jq
for pretty-printing the JSON response. If you don't have jq
installed, you can omit the | jq
part.
Verified Account Data
For Verified Account attestations, the data field is a single boolean that is always true, so there is not a need to separately parse the data field for these attestations.
Query for Verified Country Attestations
This query fetches all active (non-revoked) Verified Country and Verified Business Country attestations:
query GetVerifiedCountriesByAttester($take: Int = 1000, $skip: Int = 0) {
attestations(
where: {
AND: [
{
OR: [
{
schemaId: {
equals: "0x1801901fabd0e6189356b4fb52bb0ab855276d84f7ec140839fbd1f6801ca065"
}
}
{
schemaId: {
equals: "0xf87445e61219642b989807bc418e5d5fa8e3adb49e230891055a997121f6c80b"
}
}
]
}
{ revoked: { equals: false } }
{ attester: { equals: "0x357458739F90461b99789350868CD7CF330Dd7EE" } }
]
}
take: $take
skip: $skip
orderBy: [{ timeCreated: desc }, { id: asc }]
) {
recipient
schemaId
timeCreated
data
decodedDataJson
id
}
}
Variables:
{
"first": 1000,
"skip": 0
}
Command Line Example
You can execute this query directly from the command line using curl:
curl -X POST \
-H "Content-Type: application/json" \
--data '{"query": "query GetVerifiedCountriesByAttester($take: Int = 1000, $skip: Int = 0) { attestations(where: { AND: [{ OR: [{ schemaId: { equals: \"0x1801901fabd0e6189356b4fb52bb0ab855276d84f7ec140839fbd1f6801ca065\" } }, { schemaId: { equals: \"0xf87445e61219642b989807bc418e5d5fa8e3adb49e230891055a997121f6c80b\" } }] }, { revoked: { equals: false } }, { attester: { equals: \"0x357458739F90461b99789350868CD7CF330Dd7EE\" } }] }, take: $take, skip: $skip, orderBy: [{ timeCreated: desc }, { id: asc }]) { recipient schemaId timeCreated data decodedDataJson id } }", "variables": {"take": 10, "skip": 0}}' \
https://base.easscan.org/graphql | jq
This example uses jq
for pretty-printing the JSON response. If you don't have jq
installed, you can omit the | jq
part.
Verified Country Data
For Verified Country attestations, the data
field contains the ISO country code in an encoded format. You'll need to decode this data according to the EAS schema to extract the actual country code.
Here's an example attestation from a snippet of a response containing a Verified Country attestation for the United States (US):
{
"recipient": "0x0067b83C180Ceb0253D96431AB6c017F7a1FFF96",
"schemaId": "0x1801901fabd0e6189356b4fb52bb0ab855276d84f7ec140839fbd1f6801ca065",
"timeCreated": 1741218973,
"data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000025553000000000000000000000000000000000000000000000000000000000000",
"decodedDataJson": "[{\"name\":\"verifiedCountry\",\"type\":\"string\",\"signature\":\"string verifiedCountry\",\"value\":{\"name\":\"verifiedCountry\",\"type\":\"string\",\"value\":\"US\"}}]",
"id": "0x2b6c4e0cf593d22adb6bd27aa37a222fd6ee50daf3851214424678d23eb3cc64"
},
Parsing the Country Code
Developers can easily extract the country code from the decodedDataJson
field. Here's a JavaScript example:
// Parse the decodedDataJson string into a JavaScript object
const decodedData = JSON.parse(attestation.decodedDataJson);
// Extract the country code
const countryCode = decodedData[0].value.value;
console.log(`Verified Country: ${countryCode}`); // Output: "Verified Country: US"
Alternatively, if you're working with the raw data
field, you can use the EAS SDK to decode it according to the schema definition.
For more information on working with EAS data formats, refer to the EAS documentation.
Using the Queries in Your Application
To use these queries in your application, you can implement them using any GraphQL client (like Apollo Client, urql, or even a simple fetch request). Increment the skip
parameter to page through results.
For production applications, consider implementing proper error handling, rate limiting, and caching strategies when querying the EAS subgraph.