PIL派链流动性质押挖矿系统丨PIL派链流动性质押挖矿系统开发(逻辑及详情)丨PIL派链流动性质押挖矿开发源码方案

简介: 智能合约代码编写:contract Students { struct StudentInfo { uint32 _studentId; bytes32 _studentName; } mapping (uint32 => StudentInfo) private _studentMapping; function addStudent(uint32 studentId, bytes32 studentName) public returns(bool){ //TODO: }}

智能合约代码编写:

contract Students {
struct StudentInfo {

    uint32 _studentId;
    bytes32 _studentName;
}
mapping (uint32 => StudentInfo) private _studentMapping;
function addStudent(uint32 studentId, bytes32 studentName) public returns(bool){
  //TODO:
}

}

这种写法,代码全部在一个智能合约中,如果现有的智能合约已经不能满足业务诉求,比如类型为uint32字段需升级为为uint64,或者合约中添加一个新的字段,比如sex,那这个智能合约就没有用了,需要重新部署。但因为重新部署,合约地址变了,无法访问到之前的数据。

一种做法是对合约进行分层,将业务逻辑和数据分离,如下所示:

contract StudentController {
mapping (uint32 => address) private _studentMapping;

function addStudent(uint32 studentId, bytes32 studentName) public returns(bool){
  //TODO:
}

}
contract Student {
uint32 _studentId;
bytes32 _studentName;

//uint8 sex;

}

这种写法使得逻辑和数据分离,当需要新增一个性别sex字段时,原始数据可以编写两个StudentController合约,通过版本区分,新的Student采用新的逻辑,需要业务层面做兼容性处理,其最大的问题是对于原有数据的交互性操作,需要跨合约完成,非常不方便,比如查询所有学生信息。

我们再次进行分层,多出一个map层,专门用于合约数据管理,即使业务逻辑层和数据层都出现问题,也没有关系,只需要重新编写业务逻辑层和数据层,并对原有数据进行特殊处理就可以做到兼容。不过,这种做法需要提前在数据合约中做好版本控制(version),针对不同的数据,采用不同的逻辑。

这种做法最大的好处是数据全部保存在StudentMap中,数据合约和逻辑合约的变更都不会影响到数据,且在后续的升级中,可以通过一个controller合约做到对新老数据的兼容,如下所示:

contract StudentController {
mapping (uint32 => address) private _studentMapping;
constructor(address studentMapping) public {

  _studentMapping = studentMapping;
}
function addStudent(uint version, uint32 studentId, bytes32 studentName, uint8 sex) public returns(bool){
  if(version == 1){
        //TODO
    }else if(version == 2){
        //TODO
    }
}

}
contract StudentMap {
mapping (uint32 => address) private _studentMapping;

function getStudentMap() public constant returns(address){
  return _studentMapping;
}

}
contract Student {
uint8 version;
uint32 _studentId;
bytes32 _studentName;

//uint8 sex;

}

统一接口

智能合约尽管具备很多高级语言的特性,但是本身还是存在很多限制。对于业务的精准处理,需要采用Event事件进行跟踪,对于不同的合约和方法,可以编写不同的Event事件,如下:

PS:你也可以采用require的方式进行处理,不过require方式不支持动态变量,每个require处理后需要填入特定的报错内容,在SDK层面耦合性太重,且不便于扩展。

contract StudentController {
//other code

event addStudentSuccessEvent(...); //省略参数,下同
event addStudentFailEvent(...);

function addStudent(bytes32 studentId, bytes32 studentName) public returns(bool){
  if(add success){
      addStudentSuccessEvent(...);
        return true;
    }else {
      addStudentFailEvent(...);
        return false;
    }
}

}

相关文章
|
算法 区块链
Defi+NFT质押流动性挖矿系统开发/LP质押挖矿功能开发解析
Defi+NFT质押流动性挖矿系统开发/LP质押挖矿功能开发解析
|
机器学习/深度学习 人工智能 安全
PtahDao/ProTradex/Meta2032流动性质押挖矿分红系统开发(NFT质押挖矿开发)丨成熟及源码
 区块链技术由此可以从多方面为企业赋能:提供可靠的共享数据,在各方之间建立信任;消除数据孤岛,即通过去中心化的,在一个网络中共享并支持获许可方访问的账本将数据集成到一个系统中;为数据赋予高度安全性
|
存储 缓存 算法
流动性质押挖矿分红开发源码版,流动性质押挖矿分红系统开发技术详细及分析
共识模块主要由几个组件组成,世代epoch、提案消息缓存服务msgcache、共识消息处理引擎engine、共识消息验证器verifier、提案消息存储服务forest、投票处理器voter、共识活性服务pacemaker、wal存储wal、节点间共识信息同步服务compensator、各模块相互配合实现maxbft流水线共识算法
|
区块链 数据安全/隐私保护
DAO流动性质押挖矿分红开发正式版丨DAO流动性质押挖矿分红系统开发(开发案例)丨源码功能
  Web3.0推动分布式经济模型的实现,如NFT、Defi、加密货币和去中心化自治组织(DAO)。Web3.0共建共享的特性,与Web2.0中用户仅作为使用者不同,使Web3.0中用户能主动参与共建与共治,以DAO的组织形式,利用区块链技术和智能合约进行规则制定与执行,共担共享平台或协议的价值。
|
机器学习/深度学习 计算机视觉 算法框架/工具
Meta2032流动性质押挖矿分红系统开发(详情及说明)丨Meta2032流动性质押挖矿分红开发源码及案例
  人工智能技术是智能工业时代的核心技术之一。人工智能技术包括机器学习、深度学习、自然语言处理、计算机视觉等。这些技术的应用使得机器能够自主地学习、理解和判断,可以帮助工业企业实现自动化、智能化和高效化的生产和管理。
|
存储 区块链 文件存储
云算力质押挖矿系统开发(详细及方案)丨云算力质押挖矿系统开发(逻辑及功能)丨云算力质押挖矿源码版案例
  IPFS是一个去中心化的点对点文件存储网络,允许用户以分布式方式存储、访问和共享文件,提供更高的安全性、隐私性和可扩展性。StorX使任何人都可以在全球多个托管节点之间安全地加密、分段和分发关键数据。存储在StorX上的每个文件在加密之前都被分成多个部分,并存储在由位于世界各地的不同运营商运行的独立存储节点中。
|
前端开发
LP子母双币质押流动性挖矿系统开发源代码|分红机制定制详情
LP子母双币质押流动性挖矿系统开发源代码|分红机制定制详情
流动性质押挖矿矿池系统开发(开发案例)丨流动性质押挖矿矿池系统开发(详细及源码)
? (amountSpecified - state.amountSpecifiedRemaining, state.amountCalculated) (state.amountCalculated, amountSpecified - state.amountSpecifiedRemaining);
|
存储 前端开发 JavaScript
流动性质押挖矿系统开发技术详情,LP/DAPP流动性质押挖矿系统开发应用方案及分析
What is dApp?   DApps are similar to regular applications,but they run on point-to-point networks(such as blockchains).   However,unlike traditional applications,dApps can run without any human intervention and are not owned by any entity,but distribute tokens to users representing ownership.To co
流动性质押挖矿系统开发技术详情,LP/DAPP流动性质押挖矿系统开发应用方案及分析
|
人工智能 物联网 大数据
流动性质押挖矿分红系统开发案例源码,dapp/lp流动性质押挖矿分红系统开发技术说明及方案
现阶段,Web3.0处于早期发展阶段。由于web3.0具有“智能机器广泛参与到网络过程”的鲜明特征,所以Web3.0的发展将离不开云计算、大数据、人工智能、物联网、区块链等相关技术。而区块链技术是Web3.0最关键的技术。