当前位置:网站首页>NFT交易原理分析(1)
NFT交易原理分析(1)
2022-06-26 15:29:00 【NFT践行者】
NFT交易过程分析
将你从项目方的官方网站上点击mint按钮,从浏览器到以太网网络端到端交互过程详细打开:

1、点击Mint按钮
大家登陆项目网站,Chrome上连接自己的钱包,然后点击mint按钮。网页上的JavaScript代码基于项目的mint价格,合约地址等生成raw transaction数据,主要包含以下几个关键字段


2、TX签名
网页代码与Metamask交互,会弹出窗口让你确认本次交易。点击确认后,Metamask会使用你的钱包私钥进行签名,以确保这个交易是你本身授权的,后续以太坊网络会进行校验。
3、发送TX到node验证
交易TX被Metamask发送到Metamask的以太坊node(默认配置),node对TX进行校验,确保交易不被仿冒。
4、广播TX到以太坊网络
交易TX被发送到以太坊网络的相邻节点,然后再相互广播到相邻接点。这时你的交易就可以在etherscan.io上查看到,状态是pending状态。
5、矿工node接收到TX
矿工node会将同步过来的tx都放到一个叫Txpool/Mempool地方,这个地方是很多事情的关键,需要展开来讲一下:

Txpool的数据来源主要来自:
本地提交,也就是第三方应用通过调用本地以太坊节点的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让它被处理。
GasWar:发生热门交易时,大家为了自己的TX可以被优先处理,争相提升Gas费的场景
6、矿工出块TX被打包
矿工选取TX后开始挖矿,再找到一个区块的Solution后广播到以太坊网络。
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函数。
NFT预售与公开销售
预售只是针对特定用户才能购买,公开销售就是大家都可以抢购。
这里主要需要回答两个技术问题:
1、如何限制特定钱包才能mint?
2、预售和公开销售之间是如何状态切换的?
白名单机制
白名单现在普遍使用默克尔树来实现,简单来说将所有白名单钱包地址作为默克尔树的叶子节点,生成一个Root hash。在合约中只需要存储Root hash值,在调用mint函数时网页的JS代码基于钱包地址生成proof(地址的上级父节点hash),合约就可以校验该地址是否属于白名单。
以C01的合约为例:0x6fd053bff10512d743fa36c859e49351a4920df6

在预售和公开销售时通过 SetRoot更新hash(C01两次销售都采用白名单方式,公开销售采取验资抽奖的方式)

销售状态切换
常用两种方式:1)通过在合约判断时间点,比如2022-01-01 18:00 UTC开始公开销售2)通过状态判断,及在合约设置状态变量,比如以XRC的合约为例,判断Status.PublicSale状态,这个是调用合约中SetStatus进行设置

边栏推荐
- sqlite加载csv文件,并做数据分析
- Mr. Du said that the website was updated with illustrations
- [tcapulusdb knowledge base] Introduction to tcapulusdb general documents
- JS之简易deepCopy(简介递归)
- Summer camp is coming!!! Chongchongchong
- Ansible自动化的运用
- Use of abortcontroller
- How to handle 2gcsv files that cannot be opened? Use byzer
- Golang 1.18 go work usage
- 我想知道如何通过线上股票开户?在线开户安全么?
猜你喜欢

【ceph】CEPHFS 内部实现(一):概念篇--未消化

svg环绕地球动画js特效

Database - integrity constraints

js创意图标导航菜单切换背景色

Particle filter PF -- Application in maneuvering target tracking (particle filter vs extended Kalman filter)

# 粒子滤波 PF——三维匀速运动CV目标跟踪(粒子滤波VS扩展卡尔曼滤波)

Applet: uniapp solves vendor JS is too large

【小程序实战系列】小程序框架 页面注册 生命周期 介绍

Audio and video learning (I) -- PTZ control principle

评价——TOPSIS
随机推荐
Keil4 opens the single-chip microcomputer project to a blank, and the problem of 100% program blocking of cpu4 is solved
Summer camp is coming!!! Chongchongchong
AUTO sharding policy will apply DATA sharding policy as it failed to apply FILE sharding policy
Ansible自动化的运用
【TcaplusDB知识库】TcaplusDB单据受理-事务执行介绍
【微信小程序】事件绑定,你搞懂了吗?
Is it safe to open an account for mobile stock registration? Is there any risk?
Selenium saves elements as pictures
2Gcsv文件打不开怎么处理,使用byzer工具
Mongodb series window environment deployment configuration
【问题解决】新版webots纹理等资源文件加载/下载时间过长
js创意图标导航菜单切换背景色
svg野人动画代码
Selenium chrome disable JS disable pictures
[CEPH] cephfs internal implementation (II): example -- undigested
svg canvas画布拖拽
在重新格式化时不要删除自定义换行符(Don‘t remove custom line breaks on reformat)
手机上怎么开户?在线开户安全么?
Is it safe to buy stocks and open accounts through the QR code of the securities manager? Want to open an account for stock trading
【ceph】cephfs caps简介