PtahDao普塔道智能合约分红系统开发(详细及说明)丨PtahDao普塔道智能合约分红源码正式版

简介:   区块链通过时间戳保证每个区块依次顺序相连,而这个时间戳就像数据的生产日期,证明这个数据在什么时间点就已经存在,时间戳是区块元数据的一部分,这使得区块具有天然的时间属性。

  
区块链通过时间戳保证每个区块依次顺序相连,而这个时间戳就像数据的生产日期,证明这个数据在什么时间点就已经存在,时间戳是区块元数据的一部分,这使得区块具有天然的时间属性。

  随着区块链架构体系的不断发展,越来越多的研究对区块进行改造从而实现了对空间属性的支持。因此,区块链技术可以为数据打上时空标签,通过在区块中加入数据的时间和空间信息,将同样内容的数据集标识为不同的数据集个体,从而解决了数据要素流通中数据集可以被无限复制而无法辨识的难题,实现数据来源可确认。

  区块链的可追溯性来源于区块链数据结构的特殊性。在区块链系统中,它的链式结构是从创世区块开始的,其后系统产生的所有区块都通过父区块的哈希值前后相连,并最终能追溯到创世区块。

  由于每个区块都包含一段时间内系统进行的所有交易数据,因此完整的区块链数据包含了自创世区块以来,系统所有进行的交易及交易前后的关联信息。同时,得益于区块链信息的不可篡改特性,使得这种可追溯性是可靠可信的。

  function _checkContractOnERC721Received(

  address from,

  address to,

  uint256 tokenId,

  bytes memory _data

  )private returns(bool){

  try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(),from,tokenId,_data)returns(

  bytes4 retval

  ){

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

  }catch(bytes memory reason){

  if(reason.length==0){

  _revert(TransferToNonERC721ReceiverImplementer.selector);

  }

  assembly{

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

  }

  }

  }

  我们在深入解析Safe多签钱包智能合约:Fallback合约内已经对onERC721Received的相关内容进行了分析,读者可自行阅读理解。此处,我们主要对try/catch这一少见的solidity关键词进行分析。

  try关键词后必须为一个外部函数调用,在此处为

  ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(),from,tokenId,_data),即调用了外部ERC721A__IERC721Receiver的onERC721Received函数。return会将外部调用的返回值封装为特定的函数名,此处为retval。

  如果外部调用和返回值封装没有出现错误,就会运行第一个语句块的语句,此处为

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

  该语句块较为简单,不再具体分析。

  catch用来捕获错误,solidity提供了以下catch语句:

  catch Error(string memory reason){...}用于捕获revert("reasonString")或require(false,"reasonString")等语句造成的错误

  catch Panic(uint errorCode){...}用于捕获panic类型错误,如assert、除以0等错误

  catch(bytes memory lowLevelData){...}用于直接捕获底层错误信息,涵盖所有类型错误

  在真实场景下,显然我们无法保证调用的合约使用solidity编写,所以使用最后一张catch方法是有必要的。

  显然,此处使用的是最后一种catch语句。在捕获到底层错误后,我们首先使用if语句判断此错误信息是否长度为0,如果长度为0,则意味着我们没有具体的错误信息,采取直接抛出TransferToNonERC721ReceiverImplementer.selector的策略。

  此处使用了_revert函数,此函数是对revert包装,定义如下:

  function _revert(bytes4 errorSelector)internal pure{

  assembly{

  mstore(0x00,errorSelector)

  revert(0x00,0x04)

  }

  }

相关文章
|
8月前
|
区块链 数据安全/隐私保护 开发者
ptahdao普塔道系统开发|ptahdao普塔道质押模式系统开发
智能合约是区块链技术的一大创新,它是一种在区块链上运行的自动化合约。
|
7月前
|
存储 安全 Unix
阿尔比特ARBT质押项目系统开发|DAPP合约开发
未来,技术的演进是不可阻挡的潮流。为保持平台的技术竞争力
|
7月前
|
存储 安全 区块链
IDO预售代币合约质押项目系统开发方案指南
区块链是一种由多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致存储
|
9月前
|
存储 区块链 数据安全/隐私保护
DEFi代币质押挖矿理财分红模式智能合约dapp开发-Solidity源代码示例
DEFi代币质押挖矿理财分红模式智能合约dapp开发-Solidity源代码示例
|
10月前
|
人工智能 区块链 安全
区块链BSC币安链DAPP发行代币合约项目系统开发正式版丨DAPP币安链BSC代币发行合约系统开发(源码详情)
 本质上来说,智能合约是一段程序,它以计算机指令的方式实现了传统合约的自动化处理。智能合约程序不只是一个可以自动执行的计算机程序,它本身就是一个系统参与者,对接收到的信息进行回应,可以接收和储存价值,也可以向外发送信息和价值。
|
10月前
|
存储 前端开发 安全
BSC币安链DAPP代币发行合约项目系统开发(开发案例)及源码平台
  DAPP的底层存储和运行依赖于区块链技术。在DAPP的开发中,我们可以使用现有的公链,例如以太坊、EOS、TRON等,或者自建私有链来支持DAPP的运行。
|
供应链 区块链 决策智能
Meta2032/PtahDao/ProTradex智能合约流动性质押挖矿分红系统开发(详细逻辑)丨稳定版及源码
  区块链被认为是互联网发明以来最具有颠覆性的技术创新。区块链融合了密码学、经济学、博弈论以及计算机学科等多个学科,具有交易不可逆、数据不可篡改的特点,在很多领域具备商业价值,应用研究已拓展至金融、能源、物流、教育、文化和社会服务等领域。
|
机器学习/深度学习 人工智能 安全
PtahDao/ProTradex/Meta2032流动性质押挖矿分红系统开发(NFT质押挖矿开发)丨成熟及源码
 区块链技术由此可以从多方面为企业赋能:提供可靠的共享数据,在各方之间建立信任;消除数据孤岛,即通过去中心化的,在一个网络中共享并支持获许可方访问的账本将数据集成到一个系统中;为数据赋予高度安全性
|
Java 区块链 C++
IDO代币预售智能合约系统开发详细及流程丨IDO代币预售智能合约开发源码版
智能合约是对协议的翻译,包括将条款和条件转换成计算机代码。区块链开发者用JAVA、C++和其他编程语言编写脚本,不会引起歧义或误解。这段代码翻译了一组自动执行和验证的规则。
|
人工智能 算法
IDO代币预售发行合约系统开发(开发案例)丨IDO代币预售发行合约系统开发(源码项目)
  人工智能(Artificial Intelligence,简称AI)是指计算机系统在完成类似人类智力所需的任务时所表现出来的能力。它是一种复杂的技术,通过将大量的数据输入到算法中进行学习,不断调整和改进自己的算法,从而不断优化其性能。