# [ERC5485] コントラクトの正当性・管轄権・主権を管理する仕組みを理解しよう！

> スマートコントラクトが合法であることを示すために、その起源や背後にある法的な基盤を明示します。

- URL: https://cardene.dev/articles/8491c7a0da78b8dcc02d
- 公開日: 2023-09-26
- 更新日: 2023-09-26
- トピック: Blockchain
- タグ: ethreum, solidity, smartcontract, ブロックチェーン

## はじめに

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

https://cryptogames.co.jp/

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

https://cryptospells.jp/

今回は、コントラクトの正当性、管轄権、主権などを管理する仕組みを提案している**ERC5485**についてまとめていきます！

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

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

:::message alert
**5485**は現在（2023年9月21日）では「**Draft**」段階です。
:::

## 概要

### 合法性のルーツ (Legitimacy Lineage)
スマートコントラクトが合法であることを示すために、その起源や背後にある法的な基盤を明示します。

:::message
スマートコントラクトがどの組織によって作成され、どの法律や規制に基づいているかを示すものです。
たとえば、スマートコントラクトのコード内にコメントや説明を追加して、その合法性に関する情報を提供します。
また、関連する法的文書や認証機関への言及も行います。
:::

### 遵守する管轄権 (Jurisdiction Observed)
スマートコントラクトがどの法域（国や地域）の法律に従うかを明確にします。

:::message
スマートコントラクトがどの法的な規制に合致しているかを示すものです。
スマートコントラクトのコード内に、該当法域に関連する法的条件や規定を記述し、遵守を宣言します。
また、ユーザーに対して、スマートコントラクトが適用する法域について警告や通知を提供します。
:::

### 主権 (Sovereignty)
スマートコントラクトが特定の法域に縛られない自主性を持つ場合、その主権を宣言します。

:::message
スマートコントラクトが独自の法的ルールや条件を持ち、特定の法的規制に従わないことを表明するものです。
主権を宣言するために、スマートコントラクト内に独自の法的条件や規定を定義し、その条件が満たされた場合に主権が発動するしくみを組み込みます。
:::

## 動機

現在、スマートコントラクトは、自身の合法性のルーツ、遵守する管轄権、および主権関係を明示的に指定する標準的な方法を持っていません。
この標準が導入されれば、以下のような利点があります。

- **規制機関のサポート**
    - スマートコントラクトと規制機関との相互運用性がサポートされます。
    - 規制機関は、スマートコントラクトが法的規制に適合しているかどうかを管理し、必要に応じて相互運用性を許可または制限できます。
- **DAOの自己主権宣言**
    - 分散型自治組織（DAO）は、自己主権を宣言できます。
    - つまり、彼らは自身が主権を持ち、他からの依存を主張しないことを明確に示すことができます。
    - これにより、独自の法的ルールを持つスマートコントラクトが明示的に表現できます。

実際の例として、以下のようなケースが考えられます。

- **ContractA, ContractB, ContractC**
    - ContractAは特定の国に登録されたA社を表し、ContractBはその国の国務省を、ContractCは最高裁判所を表します。
    - これらのスマートコントラクトは、法的な関係を明確に示します。

- **自己主権を宣言するスマートコントラクト**
    - 一部のスマートコントラクトは、特定の管轄権に従わず、「**自己主権**」を宣言します。
    - これにより、国や規制機関の影響を受けずに運用できます。

このインターフェースは、スマートコントラクトが主権に基づいて相互作用を許可または禁止する方法を提供します。
たとえば、ある国はデジタルマネーサービスのスマートコントラクトに、実際の法的管轄権内での遵守を要求することができます。

また、米国など一部の管轄権では、トークン発行者が証券として扱われるか、商品として扱われるか、それぞれの規制機関に申請することがあり、これに承認が得られれば、その規制機関から正当性を得ることができます。

一方、分散型のDAOは、国に影響を受けないように、自己主権を持つスマートコントラクトとのみ相互運用することを選ぶことができます。

このインターフェースは、スマートコントラクトが法的な状況に合わせて調整し、相互運用性と自己主権を確保するための重要なツールです。

## 仕様

この規格に準拠するコントラクトは、以下のインターフェイスを実装する必要があります。

