MMM排单互助智能合约开发系统部署技术

简介: 目前实现的方式根据存储区分有各种各样的模式,但是都离不开一个最底层的机制,就是使用delegatecall的特性去实现可升级的合约,达到合约可持续优化更改的效果

  智能合约通俗点说就是写在区块链上面的代码,代码里面编写着严谨完善的规则,一旦某个用户满足了合约里面的规则条件,就会触发里面的代码,执行某个方法。

  为什么要使智能合约达到可升级

  智能合约的特点之一就是部署到链上之后不能修改,这一机制使得合约的交互方都可以信任合约。但也带来了一系列的问题,并且如果已部署的合约发现漏洞,也是无法修复的。假如发现了bug,必须修复,那如何处理?就是使用合约达到可升级优化才能满足需求

  升级合约的机制原理

  什么是合约升级

  使已经部署上链的合约做到可优化可更改,例如链上的业务逻辑代码和状态变量达到可增删改的功能.

  2.合约升级的实现机制原理

  目前实现的方式根据存储区分有各种各样的模式,但是都离不开一个最底层的机制,就是使用delegatecall的特性去实现可升级的合约,达到合约可持续优化更改的效果.

  delegatecall介绍

  目前调用合约的方式主要有三种

  call

  delegateCall

  staticCall

  共同点:都是去调用执行目标合约地址的方法

  区别:delegateCall的执行环境和call和staticCall相反,正因为这样所以可利用这种特性实现可升级,在用户层面上无感知。

  实现可升级的ERC20合约

  编写InitializedProxy代理合约,此合约主要作用是转发和存储数据.

  继承openzeppelin的StorageSlotUpgradeable合约,用于插槽工具类。

  //SPDX-License-Identifier:GPL-3.0

  import" openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol";

  pragma solidity>=0.7.0<0.9.0;

  contract InitializedProxy{

  //address of logic contract

  //slot bytes32(uint256(keccak256('EIP1967.PROXY.CONFTI.IMPLEMENTATION'))-1)

  bytes32 internal constant _IMPLEMENTATION_SLOT=0x5f62ce3c9aebd463c7a36ab1b244d2bb94f07a2c13889b3b687940ebc467b9b3;

  //========Constructor=========

  constructor(

  address logic,

  bytes memory initializationCalldata

  ){

  require(logic!=address(0),"Proxy::Wrong proxy contract address");

  StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value=logic;

  //Delegatecall into the logic contract,supplying initialization calldata

  (bool _ok,bytes memory returnData)=

  logic.delegatecall(initializationCalldata);

  //Revert if delegatecall to implementation reverts

  require(_ok,string(returnData));

  }

  //========Fallback=========

  fallback()external payable{

  address _impl=StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value;

  assembly{

  let ptr:=mload(0x40)

  calldatacopy(ptr,0,calldatasize())

  let result:=delegatecall(gas(),_impl,ptr,calldatasize(),0,0)

  let size:=returndatasize()

  returndatacopy(ptr,0,size)

  switch result

  case 0{

  revert(ptr,size)

  }

  default{

  return(ptr,size)

  }

  }

  }

  //========Receive===

  receive()external payable{}//solhint-disable-line no-empty-blocks

  function upgradeVersion(address newAddress_)public{

  StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value=newAddress_;

  }

  }

相关文章
|
6月前
|
存储 算法 分布式数据库
持币生息DAPP系统开发|模式方案|源码
区块链将所有信息存储在分类账系统中。此外,任何类型的数据交换都称为“交易”
|
1月前
|
存储 安全 前端开发
DAPP循环矩阵互助公排系统开发模式规则技术
DAPP循环矩阵互助公排系统是一款基于区块链技术的去中心化应用,通过智能合约实现透明、自动化的互助众筹。系统涵盖用户注册、身份验证、项目发布与审核、资金管理等功能,并采用循环矩阵和公排机制激励用户参与。通过区块链和智能合约技术,确保资金安全和项目真实性,同时提供社区互动平台增强用户体验。系统开发需持续优化迭代,关注市场需求及法律合规,打造安全、透明、高效的互助平台。
|
6月前
|
存储 算法 分布式数据库
DAPP质押项目系统开发|需求方案|模式分析
虽然区块大小看起来很小,但它们可以承载多达2000个交易
|
存储 算法 区块链
DAPP公排互助质押项目系统开发指南与方案
去中心化。区块链技术不依赖额外的第三方管理机构或硬件设施,没有中央控制。除了自成一体的区块链本身,各个节点通过分布式的计费和存储实现信息的自校验、传输和管理
|
存储 JavaScript 前端开发
去中心化互助公排系统开发指南与方案
区块链技术的最初迭代在某种程度上可与网站第一次进化相媲美
|
供应链 算法 区块链
智能合约互助公排系统开发指南与方案
作为一种自动执行的协议,智能合约被嵌入在区块链计算机代码中
|
存储 设计模式 开发框架
DAPP排单互助公排系统开发智能合约模式
智能合约开发:学习使用智能合约开发语言(如Solidity),熟悉智能合约的编写
|
存储 前端开发 测试技术
众筹互助智能合约系统开发(开发案例)丨dapp智能合约众筹互助丨公排拆分丨系统开发详细规则/成熟技术/方案设计/源码说明
 智能合约互助系统开发是指创建并实现基于智能合约技术的互助系统。智能合约是一种在区块链上执行的自动化计算代码,它可以在事先设定的条件满足时执行相应的操作,无需依赖人工干预。智能合约互助系统旨在通过智能合约技术来优化和自动化互助服务的提供和管理。
|
存储 区块链 文件存储
DAPP众筹互助公排系统开发(详情功能)DAPP互助模式开发
区块就是很多交易数据的集合,它被标记上时间戳和之前一个区块的独特标记
下一篇
无影云桌面