0xmons(XMON)는 생성형 픽셀 아트와 블록체인 수집품을 결합한 실험적인 NFT 프로젝트입니다. 밈과 포켓몬의 조합이지만, 30% 더 강력합니다. 신경망으로 생성된 픽셀 몬스터를 소환하는 NFT 플랫폼입니다.[2] [3]
0xmons는 신경망으로 생성된 픽셀 몬스터를 소환하는 NFT 플랫폼입니다. (XMON)은 암호화폐이며 이더리움(ETH) 플랫폼에서 작동합니다.
각 작품은 생성적 적대 신경망(GAN)에 의해 생성됩니다. 이를 통해 각 NFT는 완전히 고유하며, NFT 데이터를 완전히 온체인에 등록할 수 있는 옵션이 있습니다.[1]
사용자는 #0부터 자신이 생성한 모든 0xmons를 볼 수 있습니다. 0xmons NFT를 발행하는 사용자는 수집품의 전체 내용(이름, 이미지, 설명)을 온체인에 인코딩할 수 있습니다.[1]
이러한 NFT 픽셀 아트는 GAN의 광기 어린 악몽에서 만들어집니다. 애니메이션으로 절차적으로 형성되며, 이름은 대규모 언어 모델에서 가져옵니다. 이더리움 블록체인에서 수집된 완전히 무작위가 아닌 비트입니다.[1]
0xmons NFT의 목표는 OG(Original Gangster)의 속성에 의존하지 않고 새로운 가치 있는 NFT 자산 클래스를 부트스트랩하는 것입니다. 희소성, 미학, 생성 프로세스 및 기술의 조합은 이것들이 바람직한 기본적인 이유입니다.
주력 NFT 외에도 더 넓은 NFT 생태계의 다른 가치 있는 부분을 만들기 위해 노력하고 있습니다. 번들러를 통해 NFT가 범용 자산 바스켓이 되는 반면, 멀티센더를 통해 어떤 토큰이든 어디든 저렴하게 보낼 수 있습니다.[3]
현재 NFT의 기술을 확장하고, (XMON) 토큰에 유틸리티를 제공하며, 많은 멋진 것을 만들기 위해 노력하고 있습니다.
0xmons는 합성 가능한 의미에서 생성형 프로젝트가 아닙니다. 이미지는 생성 모델에서 가져옵니다. 하지만 이미지는 모든 라이브러리와 모델 매개변수를 고려할 때 최소 1GB 크기의 GAN에서 생성됩니다.
계약 저장소에 필요한 모델 매개변수를 직접 저장하는 방법은 없으며, 모든 것을 작동하는 데 필요한 복잡한 행렬 곱셈 라이브러리를 구현하는 것도 마찬가지입니다.
또한 이미지는 더 작은 이미지로 구성되지 않으므로 어떤 형태의 사전 계산에도 의존하여 성능 향상을 얻을 수 없습니다.[1]
사용된 솔루션은 GAN을 온체인으로 이동하지 않습니다. 또한 이미지를 직접 계약 저장소로 이동하지도 않습니다. 대신 2017년 프로젝트에서 블록체인에 가슴을 넣는 것에 대한 메모를 참고했습니다. 저렴한 calldata를 악용하려고 했습니다.[2]
또한 0xmon 이미지를 직접 저장하는 것은 실현 가능하지 않습니다. 모델은 (명백히 24kb 제한을 크게 초과하기 때문에) 온체인에 저장할 수 없으며, 이미지를 더 작은 조각으로 합성할 수 없는 이유입니다(이미지를 만드는 데 합성이 사용되지 않음).
이 모든 이유는 물론 가스 비용 때문입니다. 현재 uint256(즉, 256비트 = 32바이트)을 스마트 계약 저장소에 직접 저장하는 데 20,000 가스가 소요됩니다.
무손실 GIF 압축을 사용하더라도 0xmons 이미지의 크기는 10kb에서 50kb까지 다양합니다. 매우 조밀한 패킹을 가정할 때 전체 쓰기 비용은 여전히 약 6,000,000 가스이며, 이는 블록 가스 제한의 약 절반입니다. 그리고 이것은 가장 보수적인 측면일 뿐입니다!
계약 저장소는 비싸지만 calldata 저장소는 그렇지 않습니다. 2019년 EVM 업데이트는 바이트 저장 가스 비용을 16가스로 변경했습니다. 즉, 전체 0xmons 애니메이션을 업로드하면 약 400,000에서 2,000,000 가스의 비용이 발생합니다. 이는 훨씬 더 관리 가능합니다. 그러나 이것이 바로 트레이드오프가 발생하는 지점입니다. 계약 저장소는 항상 액세스할 수 있습니다. Calldata는 그렇지 않습니다. Calldata는 전체 노드에서만 저장되며, 블록체인의 정확한 재구성에 필요하지만 빠른 노드와 라이트 클라이언트에는 저장되지 않을 수 있습니다.[1]
Calldata는 함수에 전달되는 입력을 나타내므로 데이터를 기록하기 위해 해야 할 일은 함수 호출을 하는 것뿐입니다. 그렇다면 데이터에 어떻게 액세스할까요? 각 트랜잭션을 고유하게 식별하는 트랜잭션 해시를 통해 액세스할 수 있습니다. 거기에서 input을 통해 uploadMon 함수 호출에 전달된 매개변수를 볼 수 있습니다.[2]
이 트랜잭션에서 Data 필드에서 전달된 바이트는 하나의 0xmon에 대한 데이터를 인코딩하며, 노드에 대한 연결이 가능하면 선택한 모든 프런트엔드에서 액세스할 수 있습니다. Infura 및 Etherscan과 같은 도구를 사용하면 이러한 정보를 일반적으로 사용할 수 있습니다. 그러나 이 데이터는 다른 스마트 계약에서도 사용할 수 없습니다. 이것이 calldata를 사용하는 것의 또 다른 단점입니다(전체 노드에 대한 연결 가능성 외에도). 0xmons 프로젝트에서는 가장 저렴한 전체 애니메이션 인코딩을 가능하게 하기 위해 트레이드오프가 가치 있다고 결정했습니다.[3]
그런 다음 입력이 저장되면 트랜잭션 해시를 계약의 매핑에 저장하여 나중에 어떤 해시를 조회해야 하는지 쉽게 알 수 있습니다. 불행히도, 하나의 추가적인 문제가 있습니다. 트랜잭션은 자체 해시에 액세스할 수 없습니다. 즉, 데이터를 저장(입력을 통해)하고 온체인 매핑을 한 번의 함수 호출로 업데이트할 수 없습니다. 따라서 실제로 발생하는 일은 다음과 같습니다. 먼저 인코딩된 데이터를 저장하기 위해 “빈” 트랜잭션을 만듭니다. 그런 다음 첫 번째 트랜잭션의 트랜잭션 해시를 저장하기 위해 레지스트리 계약을 호출합니다.[3]
이미지가 모두 픽셀 아트이기 때문에 픽셀 정보를 uint256에 조밀하게 패킹하는 것, 어쩌면 값과 16진수 색상의 다른 매핑을 참조하는 것이 즉각적인 생각일 수 있습니다. 이 방법을 시도했지만 효율적이지 않았습니다. gifsicle로 최적화된 기본 GIF 인코딩이 여전히 더 나은 작업을 수행하는 것으로 나타났습니다.[2]
이제 실제 온체인 인코딩 프로세스가 어떤지 살펴보겠습니다. 먼저 소유한 0xmons만 인코딩할 수 있습니다. 소유한 0xmon의 페이지로 이동하면 하단에 새 메뉴가 표시됩니다.
정적 및 애니메이션 중에서 선택할 수 있는 드롭다운 메뉴가 있습니다. 이것은 0xmon 이미지를 나타냅니다. 두 경우 모두 이름, 칭호 및 설명도 페이로드에 인코딩됩니다. 400,000-2,000,000 가스 추정치가 0xmon을 인코딩하는 데 “더 합리적”이지만, 정적 이미지만 인코딩하는 옵션도 추가되어 있으며, 약 10배 저렴합니다(즉, 인코딩하는 데 약 40,000~200,000 가스).
처음 사용하는 경우 프런트엔드에서 모든 것을 처리하려면 정적 이미지 또는 애니메이션 이미지를 인코딩할지 선택하고 업로드 버튼을 누르면 됩니다. 위 그림에서 설명한 대로 작업을 수행하려면 세 개의 트랜잭션을 승인해야 합니다. 첫 번째는 입력 필드에 이미지를 인코딩합니다. 두 번째는 등록 수수료에 대해 XMON을 사용하도록 레지스트리 계약을 승인하고, 세 번째는 실제로 트랜잭션 해시를 계약의 매핑에 추가합니다.[1]
첫 번째 트랜잭션만 보내고 실제 등록을 나중에 하려면 인코딩 트랜잭션(즉, uploadMon 함수 호출을 하는 트랜잭션)의 트랜잭션 해시를 저장하고 입력 필드에 붙여넣으면 됩니다. 그런 다음 원하는 때에 등록할 수 있습니다.
독자들은 정적 0xmon 이미지 전체를 계약 저장소에 직접 인코딩하는 것이 여전히 “실현 가능”하다는 것을 알아챘을 것입니다. 그렇게 하는 데 드는 가스 비용은 여전히 매우 높으며, 비애니메이션 이미지의 경우 1,000,000에서 4,000,000 가스에 이릅니다. 그럼에도 불구하고 ETH를 태울 여유가 있는 순수주의자들을 위해 인코딩된 페이로드를 계약에 직접 쓰는 직접 업로드 옵션도 추가했습니다. 이제 프런트엔드에서 완벽하게 지원되며, 이렇게 하는 사용자는 일반 번개 아이콘 대신 깜박이는 번개 아이콘으로 보상받습니다.[1]
번개 아이콘은 다른 사람들에게 정적 데이터를 온체인에 인코딩했음을 알려주는 반면, 자물쇠 아이콘은 다른 사람들에게 애니메이션 데이터를 온체인에 인코딩했음을 알려줍니다. 아이콘을 클릭하여 온체인에서 직접 읽고 디코딩하는 새로운 0xmons 쇼케이스 페이지로 이동할 수도 있습니다.[3]
따라서 이 프로세스가 완료되면 0xmon에 프런트엔드에 두 개의 새 아이콘이 표시됩니다.