<cite id="1ndtl"></cite>
<ruby id="1ndtl"></ruby>
<strike id="1ndtl"></strike>
<span id="1ndtl"><dl id="1ndtl"></dl></span><span id="1ndtl"><dl id="1ndtl"></dl></span>
<strike id="1ndtl"></strike>
<strike id="1ndtl"><dl id="1ndtl"><del id="1ndtl"></del></dl></strike>
<span id="1ndtl"></span>
<span id="1ndtl"><dl id="1ndtl"></dl></span>
<strike id="1ndtl"></strike>
<strike id="1ndtl"></strike><span id="1ndtl"><dl id="1ndtl"></dl></span>
<strike id="1ndtl"></strike><strike id="1ndtl"></strike>
<strike id="1ndtl"></strike>
<span id="1ndtl"></span>
<span id="1ndtl"><dl id="1ndtl"></dl></span>
<th id="1ndtl"><noframes id="1ndtl"><span id="1ndtl"><video id="1ndtl"><strike id="1ndtl"></strike></video></span> <strike id="1ndtl"></strike>
<strike id="1ndtl"></strike>
<span id="1ndtl"><dl id="1ndtl"></dl></span>
  1. 首頁
  2. 神豪:開局就買比特幣最新章節(以太坊:比特幣 + 無限可能)

神豪:開局就買比特幣最新章節(以太坊:比特幣 + 無限可能)

還記你得剛學編程時,第一次使用“對象”的感覺嗎?還記你第一次嘗試函數式編程的樣子嗎?這些編程范式,你還記得用了多久才把它們從懵懂的概念進化為直覺的?其實,學習面向區塊鏈編程很像面向對象與函數式編程:剛開始很繞,漸漸的就明白了。我們在這個系列的上半篇,通過比特幣的區塊鏈,了解了區塊鏈大致是如何運行的。這下半篇,我們就來探索一下以太坊的區塊鏈,進而學習面向區塊鏈編程。從長遠上講,學會如何結構化區塊鏈內的互交,并把它培養成直覺,對學習者是有極大裨益的。

首先,把《以太坊白皮書》的前三章看完。這三章主要講賬戶,轉帳和消息。要是有興趣也可以把剩下的讀完,但其實只要把這系列的上半部分讀完,你就已經理解了底層技術的基礎了。和讀《比特幣白皮書》一樣,第一遍讀要是有什么不懂的,不要著急,慢慢的就明白了。

從現在起,從合同的角度思考問題!

智能合同其實就是存儲在區塊鏈里的代碼。只要再加一個用戶界面,智能合同就可以作去中心化應用(dapps)的后端了。用你已有的對比特幣的理解,可以把一個比特比交易想成一個具有三個輸入和兩個輸出的程序(比特幣對輸入和輸出的定義并不是這樣的,但先不要在乎細節)。輸入指的是要交易的比特幣總和,轉賬人的地址和收款人的地址。輸出就是轉賬后,余額更新后的這兩個賬戶。被礦工挖出來的交易記錄是公開的,里面記著一個有某些輸入的程序曾經運行過并產生了某些輸出。在比特幣里,這種轉賬程序就是唯一存在的程序,每個節點因此都能根據輸入正確的驗證輸出。

以太坊把程序的限度,從簡單的轉賬,擴展到了一切能在圖靈機上編寫的程序。要是你計算機課上忙著睡覺了的話,這意思就是任何能被編程的東西,也同樣能在以太坊上被編程。

以太坊能有這樣的復雜性是因為每個網絡節點上都運行著一個虛擬機(叫以太坊虛擬機,或EVM)。EVM和其它任何的虛擬機沒什么不同。舉個例子,你可能已經熟悉Java Virtual Machine (JVM)。JVM代碼在任何裝有它的機器里,同樣的輸入會產生同樣的輸出。相似地,EVM也能讓以太坊區塊鏈代碼,在同樣在輸入下產生公認正確的輸出。

比特幣區塊鏈的完整節點里存有從零區塊到現在的所有記錄;以太坊的完整節點里,還多了靜態代碼(若是存在),與之相關的賬戶信息,和代碼此時的狀態。

想象存儲在賬戶內的一個簡單程序,它只接受數字輸入,然后把這輸入的數字加到一個累計的數字上,再用新的總和來代替舊的。有兩個賬戶和這個合同賬戶進行了交易,一個輸入了5,另一個輸入了2。現在在區塊鏈里的信息有:

合同賬戶和它的靜態代碼。

這個合同賬戶的目前存儲狀態,即總和為7。

一個這個賬戶過去的賬戶存儲狀態,即總和為5。

一個這個賬戶過去的賬戶存儲狀態,即總和為0。

三個轉賬記錄:一個是代碼最開始的存儲,一個是某賬戶輸入的5,另一個是某賬戶輸入的2。

想象一個類似的程序,(必然地)儲存在另一個賬戶里。這個程序除了有上面的功能,還存有一個線性的數組,里面存儲著有兩個字段的結構(結構指的是結構化的排列數據的模板),每個結構里存有寄帳人的地址,和寄帳人輸入的數字。有兩個賬戶和這個合同地址進行了交易,一個輸入了5,一個輸入了2。現在區塊鏈里的信息有:

合同賬戶和它的靜態代碼。

這個賬戶的目前存儲狀態,即總和為7,和一個含有兩個結構的數組。

一個這個賬戶過去的存儲狀態,即總和為5,和一個含有一個結構的數組。

一個這個賬戶過去的存儲狀態,即總和為0,和一個空的數組。

三個轉賬記錄,一個是代碼最開始的存儲,一個是某賬戶輸入的5,另一個是某賬戶輸入的2。

