ERC-4907: 소유권과 사용권 분리, 임대 가능한 NFT

ERC-4907: 소유권과 사용권 분리, 임대 가능한 NFT

지난 6월 29일, NFT 임대 서비스 Double Protocol을 만든 EmojiDAO가 제안한 ERC-4907이 이더리움 개발팀에게 최종 승인을 받아 30번째 ERC 표준으로 등록되었습니다. ERC-4907의 명칭은 EIP-4907: Rental NFT, ERC-721 User And Expires Extension입니다. 대략적으로 임대, NFT 사용자, 만료 정도의 키워드로 살펴볼 수 있습니다.

해당 표준은 혁신일까요? 이 표준은 어떤 변화를 가져올까요? 새로운 수익 구조를 창출할 수 있을까요? 이번 글에서는 ERC-4907에 대해서 알아보도록 하겠습니다.

💸임대란 무엇인가?

💡
임대를 프로그래밍하기 위한 조건에 대한 간략한 설명입니다. 법률적으로 부정확한 표현이 있거나 일부 부족한 부분이 있을 수 있습니다.

임대(rent)의 사전적 정의는 다음과 같습니다.

돈을 받고 자기의 물건을 남에게 빌려줌 (표준국어대사전)

조금 더 구체적으로 계약 관계로 들어가면 임대차라는 표현을 사용합니다.

임대인이 임차인에게 목적물을 사용/수익하게 할 것을 약정하고, 임차인이 임대인에게 이에 대한 대가를 지급하는 것을 내용으로 하는 계약 (시사경제용어사전)

임대인은 잉여 자산을 유동화시킴으로 인해 수익 창출이 가능하며, 임차인은 저렴한 비용으로 원하는 물품을 사용할 수 있습니다. 대표적으로 주택, 자동차 등 고비용 물품 임대가 일반적입니다.

위 정의에서는 크게 2가지 포인트를 더 살펴볼 수 있습니다.

  1. 무엇을 약정할 것인가?
  2. 어떻게 계약이 성립할 것인가?

임대에서 임차물 소유권은 양도되는 것이 아니며, 임차물 자체를 반환해야 합니다. 이런 상황에서 민법 등에서 약정은 보통 (1)대가 (2)기간 (3)갱신을 명시하고 있습니다.

💡
소유권을 이전하게 되면 소비대차, 무상으로 빌려주면 사용대차입니다.

일반적으로 민법에서는 기간을 2가지로 분류합니다.

  1. 약정 기간이 있는 경우, 기간 내 반납. 다만 지나친 장기 임대는 불가능
  2. 약정 기간이 없는 경우, 임대인 자유롭게 계약해지 통고 가능

갱신도 합의 갱신과 묵시의 갱신이 있습니다. 약정이 있지만 현실에서 계약은 이상적으로 이뤄지는 것은 아닙니다. 예시로는 다음과 같은 문제가 발생할 수 있습니다.

  1. (임차인) 채무 불이행
  2. (임차인) 불법점유와 반환의무 불이행
  3. (임대인) 보증금 반환 불이행
  4. (임대인) 이중계약 또는 일방적 계약 파기

하지만 블록체인에서는 스마트 컨트랙트를 통해 이런 계약 불이행을 할 수 없도록 프로그래밍 가능합니다. 그럼 어떤 방식으로 할 수 있을까요?

🤷‍♂️NFT 임대 방법

NFT 임대는 크게 2가지 방법이 있습니다.

  1. 담보 임대
  2. 무담보 임대

NFT 담보 임대

reNFT의 담보임대 예시. 현재는 reNFT도 무담보임대가 가능하다. 출처: reNFT

초기 NFT 임대 시장은 담보 임대로 시작됬습니다. 담보 임대 절차는 다음과 같습니다.

  1. NFT 소유자는 NFT를 임대 시장에 등록합니다. 등록에서는 시간 별 임대 가격, 최대 사용 기간, 현재 NFT 가격(담보금 기준점)을 작성합니다.
  2. NFT 임차인은 기간을 지정합니다. 이후 기간 x 임대 가격 만큼 비용을 임대인에게 전달합니다.
  3. NFT 가격보다 큰 담보를 프로토콜에 제공합니다. (일반적인 DeFi 시장에서 1.5배)
  4. NFT 자체가 임차인의 지갑으로 전송됩니다.
  5. 기간 내에 반환이 되지 않으면 프로토콜 내 보관되어 있던 담보금이 기존 소유자에게 전송됩니다.
  6. 기간 내에 반환이 되면 담보금은 다시 임차인의 지갑으로 전송됩니다.

