ERC6551: NFT와 계약 지갑이 만났을 때

스펙트럼 랩스
2023-09-28 17:00:18
수집

저자:Ash Li, Noah Ho


ERC -6551 프로토콜에 대한 커뮤니티의 논의가 점차 뜨거워지고 있으며, 이 프로토콜은 NFT에 대한 거대한 확장 가능성을 제공합니다. ERC -6551은 토큰 바인딩 계정(Token Bond Account, TBA)을 통해 각 NFT에 고유한 계약 지갑을 생성하여 자산을 보유하고 관련 행동을 기록할 수 있게 합니다. 이는 비대체 토큰(Non-Fungible Token, NFT)의 인증 및 조합형 NFT의 가능성을 창출합니다. 깊이 탐구해보면, ERC -6551은 실제로 NFT에 완전한 기능을 갖춘 지갑을 제공하며, 이 지갑의 "열쇠"는 바로 NFT 자체입니다. 본 문서에서는 NFT의 표준 발전 과정을 되짚어보고, 이전의 NFT 확장 시도에 대해 다룰 것입니다. TBA의 핵심이 계약 지갑인 만큼, 계약 지갑에 대해서도 간략히 소개하겠습니다. 마지막으로, 이 프로토콜의 구현 세부 사항과 잠재적인 응용 전망을 심도 있게 탐구할 것입니다.

1. NFT 표준 역사 및 현황

NFT는 특별한 암호화폐 및 디지털 예술 자산으로서 예술 작품에 새로운 디지털 매개체를 제공하고 블록체인 기술의 응용 장면을 확장했습니다. 전통적인 동질화 토큰과 달리, 각 NFT는 독특하며 특정 메타데이터(예: 예술 작품, 게임 아이템, 음악 등 전자 자료)와 연결되어 있습니다. 따라서 NFT는 전자 데이터의 소유권 증명으로 사용되어 사람들이 수집하거나 거래할 수 있습니다. 2014년 5월 3일, 디지털 아티스트 Kevin McCoy는 최초의 알려진 NFT 작품 "Quantum"을 창작했습니다. 이는 다양한 형태로 구성된 픽셀화된 팔각형으로, 환각적인 방식으로 표현되었습니다. 그러나 ERC -721(Ethereum Request for Comments 721)의 출현까지 NFT는 실제로 통일된 표준을 갖지 못했으며, 이는 다양한 프로젝트에서 개발자들에게 편리함을 제공했습니다.

ERC -721

ERC -721은 CryptoPunks의 발전 과정과 밀접하게 연결되어 있습니다. CryptoPunks는 2017년에 출시되었으며, 10,000개의 독특한 24x24 픽셀 아트 이미지를 포함하고 있습니다. 그 성공은 개발자와 커뮤니티의 광범위한 관심을 끌어내어 더 많은 사람들이 NFT의 거대한 잠재력을 인식하게 했습니다. 이후, 이는 많은 NFT 프로젝트의 기초가 되었고 ERC -721 표준의 제정을 촉진했습니다. 이 표준은 CryptoKitties의 CTO Dieter Shirley에 의해 창립되었습니다. 2018년 1월, William Entriken, Dieter Shirley, Jacob Evans 및 Nastassia Sachs는 ERC -721 표준을 공동으로 제안했습니다. 이 비대체 토큰 표준은 스마트 계약에서 토큰 관련 ABI를 구현하여 이더리움에서 독특한 디지털 자산을 생성, 관리 및 이전하는 기반을 마련하였으며, 예술가, 수집가 및 디지털 예술 시장의 새로운 장을 열었습니다.

ERC -721의 주요 특징은 다음과 같습니다:

  • 독특성: ERC -20 토큰과 달리(동질화되어 있으며, 각 토큰은 다른 토큰과 완전히 동일함), 각 ERC -721 토큰은 독특합니다.
  • 소유권 및 이전: 이 토큰 표준은 특정 토큰의 소유자를 확인할 수 있게 하며, 소유자 또는 승인된 개인이 토큰을 이전할 수 있게 합니다.
  • 메타데이터 연관: 각 토큰과 메타데이터를 연관시킬 수 있으며, 이는 토큰의 이미지, 설명 또는 기타 관련 속성을 포함할 수 있습니다.

