摘要:這樣的模式規(guī)范能保證合約的安全。函數(shù)主體沒有條件判斷例子改進后的風格擴展閱讀
Design by contract
solidity這門語言設(shè)計思路是什么?
什么是COP?
面向條件的編程(COP)是面向合約編程的一個子域,作為一種面向函數(shù)和命令式編程的混合模式。COP解決了這個問題,通過需要程序員顯示地枚舉所有的條件。邏輯變得扁平,沒有條件的狀態(tài)變化。條件片段可以被正確的文檔化,復(fù)用,可以根據(jù)需求和實現(xiàn)來推斷。重要的是,COP在編程中把預(yù)先條件當作為一等公民。這樣的模式規(guī)范能保證合約的安全。
post-conditioncontract 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
函數(shù)主體沒有條件判斷
例子:
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
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/24202.html
摘要:在協(xié)議結(jié)束時,智能合約被視為已履行并仍存儲在區(qū)塊鏈網(wǎng)絡(luò)中。這組條件和事件代表了最基本的一次性智能合約。智能合約用例智能合約越來越受歡迎,并已在各種區(qū)塊鏈項目中實施。 與區(qū)塊鏈技術(shù)一樣,智能合約在商業(yè)領(lǐng)域也非常有價值。 為了讓我們的讀者徹底了解智能合約是什么以及它們?nèi)绾斡绊懍F(xiàn)代商業(yè)的交易方式,我們準備了本指南。 集中商業(yè)模式正在給去中心化的模式讓路 傳統(tǒng)的商業(yè)關(guān)系模型都是集中式的,始終存...
摘要:在協(xié)議結(jié)束時,智能合約被視為已履行并仍存儲在區(qū)塊鏈網(wǎng)絡(luò)中。這組條件和事件代表了最基本的一次性智能合約。智能合約用例智能合約越來越受歡迎,并已在各種區(qū)塊鏈項目中實施。 與區(qū)塊鏈技術(shù)一樣,智能合約在商業(yè)領(lǐng)域也非常有價值。 為了讓我們的讀者徹底了解智能合約是什么以及它們?nèi)绾斡绊懍F(xiàn)代商業(yè)的交易方式,我們準備了本指南。 集中商業(yè)模式正在給去中心化的模式讓路 傳統(tǒng)的商業(yè)關(guān)系模型都是集中式的,始終存...
摘要:在協(xié)議結(jié)束時,智能合約被視為已履行并仍存儲在區(qū)塊鏈網(wǎng)絡(luò)中。這組條件和事件代表了最基本的一次性智能合約。智能合約用例智能合約越來越受歡迎,并已在各種區(qū)塊鏈項目中實施。 與區(qū)塊鏈技術(shù)一樣,智能合約在商業(yè)領(lǐng)域也非常有價值。 為了讓我們的讀者徹底了解智能合約是什么以及它們?nèi)绾斡绊懍F(xiàn)代商業(yè)的交易方式,我們準備了本指南。 集中商業(yè)模式正在給去中心化的模式讓路 傳統(tǒng)的商業(yè)關(guān)系模型都是集中式的,始終存...
摘要:在協(xié)議結(jié)束時,智能合約被視為已履行并仍存儲在區(qū)塊鏈網(wǎng)絡(luò)中。這組條件和事件代表了最基本的一次性智能合約。智能合約用例智能合約越來越受歡迎,并已在各種區(qū)塊鏈項目中實施。 與區(qū)塊鏈技術(shù)一樣,智能合約在商業(yè)領(lǐng)域也非常有價值。 為了讓我們的讀者徹底了解智能合約是什么以及它們?nèi)绾斡绊懍F(xiàn)代商業(yè)的交易方式,我們準備了本指南。 集中商業(yè)模式正在給去中心化的模式讓路 傳統(tǒng)的商業(yè)關(guān)系模型都是集中式的,始終存...
摘要:基于以太坊項目,以太坊團隊目前運營了一個公開的區(qū)塊鏈平臺以太坊網(wǎng)絡(luò)。主要特點以太坊區(qū)塊鏈底層也是一個類似比特幣網(wǎng)絡(luò)的網(wǎng)絡(luò)平臺,智能合約運行在網(wǎng)絡(luò)中的以太坊虛擬機里。以太坊采用交易作為執(zhí)行操作的最小單位。 以太坊將比特幣針對數(shù)字交易的功能進一步進行了拓展,面向更為復(fù)雜和靈活的應(yīng)用場景,支持了智能合約這一重要特性。 以太坊項目簡介 以太坊:項目最初的目標是打造以個智能合約的平臺,該平臺支持...
閱讀 2989·2021-11-23 09:51
閱讀 3007·2021-11-02 14:46
閱讀 870·2021-11-02 14:45
閱讀 2751·2021-09-23 11:57
閱讀 2501·2021-09-23 11:22
閱讀 1932·2019-08-29 16:29
閱讀 749·2019-08-29 16:16
閱讀 947·2019-08-26 13:44