과학 보급|NFT 민팅 및 구매 과정 기술 상세 설명, 과학자들은 어떻게 NFT를抢购하는가?
저자:@iamcatcher
본 문서는 최근의 학습과 그룹 친구들과의 논의를 바탕으로 정리한 것으로, 기록으로 남기며 마지막으로 NFT 산업 현황에 대한 개인적인 생각을 담고 있습니다. 블록체인과 이더리움 프로그래밍에 처음 접하는 만큼 오류가 있을 수 있으니, 지적과 소통을 환영합니다.
NFT 구매 과정
간단히 말해 구매 과정은 당신의 지갑과 NFT 계약이 상호작용하는 것입니다. 당신의 지갑에서 0.176ETH를 계약으로 송금하고, 계약의 mint 메소드를 호출한 후 두 개의 NFT 토큰이 생성됩니다. 토큰은 당신의 지갑으로 전송되며, 당신은 이 NFT를 얻게 됩니다.
NFT 계약에 대한 내용은 다음 기사를 참조할 수 있습니다: NFT 및 OpenSea 거래 뒤의 기술 공유---Mirror
NFT 구매 과정 상세 설명
프로젝트의 공식 웹사이트에서 mint 버튼을 클릭한 후, 브라우저에서 이더넷 네트워크 간의 엔드 투 엔드 상호작용 과정을 자세히 설명합니다:
NFT 구매 과정
1、Mint 버튼 클릭
모두가 프로젝트 웹사이트에 로그인하고, Chrome에서 자신의 지갑을 연결한 후 mint 버튼을 클릭합니다. 웹페이지의 JavaScript 코드는 프로젝트의 mint 가격, 계약 주소 등을 기반으로 raw transaction 데이터를 생성하며, 주요 필드는 다음과 같습니다.
2、TX 서명
웹페이지 코드는 Metamask와 상호작용하며, 거래를 확인하라는 팝업 창이 나타납니다. 확인을 클릭하면 Metamask는 당신의 지갑 개인 키를 사용하여 서명하여 이 거래가 당신이 승인한 것임을 보장합니다. 이후 이더리움 네트워크는 이를 검증합니다.
3、TX를 노드에 전송하여 검증
거래 TX는 Metamask에 의해 Metamask의 이더리움 노드(기본 설정)로 전송되며, 노드는 TX를 검증하여 거래가 위조되지 않도록 합니다.
4、TX를 이더리움 네트워크에 브로드캐스트
거래 TX는 이더리움 네트워크의 인접 노드로 전송된 후 서로 브로드캐스트됩니다. 이때 당신의 거래는 etherscan.io에서 확인할 수 있으며, 상태는 pending 상태입니다.
5、채굴자 노드가 TX를 수신
채굴자 노드는 동기화된 TX를 Txpool/Mempool이라는 장소에 저장합니다. 이 장소는 여러 가지 일의 핵심이므로 자세히 설명하겠습니다:
Txpool 코드 흐름(이더리움 소스 코드 분석의 txpool 그림을 차용)
Txpool의 데이터 출처는 주로 다음과 같습니다:
로컬 제출, 즉 제3자 애플리케이션이 로컬 이더리움 노드의 RPC 서비스를 호출하여 제출한 거래;
원격 동기화, 즉 브로드캐스트 동기화 형식을 통해 다른 이더리움 노드의 거래 데이터를 로컬 노드로 동기화하는 것입니다;
Txpool은 Queue와 Pending 두 개의 큐로 나뉘며, 새로 수신된 TX는 규칙에 따라 먼저 Queue 큐에 배치된 후, Pending 큐에 추가되어 채굴을 기다립니다.
주요 규칙은 다음과 같습니다:
1)Gasprice가 높은 TX를 우선 처리합니다.
2)로컬 TX를 우선 처리하고, 원격 동기화는 뒤로 미룹니다.
3)각 노드는 최소 Gasprice를 설정하며, 이 값을 초과하지 않는 원격 TX는 폐기됩니다.
Pending의 TX는 Miner 모듈에 의해 수집 및 검증되어 채굴에 사용됩니다; 채굴이 성공하면 블록에 기록되고 브로드캐스트됩니다. Miner가 거래를 가져가는 것은 복사이며, Txpool의 TX는 줄어들지 않습니다. TX가 체인에 기록된 후에만 Txpool에서 삭제됩니다.
Gas가 너무 낮은 TX는 Txpool에서 처리되지 않고 계속 대기하게 되며, Gas를 높여야 처리될 수 있습니다.
자세한 코드 분석은 "죽어라 이더리움 소스 코드 분석之 txpool"을 참조할 수 있습니다.
GasWar: 인기 거래가 발생할 때, 모두가 자신의 TX가 우선 처리되도록 Gas 비용을 높이는 상황입니다.
6、채굴자가 TX를 패키징하여 블록 생성
채굴자는 TX를 선택한 후 채굴을 시작하고, 블록의 솔루션을 찾은 후 이더리움 네트워크에 브로드캐스트합니다.
7、블록이 검증됨
다른 채굴자 노드의 검증 후, 해당 블록은 공식적으로 체인에 기록되며, 이 TX 결과는 etherscan.io에서 확인할 수 있습니다.
8、TX 상태 동기화
관련 상태가 로컬로 반환되며, Metamask에서 확인할 수 있습니다.
참고 문서:
Life Cycle of an Ethereum Transaction
Transaction lifecycle on the Ethereum blockchain
The Influence Factors on Ethereum Transaction Fees
계약은 어떻게 실행되는가
간단히 말해 우리가 전송한 거래는 Message 객체로 변환되어 EVM에 전달되며, EVM은 Message를 기반으로 Contract 객체를 생성하여 후속 실행을 위해 사용합니다. 우리가 전송한 Data는 계약의 input으로 변환되어 mint 함수를 호출합니다.
EVM 소개에 대한 자세한 내용은 다음 문서를 참조하십시오:
easy-evm
learnblockchain.cn
NFT 프리세일 및 공개 판매
프리세일은 특정 사용자만 구매할 수 있는 반면, 공개 판매는 모두가 구매할 수 있습니다.
여기서 두 가지 기술적 질문에 답해야 합니다:
1、특정 지갑만 mint할 수 있도록 어떻게 제한할 것인가?
2、프리세일과 공개 판매 간의 상태 전환은 어떻게 이루어지는가?
화이트리스트 메커니즘
화이트리스트는 현재 일반적으로 머클 트리를 사용하여 구현됩니다. 간단히 말해 모든 화이트리스트 지갑 주소를 머클 트리의 리프 노드로 사용하여 루트 해시를 생성합니다. 계약에서는 루트 해시 값을 저장하고, mint 함수를 호출할 때 웹페이지의 JS 코드는 지갑 주소를 기반으로 proof(주소의 상위 부모 노드 해시)를 생성하여 계약이 해당 주소가 화이트리스트에 속하는지 검증할 수 있습니다.
C01 계약의 예를 들면:
0x6fd053bff10512d743fa36c859e49351a4920df6
프리세일과 공개 판매 시 SetRoot를 통해 해시를 업데이트합니다(C01의 두 번의 판매 모두 화이트리스트 방식을 사용하며, 공개 판매는 자본 검증 추첨 방식을 채택합니다).
자세한 원리와 코드는 아래 기사를 참조하십시오: Using Merkle Trees for NFT Whitelists
판매 상태 전환
주로 두 가지 방법이 있습니다:
1)계약에서 시간 포인트를 판단하여, 예를 들어 2022-01-01 18:00 UTC부터 공개 판매를 시작합니다.
2)상태를 판단하여 계약에서 상태 변수를 설정합니다. 예를 들어 XRC 계약의 경우 Status.PublicSale 상태를 판단하며, 이는 계약 내에서 SetStatus를 호출하여 설정됩니다.
과학자가 NFT를 사는 방법
과학자는 프로그램을 사용하여 NFT를 사는 것으로, 다양한 수단을 사용하여 자신의 거래 TX가 다른 사람보다 먼저 채굴자에게 패키징되도록 하여, 매진되기 전에 NFT mint를 완료합니다. 또한 과학자들은 완벽함을 추구하므로, 가장 완벽한 결과는 자신의 TX가 공개 판매 상태를 만족하는 첫 번째 블록에 나타나는 것입니다. 즉, Block0를 차지하는 것입니다.
두 가지 시나리오의 Block0은 아래 그림과 같습니다. Block0를 차지하면 이후의 Gaswar를 피할 수 있어 구매 비용을 줄일 수 있습니다. 그러나 요즘은 점점 더 치열해져 Block0에서도 Gaswar가 발생할 수 있습니다. 예를 들어 XRC의 공개 판매는 200개도 안 되며, Block0에 들어가는 과학자의 TX 수가 200개를 초과하기도 하고, Gas를 낮게 설정한 경우 실행이 지연되어 구매하지 못하는 경우도 많습니다.
두 가지 시나리오의 Block0
과학자가 사용하는 수단은 대략 다음 세 가지로 요약됩니다:
1、정보 획득 시 지연이 더 낮음
금융 양적 거래와 유사하게, 펀드는 자신의 서버와 거래소 간의 통신 지연을 최소화하기를 원합니다. 블록체인도 유사합니다. 예를 들어 CEX에서는 모두가 가까운 중앙화 거래소의 서버에 접속합니다. NFT mint와 DeFi 거래는 이더리움 네트워크에서 발생하며, 모두가 더 빠른 이더리움 노드나 대규모 채굴 풀에 접속하여 Txpool의 pending TX를 더 빨리 모니터링하고 필요한 정보를 얻어 프로그램이 즉시 실행되도록 합니다.
2、거래 경로가 더 짧음
1)위의 TX 상호작용 과정을 직접 살펴보면, 과학자들은 프로그램과 NFT 계약 간의 직접적인 상호작용을 선택합니다.
2)체인에 자신의 계약을 배포하여, 개인 계약과 NFT 계약 간의 상호작용을 합니다. 비록 개인 계약이 외부 TX를 통해 트리거되어야 하지만, 계약은 대량 구매가 가능하여 mint 수량 제한이 없는 NFT에 특히 적합합니다. (요즘 점점 더 많은 NFT가 호출자가 계약으로 제한되고 있습니다.)
3、거래를 일괄 제출
위에서 언급한 개인 계약을 통해 mint하는 것 외에도, 프로젝트가 각 주소의 mint 개수를 제한하는 경우 Flashbots를 통해 여러 TX를 함께 패키징하여 제출할 수 있습니다.
계약 mint
계약을 통한 구매 예시로, YOKAI가 공개 판매된 후 과학자는 개인 계약을 이용하여 총 750개의 mint를 구매했습니다. 자세한 내용은 TX를 참조하십시오.
YOKAI 계약 코드는 한 주소가 몇 개를 mint할 수 있는지 제한하지 않으며, 한 번의 TX에서 2개만 mint할 수 있도록 제한합니다. 그래서 과학자가 모든 것을 차지했습니다.
신기술 Flashbots
Flashbots에 대한 자세한 내용은 위 총의 훌륭한 소개와 공식 문서를 참조하십시오: Flashbots: 어떻게 ETH가 없는 지갑에서 자산을 인출하거나 계약과 상호작용할 수 있는가---Mirror
Flashbots를 사용하는 몇 가지 장점은 다음과 같습니다:
1)TX를 일괄 패키징하여 제출할 수 있으며, TX의 패키징 순서를 자율적으로 제어할 수 있습니다.
2)Flashbots가 제출한 TX는 Txpool에 나타나지 않으며, 체인에 나타난 후에야 모두가 볼 수 있습니다. 이렇게 하면 TX의 비밀성이 제공되므로 많은 DeFi 양적 거래 플랫폼이 Flashbots에 접속했다고 홍보합니다. (개인적으로 이는 일시적이라고 생각하며, Flashbots가 널리 사용됨에 따라 Flashbots가 제출한 TX도 모니터링될 것입니다.)
3)Flashbots를 통해 mint가 실패하면 Gas 비용이 청구되지 않습니다.
Flashbots를 통한 구매 예시로, 우리는 냉토끼 XRC의 공개 판매를 살펴보겠습니다:
이 총이 트윗에서 과학자들이 공개 판매를 하지 않을 것이라고 말했지만, 결과적으로 block=14020984 Block0에서 전투가 해결되었고, 모든 과학자가 차지했습니다.
프로젝트 측에서 보낸 setStatus TX는 14020982에서 TXpool에서 감지되었습니다.
그 후, 한 과학자가 setStatus TX와 자신의 mint TX를 함께 Flashbots로 패키징하여 채굴자에게 보냈습니다. 여기서 과학자는 setStatus TX를 첫 번째로 배치했으며, 비록 Gas가 낮았지만 자신의 mint TX를 뒤에 배치하여 최종적으로 TX가 984 블록에 체인에 기록되었습니다.
Flashbots 패키징 조회 링크
블록 태우기
간단히 말해 TX를 계속해서 발송하는 것입니다. 많이 발송할수록 mint 성공 확률이 높아지며, 운이 좋으면 Block0에 들어갈 수도 있습니다. 이 방법의 문제는 Gas 비용이 많이 소모된다는 것이며, 돈이 많은 사람들의 자율적인 플레이입니다. 블록 태우기는 일반적으로 시작 시간, 각 TX 간격, 발송 횟수, Gas 비용 등을 고려합니다. 이는 일반적으로 프로젝트 시간, pending TX 모니터링, 체인 블록 생성 속도 등을 기반으로 합니다.
냉토끼 공개 판매 시 많은 과학자들이 블록 태우기 방법을 사용하여 성공적으로 구매했습니다. 이 지갑을 확인할 수 있습니다.
과학자 방지 방법
과학자가 구매하는 현상이 나타나면서, 점점 더 많은 프로젝트가 과학자의 구매를 방지하기 위해 다양한 방법을 사용하고 있습니다. 이러한 방법의 본질은 과학자가 계약 mint를 직접 호출하는 것을 제한하여, 프로젝트 측에서 선정한 사람만 mint할 수 있도록 하는 것입니다.
1、화이트리스트 방식으로만 판매
프로젝트 판매는 모두 화이트리스트 메커니즘을 사용하여, 프로젝트 측에서 규칙을 통해 진정으로 프로젝트를 감상하는 사람들을 선별합니다.
하지만 규칙이 있으면 대책이 생기기 마련입니다. 등급 + 초대 인원 수로 인해 채팅 로봇과 스튜디오가 초대 인원을 판매하는 일이 발생합니다; 창작 예술에서는 타오바오에서 사람을 찾아 그림을 그리게 하기도 하고; 지금은 한정된 시간 동안 Discord에 초대하거나, 사람들에게 수수께끼를 맞추게 하거나 임무를 수행하게 하는 등 다양한 방식이 발전하고 있습니다.
프로젝트 측은 백색리스트 작업실과의 두뇌 싸움에 골몰하고 있으며, 일반 NFT 플레이어는 다양한 규칙에 휘둘리고 있습니다.
2、공개 판매에서 자본 검증 추첨 방식 채택
NFT 공개 판매 시, 사전에 지갑이 일정 금액의 ETH를 보유하고 있는지 검증한 후, 시스템을 통해 추첨하여 당첨자 명단을 제공합니다. 그러나 많은 프로젝트 측이 번거로움을 피하기 위해 1:1 추첨 시스템을 만들고 싶어 하지 않으며, 결국 공개 판매 명단이 대폭 초과 판매되어 결국 모두가 구매하게 됩니다.
3、서버 측에서 서명 검증 mint
최근 화제가 된 HAPE의 방식과 유사하게, 공개 NFT 계약은 오직 하나의 개인 비공식 계약만 mint할 수 있도록 제한합니다. 비공식 계약 후 프로젝트 측의 백엔드 서버와 상호작용하는 이 방법은 기술적으로는 웹2 중앙화 사고와 웹3 탈중앙화 개념이 충돌하는 것처럼 보입니다.
NFT의 미래 발전 방향
화이트리스트를 경험한 사람들은 현재 NFT 산업이 매우 건강하지 않다고 느끼지만, NFT 산업은 아직 초기 단계에 있으며, 문제는 시장이 해결할 수 있는 사람들이 반드시 나타날 것입니다.
NFT 판매는 공개적이고 공증이 투명해야 하며, 개인적으로 해결 방안은 현실 생활에서 익숙한 두 가지 장면을 참고할 수 있다고 생각합니다:
1、新주 발매 시 거래소에서 계좌 거래 기간, 자본 검증 등의 기준을 설정한 후, 추첨하여 판매합니다.
2、징둥에서 마오타이 구매 시, 징둥 플랫폼에서 계좌 인증, 구매 공정성 보장 등을 진행합니다.
이 두 장면은 플랫폼의 권위성을 통해 공정성을 보장하지만, 웹3에서는 블록체인 계약을 기반으로 한 새로운 방안이 유사한 기능을 구현할 것으로 보입니다. 현재 DeFi 시장의 다양한 거래 프로토콜처럼, 가까운 미래에는 NFT 판매 프로토콜이 등장하여 공정하고 공증된 투명한 판매 모델을 제공할 수 있을 것입니다. 구체적으로 어떻게 할지는 아직 배우고 고민 중이며, 여러분의 조언과 논의를 환영합니다.
미래에는 NFT 프로젝트 측이 NFT 발사 플랫폼에 접속하여, 프로젝트 측은 예술 창작과 로드맵의 발전에 더 집중하고, 투자자는 프로젝트의 내용과 전망에 더 집중하며, 발사 플랫폼은 현재 NFT 판매의 다양한 문제를 기술적으로 해결할 것입니다.