표준으로서의 보장을 위해, ERC -721은 다음과 같은 주요 메서드와 이벤트를 정의했습니다:

balanceOf(), ownerOf(), approve(), getApproved(), setApprovalForAll(), isApprovedForAll(), transferFrom(), safeTransferFrom 등의 메서드와 Transfer(), Approval() 등의 이벤트.

간단히 말해, ERC -721 표준은 이더리움에서 독특한 자산을 위한 메커니즘을 제공하여 각 자산의 독특성과 소유권을 보장하고, 이를 검증, 거래 및 관리할 수 있게 합니다. ERC -721은 비대체 토큰의 표준으로서 디지털 예술 및 수집품 분야에서 폭발적인 성공을 거두었습니다. ERC -721은 중요한 정의를 내렸습니다. 그러나 NFT 응용에 많은 유명한 프로젝트를 가져왔음에도 불구하고, 여전히 대리 작업을 수행할 수 없거나 다른 체인상의 자산과 직접 연결될 수 없는 등의 몇 가지 한계가 존재합니다. 이러한 문제를 해결하기 위해 커뮤니티는 EIP3664 및 EIP3525와 같은 일련의 확장 및 새로운 표준을 제안했습니다.

ERC -3664

2021년 5월, DRepublic 팀은 EIP -3664라는 NFT 속성 확장 프로토콜을 제안했습니다. 이 제안은 ERC -721 또는 ERC -1155와 같은 주류 NFT 표준의 속성 표현력이 부족하고, NFT 간의 통합이 어려우며, 속성 저장의 중앙화 등의 한계를 해결하는 기발한 방법을 제공합니다.

구체적으로, EIP -3664는 기존의 ERC -721 및 ERC -1155 표준을 수정할 필요가 없습니다. NFT의 민팅(mint) 방법에서 I ERC 721 Receiver 또는 I ERC 1155 Receiver 인터페이스의 콜백 함수를 사용하여 NFT에 동적으로 속성을 추가합니다. 또는 민팅 방식을 재작성하여도 가능합니다. 이 프로토콜을 사용하면 하나의 NFT에 무제한으로 여러 속성을 추가할 수 있습니다.

EIP -3664에서는 모든 속성이 I ERC 3664 인터페이스를 구현합니다. 기본 속성에는 ID, 이름, 기호, URI 주소, 잔액 등 몇 가지 기본 필드가 포함되어 NFT의 메타데이터를 설명하는 데 사용됩니다. EIP -3664를 통해 NFT의 속성 확장이 더욱 유연하고 사용자 정의 가능해졌습니다. 이는 NFT의 속성 기능을 위한 표준화된 구현 방식을 제공하며, 기존 NFT 생태계와 원활하게 통합됩니다.

ERC -3525

EIP -3525는 반동질화 토큰(SFT)을 도입하며, 이는 대체 가능한 토큰(FT)과 비대체 가능한 토큰(NFT) 사이의 자산으로 볼 수 있습니다. NFT와 유사하게, SFT 토큰은 하나의 지갑 주소에서 다른 주소로 완전히 이전될 수 있습니다. 그러나 FT와 유사하게, SFT는 서로 다른 토큰 간에 일부 가치를 이전할 수 있도록 허용합니다. 예를 들어, 토지의 일부 "사용 연한"을 다른 토지로 이전할 수 있습니다. 의심할 여지 없이, SFT는 사용자 정의 가능성에서 FT를 초월하며, 효율성에서 NFT를 초월합니다.

ERC3525는 다층 SFT 구조를 구축할 수 있게 하여 러시아 인형과 유사하게 더 복잡한 가상 세계를 구현하고 서로 다른 계층 간의 상호작용 규칙을 정의합니다. ERC3525를 사용하면 NFT는 임의의 디지털 통화를 탑재할 수 있습니다. 이는 NFT에 경제적 가치를 가진 토큰을 내장하여 더 풍부한 기능과 상호작용 방식을 실현할 수 있음을 의미합니다. 예를 들어, 하나의 SFT는 가치를 지닌 NFT를 포함할 수 있으며, NFT 내에 다른 토큰을 중첩할 수 있습니다. ERC3525를 통해 개발자는 스마트 계약을 통해 SFT의 규칙과 논리를 정의하고 특정 행동 규칙 및 거래 규칙을 사용자 정의할 수 있습니다. 이러한 특성은 ERC3525를 NFT 분야의 중요한 표준 중 하나로 만들며, 개발자와 프로젝트 측에 더 많은 창의적인 공간을 제공합니다.