여기서 발생하는 문제는 다음과 같습니다.

  • NFT의 가격과 NFT 임대에 사용한 가상화폐의 가격 변동성으로 인해 청산에 대한 위험이 큽니다.
  • 가격이 상승했을 때, 임차인의 단독적 행동이 가능해집니다.
  • 금액적 부담을 줄이기 위해 임대를 하는 사용자에게는 담보금 부담이 큽니다.

위 문제점으로 대다수 NFT 임대 서비스는 무담보 임대로 전환하였습니다.

NFT 무담보 임대 (근데 ERC-4907를 곁들인)

담보 임대를 하는 이유는 NFT 자체를 전달하는 위험성 때문입니다. 이런 문제를 해결하기 위해서는 현실 임대와 같이 소유권이 아닌 사용권만 전달하면 됩니다.

어떻게 소유권과 사용권을 분리할 수 있을까요? 생각보다 간단합니다. 기존 ERC-721은 다음과 같은 테이블에 NFT 소유가 기록되었습니다.

Token Id Owner
1 0x123
2 0x456

여기서 ERC-4907은 테이블 하나를 더 추가하였습니다.

Token Id User, Expires
1 (0x789, 10s)
2 (0x789, 100s)

이 방법을 사용하여 사용자(User)는 특정 dApp에서 사용권에 대해 주장할 수 있습니다. 다만 소유자(Owner) 데이터에는 없으므로 기존에 ERC-721의 기능 중 거래, 거래 승인은 사용하지 못합니다. 또한 사용에 있어 만료 기한이 있어 자동으로 사용을 중지시킬 수 있습니다. 또한 만료 기한에 따라 사용 가능 여부가 결정되므로 임대 이후 온체인 거래가 불필요합니다.

ERC-4907을 사용하면 NFT의 소유권과 사용권을 분리할 수 있으며, 지불 방식만 추가한다면 무담보 임대가 가능합니다. 쉬우면서 좋아보입니다. 몇 가지 더 살펴보겠습니다.

💡ERC-4907에서 생각해볼 포인트

포인트 1. EIP에 작성된 예시 코드는 임대 기능일까?

ERC-4907는 무담보 임대를 명시하고 있는 것은 아닙니다. ERC-4907은 소유자와 사용자를 분리하며, 사용자의 만료 기한을 함께 기록하는 방법론입니다. 그런 이유로 임대 기능을 기대하고 사용한다면 코드에서 쉽게 간과할 수 있는 문제는 setUser 함수입니다.

function setUser(uint256 tokenId, address user, uint64 expires) public virtual{
    require(_isApprovedOrOwner(msg.sender, tokenId), "ERC4907: transfer caller is not owner nor approved");
    UserInfo storage info =  _users[tokenId];
    info.user = user;
    info.expires = expires;
    emit UpdateUser(tokenId, user, expires);
}

setUser 함수는 사용자와 만료 기한을 지정하는 함수입니다. 다만 여기서 문제점은 기존 사용자가 있는 경우에 대해서 예외처리가 없습니다. 이는 임대인이 약정 기간이 있는 임차인이 있음에도 불구하고, 새로운 임차인 계약이 가능하다는 뜻입니다.

보안 고려사항과 커뮤니티에서 이에 대한 문제가 언급되어 있으며, 후에 임대 기능을 추가하는 분들이라면 일방적 계약 파기를 막기 위해 별도의 코드를 작성해야 합니다.

