{"id":46435373,"url":"https://github.com/jose-blockchain/curated-erc","last_synced_at":"2026-03-11T20:04:07.787Z","repository":{"id":340926519,"uuid":"1167606325","full_name":"jose-blockchain/curated-erc","owner":"jose-blockchain","description":"Canonical implementations of ERCs with real on-chain traction. Foundry-native, Solidity-tested.","archived":false,"fork":false,"pushed_at":"2026-03-05T18:54:37.000Z","size":239,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-05T22:00:36.373Z","etag":null,"topics":["canonical","eip","erc","ethereum","reference","solidity","standard"],"latest_commit_sha":null,"homepage":"","language":"Solidity","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jose-blockchain.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-26T13:36:17.000Z","updated_at":"2026-03-05T18:54:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jose-blockchain/curated-erc","commit_stats":null,"previous_names":["jose-blockchain/curated-erc"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/jose-blockchain/curated-erc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jose-blockchain%2Fcurated-erc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jose-blockchain%2Fcurated-erc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jose-blockchain%2Fcurated-erc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jose-blockchain%2Fcurated-erc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jose-blockchain","download_url":"https://codeload.github.com/jose-blockchain/curated-erc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jose-blockchain%2Fcurated-erc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30398198,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T18:46:22.935Z","status":"ssl_error","status_checked_at":"2026-03-11T18:46:17.045Z","response_time":84,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["canonical","eip","erc","ethereum","reference","solidity","standard"],"created_at":"2026-03-05T20:54:17.511Z","updated_at":"2026-03-11T20:04:07.781Z","avatar_url":"https://github.com/jose-blockchain.png","language":"Solidity","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"img/logo.jpg\" alt=\"Curated ERC\" width=\"400\" /\u003e\n\u003c/p\u003e\n\n# Curated ERC\n\n\u003e v0.2.1\n\nCanonical implementations of ERCs with real on-chain traction. Foundry-native, Solidity-tested.\n\n## The Gap\n\nOpenZeppelin covers the core 10 standards (ERC-20, 721, 1155, etc.) thoroughly. The next 30 ERCs — standards with thousands of deployments, millions in TVL, and active protocol adoption — have no audited, library-grade implementations. Developers copy from unaudited repos or roll their own.\n\nCurated ERC Contracts fills that gap.\n\n## Principles\n\n- **Foundry-native, Solidity-tested** — no JS test harness, no Hardhat dependency\n- **Non-upgradeable + Upgradeable** — both variants in one repo, upgradeable versions use ERC-7201 namespaced storage\n- **OZ-grade quality** — NatSpec docs, custom errors, fuzz tests, internal security audits per contract\n- **Curated, not exhaustive** — only ERCs with demonstrated on-chain adoption\n\n## Implemented\n\n| ERC | Name | Category |\n|-----|------|----------|\n| 1363 | Payable Token | Token (ERC-20 extension) |\n| 5192 | Minimal Soulbound NFT | Token (ERC-721 extension) |\n| 4907 | Rental NFT | Token (ERC-721 extension) |\n| 4906 | Metadata Update Extension | Token (ERC-721 extension) |\n| 5484 | Consensual Soulbound Tokens | Token (ERC-721 extension) |\n| 2309 | Consecutive Transfer (Batch Mint) | Token (ERC-721 extension) |\n| 3525 | Semi-Fungible Token | Token (ERC-721 compatible) |\n| 1271 | Signature Validation for Contracts | Cryptography |\n| 6492 | Predeploy Signature Validation | Cryptography |\n| 2771 | Meta Transactions | Context / Gasless UX |\n| 3156 | Flash Loans | DeFi / Finance |\n| 7201 | Namespaced Storage Layout | Utils / Upgrades |\n| 2535 | Diamonds (Multi-Facet Proxy) | Proxy / Upgrades |\n\nFull plan across 40 ERCs in [ROADMAP.md](./ROADMAP.md). Release history in [CHANGELOG.md](./CHANGELOG.md).\n\n## Structure\n\n```\nsrc/\n├── token/\n│   ├── ERC1363/          # Payable Token (transfer/approve with callbacks)\n│   ├── ERC2309/          # Consecutive Transfer (batch minting)\n│   ├── ERC4906/          # Metadata Update Extension\n│   ├── ERC3525/          # Semi-Fungible Token (slot + value model)\n│   ├── ERC4907/          # Rental NFT (user/owner split with expiry)\n│   ├── ERC5192/          # Soulbound NFT (non-transferable)\n│   └── ERC5484/          # Consensual Soulbound Tokens (burn authorization)\n├── metatx/               # ERC-2771 Trusted Forwarder context\n├── finance/              # ERC-3156 Flash Loan lender\n├── diamond/              # ERC-2535 Diamonds (multi-facet proxy)\n└── utils/\n    ├── cryptography/     # ERC-1271 + ERC-6492 Signature validation\n    └── StorageSlot7201.sol\n```\n\nEach ERC ships as:\n- `IERC*.sol` — Standard interface\n- `ERC*.sol` — Non-upgradeable implementation\n- `ERC*Upgradeable.sol` — Upgradeable (Initializable + ERC-7201 storage)\n\n## Installation\n\n### Foundry\n\n```bash\nforge install jose-blockchain/curated-erc\n```\n\nAdd the remapping to your `remappings.txt`:\n\n```\ncurated-erc/=lib/curated-erc/src/\n```\n\nThen import and extend:\n\n```solidity\nimport {ERC1363} from \"curated-erc/token/ERC1363/ERC1363.sol\";\nimport {ERC3525} from \"curated-erc/token/ERC3525/ERC3525.sol\";\nimport {ERC5192} from \"curated-erc/token/ERC5192/ERC5192.sol\";\nimport {ERC4907} from \"curated-erc/token/ERC4907/ERC4907.sol\";\n\ncontract MySFT is ERC3525 {\n    constructor() ERC3525(\"MySFT\", \"MSFT\", 18) {}\n    function mint(address to, uint256 slot, uint256 value) external returns (uint256) {\n        return _mint(to, slot, value);\n    }\n}\n\ncontract MyPayableToken is ERC1363 {\n    constructor() ERC20(\"MyToken\", \"MTK\") {\n        _mint(msg.sender, 1_000_000e18);\n    }\n}\n```\n\n### Hardhat\n\nThe recommended path is the [`@nomicfoundation/hardhat-foundry`](https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-foundry) plugin, which lets Hardhat read `remappings.txt` and resolve imports from the `lib/` folder directly — no duplicate OpenZeppelin installs.\n\n1. Install the plugin:\n\n```bash\nnpm install --save-dev @nomicfoundation/hardhat-foundry\n```\n\n2. Add it to your `hardhat.config.ts`:\n\n```typescript\nimport \"@nomicfoundation/hardhat-foundry\";\n```\n\n3. Clone curated-erc as a git submodule (same as Foundry):\n\n```bash\nforge install \u003cyour-github-user\u003e/curated-erc\n```\n\n4. Add the remapping to `remappings.txt`:\n\n```\ncurated-erc/=lib/curated-erc/src/\n```\n\nThe plugin picks up remappings automatically. Imports work the same way as in Foundry:\n\n```solidity\nimport {ERC4907} from \"curated-erc/token/ERC4907/ERC4907.sol\";\n```\n\n### Hardhat (npm)\n\nIf you use Hardhat without Foundry, install from npm and add OpenZeppelin as dependencies:\n\n1. Install the library and its peer dependencies:\n\n```bash\nnpm install curated-erc @openzeppelin/contracts@5.5.0 @openzeppelin/contracts-upgradeable@5.5.0\n```\n\n2. Import and extend in your contracts:\n\n```solidity\nimport {ERC1363} from \"curated-erc/token/ERC1363/ERC1363.sol\";\nimport {ERC20} from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\ncontract MyPayableToken is ERC1363 {\n    constructor() ERC20(\"MyToken\", \"MTK\") {\n        _mint(msg.sender, 1_000_000e18);\n    }\n}\n```\n\nHardhat will compile the contracts in `node_modules/curated-erc` when resolving these imports; no extra config is needed. Use Solidity `^0.8.20` (e.g. `0.8.24`) in your `hardhat.config` to match the library.\n\n## Development\n\n```bash\nforge install\nforge build\nforge test -vv\n```\n\n## Dependencies\n\n- OpenZeppelin Contracts v5.5.0\n- OpenZeppelin Contracts Upgradeable v5.5.0\n- Forge Std v1.15.0\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjose-blockchain%2Fcurated-erc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjose-blockchain%2Fcurated-erc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjose-blockchain%2Fcurated-erc/lists"}