2. ERC -6551

소개

NFT의 확장성과 실용성을 강화하기 위해, ERC -6551 제안은 각 NFT에 이더리움 사용자와 동일한 권리를 부여하는 것을 목표로 합니다. 이는 NFT가 자산을 보유할 수 있을 뿐만 아니라 거래 기록을 기록할 수 있게 하여 그 응용 범위를 크게 향상시킵니다. 이 제안에 따라 NFT의 소유자는 NFT를 위해 TBA(토큰 바인딩 계정)라는 전용 계약 지갑을 생성하여 체인상의 다양한 작업을 수행할 수 있습니다. 이는 통합된 레지스트리(Registry)를 정의함으로써 실현됩니다. 이 레지스트리는 모든 NFT에 고유하고 고정된 스마트 계약 계정 주소를 할당하며, 해당 계정의 제어권이 NFT의 소유자에게 완전히 있음을 보장합니다. 주목할 점은 이 제안이 기존의 ERC -721 또는 1155 표준과 완전히 호환되며, 수정이 필요 없고 대부분의 이더리움 계정을 지원하는 인프라에 적합하다는 것입니다.

이 혁신은 NFT에 이더리움 계정과 동일한 기능을 제공하여 NFT에 많은 새로운 응용 장면을 열어줍니다. 예를 들어, 현실의 복잡한 자산(예: 역할 수행 게임의 캐릭터, 여러 부품으로 구성된 자동차, 다각화된 투자 포트폴리오, 심지어 출석 회원 카드 등)도 이 제안을 통해 NFT 형태로 전환될 수 있습니다. 또한, 이 제안은 모든 기존 체인 자산 표준과 호환될 뿐만 아니라 미래의 새로운 자산 표준에 대한 확장 가능성을 제공합니다.

앞서 언급한 바와 같이, ERC -6551은 각 NFT에 체인 상호작용을 위한 전용 지갑을 생성할 수 있게 합니다. 이 지갑은 우리가 Metamask와 같은 플랫폼에서 자주 사용하는 지갑과는 다르며, 실제로는 이더리움 네트워크에 배포된 스마트 계약인 계약 지갑입니다. 그 구현 방식을 심도 있게 탐구하기 전에, 먼저 이 두 가지 지갑 간의 주요 차이점을 이해해 보겠습니다.

계약 계좌

이더리움 계좌는 이더(ETH) 잔액을 보유하고 있으며 이더리움 네트워크에서 거래를 보낼 수 있는 실체입니다. 계좌는 사용자가 제어할 수 있으며, 스마트 계약으로 배포될 수도 있습니다.

이더리움에서 계좌는 4개의 필드를 가집니다:

  • nonce: 외부 계좌가 보낸 거래 수 또는 계약 계좌가 생성한 계약 수를 표시하는 카운터입니다. 각 계좌는 주어진 랜덤 수를 가진 거래를 한 번만 실행할 수 있어 재전송 공격을 방지합니다. 재전송 공격은 서명된 거래를 여러 번 방송하고 반복 실행하는 것을 의미합니다.
  • balance: 잔액 회계 모델로, 이 주소가 보유한 Wei 수량입니다. Wei는 이더의 단위입니다.
  • codeHash: 이 해시는 이더리움 가상 머신(EVM)에서의 계좌 코드를 나타냅니다. 계약 계좌는 다양한 작업을 수행할 수 있는 프로그래밍된 코드 조각을 가집니다. 계좌가 메시지 호출을 받을 경우, 이 EVM 코드를 실행합니다. 다른 계좌 필드와 달리 변경할 수 없습니다. 모든 코드 조각은 상태 데이터베이스의 해당 해시 아래에 저장되어 후속 검색을 위해 사용됩니다. 이 해시 값은 codeHash라고 합니다. 외부 모든 계좌의 경우, codeHash 필드는 빈 문자열의 해시입니다.
  • storageRoot: 저장 해시입니다. Merkle Patricia trie의 루트 노드의 2^56 비트 해시가 계좌의 저장 내용을 인코딩하며(2^56 비트 정수 값 매핑), Trie로 인코딩됩니다. 이는 2^56의 Keccak 2^56 비트 해시의 매핑된 비트 정수 키를 사용하여 RLP 인코딩된 2^56 비트 정수 값으로 인코딩됩니다. 이 Trie는 이 계좌의 저장 내용의 해시를 인코딩하며, 기본적으로 비어 있습니다.