現在我們可以輕松地重新構建這個賬戶之前的狀態,并查看都有哪些賬戶和它有過交易,從而創建了現在的狀態。可這種模式應該盡量避免。為什么呢?用上面的例子來說,所有存儲在數組里的數據都可以方便地用區塊鏈本身構建出來。讀到這里,心眼兒不老實的讀者可能已經想到了多種轟炸區塊鏈的方法了。下面我們來學習一下以太坊是如何預防節點的硬盤和CPU被僵尸攻擊(DoS)的,以及這些預防措施對開發者和用戶意味著什么。從某些角度講,對開發者來說這意味著要寫入數據時要小心謹慎。

油費(gas price)

怎么防止有人上傳10TB的靜態代碼合同,把所有網絡節點的存儲空間都耗盡呢?或者讓CPU無休止地做無用功?和比特幣一樣,在以太坊上交易是有手續費的,以來激勵礦工來處理交易和保護網絡,不同的是以太坊是以“油費”的形式來收費的。就像汽車跑單位距離需要特定加侖的汽油,以太坊上的交易每運行單位CPU周期或儲存單位數據也要花費特定的以太。因為以太本身是珍貴稀有的,所以就預防了僵尸攻擊。區塊鏈上的億萬富翁,想要燒錢搞惡作劇是可以讓網絡變慢一會兒的,但挖出這些惡意交易的礦工們也會賺上一筆的。

這對開發者和用戶意味著什么呢?雖然讀取本地區塊鏈是免費的,但寫入和運算是花錢的。儲存更是尤其昂貴,因為任何寫入的信息都會被永久地儲存著。相比之下,CPU運算很便宜。正是因為任何程序所有的歷史狀態都被記錄著,改變一個賬戶的存儲狀態,在一般程序里被認為是對已分配內存的操作,在區塊鏈中卻算作寫入操作。以太坊是圖靈完備的,誰也攔不住你寫一個視頻解碼器然后發布在區塊鏈上;只不過估計你沒錢運行它。假設這樣的程序的代碼至少有幾千行,即使把它上傳到區塊鏈上也不會便宜。一個幫助人們理解以太坊合同實際能力的啟發是:這個功能是否能在一個1999年的智能手機上實現?

作為開發者,這意味著你得認真思考代碼的效率。雖然存儲效率尤其重要,但是CPU的每個周期也是要花用戶的錢的。兩個同樣功能的合同,最有效率的那個才能生存下來。

知道了理論上的無限可能和現實中的各種限制:那么是什么讓以太坊如此的炫酷?

現實中的例子

在同我們一起充滿激情地討論智能合同的無限可能,包括無基礎設施的政府,和其它改變世界的想法前,作為開胃菜,我們來一起學習一個生活中簡單的智能合同的例子。

假設我的樂隊剛剛錄制完一個全新的專輯,然后我們打算分享給我們的粉絲。可我們是朋克青年(譯者注:朋克思想即反對體制,提倡個體自由),不管是iTunes還是YouTube,都是體制內的。所以我們打算把專輯印制100份限量版黑膠唱片,然后記錄并只邀請購買者去我們認為最棒的酒吧觀看獨家表演。一般來講我們會用類似PayPal之類的服務來收款,它再在每個交易里收取一些費用。我們收到錢后就發貨,然后再在表格軟件上記錄這個交易,這樣等到第101人要買的時候我們就不會忘了拒絕。這個計劃聽起來就不夠穩妥,所以難怪藝人和粉絲寧可付中介費也要用類似Ticketmaster和Bandcamp的中介公司。幸運的是,樂隊鼓手有編寫以太坊智能合同的經驗,我們就決定編寫一個“購買記錄表”來完成我們的計劃。

這個記錄表合同很簡單,只有三個函數:purchase,provePurchase,和claimAlbum。粉絲在網頁上通過purchase函數往合同賬戶里轉入指定數額的以太。只要轉入的錢大于等于售價,合同中的計數器就會累加。寄款人的以太坊地址和領認次數組成一個結構,保存在一個數組里。要是轉賬后計數器超過100,交易就會失敗(并退款)。

購買成功后,粉絲會發給我們收唱片的地址。但在寄出前,claimAlbum函數會在數組里的各個結構中查找付款人的地址并將領認次數加1。只有領認次數為1的時候我們的網頁才會接受這個收貨地址,之后再發貨。為了保證我們只接受完成付款的人們的收貨地址,而且只發一份唱片,我們要求提交地址時用戶與claimAlbum的轉賬(譯者注:與區塊鏈函數的互動都稱為轉賬)必須使用與purchase函數的轉賬同樣的以太賬戶。

那怎么防止表演當天沒買專輯的人混進來呢?這時候就要用到provePurchase函數了。 只需在門口放個iPad,人們就可以用購買專輯的賬戶和provePurchase驗證之前的交易了。如果這些賬戶存在于合同的數組里,就知道他們確實購買了專輯,provePurchase也就會返回True。看門的就會放行。

不僅如此,粉絲也能在購買前,驗證我們的專輯是否真的是獨家的。以太坊上的合同的地址是內容決定的,也就是說源碼進了區塊鏈后是可以被它的哈希散列找到的。合同源碼若是開源的話,人們就可以獨立地用源碼的散列來驗證區塊上的合同的功能性。

這里描述的例子只是一個非常簡化的實現,但你應該可以從中看到智能合同是如何免除中介的。Ujo Music,比方說,用更加穩固和易用的方式,實現了流媒體和轉售的微支付,并讓藝人有更多的掌控權。不僅如此,藝人可以保留100%的收入的。一般人們付蘋果公司30%的利潤得到的安全性,區塊鏈也可以給你,而且幾乎免費。

okex以太坊今日行情

#歐易OKEx##數字貨幣##以太坊[超話]#

相關文章
美女网站色