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

}

相关文章
|
11月前
|
算法 区块链
Defi+NFT质押流动性挖矿系统开发/LP质押挖矿功能开发解析
Defi+NFT质押流动性挖矿系统开发/LP质押挖矿功能开发解析
|
存储 区块链 数据安全/隐私保护
DEFi代币质押挖矿理财分红模式智能合约dapp开发-Solidity源代码示例
DEFi代币质押挖矿理财分红模式智能合约dapp开发-Solidity源代码示例
|
缓存 算法 安全
浅谈defi/nft/lp/pil/dapp代币智能合约流动性质押挖矿系统开发(技术方案及逻辑)丨代码部署
// Proposal defined a consesensus proposal which can // be gossiped to other node and can be serilized // for persistent store. message Proposal {
|
JavaScript 前端开发 UED
LSD赛道流动性挖矿dapp系统开发源代码|LP流动性质押分红模式定制详情
LSD赛道流动性挖矿dapp系统开发源代码|LP流动性质押分红模式定制详情
|
前端开发
LP子母双币质押流动性挖矿系统开发源代码|分红机制定制详情
LP子母双币质押流动性挖矿系统开发源代码|分红机制定制详情
流动性质押挖矿矿池系统开发(开发案例)丨流动性质押挖矿矿池系统开发(详细及源码)
? (amountSpecified - state.amountSpecifiedRemaining, state.amountCalculated) (state.amountCalculated, amountSpecified - state.amountSpecifiedRemaining);
|
区块链 Python
PIL质押分红NFT系统开发讲解方案模式
PIL质押NFT分红模式系统开发讲解方案模式
109 1
|
存储 前端开发 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最关键的技术。
|
边缘计算 5G 区块链
swap交易所代币合约流动性质押挖矿系统开发(开发案例)丨swap交易所代币合约流动性质押挖矿现成源码案例
 综合来看,技术方面,Web 3.0不仅是过往技术迭代,更是多项科技的集成,包括5G、VR、AR、区块链、云计算、芯片、边缘计算等。具体地来看,Web3.0技术可分为基础层技术、平台层技术、交互层技术。相较于Web2.0时代,Web3.0涉及细分技术类别更多、范围更广,其中区块链技术由于其去中心化的特征,成为Web3.0核心底层基础技术