资讯专栏INFORMATION COLUMN

智能合约设计模式--COP

shadowbook / 2298人阅读

摘要:这样的模式规范能保证合约的安全。函数主体没有条件判断例子改进后的风格扩展阅读

Design by contract

solidity这门语言设计思路是什么?
什么是COP?

COP

面向条件的编程(COP)是面向合约编程的一个子域,作为一种面向函数和命令式编程的混合模式。COP解决了这个问题,通过需要程序员显示地枚举所有的条件。逻辑变得扁平,没有条件的状态变化。条件片段可以被正确的文档化,复用,可以根据需求和实现来推断。重要的是,COP在编程中把预先条件当作为一等公民。这样的模式规范能保证合约的安全。

post-condition
contract PostCheck {

    uint public data = 0;

    // Check that the "data" field was set to the value of "_data".
    modifier data_is_valid(uint _data) {
        _
        if (_data != data)
            throw;
    }

    function setData(uint _data) data_is_valid(_data) {
        data = _data;
    }

}
pre- and post-conditions

"_"

contract PrePostCheck {

    uint public data = 0;

    // Check that the input "_data" value is not the same as the value
    // already stored in "data".
    modifier data_is_valid(uint _data) {
        if (_data == data)
           throw;
        _
    }

    // Check that the "data" field was set to the value of "_data".
    modifier data_was_updated(uint _data) {
        _
        if (_data != data)
            throw;
    }

    function setData(uint _data) data_is_valid(_data) data_was_updated(_data) {
        data = _data;
    }

}
FEATURES

函数主体没有条件判断

例子:

contract Token {
    // The balance of everyone
    mapping (address => uint) public balances;
    // Constructor - we"re a millionaire!
    function Token() {
        balances[msg.sender] = 1000000;
    }
    // Transfer `_amount` tokens of ours to `_dest`.
    function transfer(uint _amount, address _dest) {
        balances[msg.sender] -= _amount;
        balances[_dest] += _amount;
    }
}

改进后:

function transfer(uint _amount, address _dest) {
    if (balances[msg.sender] < _amount)
        return;
    balances[msg.sender] -= _amount;
    balances[_dest] += _amount;
}

COP的风格

modifier only_with_at_least(uint x) {
    if (balances[msg.sender] >= x) _;
}

function transfer(uint _amount, address _dest)
only_with_at_least(_amount) {
    balances[msg.sender] -= _amount;
    balances[_dest] += _amount;
}
扩展阅读:

Condition-Orientated Programming

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/24202.html

相关文章

  • 智能合约实施指南

    摘要:在协议结束时,智能合约被视为已履行并仍存储在区块链网络中。这组条件和事件代表了最基本的一次性智能合约。智能合约用例智能合约越来越受欢迎,并已在各种区块链项目中实施。 与区块链技术一样,智能合约在商业领域也非常有价值。 为了让我们的读者彻底了解智能合约是什么以及它们如何影响现代商业的交易方式,我们准备了本指南。 集中商业模式正在给去中心化的模式让路 传统的商业关系模型都是集中式的,始终存...

    meteor199 评论0 收藏0
  • 智能合约实施指南

    摘要:在协议结束时,智能合约被视为已履行并仍存储在区块链网络中。这组条件和事件代表了最基本的一次性智能合约。智能合约用例智能合约越来越受欢迎,并已在各种区块链项目中实施。 与区块链技术一样,智能合约在商业领域也非常有价值。 为了让我们的读者彻底了解智能合约是什么以及它们如何影响现代商业的交易方式,我们准备了本指南。 集中商业模式正在给去中心化的模式让路 传统的商业关系模型都是集中式的,始终存...

    PumpkinDylan 评论0 收藏0
  • 智能合约实施指南

    摘要:在协议结束时,智能合约被视为已履行并仍存储在区块链网络中。这组条件和事件代表了最基本的一次性智能合约。智能合约用例智能合约越来越受欢迎,并已在各种区块链项目中实施。 与区块链技术一样,智能合约在商业领域也非常有价值。 为了让我们的读者彻底了解智能合约是什么以及它们如何影响现代商业的交易方式,我们准备了本指南。 集中商业模式正在给去中心化的模式让路 传统的商业关系模型都是集中式的,始终存...

    oogh 评论0 收藏0
  • 智能合约实施指南

    摘要:在协议结束时,智能合约被视为已履行并仍存储在区块链网络中。这组条件和事件代表了最基本的一次性智能合约。智能合约用例智能合约越来越受欢迎,并已在各种区块链项目中实施。 与区块链技术一样,智能合约在商业领域也非常有价值。 为了让我们的读者彻底了解智能合约是什么以及它们如何影响现代商业的交易方式,我们准备了本指南。 集中商业模式正在给去中心化的模式让路 传统的商业关系模型都是集中式的,始终存...

    yzzz 评论0 收藏0
  • 区块链学习之以太坊(七)

    摘要:基于以太坊项目,以太坊团队目前运营了一个公开的区块链平台以太坊网络。主要特点以太坊区块链底层也是一个类似比特币网络的网络平台,智能合约运行在网络中的以太坊虚拟机里。以太坊采用交易作为执行操作的最小单位。 以太坊将比特币针对数字交易的功能进一步进行了拓展,面向更为复杂和灵活的应用场景,支持了智能合约这一重要特性。 以太坊项目简介 以太坊:项目最初的目标是打造以个智能合约的平台,该平台支持...

    xiongzenghui 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<