이더리움 계좌는 총 2종류로 나뉩니다: 외부 계좌(사용자가 개인 키를 관리)와 계약 계좌입니다.

  1. 외부 계좌(Externally Owned Accounts, EOA): 개인 키로 제어되며, codeHash가 비어 있습니다. 이 계좌는 암호화폐를 보내고 받을 수 있으며 스마트 계약과 상호작용할 수 있습니다. 우리가 자주 사용하는 Metamask 지갑이 여기에 해당합니다.
  2. 계약 계좌(Contract Account, CA): 개인 키가 없으며, codeHash가 비어 있지 않습니다. 이는 이더리움 네트워크에 배포된 스마트 계약으로, 외부 계좌가 해당 계약과 상호작용하여 계약 지갑을 제어합니다.

CA에는 표준 계약 지갑이 있으며, 예를 들어 ERC4337 계좌 추상화 지갑과 ZkSync 및 StarkNet와 같은 네이티브 AA 유형의 지갑이 있습니다. 이들 체인에는 전통적인 거래가 없으며 모든 계좌는 계약 계좌입니다. 현재 지갑은 소유권 및 서명 권한 문제를 가지고 있으며, 개인 키 보호가 어려워 사용자가 개인 키를 잃어버리면 모든 자산을 잃게 되고, 서명 알고리즘의 권한이 적고 비용이 ETH로만 결제되는 단일 통화 정산 문제 등이 있습니다.

합의 프로토콜 계층을 변경하지 않고도 이더리움이 계좌 추상화 방향으로 나아가도록 도울 수 있으며, ERC4337은 스마트 계약을 통해 계좌 추상화의 업그레이드를 구현하여 원래 전체 거래의 시작부터 블록체인에 포함되는 과정까지 업데이트하여 UserOperation을 도입하고, 이는 사용자를 대신하여 전송되는 거래의 구조를 설명합니다. Bundler는 이러한 메모리 풀의 거래를 패키징하여 사용자의 거래 비용을 낮추고, 다중 서명 시나리오를 더욱 완전하게 하여 사회적 복구 등의 기능 업그레이드를 실현합니다.

구현

ERC -6551 표준에 따라 NFT의 소유자는 Register Contract와 상호작용하여 이더리움 네트워크 또는 기타 EVM을 지원하는 블록체인에 새로운 스마트 계약인 TBA를 배포할 수 있습니다. TBA의 소유권은 NFT의 소유자에게 있으며, NFT의 이전에 따라 변경됩니다. 오직 NFT의 소유자만이 이 TBA를 제어할 수 있습니다. TBA의 코드는 즉, 그 규칙은 구현 계약(Implementation Contract)의 호출에서 기인합니다.

다음 그림은 ERC -6551의 작동 원리를 보여줍니다: 사용자가 NFT의 소유자라고 가정할 때, 그 User Account는 Contract A의 #123 및 Contract B의 #456 두 개의 NFT를 보유하고 있습니다. User Account는 무허가 등록표인 등록 계약(Register Contract)과 상호작용하여 NFT 정보와 구현 계약의 주소를 입력하여 TBA를 생성합니다. User Account가 등록 계약을 호출할 때, Token #123의 NFT 정보와 Implementation A(0x321 …)의 주소를 입력하면, 계약 지갑 Account A(0x123 …)가 생성됩니다. 그 소유권은 NFT Token #123의 소유자에게 있으며, 기능과 규칙은 Implementation A의 규정에 따릅니다. User Account가 다시 등록 계약을 호출하고 입력 내용을 변경하면 또 다른 TBA가 생성됩니다. 그러나 특정 NFT와 구현 계약에 대해서는 오직 하나의 고유한 TBA만 존재할 수 있습니다.

