国产麻豆精品福利在线观看,亚洲人亚洲精品成人网站,亚洲熟妇无码AV另类VR影视,欧美A级毛欧美1级A大片免费播放

您的位置:首頁(yè) > 區(qū)塊鏈 >

實(shí)現(xiàn)基于Horn子句的檢查引擎 能提高SMTChecker的證明能力

2019-08-07 14:12:40 來(lái)源: 區(qū)塊網(wǎng)

SMTChecker當(dāng)前模型檢查引擎是安全但還不是很完整的。這意味著報(bào)告為安全的斷言和其他驗(yàn)證目標(biāo)應(yīng)該是安全的 - 除非SMTChecker或后端解算器中

SMTChecker當(dāng)前模型檢查引擎是安全但還不是很完整的。這意味著報(bào)告為安全的斷言和其他驗(yàn)證目標(biāo)應(yīng)該是安全的 - 除非SMTChecker或后端解算器中存在bug-但是誤報(bào)可能是虛假的抽象。

當(dāng)前引擎給出的反例中的兩個(gè)主要誤報(bào)源是:

· 循環(huán)以有界的方式處理(只考慮一次迭代)。

· 函數(shù)在各自的環(huán)境中單獨(dú)分析。

因此在SMTChecker分析時(shí),依賴于程序邏輯循環(huán)或在不同函數(shù)中使用狀態(tài)變量的智能合約可能會(huì)導(dǎo)致誤報(bào)。

為了提高SMTChecker的證明能力并減少誤報(bào),我們最近實(shí)現(xiàn)了一個(gè)基于Horn子句系統(tǒng)的新模型檢查引擎,能夠推理循環(huán)和狀態(tài)變量之間的關(guān)系。請(qǐng)注意,智能合約的生命周期也可以建模為以下循環(huán),其中每個(gè)循環(huán)迭代都是一個(gè)事務(wù):

constructor(...);

while(true)

random_public_function(...);

新引擎的目標(biāo)是自動(dòng)推斷循環(huán)和狀態(tài)不變量,同時(shí)嘗試證明安全屬性,消除了前面寫的額外假設(shè)的需要。

我們可以通過(guò)分析前一篇文章中的相同合同立即看到結(jié)果,而無(wú)需額外的假設(shè):

pragma experimental SMTChecker;

contract C {

uint sum;

uint count;

function () external payable {

require(msg.value > 0);

// Avoid overflow.

require(sum + msg.value >= sum);

require(count + 1 > count);

sum += msg.value;

++count;

}

function average() public returns (uint) {

require(count > 0);

uint avg = sum / count;

assert(avg > 0);

return avg;

}

}

SMTChecker現(xiàn)在試圖證明斷言考慮整個(gè)合同和無(wú)限數(shù)量的交易,而不是僅執(zhí)行一次函數(shù)平均。它自動(dòng)學(xué)習(xí)合約不變量(count> 0)=>((sum / count)> 0),它保存在每個(gè)函數(shù)的開頭和結(jié)尾,并且能夠證明所需的屬性。我的筆記本電腦上的支票需要0.16秒。

如果我們用uint avg = count / sum替換除法,這顯然打破了斷言,我們得到以下反例:

(and

(function_average_68_0 2 1 0 0)

(interface_C_69_0 2 1)

(fallback_42_0 0 0 2)

(interface_C_69_0 0 0)

)

這是多事務(wù)自下而上路徑的內(nèi)部表示,導(dǎo)致斷言失敗的地方

(interface_C_69 )是合約的空閑狀態(tài),以下數(shù)字分別是狀態(tài)變量sum和count的當(dāng)前值。(fallback_42_0 )是對(duì)回退函數(shù)的調(diào)用。

(function_average_60_8 )是對(duì)函數(shù)平均值的調(diào)用。