function userOf(uint256 tokenId) public view virtual returns(address){
    if( uint256(_users[tokenId].expires) >=  block.timestamp){
        return  _users[tokenId].user;
    }
    else{
        return address(0);
    }

그 외에도 기한 만료 후 사용권 여부를 호출하면 address(0) 을 반환하는 데, 이 또한 원 소유주의 주소를 반환해야 하는 것이 아닌가 생각이 듭니다. 이런 이유로 코드 전체에서 '표준의 완성도는 아니다'는 느낌도 받았습니다.

포인트 2. 기존 NFT(ERC-721)에서 바로 사용가능한가?

그렇다면 현재 ERC-721로 배포된 NFT를 ERC-4907로 적용할 수 있을까요? 스마트 컨트랙트는 배포 후 수정이 어렵습니다. 새로운 기능을 추가하기 위해 스마트 컨트랙트를 새로 배포하는 게 일반적이지만, 프록시 패턴을 사용하여 수정하는 듯한 업그레이드를 할 수는 있습니다.

그렇다면 현재 유틸리티 NFT를 다른 플랫폼을 통해 임대하면 유틸리티를 사용할 수 있을까요? 이에 대한 정답은 기존 프로젝트가 해당 플랫폼의 데이터를 참조하는 것에 따라 달려있습니다. 즉, 기존 프로젝트가 임대 플랫폼과 협약을 맺은 것이 아니라면 유틸리티를 사용할 수는 없습니다.

짧게 요약하면 현재 여러 플랫폼에서 사용하는 무담보임대 스마트 컨트랙트와 ERC-4907은 엄연히 다릅니다. 참고하시기 바랍니다.

포인트 3. ERC-4907은 최초의 임대 프로토콜인가?

개인적인 견해가 많이 담겨있는 부분입니다.

저도 처음에는 임대를 할 수 있는 프로토콜이 ERC-4907이 최초인 줄 알았으나 그건 아닙니다. 이미 임대 및 대출과 관련해서 다양한 EIP가 제안되었습니다. 예시로 다음과 같은 ERC가 있습니다. 심지어 ERC-4400은 이미 표준으로 등록되어 있습니다.

ERC-4400은 거의 모든 기능이 같으며 expires 계약 만료에 대한 내용이 없다는 차이가 있습니다. EIP-4610도 거의 유사한 기능을 제공하고 있습니다. 또한 ERC-4907보다 EIP-4610을 사용하는 프로젝트가 많습니다.

앞서 EIP 제안이 표준이 되는 과정에 대해 글을 썼지만 몇 가지 과정이 선행되어야 합니다. 과거에 유사한 제안이 있었는지 찾아봐야 하며, 기존에 있다면 이에 대해 표준을 함께 논의하거나 더 나은 방향으로 제안을 해야합니다.

다만 ERC-4907은 초기 제안부터 이전 방법론에 대한 논의가 전혀 없었습니다. 또한 ERC-4400가 표준이 되기 전부터 협업 논의를 요청하였으나, 독자적인 진행을 강행하였습니다. (개인적으로는 EmojiDAO(Double Protocol 창업팀)의 업적 독점 같은 느낌이라 더 안좋게 보입니다. ERC-4400이 표준이 되어서 다행이지 아니었으면 정말 많은 논쟁이 이뤄졌을거라 생각합니다.)

EIP4907: ERC-721 User And Expires Extension
eip: title: ERC-721 User And Expires Extension description: Standard interface extension for ERC-721 user and expires. author: EmojiDAO (dev@emojidao.org) discussions-to: status: Final type: category (*only required for Standards Track): created: 2022-03-11 requires (*optional): <EIP 16…
ERC-4400 저자의 협업 관련 논의는 여기서 살펴볼 수 있습니다.

그 외에도 현재 EmojiDAO에서 제안한 EIP들이 다른 EIP에 비해 Last Call에 빨리 올라간 것에 대해서도 의문이 듭니다. (현재 동저자의 EIP에서 2개가 Last Call 상태에  있음)

EIP 표준 순서도. Review에서 Last Call까지 가는 과정이 비교적 오래 걸리는 데 반해 ERC-4907은 너무 빨랐습니다.

다른 ERC 표준이 최소 6개월 이상 걸리는 것에 비해 ERC-4907은 약 3개월만에 표준까지 합의에 이르렀습니다. 물론 방법론 자체가 간단하기는 하지만 충분한 논의를 통한 합의가 이뤄지기 전에 표준이 된 것은 조금 아쉽습니다. EIP 에디터의 성급한 결정인지 아니면 그만큼 좋은 표준인지는 지켜보면 좋을 것 같습니다.

마치며

ERC-4907은 혁신적인 프로토콜은 아니며, 완성도가 높은 표준도 아닙니다. 허나 이러한 논의가 반복되는 것을 보면 새로운 시장에 대해 기대해볼 수 있습니다. 앞으로 Web3 생태계의 다양한 BM이 나올 것으로 예상됩니다.

  • 홀더의 새로운 수익 창출
  • 구독 모델
  • 공유 경제

다만 유틸리티나 블록체인 게임에서 임대할만큼 매력적인 NFT 프로젝트는 적습니다. 플랫폼이나 SaaS가 아닌 좋은 프로젝트가 나오길 기대하는 요즘이네요.

Reference