# EAS (Ethereum Attestation Service) ## 概要 下記のURLで色々説明されているが、やってることは以下 * 証明書のページ作成 & on-chain に保存 * 証明書を off-chain に保存した場合。private の URL で共有できる * 証明書のスキーマとして任意の構造体を定義・共有できる * 発行、Revoke時に任意のコントラクトを呼び出せる [Going beyond SBTs & ERC721 for Verifiable Credentials - Ethereum Research](https://ethresear.ch/t/going-beyond-sbts-erc721-for-verifiable-credentials/14789) [The Future of Verifiable Credentials: Beyond ERC-721 & SBTs — Ethereum Attestation Service](https://mirror.xyz/0xeee68aECeB4A9e9f328a46c39F50d83fA0239cDF/K63khDZank5wrfzCulDq5R6dfN2m4zGanO5lsAxfg-w) ## 詳細 * スキーマの共有 * EASのコントラクトでSchemaを共有 * プライバシー保護 * off-chain attestation + on-chain timestamping * コンポーザブル * 証明書の組み合わせができる * 発行、Revoke時に任意のResolverコントラクトを動かせる * DAOのmembership管理などには使えそう * など ### スキーマの共有 * `SchemaRegistry` コントラクトに登録して共有 * [eas-contracts/SchemaRegistry.sol at master · ethereum-attestation-service/eas-contracts · GitHub](https://github.com/ethereum-attestation-service/eas-contracts/blob/master/contracts/SchemaRegistry.sol#L33-L39C13) * Schema には任意の `struct` 同様の定義ができる(内部的には `string` で ABI 等を持つ) * [eas-contracts/ISchemaRegistry.sol at master · ethereum-attestation-service/eas-contracts · GitHub](https://github.com/ethereum-attestation-service/eas-contracts/blob/master/contracts/ISchemaRegistry.sol#L14) ### プライバシー保護 * off-chain attestation に専用URL(&QRコード)が発行される * gist の secret URL のようなものを privacy と言っている模様 ``` https://easscan.org/offchain/url/#attestation=eNqtVE1r20AQ%2FStlz6bMfsyu1jc7diC3QpJTKWX2KxHEkpFlExP83zuSWifpIRdbArE7em%2F0NPNm38SufmpyJ%2BYCXlWBG5DG4kpXt9EstIwely47QyZWsFzbVLmwzGI2sMT8TaR2Q3UzrBraZE6yXtx%2FW%2FR93vXU123DyEPudsOKP%2FBdIQfiM1PukphLKRH5MWLqcqybp5u26TuK%2FSQH19rmsASUlJ2NsEK%2FtlGmFQTlF1giKgArxWkmtl29oe74cNwOKj4r2OTdjp7yoHIXn%2FOGxuzaWx8COEuxBO8VFTQJpXImYqxsZY2MhNqYLIligiALZlMqoAiVUoUTdznW2zo3k1xfKgSvSS9NpVar22KdXvnkbQa9ULBe2oWsZJqI5fHxbjXS4MKL0yXq6Qq51IVKZOCqoY18FwW2WL5Uspqj0nIZOCadcewvp%2FnJa44WLs%2FHf%2BnrwUfSOqc1INihWIc2UnjhcN%2Ft80w0bRN5AzORX7d1N7b5YaQBO6FnC%2ByGXk8mEPOfZ3P%2B7f6E4X04MkIr9s8Z8t7SM4pS6thBH1GjyDNgXze9NR%2Ff%2F6frC%2BT7z72ratuXz5DJLF%2FJHh3wGSBOv7ga02AjO1l6UC7l6BMkR4WiVMpUpAxZXzKhySloluIS%2BqB4tpiB2QM6l4aBn0YSNNucnK%2BMYgoBU0zQWqLVmLT03gIMJOLuUzBQPGFKpBXPRsAh0e%2FD1VJxs1o%2BOo4%2FqKPNaIiDmCs3E0Ok7o%2BLJt1f61ux3Wz%2FHUyXlvMKcvb7Oo1aokTyzpYBK4tURbksnTRRKZkry3tWhphkscQjbjyWykNwBhSfa9mK0%2BkPBPqpPg%3D%3D ``` * off-chainで発行後、attastationのHashに、on-chainでtimestampをつけることが出来る。 * off-chain の attestation は on-chain explorer からは検索できない。 * 署名のダウンロードが出来る(EIP712形式)。 ```json {"signer":"0x2f0C01465D38Fc4A31c95B7e74a4c80BE6d87bBe","sig":{"domain":{"name":"EAS Attestation","version":"0.25","chainId":11155111,"verifyingContract":"0x25E36ebB051ae76c0D59E6c1dD0b29A5fc520061"},"primaryType":"Attestation","message":{"schema":"0x3969bb076acfb992af54d51274c5c868641ca5344e1aacd0b1f5e4f80ac0822f","recipient":"0x9f85093a3B482DDFf673D9d96e03A20EB6A181df","refUUID":"0x0000000000000000000000000000000000000000000000000000000000000000","data":"0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001b68656c6c6f206f66662d636861696e206174746573746174696f6e0000000000","time":1677330506,"revocable":true,"nonce":0,"expirationTime":0},"types":{"Attest":[{"name":"schema","type":"bytes32"},{"name":"recipient","type":"address"},{"name":"time","type":"uint64"},{"name":"expirationTime","type":"uint64"},{"name":"revocable","type":"bool"},{"name":"refUUID","type":"bytes32"},{"name":"data","type":"bytes"}]},"r":"0x5ca519027dec9d0d7afac12248a24a69fea54edb3cab7d59b2fc55195e90577d","s":"0x2039f8a79842a54a0b3c4b3315635d3199600e905af66ab40f9a5dda32850b5d","_vs":"0x2039f8a79842a54a0b3c4b3315635d3199600e905af66ab40f9a5dda32850b5d","recoveryParam":0,"v":27,"yParityAndS":"0x2039f8a79842a54a0b3c4b3315635d3199600e905af66ab40f9a5dda32850b5d","compact":"0x5ca519027dec9d0d7afac12248a24a69fea54edb3cab7d59b2fc55195e90577d2039f8a79842a54a0b3c4b3315635d3199600e905af66ab40f9a5dda32850b5d","uuid":"0xc15a976f5af61f12f27e1714c221e862f2c1255d1f6a002495f890b74021aae6"}} ``` off-chain attestation の例 https://twitter.com/stevedakh/status/1629177240339578880 ![](https://i.imgur.com/Fw0VcLc.jpg) ![](https://i.imgur.com/VtR0px4.png) * リンクを知った人なら勝手に `IPFS to Publish` も可能。 https://easscan.org/offchain/attestation/view/0xc15a976f5af61f12f27e1714c221e862f2c1255d1f6a002495f890b74021aae6 ![](https://i.imgur.com/15zQpVx.jpg) ### Composability #### 証明書の組み合わせ * TODO #### Resolver * `onAttest`, `onRevoke` の実装で任意の処理を動かせる * [eas-contracts/PayingResolver.sol at master · ethereum-attestation-service/eas-contracts · GitHub](https://github.com/ethereum-attestation-service/eas-contracts/blob/master/contracts/resolver/examples/PayingResolver.sol) #### attest/getAttestation * `external` なので外部から実行可能 * on-chain attestationなので閲覧権限の制御はない ## 宿題の回答 - アクセス制御が入っているか - attest(issue)/revoke 時に任意の resolver を動かせる - attester(issuer)は署名があれば delegate できる - attestation の get は public - 見せたい人のコントロールが可能か? - on-chain attestation は public - off-chain attestation は、URLをばら撒かれたら public - Trustpointになっている箇所の整理 - off-chain が多分EASのサーバ - このサービスを使う方向感 - VCとしてのスキーマは定義できない(独自スキーマ) - プライバシーが △ ~ ✗ - ~~chainがEthereumのみ~~ [先日 multi-chain 対応のリリースを出した](https://twitter.com/eas_eth/status/1630037360548388864) - Arbitrum稼働中 - 後に Optimism, Mainnet -> 他チェーン