{"title": "ENSAA", "website": "https://github.com/ENSAAWallet/ens-aa", "createdAt": 1682098796895, "userGithub": "doublespending", "credentials": {"github": {"type": ["VerifiableCredential"], "proof": {"jws": "eyJhbGciOiJFZERTQSIsImNyaXQiOlsiYjY0Il0sImI2NCI6ZmFsc2V9..MWzSfjpUMqsRI4u1cdWvCPWXFXNFnVQpGpXwQiwSKEr5Z8XT41XRsk11WXQmKugoXlIKj5AKbAbqpO_O1w63Bg", "type": "Ed25519Signature2018", "created": "2023-04-21T17:39:49.007Z", "proofPurpose": "assertionMethod", "verificationMethod": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC#z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC"}, "issuer": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC", "@context": ["https://www.w3.org/2018/credentials/v1"], "issuanceDate": "2023-04-21T17:39:49.007Z", "expirationDate": "2023-07-20T17:39:49.007Z", "credentialSubject": {"id": "did:pkh:eip155:1:0xBBbb17A8C1Ce64be28faCd93b22450abB01B5DCA", "hash": "v0.0.0:zwJedgAh80Yw2lbcYhxMqfXIS/Ev36bpE9K52AHT+S0=", "@context": [{"hash": "https://schema.org/Text", "provider": "https://schema.org/Text"}], "provider": "ClearTextGithubOrg#ENSAAWallet#33960178"}}, "twitter": {"type": ["VerifiableCredential"], "proof": {"jws": "eyJhbGciOiJFZERTQSIsImNyaXQiOlsiYjY0Il0sImI2NCI6ZmFsc2V9..612EPW1tNJoVlbZxWiriiLjUk969P2DN7Pij9oi4CaTDK7k-xhnTuHf_KdzkEL96Do3gk2hBqqYx53aAKNZnBw", "type": "Ed25519Signature2018", "created": "2023-04-21T17:39:40.852Z", "proofPurpose": "assertionMethod", "verificationMethod": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC#z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC"}, "issuer": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC", "@context": ["https://www.w3.org/2018/credentials/v1"], "issuanceDate": "2023-04-21T17:39:40.852Z", "expirationDate": "2023-07-20T17:39:40.852Z", "credentialSubject": {"id": "did:pkh:eip155:1:0xBBbb17A8C1Ce64be28faCd93b22450abB01B5DCA", "hash": "v0.0.0:D0BkZpN87Bf+867LlS/d89HMWUY/o1L43hlh5MXbdng=", "@context": [{"hash": "https://schema.org/Text", "provider": "https://schema.org/Text"}], "provider": "ClearTextTwitter#0xbbbb_eth"}}}, "description": "# ENSAA\n\nENS is a leading DID solution with the following characteristics.\n\n- Easy to remember and can be resolved into the blockchain address\n\n- Support multichain including Bitcoin, Dogcoin, etc\n\n- Various records including `ADDRESSES`, `CONTENT`, `TEXT RECORD`, etc\n\n- Integrated by a large number of applications\n\n- [Namewrapper](https://ens.mirror.xyz/0M0fgqa6zw8M327TJk9VmGY__eorvLAKwUwrHEhc1MI) is an elegant permission mechanism and makes all ENS domains become ERC-1155 NFTs.\n\nHowever, ENS domain are mainly used as DID for offchain domain resolution while onchain operations are based on the resolved address instead of the ENS domain. Therefore, the resolved address is the real onchain ID.\n\nCan we have a real ENS Ethereum account as our onchain ID?\n\nObviously, if account abstraction can be organically combined with ENS, then this problem can be solved. Everything will also become wonderful.\n\n- The ENS domain becomes a real ID both offchain and onchain\n\n- Just reset the resolving address in the ENS APP, the account can be handed over automatically. Especially considering the features of SBT, EOA cannot achieve this. Also, ENS itself has a complete and flexible permission mechanism for setting the resolving address, which can meet the needs of the organizations.\n\n- Since the ENS domain is a ERC-1155 NFT, you can manage your account by operating the NFT.\n\n- After the launch of ENS Namewrapper, ENS has built-in flexible permission mechanism called `fuse`. Therefore, the developer does not need to implement similar mechanism in the ENSAA account and can reuse the built-in permission mechanism of ENS.\n\n- ENSAA introduces more possibilities for recovery and security of the account. The various information on ENS is a potential source of account recovery and risk control. For example,\n\n  - When the private key of the Ethereum address is lost, users can choose the private key of the Dogcoin address to continue using the ENSAA account, similar to the idea of the Ethereum client diversity.\n\n  - For some high-risk operations on the account, verification can be achieved through multiple signatures of private keys in multiple chains.\n\n  - ENS also records social information (such as Twitter), providing the possibility of introducing social recovery and the keyless account.\n\nCurrently, ERC-4337 is a relatively mature account abstraction solution. At first glance, the developer only need to access ENS information during the ERC-4337 validation loop to achieve ENSAA's goals.\n\nHowever, in order to prevent bundlers from being attacked, [ERC-4337 restricts the account behavior during the ERC-4337 validation loop](https://eips.ethereum.org/EIPS/eip-4337#simulation). One of the constraints is that account validation can only access storage associated with the account. Due to the fact that ENS information is stored outside of the account, this approach becomes infeasible.\n\nThis project innovatively solved this problem and achieved ENSAA that meets the ERC-4337 specification.\n\nThe basic idea is as follows\n\n- ENS domain name uses custom `AAResolver` to record ENS information\n\n- When the information recorded by `AAResolver` changes, callback the relevant `ENSAccount` for sync.\n\n- Finally, The ERC-4337 validation loop of `ENSAccount` only requires accessing `ENSAccount`'s own storage for verification.\n\nHowever, forcing ENS domain to use custom `AAResolver` is not feasible. Once the ENS domain switches to other `Resolver`, the binding link of `ENSDomain <-> AAResolver <-> ENSAccount` will be broken.\n\nTherefore, this project introduces the `fuses` mechanism of the ENS Namewrapper. When creating an `ENSAccount`, `ENSAccountFactory` will check the fuses of the ENS domain to ensure that once `ENSAccount` is deployed, the ENS domain cannot switch to other `Resolver`. Of course, the expiry of the ENS domain will also be considered to ensure the binding link of `ENSDomain <-> AAResolver <-> ENSAccount`.\n\nSo, everything becomes wonderful again ~\n", "projectGithub": "ENSAAWallet", "projectTwitter": "0xbbbb_eth"}