Wear the badge
If your project is in the attested set, the badge is yours to use. Download the SVG, or copy it as markup that links to the garden.
Using it fairly
- The snippet links the CROPS guide. Point its
hrefat your project page on ETHBEAT instead, so a visitor can read the evaluation rather than only see that one exists. - The badge says we have reviewed you and named you onchain. It is not a certification, an audit, or an endorsement - please do not describe it as any of those.
- Your rating can change. Make sure to check the API for the latest status before showing the badge.
Endpoints
Static JSON files on https://crops.l2beat.com, regenerated on every change to the reviews.
- Every response is a static file generated from the ETHBEAT repository, so it is served from a CDN with no API key and no rate limit.
- Not found means not reviewed. The project and address files answer 404 with an empty body when we have not reviewed the project or the address - treat it as "not reviewed", not as an error.
- Address files are keyed by EIP-155 chain id and lowercase address. Lowercase the address before you build the URL.
Browse the interactive docs or read the OpenAPI spec.
/v1/address/{chainId}/{address}.jsonWhich protocol is this address?
The reviewed protocols a contract, proxy implementation or permission holder belongs to, with a rating per property. A shared contract lists every protocol that claims it, each once, with the name that protocol gives it.
chainId- EIP-155 chain id, e.g. 1 for Ethereum.
address- Lowercase 0x-prefixed address.
404- The address is not part of any reviewed protocol.
https:/ / crops.l2beat.com/ v1/ address/ 1/ 0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852.json{
"attestations": { … },
"generatedAt": 1793787234,
"commit": …,
"chainId": 1,
"address": "0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852",
"matches": [
{
"id": "uniswapv2",
"slug": "uniswapv2",
"name": "Uniswap V2",
"href": "https://ethbeat.org/defi/projects/uniswapv2",
"contractName": "UniswapV2Pair_WETH_USDT",
"crops": {
"censorshipResistance": {
"sentiment": "good",
"status": "reviewed"
},
"openSource": {
"sentiment": "good",
"status": "reviewed"
},
"privacy": {
"sentiment": "neutral",
"status": "fullyTransparent"
},
"security": {
"sentiment": "good",
"status": "reviewed"
}
},
"attestation": {
"uid": "0xcc6f0dbb88995141351b3fa017c1136be7cd5f6eb0b3f689fc2712084df3f271",
"revision": 1
}
}
]
}/v1/project/{id}.jsonEverything about one protocol
The CROPS evaluations of one protocol, with the reasoning behind each rating.
id- The project id or its slug.
404- ETHBEAT has not reviewed this project.
https:/ / crops.l2beat.com/ v1/ project/ uniswapv2.json{
"attestations": { … },
"generatedAt": 1793787234,
"commit": …,
"id": "uniswapv2",
"slug": "uniswapv2",
"name": "Uniswap V2",
"href": "https://ethbeat.org/defi/projects/uniswapv2",
"crops": {
"censorshipResistance": {
"sentiment": "good",
"status": "reviewed",
"points": [
"The core contracts are immutable and cannot be paused, so the exit window is infinite.",
…
],
"missing": [],
"additionalConsiderations": [],
"notReviewed": [
"The interfaces users reach the pairs through."
]
},
"openSource": {
"sentiment": "good",
"status": "reviewed",
"points": [
"The core, the periphery and the interface are published under the GPL.",
…
],
"missing": [],
"additionalConsiderations": [],
"notReviewed": [],
"license": {
"spdxId": "GPL-3.0",
"name": "GNU General Public License version 3",
"url": "https://opensource.org/license/gpl-3-0",
"categories": [
"popular-strong-community"
]
}
},
"privacy": {
"sentiment": "neutral",
"status": "fullyTransparent",
"points": [
"The protocol does not make privacy claims, and is fully transparent.",
…
],
"missing": [],
"additionalConsiderations": [],
"notReviewed": []
},
"security": {
"sentiment": "good",
"status": "reviewed",
"points": [
"Every contract that holds user funds is immutable, with no upgrade path.",
…
],
"missing": [],
"additionalConsiderations": [
"Per-pair token and liquidity risk stays with the user.",
…
],
"notReviewed": []
}
},
"inGarden": true,
"attestation": {
"uid": "0xcc6f0dbb88995141351b3fa017c1136be7cd5f6eb0b3f689fc2712084df3f271",
"revision": 1,
"reviewedAt": 1793145600,
"explorerUrl": "https://easscan.org/attestation/view/0xcc6f0dbb88995141351b3fa017c1136be7cd5f6eb0b3f689fc2712084df3f271"
}
}/v1/crops.jsonAll reviewed protocols
Every reviewed protocol in one response, with the full CROPS evaluations and the attestation that names them.
https:/ / crops.l2beat.com/ v1/ crops.json{
"attestations": {
"network": "ethereum",
"chainId": 1,
"eas": "0xA1207F3BBa224E2c9c3c6D5aF63D0eb1582Ce587",
"schemaUid": "0xbe00b10abb2fbae864b99c6ace4e0e622d5f690f822466e167353c32534dc3fb",
"schema": "string[] projectIds,uint64 reviewedAt,uint32 revision",
"attester": "0xa34C25578519beaa7A5F24e38BBa89A34594e4ee",
"current": {
"uid": "0xcc6f0dbb88995141351b3fa017c1136be7cd5f6eb0b3f689fc2712084df3f271",
"revision": 1,
"reviewedAt": 1793145600,
"projectIds": [
"safe",
…
],
"txHash": "0x29c8743362e7f0f48f1fe21eb2b62a3cb9dbdf212172af2de09ebe6c27c85697",
"explorerUrl": "https://easscan.org/attestation/view/0xcc6f0dbb88995141351b3fa017c1136be7cd5f6eb0b3f689fc2712084df3f271"
}
},
"generatedAt": 1793787234,
"commit": …,
"projects": [ … ]
}Verifying the set onchain
One attestation on Ethereum Attestation Service, on Ethereum, names every protocol we have reviewed. It proves the set we named, not the ratings: ratings change as protocols change and are served by the API without a transaction.
- Network
- ethereum (chain id 1)
- EAS contract
- 0xA1207F3BBa224E2c9c3c6D5aF63D0eb1582Ce587
- Schema uid
- 0xbe00b10abb2fbae864b99c6ace4e0e622d5f690f822466e167353c32534dc3fb
- Attester
- 0xa34C25578519beaa7A5F24e38BBa89A34594e4ee
- Attestation
- 0xcc6f0dbb88995141351b3fa017c1136be7cd5f6eb0b3f689fc2712084df3f271
- Covers
- revision 1 · 4 projects
string[] projectIds,uint64 reviewedAt,uint32 revision- 1.Read the attestation from the EAS contract with the uid in
attestations.current:getAttestation(uid). - 2.Check
attesterandschemaagainst the values above, so an attestation someone else made cannot be mistaken for ours. - 3.Check it is the current one. The newest wins: of our attestations under the schema that are not revoked, the one with the highest revision names the current set. A change is a new attestation that points to the one it supersedes through
refUID; older ones stay valid in EAS but no longer count. - 4.Decode
projectIds: these are the protocols we have reviewed, as ofreviewedAt, at revisionrevision. - 5.For the rating per property, the reasoning, and what we did not look at, read
/v1/project/{id}.json. Ratings might change as protocols change.