{"id":50672897,"url":"https://github.com/oasisprotocol/erc-8004","last_synced_at":"2026-06-08T13:02:06.464Z","repository":{"id":322805921,"uuid":"1076897284","full_name":"oasisprotocol/erc-8004","owner":"oasisprotocol","description":null,"archived":false,"fork":false,"pushed_at":"2025-12-23T07:48:19.000Z","size":310,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-12-24T22:16:26.765Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Solidity","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oasisprotocol.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-15T13:49:30.000Z","updated_at":"2025-12-23T07:48:21.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/oasisprotocol/erc-8004","commit_stats":null,"previous_names":["oasisprotocol/erc-8004"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/oasisprotocol/erc-8004","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oasisprotocol%2Ferc-8004","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oasisprotocol%2Ferc-8004/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oasisprotocol%2Ferc-8004/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oasisprotocol%2Ferc-8004/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oasisprotocol","download_url":"https://codeload.github.com/oasisprotocol/erc-8004/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oasisprotocol%2Ferc-8004/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34063159,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2026-06-08T13:02:05.893Z","updated_at":"2026-06-08T13:02:06.459Z","avatar_url":"https://github.com/oasisprotocol.png","language":"Solidity","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ERC-8004 on Oasis\n\nThis repository is a home of the tooling for [Oasis ROFL-powered] agents that\nconform to the [ERC-8004] proposal.\n\n[ERC-8004]: https://eips.ethereum.org/EIPS/eip-8004\n[Oasis ROFL-powered]: https://docs.oasis.io/build/rofl/\n\nThe validation flow of ROFL-powered agents is the following:\n\n![ERC-8004 validation flow of ROFL-powered agents](./docs/flow.svg)\n\nThis repository contains:\n\n- the [Validator Agent](#validator-agent)\n- the [ROFL-8004 startup image](#rofl-8004-startup-image)\n- a simple [example] using the ROFL-8004 startup image to register ROFL as an \n  ERC-8004 agent and request validation through `ValidationRegistry`\n\n[example]: ./example/compose.yaml\n\n## Validator Agent\n\nThe Validator Agent is a simple Go application that listens to \n`ValidationRequest` events reported by the validation registry on a \nspecified chain. Then, it connects to the corresponding Oasis chain and copies \nover ROFL metadata of an app and the most recent replica inside the \n`ValidationResponse`.\n\nTo compile and run the validator agent locally outside of TEE:\n\n```shell\ncd validator-agent\nmake\nAPPD__MOCK=true \\\nAPPD__MOCK_SIGNING_KEY=your_private_key_on_validation_networks \\\nINFURA_API_KEY=your_infura_api_key \\\nPINATA_JWT=your_pinata_jwt \\\n./validator-agent  --config config.testnet.yaml\n```\n\n### Validator Agent ROFL\n\nProduction validator agent runs inside ROFL TEE. Use the [Oasis CLI] to \nverify that the validator agent instance corresponds to the source code in \nthis repository by running:\n\n```shell\noasis rofl build --verify\n```\n\nTo build and deploy your own validator ROFL:\n\n```shell\noasis rofl init --reset\noasis rofl create\noasis rofl build\necho -n \"Your Infura API KEY here\" | oasis rofl secret set INFURA_API_KEY -\necho -n \"Your Pinata JWT here\" | oasis rofl secret set PINATA_JWT -\noasis rofl update\noasis rofl deploy\n```\n\nThe keypair for submitting `ValidationResponse` to the target chain is derived \ninside the TEE. Its public key is reported inside the Validator Agent's Replica\nmetadata and in the machine logs. Make sure to fund the account otherwise the \nagent will not be able to submit validation reports.\n\nIf you change the config file, don't forget to rebuild container images, push\nthem to a publicly accessible URL and update your `compose.yaml`.\n\n[Oasis CLI]: https://cli.oasis.io\n\n### Testing\n\nMake sure you have `anvil` installed. Then run localnet tests which mimic the\nwhole flow:\n\n```shell\ncd validator-agent\nmake test\n```\n\n## ROFL-8004 startup image\n\nThis is a container that simplifies the registration and validation of your \nROFL. \n\nOn the first startup it will register your ROFL as an ERC-8004 agent if it \ndoesn't exist yet and store the app ID along the agent's metadata.\n\nOn every startup it will derive configured public key(s) and upsert them to \nthe ROFL replica metadata. Then, it will submit a `ValidationRequest` to the \nvalidator agent to perform the validation of your app.\n\nA minimal setup to use the container is to include the following service in\nyour ROFL `compose.yaml`:\n\n```yaml\n  rofl-8004:\n    image: ghcr.io/oasisprotocol/rofl-8004\n    platform: linux/amd64\n    environment:\n      # RPC for ERC-8004 registry. e.g. https://sepolia.infura.io/v3/\u003cYOUR_KEY\u003e\n      - RPC_URL=${RPC_URL}\n      # Pinata token for storing token URI when registering new agent.\n      - PINATA_JWT=${PINATA_JWT}\n    volumes:\n      - /run/rofl-appd.sock:/run/rofl-appd.sock\n      - rofl-8004-volume:/root/.rofl-8004\n\nvolumes:\n  rofl-8004-volume:\n```\n\nOasis gas fees are covered by the ROFL node hosting your application. Ethereum\ntransactions are signed with a generated keypair by default. Check out your \nROFL logs to find out which address to fund.\n\nFor full functionality consult the [example].","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foasisprotocol%2Ferc-8004","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foasisprotocol%2Ferc-8004","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foasisprotocol%2Ferc-8004/lists"}