Contract-Development

智能合約——合約在哪裡?

  • May 14, 2018

我是智能合約的新手。當我看到一些智能合約的例子時,我意識到它們只是一段程式碼,而不是合約。

例如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 中的狀態的異常。

在此處輸入圖像描述

引用自:https://ethereum.stackexchange.com/questions/48397