# 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


* リンクを知った人なら勝手に `IPFS to Publish` も可能。
https://easscan.org/offchain/attestation/view/0xc15a976f5af61f12f27e1714c221e862f2c1255d1f6a002495f890b74021aae6

### 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 -> 他チェーン