# [ERC7878] トークンを遺言で相続する標準仕様の仕組みを理解しよう！

> ERC7878は、所有者が亡くなった後でもトークンを相続できるようにするための、スマートコントラクト向け標準インターフェースを提案しています。

- URL: https://cardene.dev/articles/ba9c7c6e09533ed2d02d
- 公開日: 2025-10-04
- 更新日: 2025-10-04
- トピック: Blockchain
- タグ: ethereum, solidity, smartcontract, ブロックチェーン

## はじめに

『DApps開発入門』という本や色々記事を書いているかるでねです。

https://amzn.asia/d/gxvJ0Pw

今回は、トークンの所有者が亡くなった後でも、遺言と執行者、待機期間に基づいてトークンを安全に相続できる仕組みを提案している**ERC7878**についてまとめていきます！

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

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

他にも様々なEIP・BIP・SLIP・CAIP・ENSIP・RFC・ACPについてまとめています。

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

## 概要

**ERC7878**は、所有者が亡くなった後でもトークンを相続できるようにするための、スマートコントラクト向け標準インターフェースを提案しています。
ポイントは、トークンの所有者が生前に「**遺言（Will）**」をオンチェーンで設定し、あらかじめ指名した「**執行者（executors）**」が、所定の待機期間（waiting period）経過後に、指定された「**相続人（inheritors）**」へトークンの移転を実行できるようにする、という流れを共通化することです。

:::message
ここでいう「**標準インターフェース**」とは、各トークンコントラクトが共通で備えるべき関数やイベントの取り決めを指します。
:::

これにより、ウォレットやツールはどのトークンでも同じやり方で遺言の登録・執行状況の確認・相続実行を扱えるようになります。
待機期間は、誤作動や不正な執行を防ぐためのクールダウンとして機能し、所有者死亡の確認や異議申立てなど、現実世界のプロセスに近い時間的余白をもたらします。

| 役割/要素 | 役割の概要 |
| -------- | --------- |
| 所有者（Owner）  | 生前に遺言を作成し、相続人と執行者、待機期間を指定する当事者。 |
| 執行者（Executor） | 待機期間経過後、遺言に従ってトークン移転を実行する権限を持つ人物/アドレス。  |
| 相続人（Inheritor） | 遺言で指定され、執行によってトークンを受け取る側。|
| 待機期間（Waiting Period） | 所有者死亡後すぐの移転を防ぎ、確認や異議のための時間を確保する仕組み。  |
| 標準インターフェース   | 上記の一連の操作を、どのコントラクトでも同じ方法で扱えるように定める共通仕様。 |

**ERC7878**により、「**相続できる（bequeathable）トークン**」をエコシステム全体で一貫して扱える土台が整い、相続の発動条件・手順・権限関係を透明に保ったまま、スムーズに資産移転を進められるようになります。

## 動機

暗号資産トークン、特にNFTは、実世界の資産（不動産、芸術品、各種権利など）をトークナイズする用途で利用が広がりつつあります。
こうした資産が本格的に金融のメインストリームで受け入れられるためには、所有者の死後に資産を正当に引き継ぐ仕組みが不可欠です。
しかし現在、トークン保有者が死去した場合にデジタル資産を遺族へ渡すための「**標準化された方法**」は存在しません。
結果として、個別実装やオフチェーン手続きに頼るしかなく、互換性や透明性、セキュリティの面で課題が残っていました。

**ERC7878**は、そうしたギャップを埋めるために「**相続可能な（bequeathable）トークン**」の標準インターフェースを定め、相続プロセスをセキュアかつ透明にすることを目指します。
設計にあたっては、現実世界の遺言作成・執行プロセスをなるべく忠実にトレースし、（1）生前の意思表示としての遺言設定、（2）執行者の指名、（3）一定の待機期間を挟んだ移転実行、という自然で理解しやすい流れをオンチェーンに持ち込みます。
これにより、利用者や事業者、規制当局にとっても納得感のある相続手続きが実現し、トークン化資産の社会実装・普及に向けた大きな後押しが期待できます。

| 現状の課題 | 本提案で目指す解決  |
| ------------------- | --------------------------------- |
| 死後の資産移転に関する共通手続きがない | 遺言・執行・待機期間を含む共通インターフェースを定義        |
| 実装ごとの差異でツール互換性が低い   | どのトークンでも同様に扱えるため、ウォレットやDappの対応が容易 |
| 不透明・不統一なオフチェーン運用 | オンチェーンでの透明な手続きと監査可能性を確保           |
| 不正執行や誤作動の懸念 | 待機期間や権限分離により安全性を高める  |

