区块链开发之智能合约设计模式

Posted BBinChina

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链开发之智能合约设计模式相关的知识,希望对你有一定的参考价值。

编程范式中提到的设计模式:
Creational Patterns(创建型模式),如Singleton, Factory,AbstractFactory模式等;
Behavioral Patterns(行为模式),如Observer,Vistor,Mediator模式等;
Structural Pattern(结构型模式),如Bridge,Composite,Facade模式等;

随着Solidity大量的去中心化应用的普及,也形成了一些设计模式:

1、合约自毁(Contract Self Destruction)

场景:
当我们的贷款合同在还款结束之后,需要进行销毁时,合约销毁后:
1)合约相关交易(Transaction)会失败,即终止
2)对合约地址发起的转账资金会消失
所以指向被销毁合约的引用必须进行删除,而且在发送资金时,最好先调用Get()判断合约存在再进行发送

pragma solidity ^0.4.24;

contract SelfDestructionContract 
    public address owner;
    public string someValue;
    // 定义modifier函数修改器
    modifier ownerRestricted
    //合约调用者与构造者是同一人
        require(owner==msg.sender);
    
    // 构造函数
    function SelfDestructionContract() 
        owner=msg.sender;
    
    //api
    function setSomeValue(string value)
        someValue=value;
    
    // 使用定义的函数修改器ownerRestricted来限制函数只能由合约拥有者调用 
    function destoryContract()
    ownerRestricted
        suicide(owner);
    

工厂合约模式(Factory Contract)

场景:
把子合约看做是资产,子合约进行相应的逻辑,比如买卖汽车时(不同汽车有折损或者收藏价值),可以对资产产权进行变换。在出售资产时,必须给函数加上payable修饰符。

pragma solidity ^0.4.24;

contract AutoShop
    address[] autoAssets;
    
    function createChildContract() public payable
        address newAutoAsset = new AutoAsset(msg.sender);
        autoAssets.push(newAutoAsset);
    
    
    function getDeployedChildContracts() public view returns(address[])
        return autoAssets;
    
    


contract AutoAsset 
    address public owner;
    
    function AutoAsset(address _owner) 
        owner = _owner;    
    

以上是关于区块链开发之智能合约设计模式的主要内容,如果未能解决你的问题,请参考以下文章

区块链开发之Solidity智能合约开发

区块链项目之平台类|币经百科

区块链学习笔记之以太坊

区块链-智能合约工程师第一篇:某科技jd解读

区块链-智能合约工程师第一篇:某科技jd解读

12. Fabric2.2 区块链农产品溯源系统 - 智能合约开发-2