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_;

  }

  }

相关文章
|
3月前
|
存储 安全 区块链
DAPP众筹互助模式系统开发|技术方案
智能合约的主要目的之一是在多方之间去信任化地自动达成金融协议
|
9月前
|
存储 安全 区块链
DAPP互助公排智能合约系统开发方案与需求
智能合约是需要区块链开发者用区块链编程语言写出来的一串代码,根据不同场景构思逻辑后开发出来的信任机制
|
10月前
|
存储 算法 区块链
DAPP公排互助质押项目系统开发指南与方案
去中心化。区块链技术不依赖额外的第三方管理机构或硬件设施,没有中央控制。除了自成一体的区块链本身,各个节点通过分布式的计费和存储实现信息的自校验、传输和管理
|
10月前
|
存储 安全 大数据
去中心化互助公排系统开发|DAPP开发
按照目前通用的说法,狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构
直销公排系统模式制度开发搭建讲解
直销公排系统模式制度开发搭建讲解
|
10月前
|
供应链 算法 区块链
智能合约互助公排系统开发指南与方案
作为一种自动执行的协议,智能合约被嵌入在区块链计算机代码中
|
11月前
|
存储 设计模式 开发框架
DAPP排单互助公排系统开发智能合约模式
智能合约开发:学习使用智能合约开发语言(如Solidity),熟悉智能合约的编写
|
11月前
|
存储 算法 安全
DAPP互助公排系统开发源码|DAPP互助系统开发方案与指南
“去中心化”是区块链的典型特征之一,其使用分布式储存与算力
|
存储 前端开发 测试技术
众筹互助智能合约系统开发(开发案例)丨dapp智能合约众筹互助丨公排拆分丨系统开发详细规则/成熟技术/方案设计/源码说明
 智能合约互助系统开发是指创建并实现基于智能合约技术的互助系统。智能合约是一种在区块链上执行的自动化计算代码,它可以在事先设定的条件满足时执行相应的操作,无需依赖人工干预。智能合约互助系统旨在通过智能合约技术来优化和自动化互助服务的提供和管理。
|
存储 区块链 文件存储
DAPP众筹互助公排系统开发(详情功能)DAPP互助模式开发
区块就是很多交易数据的集合,它被标记上时间戳和之前一个区块的独特标记