# [ERC6821] Web3URLからENSの紐付けをサポートする仕組みを理解しよう！

> この規格では、Ethereum Name Service（ENS）から、ERC4804で定義されているアドレスへのマッピングを定義しています。

- URL: https://cardene.dev/articles/9ed0e6aac8a076567b6f
- 公開日: 2024-06-26
- 更新日: 2024-06-26
- トピック: Blockchain
- タグ: ethereum, solidity, smartcontract, ブロックチェーン

## はじめに

初めまして。
**CryptoGames**というブロックチェーンゲーム企業でエンジニアをしている **cardene（かるでね）** です！
スマートコントラクトを書いたり、フロントエンド・バックエンド・インフラと幅広く触れています。

https://cryptogames.co.jp/

代表的なゲームは**クリプトスペルズ**というブロックチェーンゲームです。

https://cryptospells.jp/

今回は、ENSからWeb3 URL形式のコントラクトアドレスへのマッピングを提案している**ERC6821**についてまとめていきます！

:::message
以下にまとめられているものを翻訳・要約・補足しながらまとめていきます。
:::

https://eips.ethereum.org/EIPS/eip-6821

他にも様々なEIPについてまとめています。

https://cardene.notion.site/ERC-EIP-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4

## 概要

この規格では、Ethereum Name Service（ENS）から、**ERC4804**で定義されているアドレスへのマッピングを定義しています。

:::message
**ERC4804**は、コントラクトから「**web3://cardene.eth/**」のように、他のコントラクトにアクセスできる仕組みを提案している規格です。
「**web3://cardene.eth/article/qiita**」のようにすることでパラメータを渡すこともできます。
より詳しくは以下の記事を参考にしてください。
:::

[\[ERC4804\] HTTP形式のWeb3 URLからコントラクトを呼び出すことができる仕組みを理解しよう！](/articles/837931ce60ca844aee13)

## 動機

**ERC4804**では、`web3://`から始まるURIを定義してコントラクトに紐付けています。
このURIとENSを紐づけて管理できるコントラクトを提案しています。

## 仕様

`web3://`URIに含まれる`contractName`と`chainid`を使用して以下の手順でコントラクトのアドレスを見つけます。

1. 指定された`chainid`上のENSリゾルバで`contentcontract`テキストレコードを検索します。
    - チェーンに ENS が存在しない場合や無効な**ETH**アドレスの場合はエラーを返します。
2. `contentcontract`テキストレコードが存在しない場合、**ERC137**によって名前に紐づいたアドレスを使用します。

3. 取得したアドレスがゼロアドレス（`0x0000000000000000000000000000000000000000`）の場合は「**address not found**」というエラーを返します。
4. `contentcontract`テキストレコードは、`0x`プレフィックス付きの16進数のEthereumアドレス、または **ERC3770**チェーン固有のアドレスを返すことがあります。
    - アドレスが**ERC3770**チェーン固有のアドレスである場合、メッセージを呼び出す時の`chainid`は **ERC3770**アドレスに指定された`chainid`（`eth`や`arb`など）によって上書きされます。

:::message
**ERC137**については以下の記事を参考にしてください。
:::

[\[ERC137\] アドレスに任意の名前を紐付けるENSの仕組みを理解しよう！](/articles/17e6e1a452006f08a197)

:::message
**ERC3770**については以下の記事を参考にしてください。
:::

[\[ERC3770\] どのチェーンか判別しやすいようにチェーンの短縮名をアドレスにつける仕組みを理解しよう！](/articles/de8ce92b89ee722b37aa)

## 補足

この規格は、**ERC4804**の設計原則に従い、`contenthash`の代わりに**ERC3770**のチェーン固有アドレスを持つ`contentcontract`テキストレコードを使用して人が読みやすいようにしています。
このテキストレコードを使用することで、TTL（Time To Live）などフィールドを追加することが可能になります。

## 引用

Qi Zhou (@qizhou), Qiang Zhu (@qzhodl), "ERC-6821: Support ENS Name for Web3 URL [DRAFT]," Ethereum Improvement Proposals, no. 6821, April 2023. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-6821.

## 最後に

今回は「ENSからWeb3 URL形式のコントラクトアドレスへのマッピングを提案している**ERC6821**」についてまとめてきました！
いかがだったでしょうか？

質問などがある方は以下のTwitterのDMなどからお気軽に質問してください！

[Twitter @cardene777](https://twitter.com/cardene777)

他の媒体でも情報発信しているのでぜひ他も見ていってください！

https://chaldene.net/

https://zenn.dev/heku

https://cardene.substack.com/

https://mirror.xyz/0xcE77b9fCd390847627c84359fC1Bc02fC78f0e58

https://cardene.notion.site/ERC-EIP-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4