TBA의 생성 및 행동은 전적으로 등록 계약과 구현 계약에 의존합니다. 이러한 계약의 규칙은 TBA의 특성과 기능을 결정합니다. EIP -6551은 이러한 계약을 위한 코드 템플릿을 제공합니다. 우리는 후속 부분에서 이러한 템플릿을 심도 있게 탐구할 것입니다. 그러나 이러한 템플릿은 유일한 선택이 아니며, 그 코드가 TBA의 배포 방식과 기능 구현을 결정합니다. 이는 개발자에게 광범위한 확장 가능성을 제공합니다. 예를 들어, 등록 계약은 어떤 NFT가 해당 등록 계약을 사용하여 등록할 자격이 있는지를 설정할 수 있습니다. 구현 계약은 TBA의 기능과 규칙을 정의할 수 있으며, 예를 들어 TBA의 일일 거래 한도를 설정하거나 보유할 수 있는 자산 유형을 지정할 수 있습니다.

구현 계약 (Implementation Contract)

등록 계약을 통해 생성된 모든 TBA는 해당 계좌에 사용할 구현 계약을 선택할 수 있습니다. 구현 계약은 스마트 계약 계좌의 기능과 규칙을 기록합니다. 최소한 구현 계약은 다음 기능을 제공해야 합니다:

executeCall(): 외부 계약과 상호작용하는 임의의 스마트 계약 함수를 실행하는 함수입니다. 예를 들어, NFT에 연결된 계좌에서 포함된 자산을 판매하려면 Uniswap 계약의 함수를 호출해야 할 수 있습니다.

  • executeCall()은 스마트 계약 계좌를 대신하여 해당 함수 호출을 수행할 수 있게 하여, 원하는 자산을 매매/교환할 수 있게 합니다.
  • token(): 이 계좌에 바인딩된 NFT의 식별자를 반환하는 읽기 전용 뷰 함수입니다. 이는 체인 ID(주 네트워크, Polygon, Optimism 등에서 NFT 여부), NFT 계약 주소 및 NFT 토큰 ID를 반환합니다.
  • owner(): 이 계좌에 바인딩된 NFT의 소유자의 주소를 반환합니다. 위의 예에 따르면, 이는 User Account의 주소가 됩니다.
  • nonce(): 이 스마트 계약 지갑의 현재 nonce를 반환합니다. 각 성공적인 거래는 nonce를 1 증가시키며, 초기 값은 0입니다.

마지막으로, 함수 호출은 아니지만, 토큰 바인딩 계좌의 구현 계약은 원주 자산(예: ETH)을 해당 주소로 직접 수신할 수 있도록 receive() 함수를 가져야 합니다.

등록 계약 (Register Contract)

다음은 Solidity 언어로 작성된 Registry 스마트 계약입니다:

이 코드는 특정 NFT에 대한 계좌 생성을 위해 필요한 매개변수가 implementation() 실행 계약 주소, chainId() 목표 체인의 ID, tokenContract() 해당 NFT 소속 계약, tokenId() 해당 NFT 소속 ID, 혼합 값 salt를 포함함을 나타냅니다. Fast Dapp의 Demo에 따르면 NFT 계좌를 생성하는 데 NFT 계약 주소와 ID만 입력하면 나머지 필드는 자동으로 생성되며, 단계가 비교적 간단합니다.
ERC -6551 제안은 새로운 토큰 표준으로, 기존 NFT 표준에 대한 혁신적인 업그레이드에 해당하며, ERC -6551은 기존 ERC -721 NFT와 호환되는 무허가 등록표를 사용합니다. 이 등록표는 TBA의 공장 및 디렉토리 역할을 하는 스마트 계약입니다. 누구나 등록표의 함수를 호출하고 소액의 수수료를 지불하여 모든 ERC -721 토큰에 대해 TBA를 생성할 수 있습니다. 등록표의 스마트 계약은 두 가지 함수를 가집니다:

  • createAccount(): 주어진 ERC -721 NFT 및 특정 구현에 대해 새로운 토큰 바인딩 계좌를 배포합니다.
  • account(): 주어진 ERC -721 NFT의 토큰 바인딩 계좌 주소를 반환하는 읽기 전용 뷰 함수입니다.

