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