```javascript
interface IERC5485 {
    /// A function that returns the source of legitimacy in an address
    ///
    /// @returns address of EOA or contract that grants legitimacy status to this contract.
    /// See Specification #2 and #3 for more details.
    function sourceOfLegitimacy() public view returns (address);

    /// A function that returns the sovereign jurisdiction in an address
    ///
    /// @returns address of EOA or contract that *ultimately* grants legitimacy status (root of legitimacy lineage).
    /// See Specification #4 and #4 for more details.
    function jurisdiction() public view returns (address);
}
```

**ERC5485**は、スマートコントラクトの合法性と主権に関する新しい規格です。
この規格を実装することにより、スマートコントラクト間の法的関係と透明性が向上し、法的要件を満たすための枠組みが提供されます。

1. **`sourceOfLegitimacy()`関数**
この関数は、スマートコントラクトがその合法性を認定するためのアドレスを返します。
スマートコントラクトが他のスマートコントラクトまたは外部所有者アカウント（EOA）から合法性を得ているかを示します。
例えば、スマートコントラクトAがスマートコントラクトBまたはEOAから合法性を得ている場合、`sourceOfLegitimacy()`はそのアドレスを返します。

:::message
合法性を持つスマートコントラクトAが`0x<Contract_Address_A>`のアドレスにデプロイされ、その合法性は別のスマートコントラクトまたは外部所有者アカウント（EOA）である`0x<ADDRESS_B>`から認められているとします。
この場合、スマートコントラクトAは、`sourceOfLegitimacy()`関数が呼び出された際に`0x<ADDRESS_B>`を返さなければなりません。
言い換えると、スマートコントラクトAは、その合法性が`0x<ADDRESS_B>`から認定されていることを示します。
:::

2. **`jurisdiction()`関数**
スマートコントラクトの合法性には連鎖性があり、紐づいている主権管轄権のアドレスを返します。
例えば、スマートコントラクトAがスマートコントラクトBから、そしてスマートコントラクトBがスマートコントラクトCから合法性を得ているとします。
ただし、スマートコントラクトCは他から合法性を認定されていない場合、スマートコントラクトCは「**主権**」と見なされます。
この場合、スマートコントラクトAおよびBは、`jurisdiction()`関数が呼び出された際にスマートコントラクトCのアドレスを返さなければなりません。
つまり、スマートコントラクトAおよびBは、スマートコントラクトCの主権を認識していることを示す必要があります。

3. **主権スマートコントラクト**
**ERC5485**では、スマートコントラクトが「**主権スマートコントラクト**」と見なされる条件が定義されています。
以下の条件は、規格未満の合法性や主権を持たないスマートコントラクトを特定するために使用されます。
    - Case 1: この規格を実装していない場合。
    - Case 2: この規格を実装しているが、`jurisdiction()`関数が自身のアドレスを返す場合。
    - Case 3: この規格を実装しているが、`jurisdiction()`関数がゼロアドレスを返す場合。

4. **指示に従う義務**
スマートコントラクトAがスマートコントラクトBから合法性を得ており、スマートコントラクトAがスマートコントラクトBの管轄権を認識している場合、スマートコントラクトAはスマートコントラクトBの指示に従う義務があります。
これには、スマートコントラクトAがスマートコントラクトBの指示に従って自己廃棄（`selfdestruct`）するなどの行動が含まれます。

5. **主権スマートコントラクトの指示**
スマートコントラクトAがスマートコントラクトCの主権を認識している場合、スマートコントラクトAはスマートコントラクトCの指示にも従う義務があります。
これには、スマートコントラクトAが**ERC5247**で指定されたスマートコントラクト実行提案を実行することなどが含まれます。

この規格により、スマートコントラクト間の法的関係と指示が明確に定義され、法的要件を満たすための透明性が向上します。
また、将来的には「**合法性の追加/削除**」に関する機能が議論される可能性があります。
**ERC5485**は、分散型アプリケーションの法的透明性と規制順守を強化する重要なステップとなります。

## 補足

議論が必要です。

## 後方互換性

議論が必要です。

## セキュリティ考慮事項

議論が必要です。

## 引用

Zainan Victor Zhou (@xinbenlv), "ERC-5485: Legitimacy, Jurisdiction and Sovereignty [DRAFT]," Ethereum Improvement Proposals, no. 5485, August 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-5485.

## 最後に

今回は「コントラクトの正当性、管轄権、主権などを管理する仕組みを提案している**ERC5485**」についてまとめてきました！
いかがだったでしょうか？

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

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

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

https://chaldene.net/

https://zenn.dev/heku

https://mirror.xyz/0xcE77b9fCd390847627c84359fC1Bc02fC78f0e58
