合约交易所系统开发(开发模板)丨合约交易所系统开发稳定版及成熟案例源码

简介: 最先运行的 _beforeTokenTransfers 和最后运行的_afterTokenTransfers 都是由用户自定义的函数,用于实现白名单等功能

我们将结合代码进行分析。

最先运行的 _beforeTokenTransfers 和最后运行的
_afterTokenTransfers 都是由用户自定义的函数,用于实现白名单等功能。函数具体定义如下:

function _beforeTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}

function _afterTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
的核心。值得注意的是,这些函数都定义在 unchecked 代码块中,因为 NFT 的各个参数设置不会产生溢出情况,通过 unchecked 可以避免编译过程中插入溢出检查代码以减少 gas 消耗。

简而言之,在某些已经确定不会出现数据溢出的场景中使用 unchecked 包裹代码可以减少 gas 消耗

最开始,我们设置表示 NFT 所有者的 _packOwnershipData 数据结构,具体设置方法如下:

_packedOwnerships[startTokenId] = _packOwnershipData(
to,
_nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
);

为方便读者理解代码,在此处,我们给出 _packedOwnerships 的定义:

// Bits Layout:
// - [0..159] addr
// - [160..223] startTimestamp
// - [224] burned
// - [225] nextInitialized
// - [232..255] extraData
mapping(uint256 => uint256) private _packedOwnerships;
1
2
3
4
5
6
7
我们先对 _packOwnershipData 函数的输入参数进行分析,需要解决 _nextInitializedFlag 和 _nextExtraData 的定义问题,

前者定义如下:

function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
// For branchless setting of the nextInitialized flag.
assembly {
// (quantity == 1) << _BITPOS_NEXT_INITIALIZED.
result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
}
}

显然,此函数用于设置 nextInitialized 标识,如果铸造的数量为 1 ,我们将此标识置为 1 (即 True )。当然,我们也使用了位移操作使其处于合适的位置。

相关文章
|
安全 API 网络安全
数字货币交易所系统开发详细功能/需求项目/教程步骤/指南逻辑
Developing a digital currency exchange system is a complex project that requires multiple steps to complete. The following are the general steps for developing a digital currency exchange system
|
SQL 关系型数据库 MySQL
彻底搞懂 MySQL 事务的隔离级别
MySQL的事务隔离级别一共有四个,分别是读未提交、读已提交、可重复读以及可串行化。
68235 12
彻底搞懂 MySQL 事务的隔离级别
|
存储 监控 NoSQL
快速认识OTS
## 什么是OTS   OTS 是Open Table Service的简称,现在已更名为表格存储Table Store,官网对它的解释为:OTS是构建在阿里云飞天分布式系统之上的 NoSQL 数据库服务,提供海量结构化数据的存储和实时访问。OTS 以实例和表的形式组织数据,通过数据分片和负载均衡技术,达到规模的无缝扩展。OTS 向应用程序屏蔽底层硬件平台的故障和错误,能自动从各类错误中快速
47389 2
|
监控 Cloud Native 容器
基于阿里云容器服务监控 Kubernetes集群GPU指标
### 简介 当您在阿里云容器服务中使用GPU ECS主机构建Kubernetes集群进行AI训练时,经常需要知道每个Pod使用的GPU的使用情况,比如每块显存使用情况、GPU利用率,GPU卡温度等监控信息,本文介绍如何快速在阿里云上构建基于Prometheus + Grafana的GPU监控方案。
16902 0
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
3132 7
|
存储 消息中间件 负载均衡
Zookeeper 简单介绍
Zookeeper 简单介绍
|
存储 关系型数据库 MySQL
MySQL主从同步如何保证数据一致性?
MySQL主从同步如何保证数据一致性?
933 0
MySQL主从同步如何保证数据一致性?
|
JSON 缓存 JavaScript
NPM 使用介绍
NPM 使用介绍
452 1
|
关系型数据库 MySQL 索引
MySQL是如何通过索引查询数据的?具体流程是怎样的?底层原理是什么?
MySQL是如何通过索引查询数据的?具体流程是怎样的?底层原理是什么?
627 0

热门文章

最新文章