真正理解以太坊智能合約
編者按:本文來自藍狐筆記編者按:本文來自
藍狐筆記
藍狐筆記
編者按:本文來自
藍狐筆記
編者按:本文來自
藍狐筆記
二級標題
(ID:lanhubiji),作者:GjermundBjaanes,編譯:Dyna,經授權發布。
你可能聽說過“智能合約”,甚至可能知道它們是在區塊鏈上運行的代碼。

二級標題
但是你如何才能在區塊鏈上運行代碼?這不是可以輕易理解的簡單概念。
區塊鏈-快速入門
什麼是智能合約?
傳統意義上,當事人之間的信任是通過中間人,即第三方來解決的,比如Paypal、銀行。與你不信任的人之間的交易將通過雙方都信任的中間人進行。
二級標題
什麼是智能合約?
因為每個人都有相同的列表,所以很難欺騙網絡接受錯誤的交易。結合一些加密算法和貨幣獎勵以便遵守規則,你的網絡會非常安全。
二級標題
什麼是智能合約?
所有這些也使得區塊鏈幾乎是不可變的,因為改變歷史記錄的唯一方法是獲得全網大多數人的同意。
二級標題
什麼是智能合約?
區別於比特幣,以太坊最大的不同是引入了智能合約的概念。比特幣是數字貨幣,以太坊也是數字貨幣,但遠不止這些。
“智能合約”這個名稱有點誤導人。它們不是真正的合約,也不特別智能。它們只是一些可以運行在區塊鏈上的代碼- 或者說是計算機邏輯運算。
首先,我將介紹有關智能合約是以太坊網絡上的一種特殊賬戶。你有用戶賬戶,你還有智能合約賬戶。
一個用戶賬戶包括:
一個地址(類似於你的銀行賬號-它也存在於比特幣上)
餘額(我有多少錢)
一個智能合約賬戶包括:

一個地址

一個狀態
代碼
餘額和普通賬戶也是一樣的概念。唯一令人激動的是,智能合約上的餘額意味著代碼可以擁有金錢。它可以處理這些錢,也可能因為編碼錯誤而造成處理不當。
二級標題
智能合約帳戶的狀態是智能合約中聲明的所有字段和變量的當前狀態。它的工作方式與大多數編程語言中類的字段變量相同。事實上,一個類的實體化對象可能是理解智能合約的最簡單方法。唯一的區別是這個對像是永久存在的(除非被編程為自我毀滅)。
關於智能合約的趣事:它們可以調用其它的智能合約。這就開啟了創建自主代理的能力,這些代理可以自己花錢和進行交易。
二級標題
假設我用上面的代碼創建了一個智能合約。該代碼有一個名為counter的字段,類型為uint(整數)。 counter變量的內容是本合約的狀態。每當我調用count()函數時,任何人都能看到這個智能合約在區塊鏈上的狀態將會加1。
稍後我們將通過更多的例子來解釋它是如何工作的,但首先我想回到以太坊和比特幣的交易,並以此來解釋一些事情。
交易水平上,以太坊VS比特幣
FROM你
比特幣交易非常簡單。你可以只做一件事。一種類型的交易。略過一些細節,一切都可以歸結為TO(付給,誰在收錢),FROM(來自於,誰在付錢)和AMOUNT(數量,多少錢)。這使得比特幣成為一種價值儲存手段,能夠在網絡參與者之間傳遞價值。
以太坊的不同之處在於交易還有一個“DATA”(數據)字段。該“DATA”字段支持三種類型的交易:
價值轉移(和比特幣一樣)
DATA字段為空或包含要附加的任何消息
FROM你
FROM你
AMOUNT是你要發送的以太坊數量
創建智能合約
DATA字段包含編譯為字節代碼的智能合約代碼
FROM你
FROM你
調用智能合約
以太坊交易

TO字段是智能合約賬戶地址
DATA字段包含函數名稱和參數– 如何調用智能合約

AMOUNT可以是0或者任何數量的以太坊,比如你需要為一項服務合約支付的數目
在這些交易中還有更多的字段和復雜性,但以上這些已經很好地解釋了核心概念。讓我們看看關於這些交易的一些更具體的例子。
價值轉移
二級標題
非常簡單。 TO向一個地址發送一定數目的以太坊代幣。你也可以為一筆交易加上一條消息。
二級標題
調用合約
二級標題
二級標題
注意成本和執行
myObjectReference.myFunction(parameters);
代碼的執行是由調用者用一種叫做gas的東西來支付的。 Gas是運行以太坊虛擬機的燃料。你可以將其視為每次執行指令的費用(就像一行代碼)。
myVariable = myObject.myFunction(parameters);
二級標題
你需要為一個特定的合約調用設置可花費的最大gas。比如,如果你調用的代碼進入了一個永久循環,將會確保在執行過程中所花費的gas不會超過設置的最大gas。
二級標題
智能合約如何工作?
假設有一個MyObject類型的對象。該對像有一個名為myFunction的函數。要調用它,只需引用對象的實例、調用哪個函數和使用哪個參數調用。
二級標題
像這樣:
二級標題

二級標題
二級標題
但是請記住:雖然智能合約是圖靈完備的,並且理論上可以做任何事情,但它們不太適合繁重的計算工作。
正文
二級標題
合約需要的計算量越多,運行的成本就越大。合約越複雜,就越有可能存在安全漏洞。而且智能合約中的安全漏洞是很難處理的——畢竟區塊鍊是不可變的。
正文
二級標題
舉例:通證

正文
回歸重點,我想解釋一下通證是如何工作的。

大多數這些通證都是在以太坊上創建的,而且概念非常簡單(它運行良好,但是太簡單了,以至於幾乎可以說是愚蠢的)。

如何使用Javascript或其他編程語言編寫一個簡單的貨幣系統?你可以在一個文件中完成所有的操作。你真正需要記錄的是:
1. 總供應量

2. 賬戶