在合約構(gòu)造之后,sum和count都是0.第一個(gè)事務(wù)使用msg.value = 2調(diào)用回退函數(shù),這導(dǎo)致sum = 2和count = 1.第二個(gè)事務(wù)調(diào)用函數(shù)average,其中(count / sum)= 0。檢查需要0.14秒。

除了合約不變量之外,引擎還嘗試總結(jié)while和for循環(huán)內(nèi)部的函數(shù)。它可以很快證明關(guān)于循環(huán)行為的簡(jiǎn)單屬性,但問題也很容易變得太難。記住,這是一個(gè)不可判定的問題:)

function f(uint x) public pure {

uint y;

require(x > 0);

while (y < x)

++y;

assert(y == x);

}

上述斷言在0.05s內(nèi)得到證實(shí)。

function f() public pure {

uint x = 10;

uint y;

while (y < x)

{

++y;

x = 0;

while (x < 10)

++x;

assert(x == 10);

}

assert(y == x);

}

上面的斷言涉及一個(gè)更復(fù)雜的結(jié)構(gòu)和嵌套的循環(huán),并在0.375中得到證明。

uint[] a;

function f(uint n) public {

uint i;

while (i < n)

{

a[i] = i;

++i;

}

require(n > 1);

assert(a[n-1] > a[n-2]);

}

即使上面的代碼也使用數(shù)組,斷言只涉及數(shù)組的兩個(gè)元素,檢查只需0.16秒。

function max(uint n, uint[] memory _a) public pure returns (uint) {

require(n > 0);

uint i;

uint m;

while (i < n) {

if (_a[i] > m)

m = _a[i];

++i;

}

i = 0;

while (i < n) {

assert(m >= _a[i]);

++i;

}

return m;

}

上面的函數(shù)計(jì)算并返回?cái)?shù)組的最大值。數(shù)組的長(zhǎng)度作為參數(shù)給出,因?yàn)?length尚不支持。這種檢查要復(fù)雜得多,因?yàn)樗鼨z查計(jì)算出的最大值是否確實(shí)大于或等于無(wú)界數(shù)組的所有元素。

編輯:在寫這篇文章時(shí),這個(gè)斷言序列在1小時(shí)超時(shí)后無(wú)法證明。調(diào)整一些量化求解器參數(shù)后,檢查在0.13秒后成功!

如果我們將斷言更改為斷言(m> _a [i]),則給定的反例是數(shù)組[0,0]。

另一個(gè)與狀態(tài)機(jī)更相似的例子是以下Crowdsale架構(gòu):

pragma experimental SMTChecker;

contract SimpleCrowdsale {

enum State { INIT, STARTED, FINISHED }

State state = State.INIT;

uint weiRaised;

uint cap;

function setCap(uint _cap) public {

require(state == State.INIT);

require(_cap > 0);

cap = _cap;

state = State.STARTED;

}

function () external payable {

require(state == State.STARTED);

require(msg.value > 0);

uint newWeiRaised = weiRaised + msg.value;

// Avoid overflow.

require(newWeiRaised > weiRaised);

// Would need to return the difference to the sender or revert.

if (newWeiRaised > cap)

newWeiRaised = cap;

weiRaised = newWeiRaised;

}

function finalize() public {

require(state == State.STARTED);

assert(weiRaised <= cap);

state = State.FINISHED;

}

}

當(dāng)state為INIT時(shí),函數(shù)setCap只能調(diào)用一次。 當(dāng)state為STARTED時(shí),后備函數(shù)接受多個(gè)存款(在此模擬中不發(fā)出令牌)。 Crowdsale可以在函數(shù)finalize中最終確定,它確保不會(huì)破壞cap。

分析自動(dòng)學(xué)習(xí)不變的weiRaised <= cap,證明了斷言。 檢查需要0.09秒。

