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

  }

  }

相关文章
|
9月前
|
存储 算法 分布式数据库
DAPP质押项目系统开发|需求方案|模式分析
虽然区块大小看起来很小,但它们可以承载多达2000个交易
|
算法 安全 分布式数据库
MetaForce原力元宇宙佛萨奇2.0智能合约系统开发(源码部署)
Force是一个全球加密货币生态系统,其成员使用我们的智能合约即时利润分配工具和算法互相帮助以实现财务福利。META FORCE系统属于我们的社区并且是完全去中心化的,这意味着它是透明的、安全的并且可以抵抗外部影响。 智能合约是一种自执行算法(程序代码)。它保证了在区块链内执行逻辑或传输的透明性和安全性。
|
安全 区块链 UED
DAPP持币生息系统开发方案指南(成熟技术)
Web3.0不仅在技术层面上带来了变革,还对人们的生活产生了深远的影响
|
区块链
DAPP流动性质押模式系统开发(成熟案例)技术方案
要理解智能合约的概念和作用,首先需要了解区块链的基本架构
|
存储 前端开发 测试技术
众筹互助智能合约系统开发(开发案例)丨dapp智能合约众筹互助丨公排拆分丨系统开发详细规则/成熟技术/方案设计/源码说明
 智能合约互助系统开发是指创建并实现基于智能合约技术的互助系统。智能合约是一种在区块链上执行的自动化计算代码,它可以在事先设定的条件满足时执行相应的操作,无需依赖人工干预。智能合约互助系统旨在通过智能合约技术来优化和自动化互助服务的提供和管理。
|
安全 区块链
区块链币币交易所系统开发成熟技术/方案逻辑/源码部署
Blockchain is a distributed ledger technology that stores data in the form of a gradually growing, linked data block (block), and uses cryptographic methods and consensus algorithms to ensure data security and reliability
|
存储 机器人 大数据
量化交易机器人系统开发(开发策略)及案例丨数字货币区块链交易所系统开发详细项目/方案设计/开发逻辑/源码版
  区块链的核心技术之一就是公开且透明的交易信息。一般情况下,在区块链内产生、流转和存储的信息是对所有节点用户开放的,其高度的透明化也使得区块内的所有人都能够查看数据的所有相关信息同时使用其应用。因此,区块链技术在信息共享与数据交换领域具有一定的优势。
|
安全 区块链
关于MMMBSC互助智能合约(3m)开发系统实现技术
智能合约的整个产生和执行过程都是可追溯、不可篡改的。一旦触发合约就会立即执行,自动按照合约规范进行操作。整个过程智能高效,短时间快速完成更是体现了它的准确和经济。
关于MMMBSC互助智能合约(3m)开发系统实现技术
|
存储 算法 安全
3M/MMM互助智能合约开发详情版,MMM/3M互助智能合约系统开发(说明及案例)丨源码部署
  狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。