智慧型合約的安全

2022-07-12 08:09:13 字數 1239 閱讀 6751

智慧型合約的安全問題一直是編寫智慧型合約的關鍵點。多數的智慧型合約都是開源的,原始碼公布更容易被黑客找到攻擊的漏洞。 

這裡將一些常見的,易犯的錯誤。首先我們先看看下面這段**:

contract text

function transferto(address add,uint num) public payable

}}

這裡先講講其中tx.origin和msg.sender不同。msg.sender指的是呼叫合約的位址,而tx.origin指的是發起transaction的位址。舉個例子,看下面的**。

pragma solidity^0.4.7;

contract c1

function getadd1() public returns(address)

function getadd2() public returns(address)

}contract differ

}

執行完合約後,a1就是合約differ的位址,而a2是呼叫合約diiffer的位址,也就是發起transaction的位址。上面簡單講了tx.origin和msg.sender的區別。接下來我們回到第乙個合約中,這個合約實現了乙個轉賬的功能·。但這個合約存在bug。黑客可以利用這個漏洞進行攻擊。比如下面這段**

contract attack

function () external

}

只要讓第乙個text合約就會觸發attack合約中的匿名函式,這時就會向hack位址轉賬了。因此在text合約中應該使用msg.sender而不是tx.origin。

接下來還有乙個不容易被找出來的錯誤,比如下面的合約

pragma solidity^0.4.7;

contract fund

}}

這個合約實現乙個兌換的功能,可以將每個address中所佔的數兌換成以太幣,黑客可以實現這樣乙個合約

contract attack

function () external

}

這樣合約fund每次轉賬都會呼叫attack合約的匿名函式,而匿名函式中又會呼叫合約fund中的轉賬。便會一直重複,這時候為了防止這種情況。可以改成下面的**

contract fund

}}

將兌換的num在轉賬之前重置為0。這樣即使用上述的**進行攻擊亦不會再次執行轉賬了。

以太坊智慧型合約安全

智慧型合約就是自主執行的合約,其條款是用 規定的。雖然這個概念已經存在一段時間了,但至少從1996年nick szabo提出了這一概念以來,直到圖靈完備的以太坊區塊鏈來臨,智慧型合約的使用才變得普遍。對智慧型合約理念的字面解釋造成了 即法律 code is law 的正規化理解,意思是那些智慧型合約...

區塊鏈裡的智慧型合約安全

在我寫這遍文章的時候,距離eos曝出漏洞已經有三天時間,區塊鏈行業熱點來的快去的也快,每每出現安全相關問題,都會給整個行業帶來 自從我開始關注區塊鏈行業以來,安全事故有增無減,交易平台 智慧型合約 共識機制等等都成了安全事故的中心。智慧型合約本質是一段執行在區塊鏈網路中的 它完成使用者所賦予的業務邏...

智慧型合約的理念

何謂 抵押品 抵押品 的目的是什麼?它怎樣梳理了我們的已有的關係?我認為,尤其是合約的規範化,為我們的關係實現了理想化抵押品的藍圖。多種型別的合同條款,如抵押品,債券,產權界定等等,都可以嵌入在我們執行條款的硬體和軟體中,通過這樣的方式使那些不遵守協議者的違約成本很高,如果需要的話,令人望而卻步的 ...