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)

  }

  }

相关文章
|
供应链 物联网 分布式数据库
秒合约跟单系统开发|现货合约交易所系统开发案例
区块链技术可以通过分布式网络、共识机制和智能合约的相互配合,实现去中心化的应用,包括数字货币、智能合约、供应链管理、物联网、融等多个领域
|
NoSQL 关系型数据库 MySQL
数字货币永续合约/币币交易所系统开发(开发案例),币币交易所/永续合约交易所开发源码及体验版
Market analysis:Exchanges can also provide market charts and analysis tools for digital currencies,helping users understand market dynamics,trends,and price change
|
存储 分布式计算 大数据
DAPP质押合约代币公排互助系统开发详情讲解
区块链和大数据都是新一代信息技术,它们的概念不同,应用领域也有着一定的区别
|
存储 安全 Unix
阿尔比特ARBT质押项目系统开发|DAPP合约开发
未来,技术的演进是不可阻挡的潮流。为保持平台的技术竞争力
|
存储 区块链
秒合约跟单系统开发源码|期权现货交易系统开发
在区块链技术中,智能合约起到了至关重要的作用。
|
存储 安全 区块链
秒合约质押模式系统开发|秒合约交易所项目系统开发稳定版
Web3是区块链生态系统的重要组成部分,因为它为开发人员提供了一个平台来创建安全可靠的去中心化应用程序。
|
存储 安全 区块链
交割合约交易所系统开发稳定版|秒合约系统开发源码案例
web3开发的好处很多。例如,基于区块链的应用程序可能比传统的Web应用程序更安全
|
人工智能 区块链 安全
区块链BSC币安链DAPP发行代币合约项目系统开发正式版丨DAPP币安链BSC代币发行合约系统开发(源码详情)
 本质上来说,智能合约是一段程序,它以计算机指令的方式实现了传统合约的自动化处理。智能合约程序不只是一个可以自动执行的计算机程序,它本身就是一个系统参与者,对接收到的信息进行回应,可以接收和储存价值,也可以向外发送信息和价值。
|
数据挖掘 API
秒合约交易所/永续合约交易所/币币交易所系统开发(开发稳定版)及案例项目/源码说明
Develop API interface for quantitative spot contract tracking system:Develop API interface in the quantitative spot contract tracking system to interface with exchange APIs.This interface needs to be designed according to the specifications and requirements of the exchange API,and ensure that it mat

热门文章

最新文章

下一篇
开通oss服务