Contract-Development
智能合約——合約在哪裡?
我是智能合約的新手。當我看到一些智能合約的例子時,我意識到它們只是一段程式碼,而不是合約。
例如
function sendCoin(address receiver, uint amount)
,智能合約中定義的一種方法,它採用接收方地址和金額將硬幣發送給接收方。但契約不是關於如何發送硬幣,而是發送多少。例如,如果材料按時傳遞,則全額付款,否則每周延遲收取 10% 的罰款。
根據我的理解,呼叫——這些 if-then 規則的編寫位置(代表合約)——在智能合約之外。
我的理解正確嗎?“智能合約”一詞是否具有誤導性?
在觸發這些功能的應用程序中,真實的合約是否仍然在區塊鏈之外進行編碼?如果是,那麼為什麼智能合約不能被操縱,應用程序仍然可以破壞合約——例如。不按契約條款付款。
我認為契約這個詞來自契約程式。是一種設計滿足這種範式要求的軟體的方法。事實上,Solidity 本身就支持合約程式。
pragma solidity ^0.4.0; contract Sharer { function sendHalf(address addr) public payable returns (uint balance) { require(msg.value % 2 == 0); // Only allow even numbers uint balanceBeforeTransfer = this.balance; addr.transfer(msg.value / 2); // Since transfer throws an exception on failure and // cannot call back here, there should be no way for us to // still have half of the money. assert(this.balance == balanceBeforeTransfer - msg.value / 2); return this.balance; } }
給定這個例子,你可以看到
requires
是前置條件,而後assets
置條件。副作用是會恢復 EVM 中的狀態的異常。