ITPub博客

首页 > 区块链 > 区块链 > 九层天塔DApp合约开发系统搭建技术

九层天塔DApp合约开发系统搭建技术

原创 区块链 作者:搭建猿punk2558 时间:2023-04-24 17:25:47 0 删除 编辑

全链游戏的乐趣应该是:在区块链上构筑稳固、不可篡改的核心玩法,并将衍生玩法的设计最大限度地让渡给玩家,使得游戏衍生本身能产生无数的可能,内容再次创作有无限的延展性。

创作一款好玩的全链游戏,设计者要try to play god(当然是一个有趣的god),造一个有趣的世界,具体来说分三步:

1)提炼出游戏的核心玩法,明确有哪些要素是希望刻进游戏dna里,不希望任何人(包括作者)能改变的,然后将核心玩法拆分成最小的原子

2)将游戏原子用区块链变成玩家的共识,九层天塔系统13z开4z77发z558,成为游戏世界运行的底层规则

3)用合理的设计鼓励人类用这些原子去创造更有趣更丰富的世界。

以下非同质化代币的铸造分析,原始代码参考以太坊ERC721提案。

首先非同质化代币的铸造会执行

_safeMint函数,该函数存在两个参数,他们分别的作用是:

to:新铸的代币接受地址

tokenId:新铸代币的id序列

function _safeMint(address to,uint256 tokenId)internal virtual{

_safeMint(to,tokenId,"");//接收以上两个参数加上空字符凑齐3个参数传入同名_safeMint函数(重载)

}

可以看到接下来调用三参数同名_safeMint函数,

function _safeMint(address to,uint256 tokenId,bytes memory _data)internal virtual{//接收_safeMint函数传参

_mint(to,tokenId);//将传参to和tokenId传入_mint函数

require(_checkOnERC721Received(address(0),to,tokenId,_data),"ERC721:transfer to non ERC721Receiver implementer");//调用_checkOnERC721Received函数来检测函数接口合法性

}

最后调用_mint函数进行铸币:

function _mint(address to,uint256 tokenId)internal virtual{//接收来自_safeMint函数的传参

require(to!=address(0),"ERC721:mint to the zero address");//校验传参地址是否为空(为假继续后续操作,为真终止操作)

require(!_exists(tokenId),"ERC721:token already minted");//接着校验tokenId是否已经存在(为假继续后续操作,为真终止操作)

_beforeTokenTransfer(address(0),to,tokenId);//初始化;

_balances[to]+=1;//在传参地址to上生成一个token

_owners[tokenId]=to;//将传参地址to与引索tokenId进行绑定

emit Transfer(address(0),to,tokenId);//触发token生成事件

}

就这样一个独一无二的NFT被铸造出来了。总体过程如下:

合约中使用_safeMint函数调用铸币函数并检查函数的ERC721函数接口合法性,该函数在ERC721中有所体现,代码如下:

function _checkOnERC721Received(address from,address to,uint256 tokenId,bytes memory _data)

private returns(bool)

{

if(to.isContract()){

try IERC721Receiver(to).onERC721Received(_msgSender(),from,tokenId,_data)returns(bytes4 retval){

return retval==IERC721Receiver(to).onERC721Received.selector;

}catch(bytes memory reason){

if(reason.length==0){

revert("ERC721:transfer to non ERC721Receiver implementer");

}else{

//solhint-disable-next-line no-inline-assembly

assembly{

revert(add(32,reason),mload(reason))

}

}

}

}else{

return true;

}

}

在_mint函数中首先检查了地址是否是0地址,还有tokenId是否已存在。该tokenId在ERC721标准中生成规则是一个不可互换的通证。检测通过后为to地址铸币(相应的tokenId),同时记录余额与该NFT艺术品的归属者

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70020115/viewspace-2948479/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
软件开发定制:13z开4z77发z558

注册时间:2022-07-18

  • 博文量
    121
  • 访问量
    76358