잠재적인 응용

Azuki 사건 이후, 단일 정적 이미지의 NFT의 매력은 크게 감소하였고, 이는 많은 주요 프로젝트의 가치 하락으로 이어졌습니다. 그러나 높은 상호작용성과 조합성을 가진 NFT는 시장 회복의 열쇠가 될 수 있습니다. 블록체인 게임, 음악, DID에서 메타버스에 이르기까지 이러한 분야는 무한한 잠재력으로 가득 차 있습니다.

NFT는 단순한 자산이 아닙니다; 그들은 자신의 체인 상의 정체성과 컨테이너 속성을 가지고 있으며, 분산형 애플리케이션(Dapps)과 상호작용할 수 있습니다. 이는 NFT와의 모든 상호작용이 NFT 자체에 직접 기록되며, 그 소유자의 계좌가 아닌 것을 의미합니다. 또한, NFT는 스마트 계약을 기반으로 하기 때문에 그 행동과 상호작용은 계약 규칙에 따라 정의되고 제어될 수 있어 유연성과 안전성을 제공합니다.

ERC -6551 프로토콜은 NFT 분야에 혁신적인 변화를 가져오며, 초점을 사용자 지갑에서 NFT 자체로 전환하여 거래, 게임, 추적 및 거버넌스 등의 새로운 가능성을 제공합니다. NFT의 추가 발전과 함께 이 프로토콜은 우리를 더욱 개인화되고 상호작용하며 의미 있는 디지털 시대에 이끌 것입니다.

다음 네 가지 잠재적인 응용 방향을 고려해 보십시오:

  • 자산 패키징: NFT는 자산 컨테이너로 사용될 수 있으며, 단일 NFT 내에서 여러 자산을 패키징하고 거래할 수 있습니다. 예를 들어, 음악 앨범 NFT는 여러 곡의 NFT를 포함할 수 있으며, 예술 컬렉션 NFT는 여러 예술 작품 NFT를 포함할 수 있습니다. 이는 수집을 더욱 체계화할 뿐만 아니라 거래 시 Gas 비용을 줄일 수 있습니다.
  • 포트폴리오: NFT는 자산 관리 도구로 사용될 수 있으며, 사용자가 하나의 TBA 내에서 여러 토큰을 보관하고 관리할 수 있게 합니다. 또한, NFT 소유자는 제3자 관리자가 자산 거래를 수행하도록 권한을 부여할 수 있으며, 스마트 계약 내에서 관리자의 권한을 명확히 정의하여 자산의 안전성을 보장할 수 있습니다.
  • NFT 신원 관리: NFT는 체인 상의 모든 활동을 기록하여 진정한 체인 상의 신원이 될 수 있습니다. 사용자는 단일 ENS 지갑을 사용하여 자신을 대표하고, 다양한 TBA를 사용하여 서로 다른 커뮤니티나 애플리케이션에서의 역할을 나타낼 수 있습니다.
  • 모듈화 NFT: 주 NFT는 TBA를 생성하여 그 구성 요소 NFT를 저장할 수 있습니다. 예를 들어, 게임에서 캐릭터 NFT는 다양한 장비 NFT를 장착할 수 있습니다. 이는 메타버스의 구현을 더욱 가능하게 할 뿐만 아니라 AI와 결합하여 더욱 사실적인 NPC 캐릭터를 생성할 수 있습니다.

결론적으로, NFT의 미래는 무한한 가능성으로 가득 차 있습니다. 자산 관리에서 신원 인증, 모듈화된 게임 디자인에 이르기까지, NFT는 디지털 세계에서 중요한 역할을 할 것입니다.

체인캐처(ChainCatcher)는 독자들에게 블록체인을 이성적으로 바라보고, 리스크 인식을 실제로 향상시키며, 다양한 가상 토큰 발행 및 조작에 경계해야 함을 상기시킵니다. 사이트 내 모든 콘텐츠는 시장 정보나 관련 당사자의 의견일 뿐이며 어떠한 형태의 투자 조언도 제공하지 않습니다. 만약 사이트 내에서 민감한 정보를 발견하면 “신고하기”를 클릭하여 신속하게 처리할 것입니다.
체인캐처 혁신가들과 함께하는 Web3 세상 구축