ERC-7878 상속 가능한 컨트랙트 (Bequeathable Contracts)

Final · 토큰 · 2025-02-01 작성

토큰 소유자가 미리 유언장을 설정해 두면, 사망 후 집행인이 정해진 대기 기간을 거쳐 토큰을 상속인에게 넘길 수 있게 하는 표준 인터페이스입니다.

왜 필요한가

암호화폐 토큰, 그중에서도 NFT(대체 불가능 토큰)는 실물 자산을 토큰으로 만드는 데 쓰이기 시작했습니다. 주류 금융이 이런 토큰을 받아들이려면 소유자가 세상을 떠난 뒤 토큰을 물려줄 길이 있어야 하는데, 지금은 토큰 보유자가 사망했을 때 디지털 자산을 넘겨줄 표준화된 방법이 없습니다. 또한 상속 과정에는 분쟁이 생길 수 있으므로, 실제 이전이 일어나기 전에 누군가 개입해 절차를 멈출 수 있는 안전장치도 필요합니다. 이 표준은 현실 세계의 유언장 작성과 집행 절차를 본떠서 소유자가 미리 유언장(Will)을 쓰고 집행인(executor)을 지정해 두면 사망 후 정해진 대기 기간을 거쳐 토큰이 상속인에게 안전하고 투명하게 넘어가도록 하는 공통 인터페이스를 정의합니다.

구현해야 하는 것

심층 설명

Bequeathable 인터페이스 의무 구현

이 표준을 따르는 컨트랙트는 Bequeathable 인터페이스를 반드시(MUST) 구현해야 합니다. 인터페이스는 함수 6개와 이벤트 2개로 구성됩니다. 함수는 setWill(유언장 설정·갱신), getWill(유언장 조회), announceObit(부고 알림으로 상속 절차 시작), cancelObit(부고 취소), getObit(부고 상태 조회), bequeath(상속인에게 토큰 이전)입니다. 이벤트는 부고가 알려질 때 발생하는 ObituaryStarted와 부고가 취소될 때 발생하는 ObituaryCancelled입니다. 헤더 기준으로 ERC-20, ERC-165, ERC-721, ERC-1155를 요구합니다.

setWill과 getWill: 유언장 설정과 확인

setWill은 토큰 소유자가 집행인 주소 배열(executors)과 대기 시간(moratoriumTTL, 초 단위)을 등록하는 함수입니다. 집행인은 법률 자문, 배우자, 자녀처럼 여러 명을 지정할 수 있지만 절차 시작과 이전에는 그중 한 명만 있으면 됩니다. 이 함수를 다시 호출하면 기존 유언장을 덮어써야 합니다. moratoriumTTL은 부고가 알려진 시점부터 실제 상속 이전이 가능해질 때까지 기다려야 하는 시간으로, 이전 전에 개입할 수 있게 하는 안전 완충 장치입니다. getWill은 소유자 주소를 받아 집행인 목록과 moratoriumTTL을 돌려주며, 소유자가 유언장을 올바르게 설정했는지 확인하는 용도입니다.

announceObit과 cancelObit: 절차 시작과 취소

announceObit은 소유자 주소와 상속인(inheritor) 주소를 받아 부고 절차를 시작하고, 원래 소유자와 상속인을 담은 ObituaryStarted 이벤트를 발생시킵니다. cancelObit은 진행 중인 부고를 취소하는 함수로, 집행인 누구나 호출할 수 있고 소유자가 살아 있다면 소유자 본인도 호출할 수 있습니다. 취소 시 ObituaryCancelled 이벤트가 발생하며 누가 취소했는지(cancelledBy)가 기록됩니다. Rationale에 따르면 집행인 누구든 취소할 수 있게 한 것은 분쟁 처리를 위한 설계입니다. 다툼이 생기면 법정에서 가리고, 문제가 정리된 뒤 부고 절차를 다시 시작하면 됩니다.

getObit과 bequeath: 상태 조회와 이전 실행

getObit은 소유자 주소를 받아 부고 때 지정된 상속인과 moratoriumTTL까지 남은 시간을 돌려줍니다. 반환되는 남은 시간은 int256 형식이며, 음수이면 대기 시간이 이미 지나 토큰을 물려줄 수 있다는 뜻입니다. bequeath는 토큰을 상속인에게 실제로 이전하는 함수로, 이전은 announceObit이 호출될 때 지정된 상속인 주소로 이루어져야 합니다. Rationale에 따르면 인터페이스를 단순하게 유지하기 위해 모든 토큰을 하나의 주소로 이전하며 이후 추가 분배는 그 주소를 받은 사람의 책임입니다.

현실의 유언 집행 절차를 본뜬 설계

이 표준은 현실에서 유언장이 준비되고 집행되는 과정을 따릅니다. 소유자가 유언장을 쓰면서 집행인을 지명하고, 사망하면 집행인이 부고를 알리고, 유언장이 읽혀 상속인이 확인되고, 유언의 뜻에 따라 소유권 이전이 집행되는 순서입니다. 다만 현실은 늘 순탄하지 않고 분쟁이 자주 생기므로, 인터페이스를 단순하게 유지하면서도 집행인 누구나 부고를 취소할 수 있는 장치를 넣었습니다.

기존 토큰 표준과의 호환

이 표준은 ERC-20, ERC-721, ERC-1155 같은 기존 토큰 표준과 호환됩니다. 이들 표준의 핵심 기능에 영향을 주지 않으면서 함께 구현할 수 있습니다. 즉 이미 쓰이는 토큰 형식 위에 상속 기능을 더하는 방식입니다. 테스트 케이스(Bequeath.test.js)와 참조 구현(Bequeathable.sol)이 원문 자산으로 제공됩니다. 이 제안의 상태는 Final로 확정된 표준입니다.

쓸 때 주의할 점

ERC 원문 · ← ERCs