NFT铸造链上智能合约开发详情丨NFT铸造链上智能合约系统开发(开发案例)及成熟源码

简介:   区块链的部分价值,早以“互联网+数据库”的形式发展了很多年。在“互联网+数据库”的模式下,“+”到一定程度,就到私有链的水平了。然后每一个私链进行合并,当私链具备了更多共通性和可交换性之后,就变成了公链。

  区块链的部分价值,早以“互联网+数据库”的形式发展了很多年。在“互联网+数据库”的模式下,“+”到一定程度,就到私有链的水平了。然后每一个私链进行合并,当私链具备了更多共通性和可交换性之后,就变成了公链。

  目前区块链发展的最大掣肘,在于各个区块里的数据不统一。很多互联网是局域型的,内外网并不互通。“从私链走向公链”的过程,就是打破局域网和建立数据标准化的过程,另外,虽然发展区块链的意义重大,不是一有区块链之后,以前的商业就出现翻天覆地的变化。“区块链”要发挥巨大作用,有赖于从区块链技术发展出来的通证经济。

  burn销毁的核心函数为_burn函数,由于销毁事实上相当于将NFT转移给0地址,所以其大量逻辑与transfer类似。

  _burn函数定义如下:

  function _burn(uint256 tokenId,bool approvalCheck)internal virtual

  1

  参数含义如下:

  tokenId待销毁NFT的tokenId

  approvalCheck是否检测函数调用者的权限

  大致流程如下:

  获取待销毁NFT拥有者的信息

  如果设置approvalCheck为true则检测函数调用者的相关权限

  清空待销毁NFT的授权approve数据

  减少拥有者的balance

  在_packedOwnerships中写入销毁信息

  恢复代币连续性

  释放事件

  接下来,我们详细分析具体的代码实现:

  uint256 prevOwnershipPacked=_packedOwnershipOf(tokenId);

  address from=address(uint160(prevOwnershipPacked));

  (uint256 approvedAddressSlot,address approvedAddress)=_getApprovedSlotAndAddress(tokenId);

  此处代码与transferFrom函数的开始部分基本一致,但在from处理方面进行了简化。

  接下来,我们检查调用者的相关权限并清空授权,代码如下:

  if(approvalCheck){

  if(!_isSenderApprovedOrOwner(approvedAddress,from,_msgSenderERC721A()))

  if(!isApprovedForAll(from,_msgSenderERC721A()))_revert(TransferCallerNotOwnerNorApproved.selector);

  }

  assembly{

  if approvedAddress{

  //This is equivalent todelete _tokenApprovals[tokenId].

  sstore(approvedAddressSlot,0)

  }

  }

  此部分代码与transferFrom函数完全一致,不再详细介绍。

  _packedAddressData[from]+=(1<<_BITPOS_NUMBER_BURNED)-1;

  _packedOwnerships[tokenId]=_packOwnershipData(

  from,

  (_BITMASK_BURNED|_BITMASK_NEXT_INITIALIZED)|_nextExtraData(from,address(0),prevOwnershipPacked)

  );

  此处使用_packedAddressData[from]+=(1<<_BITPOS_NUMBER_BURNED)-1;代码将balance-=1和numberBurned+=1合并一起执行。

  其中_BITPOS_NUMBER_BURNED的值为128,为方便读者理解,我们再次给出_packedAddressData的格式:

  //Bits Layout:

  //-[0..63]balance

  //-[64..127]numberMinted

  //-[128..191]numberBurned

  //-[192..255]aux

  mapping(address=>uint256)private _packedAddressData;

  if(prevOwnershipPacked&_BITMASK_NEXT_INITIALIZED==0){

  uint256 nextTokenId=tokenId+1;

  if(_packedOwnerships[nextTokenId]==0){

  if(nextTokenId!=_currentIndex){

  _packedOwnerships[nextTokenId]=prevOwnershipPacked;

  }

  }

  }

相关文章
|
6月前
|
存储 安全 区块链
DAPP链上质押NFT挖矿系统开发详情方案
 所有区块链网络中的每一台计算机都有一个相同的账本,并且是完全公开透明的,任何人都可以进行记账。每当区块链核准一批交易时,交易就会被记录到每一个人的账本上。
|
8月前
|
安全 区块链
dapp/defi智能合约质押分红系统开发详细功能/案例步骤/需求逻辑/源码指南
Developing a DApp/DeFi smart contract staking dividend system involves multiple technical and functional requirements. The following are possible detailed development steps and functional requirements for your reference
|
8月前
|
人工智能 安全 物联网
NFT铸造智能合约代币质押系统开发|逻辑原理
智能合约是DAPP的核心组成部分,它负责处理应用程序的业务逻辑。
|
8月前
|
Python 容器 索引
BRC-20铭文合约NFT铸造交易平台系统开发规则玩法/详细步骤/项目方案/成熟技术/源码功能
有时候,像定义add2()这类简单的函数,用def来正式地写个命名、计算和返回显得稍有点麻烦,Python支持用lambda对简单的功能定义“行内函数”
|
存储 区块链 UED
DAPP流动性质押系统开发方案与详情|DAPP合约案例
区块链的另一个固有挑战是其确定性。确定性本质意味着一旦一个块被添加到区块链中,它就无法更改,并且任何智能合约执行的结果都是可预测的和一致的。
|
存储 安全 区块链
NFT智能合约系统开发|NFT铸造交易系统开发方案模式
智能合约可以通过分布式存储以及协议协商实现数据的可靠,从而实现不存在中心化
|
区块链
NFT系统开发|NFT铸造合约交易项目系统开发指南与方案
要理解智能合约的概念和作用,首先需要了解区块链的基本架构
|
存储 监控 算法
DAPP链上质押项目系统开发|DAPP合约模式开发案例
DAPP不依赖中心化机构也不受单一实体控制,因此DAPP可以减少中心化机构的意见干扰
|
存储 区块链 编译器
DAPP链上代币发行合约去中心化项目系统开发实现技术案例及源码详情
 区块头和区块体数据也会被当作输入数据做一次Hash运算,其运算结果会被存储在下一个区块的区块头中,这样任何区块内容的修改都会反映到区块的Hash值上,而区块的Hash值又是下一个区块的输入数据,它又会被当作新区块的数据参与一次新区块的Hash运算,随着时间的推移和交易量的增加,所有的区块会通过保存前一个区块的Hash运算结果的方式组成一条链。

热门文章

最新文章