:::message
**ERC7878**は「**トークンを持つ人が亡くなったあと、その意思に沿って誰が・いつ・どうやって資産を受け継ぐのか**」を、ブロックチェーン上でわかりやすく、かつ信頼できるかたちで標準化しようとする取り組みです。
これが整うことで、実世界資産のトークナイズがより実務的になり、広範な利用者にとって安心して扱えるインフラへと近づいていきます。
:::

## 仕様

```javascript
/// @title EIP-7878 Bequeathable tokens
/// @dev See https://eips.ethereum.org/EIPS/eip-7878

pragma solidity ^0.8.0;

/**
 * @notice Bequeathable interface
 */

interface Bequeathable {

   event ObituaryStarted(address indexed owner, address indexed inheritor);
   event ObituaryCancelled(address indexed owner, address indexed cancelledBy);

   function setWill(address[] memory executors, uint256 moratoriumTTL) external;
   function getWill(address owner) external view returns (address[] memory executors, uint256 moratoriumTTL);
   function announceObit(address owner, address inheritor) external;
   function cancelObit(address owner) external;
   function getObit(address owner) external view returns (address inheritor, int256 moratoriumTTL);
   function bequeath(address owner) external;
}
```

### イベント

#### `ObituaryStarted`

```javascript
event ObituaryStarted(address indexed owner, address indexed inheritor);
```

所有者の死亡が宣言され、相続プロセスが開始された時に発行されるイベント。

このイベントは、指定された相続人に資産が渡ることを示す最初の通知です。
実際の移転は待機期間（moratoriumTTL）が経過してから実行されます。

**パラメータ**

* `owner`
  * 元々のトークン所有者。
* `inheritor`
  * 待機期間後にトークンを相続する予定のウォレットアドレス。

#### `ObituaryCancelled`

```javascript
event ObituaryCancelled(address indexed owner, address indexed cancelledBy);
```

宣言された死亡（Obituary）プロセスが取り消された時に発行されるイベント。

このキャンセルは、所有者本人がまだ存命である場合や、相続人または執行者が異議を申し立てた場合に発行されます。
これにより、相続手続きが停止されます。

**パラメータ**

* `owner`
  * 元々のトークン所有者。
* `cancelledBy`
  * このキャンセルを発動したアドレス。
  * 所有者本人または相続人のいずれかです。

### 関数

#### `setWill`

```javascript
function setWill(address[] memory executors, uint256 moratoriumTTL) external;
```

遺言を設定または更新する関数。

所有者は、自分のトークンが死後どのように相続されるかを定める遺言を設定できます。
ここで複数の執行者を登録でき、執行者は相続プロセスを開始する権限を持ちます。
待機期間（moratoriumTTL）は、死亡が宣言されてから実際に相続できるまでの安全な猶予時間です。

**引数**

* `executors`
  * 遺言を執行するアドレスの配列（例：弁護士、配偶者、子どもなど）。
* `moratoriumTTL`
  * 死亡宣言後に相続移転を可能にするまでの秒数。

#### `getWill`

```javascript
function getWill(address owner) external view returns (address[] memory executors, uint256 moratoriumTTL);
```

指定された所有者の遺言情報を取得する関数。

所有者や外部の関係者が、遺言が正しく設定されているかを確認するために利用されます。
執行者一覧と待機期間の設定を返します。

**引数**

* `owner`
  * トークン所有者のアドレス。

**戻り値**

* `executors`
  * 登録されているすべての執行者アドレス。
* `moratoriumTTL`
  * 相続実行までの待機期間（秒単位）。

#### `announceObit`

```javascript
function announceObit(address owner, address inheritor) external;
```

死亡宣言を開始して相続人を明示する関数。

執行者の一人がこの関数を呼び出すことで、相続プロセスが公式に開始されます。
ここで指定された相続人は、待機期間経過後にトークンを受け取る対象となります。

**引数**

* `owner`
  * 現在のトークン所有者。
* `inheritor`
  * 相続を受けるウォレットアドレス。

#### `cancelObit`

```javascript
function cancelObit(address owner) external;
```