如果我們將正確的斷言更改為斷言(weiRaised

(and

(function_finalize_107_0 1 1 1)

(interface_SimpleCrowdsale_108_0 1 1 1)

(fallback_85_0 1 0 1 0)

(interface_SimpleCrowdsale_108_0 1 0 1)

(function_setCap_42_0 0 0 0 1)

(interface_SimpleCrowdsale_108_0 0 0 0)

)

這種自下而上的內(nèi)部表示遵循與第一個(gè)示例中所示格式相同的格式。 所有狀態(tài)變量都從0開始。第一個(gè)tx調(diào)用setCap(1),它導(dǎo)致state = State.START和cap = 1.第二個(gè)tx用msg.value = 1調(diào)用回退函數(shù),它將weiRaised修改為1.最后, 第三個(gè)tx調(diào)用finalize并且斷言失敗。 檢查需要0.08秒。

這些初步實(shí)驗(yàn)表明新引擎可能能夠合理地快速地自動(dòng)證明涉及多tx行為的復(fù)雜屬性。(鏈三豐)

關(guān)鍵詞: Horn子句 檢查引擎 SMTChecker

精選 導(dǎo)讀

募資55億港元萬(wàn)物云啟動(dòng)招股 預(yù)計(jì)9月29日登陸港交所主板

萬(wàn)科9月19日早間公告,萬(wàn)物云當(dāng)日啟動(dòng)招股,預(yù)計(jì)發(fā)行價(jià)介乎每股47 1港元至52 7港元,預(yù)計(jì)9月29日登陸港交所主板。按發(fā)行1 167億股計(jì)算,萬(wàn)

發(fā)布時(shí)間: 2022-09-20 10:39
管理   2022-09-20

公募基金二季度持股情況曝光 隱形重倉(cāng)股多為高端制造業(yè)

隨著半年報(bào)披露收官,公募基金二季度持股情況曝光。截至今年二季度末,公募基金全市場(chǎng)基金總數(shù)為9794只,資產(chǎn)凈值為269454 75億元,同比上

發(fā)布時(shí)間: 2022-09-02 10:45
資訊   2022-09-02

又有上市公司宣布變賣房產(chǎn) 上市公司粉飾財(cái)報(bào)動(dòng)作不斷

再有上市公司宣布變賣房產(chǎn)。四川長(zhǎng)虹25日稱,擬以1 66億元的轉(zhuǎn)讓底價(jià)掛牌出售31套房產(chǎn)。今年以來(lái),A股公司出售房產(chǎn)不斷。根據(jù)記者不完全統(tǒng)

發(fā)布時(shí)間: 2022-08-26 09:44
資訊   2022-08-26

16天12連板大港股份回復(fù)深交所關(guān)注函 股份繼續(xù)沖高

回復(fù)交易所關(guān)注函后,大港股份繼續(xù)沖高。8月11日大港股份高開,隨后震蕩走高,接近收盤時(shí)觸及漲停,報(bào)20 2元 股。值得一提的是,在7月21日

發(fā)布時(shí)間: 2022-08-12 09:56
資訊   2022-08-12

萬(wàn)家基金再添第二大股東 中泰證券擬受讓11%基金股權(quán)

7月13日,中泰證券發(fā)布公告,擬受讓齊河眾鑫投資有限公司(以下簡(jiǎn)稱齊河眾鑫)所持有的萬(wàn)家基金11%的股權(quán),交易雙方共同確定本次交易的標(biāo)的資

發(fā)布時(shí)間: 2022-07-14 09:39
管理   2022-07-14

央行連續(xù)7日每天30億元逆回購(gòu) 對(duì)債市影響如何?

央行12日再次開展了30億元逆回購(gòu)操作,中標(biāo)利率2 10%。這已是央行連續(xù)7日每天僅進(jìn)行30億元的逆回購(gòu)縮量投放,創(chuàng)下去年1月以來(lái)的最低操作規(guī)

發(fā)布時(shí)間: 2022-07-13 09:38
資訊   2022-07-13

美元指數(shù)創(chuàng)近20年新高 黃金期貨創(chuàng)出逾9個(gè)月新低

由于對(duì)美聯(lián)儲(chǔ)激進(jìn)加息的擔(dān)憂,美元指數(shù)11日大漲近1%創(chuàng)出近20年新高。受此影響,歐美股市、大宗商品均走弱,而黃金期貨創(chuàng)出逾9個(gè)月新低。美

發(fā)布時(shí)間: 2022-07-13 09:36
資訊   2022-07-13

美股三大股指全線下跌 納斯達(dá)克跌幅創(chuàng)下記錄以來(lái)最大跌幅

今年上半年,美股持續(xù)回落。數(shù)據(jù)顯示,道瓊斯指數(shù)上半年下跌15 3%,納斯達(dá)克綜合指數(shù)下跌29 5%,標(biāo)普500指數(shù)下跌20 6%。其中,納斯達(dá)克連續(xù)

發(fā)布時(shí)間: 2022-07-04 09:51
推薦   2022-07-04

融資客熱情回升 兩市融資余額月內(nèi)增加超344億元

近期A股走強(qiáng),滬指6月以來(lái)上漲4%,融資客熱情明顯回升。數(shù)據(jù)顯示,截至6月16日,兩市融資余額1 479萬(wàn)億元,月內(nèi)增加344 67億元,最近一個(gè)半

發(fā)布時(shí)間: 2022-06-20 09:41
資訊   2022-06-20

4個(gè)交易日凈買入超百億元 北向資金持續(xù)流入A股市場(chǎng)

北向資金凈流入態(tài)勢(shì)延續(xù)。繼6月15日凈買入133 59億元后,北向資金6月16日凈買入44 52億元。自5月27日至今,除6月13日以外,北向資金累計(jì)凈

發(fā)布時(shí)間: 2022-06-17 09:37
推薦   2022-06-17

熱門TAG

more
美聯(lián)儲(chǔ)今年已將基準(zhǔn)利率從接近零大幅上調(diào)至略高于3% EIA報(bào)告:美國(guó)原油庫(kù)存及戰(zhàn)略儲(chǔ)備減少,汽油及精煉油庫(kù)存輕微波動(dòng) 美國(guó)政府更廣泛推動(dòng)從汽油動(dòng)力汽車轉(zhuǎn)向電動(dòng)汽車的一部分 數(shù)據(jù)顯示:今年9月日本船企接單量延續(xù)8月下跌下跌趨勢(shì) 公告顯示:2022年前三季度TCL中環(huán)研發(fā)投入為27億元 占比營(yíng)業(yè)收入5.42% 新的111.75億英鎊注資列在“對(duì)金融機(jī)構(gòu)的援助—支付給英格蘭銀行”標(biāo)題下 本次政府儲(chǔ)備肉投放面向北京18家主要連鎖超市門店及相關(guān)零售終端投放 有交易員預(yù)計(jì):如果LME不采取措施 接下來(lái)可能將有數(shù)十萬(wàn)噸鋁流入LME 據(jù)報(bào)道:繼德國(guó)最大釀酒商拉德貝格啤酒公司9月宣布漲價(jià) 據(jù)報(bào)道:澳大利亞礦商Pilbara的鋰礦拍賣價(jià)再創(chuàng)新高 折算后的碳酸鋰成本 中集天達(dá)首次公開發(fā)行A股股票 招股書顯示此次擬公開發(fā)行股數(shù)不超過(guò)103, 多家銀行加強(qiáng)綠色金融頂層設(shè)計(jì) 致力于為經(jīng)濟(jì)社會(huì)綠色低碳轉(zhuǎn)型貢獻(xiàn)力量 萊特幣 比特幣 數(shù)字資產(chǎn) 火幣 以太經(jīng)典 比特股 EOS 比特幣現(xiàn)金 量子鏈 Hcash 泰達(dá)幣 瑞波幣 Qcash 比特幣鉆石 超級(jí)比特幣 優(yōu)幣 硬分叉 加密貨幣