DAPP链上代币发行合约去中心化项目系统开发实现技术案例及源码详情

简介:  区块头和区块体数据也会被当作输入数据做一次Hash运算,其运算结果会被存储在下一个区块的区块头中,这样任何区块内容的修改都会反映到区块的Hash值上,而区块的Hash值又是下一个区块的输入数据,它又会被当作新区块的数据参与一次新区块的Hash运算,随着时间的推移和交易量的增加,所有的区块会通过保存前一个区块的Hash运算结果的方式组成一条链。

 区块头和区块体数据也会被当作输入数据做一次Hash运算,其运算结果会被存储在下一个区块的区块头中,这样任何区块内容的修改都会反映到区块的Hash值上,而区块的Hash值又是下一个区块的输入数据,它又会被当作新区块的数据参与一次新区块的Hash运算,随着时间的推移和交易量的增加,所有的区块会通过保存前一个区块的Hash运算结果的方式组成一条链。

  智能合约在区块链上的可执行代码是一种类似汇编语言的指令集,这些指令集通过EVM的解释和执行,对区块链的状态进行读写,实现合约规定的业务逻辑。因此通过Solidity这种高级编程语言,加上Solidity编译器,可以将高级语言编译成汇编指令集码,再将其部署到区块链上执行。

当函数调用者满足条件后,我们进入真正的 NFT 转移程序。首先清除待转移 NFT 的原有授权,代码如下:

assembly {
if approvedAddress {
sstore(approvedAddressSlot, 0)
}
}

直接将 _tokenApprovals 中 NFT 对应的值清空。

接下来,我们进入了最复杂的 NFT 转移阶段,该阶段的逻辑大致如下:

修正转移双方的 balance 参数

--_packedAddressData[from];
++_packedAddressData[to];
1
2
更新 tokenId 对应的 _packedOwnerships 数据:

_packedOwnerships[tokenId] = _packOwnershipData(
to,
_BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
);

由于转移过程必须进行初始化,所以此处将转移的 NFT 的 nextInitialized 设置为 True

考虑下一个 NFT 是否被初始化,
如转移下图中 tokenId = 3 的 NFT:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wKsxnwNP-1675684640935)(https://files.catbox.moe/20sjdu.svg)]
该 NFT 转移后,由于破坏了拥有者 0x2 的连续性,所以我们需要重写 tokenId = 4 的对应数据,代码如下:

if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
uint256 nextTokenId = tokenId + 1;
if (_packedOwnerships[nextTokenId] == 0) {
if (nextTokenId != _currentIndex) {
_packedOwnerships[nextTokenId] = prevOwnershipPacked;
}
}

此处使用了 _packedOwnerships[nextTokenId] == 0 排除了 tokenId = 4 转移的特殊情况。该 NFT 位于连续 NFT 的末尾,转移此 NFT 不会破环连续性

至此,我们完成了 NFT 的转移的核心流程。接下来就是已经介绍过的 Transfer 释放流程:

uint256 toMasked = uint256(uint160(to)) & _BITMASK_ADDRESS;
assembly {
// Emit the Transfer event.
log4(
0, // Start of data (0, since no data).
0, // End of data (0, since no data).
_TRANSFER_EVENT_SIGNATURE, // Signature.
from, // from.
toMasked, // to.
tokenId // tokenId.
)
}
if (toMasked == 0) _revert(TransferToZeroAddress.selector);

相关文章
|
7月前
|
安全
dapp链上合约代币质押项目分红系统开发稳定版/案例详情/功能步骤/源码版
In addition, the development of blockchain based DApp smart contracts also needs to consider the following requirements
|
分布式数据库 区块链 数据库
秒合约交易所系统开发实现技术案例及详情丨秒合约交易所开发源码程序
  区块链是什么?一句话,它是一种特殊的分布式数据库。首先,区块链的主要作用是储存信息。Any information that needs to be saved can be written to or read from the blockchain,so it is a database.
|
区块链 数据库 数据安全/隐私保护
IPPswap代币合约开发案例版丨IPPswap代币合约系统开发详细程序/规则玩法/方案介绍/源码平台
 Pledged mining refers to holding a certain amount of digital currency and locking it onto the blockchain network to obtain corresponding mining rewards.Pledge refers to locking a certain amount of digital currency in a blockchain network to prove one's support and participation in the network.
|
7月前
|
存储 算法 区块链
DAPP质押合约代币项目模式系统开发案例
“去中心化”也是区块链的典型特征之一,它使用分布式存储和算力,整个网络节点的权利和义务是相同的
|
存储 算法 安全
数字货币区块链合约系统开发指南与方案
区块链的工作原理是通过共识算法来解决网络中的节点之间的信任问题
量化合约交易系统开发详情(合约做市开发)丨DAPP交易所秒合约模式源码搭建
量化合约交易系统开发详情(合约做市开发)丨DAPP交易所秒合约模式源码搭建
|
区块链
关于代币合约项目系统开发DAPP模式方案
关于代币合约项目系统开发DAPP模式方案
|
存储 区块链 UED
DAPP流动性质押系统开发方案与详情|DAPP合约案例
区块链的另一个固有挑战是其确定性。确定性本质意味着一旦一个块被添加到区块链中,它就无法更改,并且任何智能合约执行的结果都是可预测的和一致的。
|
存储 供应链 安全
DAPP公链合约代币质押系统开发指南与详情
区块链技术彻底改变了数字格局,为各行业提供安全、透明和去中心化的解决方案
|
存储 监控 算法
DAPP链上质押项目系统开发|DAPP合约模式开发案例
DAPP不依赖中心化机构也不受单一实体控制,因此DAPP可以减少中心化机构的意见干扰