進行中の死亡宣言をキャンセルする関数。

相続手続きが不正確または誤って開始された場合、この関数で取り消せます。
所有者本人または執行者によって実行可能です。

**引数**

* `owner`
  * 元のトークン所有者。

#### `getObit`

```javascript
function getObit(address owner) external view returns (address inheritor, int256 moratoriumTTL);
```

死亡宣言の状態を確認する関数。

指定された所有者について、誰が相続人に設定されているのか、また待機期間がどれだけ残っているのかを返します。
もし `moratoriumTTL` が負数であれば、すでに相続可能な状態です。

**引数**

* `owner`
  * トークン所有者。

**戻り値**

* `inheritor`
  * 死亡宣言時に指定された相続人。
* `moratoriumTTL`
  * 残りの待機時間（秒）。負数なら待機期間がすでに終了。

#### `bequeath`

```javascript
function bequeath(address owner) external;
```

相続プロセスを完了させ、トークンを移転する関数。

この関数を呼び出すと、待機期間が満了していれば、相続人にトークンが移転されます。相続人は死亡宣言時に指定されたアドレスです。

**引数**

* `owner`
  * 元のトークン所有者。


## 補足

**ERC7878**は、現実社会で行われている「**遺言の準備から執行まで**」の流れをモデルにしています。
実際の手続きでは、所有者が遺言を書き、執行者を指名して死後に遺言が開示され、相続人が確認されてその内容に従って財産が移転されます。
このプロセスをブロックチェーン上で再現することが目的です。

基本的な流れは以下のようになります。

1. 所有者が遺言を書き、執行者を指名する。
2. 所有者が亡くなった後、執行者が「**死亡の宣言（Obituary）**」を行う。
3. 遺言の内容に従い、相続人が確認される。
4. 指定された相続人に資産が移転される。

しかし、現実社会同様にすべてがスムーズに進むわけではありません。
遺言の執行には争いが発生することもあります。
そこで**ERC7878**では、どの執行者でも「**死亡宣言（Obituary）**」をキャンセルできる仕組みを追加しています。
これにより、相続をめぐる紛争が発生した場合、裁判などオフチェーンで解決を図り、決着後に再度プロセスを開始できる柔軟性を持たせています。

また、インターフェースをできるだけシンプルに保つため、相続時のトークン移転先は1つのアドレスに限定しています。
その後の分配については、そのアドレスを受け取った人が自らの責任で行う設計としています。
これにより、コントラクトの複雑さを増やさずに、基本的な相続機能を提供できます。

## 互換性

**ERC7878**は既存の主要なトークン標準、具体的には **ERC20**, **ERC721**, **ERC1155** と互換性を持っています。
これらのコントラクトに対して追加で実装できるものであり、元のトークンの基本機能には影響を与えません。
つまり、既存の資産やDAppsとの相性を損なうことなく導入できる点が特徴です。

## テストケース

以下にテストコードが格納されています。

https://eips.ethereum.org/assets/eip-7878/test/Bequeath.test.js

## 参考実装

以下に参考実装が格納されています。

https://eips.ethereum.org/assets/eip-7878/contracts/Bequeathable.sol

## セキュリティ

実装者は、アクセス制御（Access Control）に注意する必要があります。
遺言関連の関数を誰でも実行できるようにすると、不正な資産移転が発生するリスクが高まります。
そのため、認可された執行者や所有者のみが関数を呼び出せる仕組みを設けることが必須です。

さらに、**moratoriumTTL（待機期間）** の設定も重要です。
十分な期間を設けることで、悪意のある第三者が執行者ウォレットを乗っ取り、勝手に死亡宣言を行うようなケースを防止できます。
特に高額なトークンを扱う場合には、最低30日程度の待機期間を設けることが推奨されています。
これにより、不正や誤操作が発生した場合でも修正や異議申し立てを行う時間が確保され、潜在的な被害を最小限に抑えることができます。

## 引用

Wamith Mockbill (@wamith), "ERC-7878: Bequeathable Contracts," Ethereum Improvement Proposals, no. 7878, February 2025. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7878.

## 最後に

今回は「トークンの所有者が亡くなった後でも、遺言と執行者、待機期間に基づいてトークンを安全に相続できる仕組みを提案している**ERC7878**」についてまとめてきました！
いかがだったでしょうか？

質問などがある方は以下の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
