3M/MMM互助智能合约开发详情版,MMM/3M互助智能合约系统开发(说明及案例)丨源码部署

简介:   狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。

  

  区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。

  狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。

  广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。

  在区块链技术中的数据有一定的顺序性, 每个数据区块都有一个“哈希值”代码,在链状数据结构中,任意区块中的数据改变都会影响后续与之相关所有区块的信息变化。这一技术确保区块链上的每个区块数据都不能随意被篡改、删除或破坏。因此,区块链技术在保证电子档案完整、真实的基础上还具有较强的追溯性

  //SPDX-License-Identifier:MIT

  pragma solidity^0.8.0;

  import"openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";

  import"./IERC4907.sol";

  contract ERC4907 is ERC721URIStorage,IERC4907{

  struct UserInfo{

  address user;//address of user role

  uint64 expires;//unix timestamp,user expires

  }

  mapping(uint256=>UserInfo)internal _users;

  constructor(string memory name_,string memory symbol_)ERC721(name_,symbol_){}

  ///notice set the user and expires of a NFT

  ///dev The zero address indicates there is no user

  ///Throws iftokenIdis not valid NFT

  ///param user The new user of the NFT

  ///param expires UNIX timestamp,The new user could use the NFT before expires

  function setUser(

  uint256 tokenId,

  address user,

  uint64 expires

  )public virtual override{

  require(

  _isApprovedOrOwner(msg.sender,tokenId),

  "ERC721:transfer caller is not owner nor approved"

  );

  UserInfo storage info=_users[tokenId];

  info.user=user;

  info.expires=expires;

  emit UpdateUser(tokenId,user,expires);

  }

  ///notice Get the user address of an NFT

  ///dev The zero address indicates that there is no user or the user is expired

  ///param tokenId The NFT to get the user address for

  ///return The user address for this NFT

  function userOf(uint256 tokenId)

  public

  view

  virtual

  override

  returns(address)

  {

  if(uint256(_users[tokenId].expires)>=block.timestamp){

  return _users[tokenId].user;

  }else{

  return address(0);

  }

  }

  ///notice Get the user expires of an NFT

  ///dev The zero value indicates that there is no user

  ///param tokenId The NFT to get the user expires for

  ///return The user expires for this NFT

  function userExpires(uint256 tokenId)

  public

  view

  virtual

  override

  returns(uint256)

  {

  return _users[tokenId].expires;

  }

  ///dev See{IERC165-supportsInterface}.

  function supportsInterface(bytes4 interfaceId)

  public

  view

  virtual

  override

  returns(bool)

  {

  return

  interfaceId==type(IERC4907).interfaceId||

  super.supportsInterface(interfaceId);

  }

  function _beforeTokenTransfer(

  address from,

  address to,

  uint256 tokenId

  )internal virtual override{

  super._beforeTokenTransfer(from,to,tokenId);

  if(from!=to&&_users[tokenId].user!=address(0)){

  delete _users[tokenId];

  emit UpdateUser(tokenId,address(0),0);

  }

  }

  }

相关文章
|
SQL 数据库 流计算
出现了 FlinkServerException 或 FlinkSQLException 错误
出现了 FlinkServerException 或 FlinkSQLException 错误
838 1
|
弹性计算 运维 安全
阿里云无影云电脑——更安全可靠便宜
阿里云无影云电脑——更安全可靠便宜,什么是阿里云无影云电脑?无影云电脑(原云桌面)是一种快速构建、高效管理桌面办公环境,无影云电脑可用于远程办公、多分支机构、安全OA、短期使用、专业制图等使用场景,阿里云百科分享无影云桌面的详细介绍、租用价格、云电脑的优势、使用场景、网络架构、无影云电脑与云服务器的区别以及关于无影云电脑的常见问题解答FAQ
919 1
|
10月前
|
人工智能 数据可视化 数据处理
从0到1只需“拖一拖”,开发时间按秒算——低代码到底有多牛
低代码平台正颠覆传统软件开发模式,通过可视化开发、模块化组件和自动化工具,将复杂开发过程大大简化。开发者只需“拖拽”组件和配置参数,即可快速构建应用,无需复杂编程。低代码平台支持实时预览、自动代码生成和快速部署,极大提高了开发效率,满足多样化业务需求。其核心引擎(如SQL引擎、功能引擎等)的升级,进一步提升了性能与灵活性。此外,模型驱动开发、智能数据处理及AI融合,使得低代码平台不仅简化开发流程,还为企业提供高效、灵活的技术解决方案,推动企业数字化转型。未来,低代码将成为智能化开发的关键趋势。
485 18
|
12月前
|
供应链 算法 物联网安全
NIST主要的研究成果
NIST主要的研究成果
285 40
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
237 3
Mysql(4)—数据库索引
|
12月前
|
机器学习/深度学习 自然语言处理 语音技术
探索深度学习中的Transformer模型及其在自然语言处理中的应用
探索深度学习中的Transformer模型及其在自然语言处理中的应用
542 5
|
算法 PyTorch 算法框架/工具
论文解读:LaMa:Resolution-robust Large Mask Inpainting with Fourier Convolutions
论文解读:LaMa:Resolution-robust Large Mask Inpainting with Fourier Convolutions
1408 0
|
监控 安全 网络协议
什么是点对点协议 (PPP)?
【4月更文挑战第12天】
797 1
什么是点对点协议 (PPP)?
|
人工智能 监控 算法
智能时代下的AI伦理挑战与应对策略
随着人工智能技术的飞速发展,其在各行各业的应用日益广泛。然而,AI技术带来的便利性背后隐藏着诸多伦理问题,如隐私泄露、算法偏见和责任归属等。本文从技术发展的角度出发,探讨了当前AI技术面临的主要伦理挑战,并提出了相应的应对策略。通过分析不同案例,本文旨在为AI技术的健康发展提供指导性建议,以促进技术创新与社会伦理的和谐共生。
500 0
|
API 开发工具
POSTMAN在测试调用钉钉待办事项接口时权限问题
POSTMAN在测试调用钉钉待办事项接口时权限问题