你可能聽說過「智能合約」,甚至可能知道它們是在區塊鏈上運行的代碼。但是你如何才能在區塊鏈上運行代碼?這不是可以輕易理解的簡單概念。本文解釋了智能合約是如何在以太坊區塊鏈上運行的。對編程的基礎理解將會有所幫助,因為本文包含了一些用于舉例的簡單代碼。為了清晰起見,本文將其中的一些技術細節稍微進行了簡化,但概念是有效的。
原文標題:《UnderstandingEthereumSmartContracts》
原文作者:GjermundBjaanes
翻譯:藍狐筆記社群Dyna
一、區塊鏈——快速入門
這里不講太多細節,區塊鏈技術的核心概念是分布式賬本。它是一種在眾多參與者之間共享的特殊類型的數據庫。
這個特殊的數據庫就是一個交易列表,記錄了網絡中發生的每一筆交易。每個人都有一個副本。這種去中心化分布結合強有力的貨幣激勵措施,消除了各方之間信任的必要性。
傳統意義上,當事人之間的信任是通過中間人,即第三方來解決的,比如Paypal、銀行。與你不信任的人之間的交易將通過雙方都信任的中間人進行。
有了區塊鏈,這種需求消失了。因為你可以把你的信任放在網絡上,在這里,強有力的激勵措施消除了作弊欺騙的欲望(簡而言之:遵守規則更有利可圖)。
北京方正公證處楊和平:與騰訊在多個方面達成深入合作:金色財經報道,4月17日,騰訊安全領御區塊鏈-北京方正公證取證平臺正式發布。在發布會上,北京方正公證處副主任楊和平表示:“區塊鏈作為一種可以在完全不信任的節點之間建立信任機制的技術,具有高可靠度、高透明度、可追溯、永久保存和無法篡改的特性,這些特性與公證的職業要求和行業發展需求具有天然的融合性、互補性,特別是在公證三大效力之一的證據效力方面雙方高度契合。騰訊安全與北京市方正公證處聯合打造的領御區塊鏈北京方正公證取證平臺,就是要在深度整合兩者優勢基礎上通過國家公信力+技術信任力的雙重增信,向社會提供電子證據安全存儲、取證維權、在線公證等智能化服務,從而形成一套規范和標準的互聯網數據公證服務新模式。”
此外,北京方正公證處副主任楊和平還介紹說,未來方正公證處與騰訊將在以下幾方面進行深度合作:1、構件新型公證法律服務業態上進行新的探索;2、拓展公證服務領域上取得新的突破;3、提升公證服務效率上再上新臺階;4、人才培養方面積累新經驗;5、體制機制建設上走出新路子;6、公證服務助力互聯網方面走出新天地。[2020/4/17]
更具體地說:區塊鏈網絡是一組機器,它們記錄著相同的交易列表副本(例如,從A轉給B的錢)。
聲音 | 物美集團創始人張文中:區塊鏈僅靠熱度不能解決問題 須針對場景做深入開發:物美集團創始人張文中近日在接受采訪時表示,新技術對現有技術企業都會有比較大的影響。比如,最近大家談論比較多的區塊鏈對企業影響是必然的。但我們也應該清醒認識到,區塊鏈僅靠熱度不能解決問題,它必須針對所面對的場景做深入開發和挖掘,比如在食品追溯方面,如果能夠追溯源頭,這也能助力實體企業轉型。(聯商網)[2019/11/6]
因為每個人都有相同的列表,所以很難欺騙網絡接受錯誤的交易。結合一些加密算法和貨幣獎勵以便遵守規則,你的網絡會非常安全。
所有這些也使得區塊鏈幾乎是不可變的,因為改變歷史記錄的唯一方法是獲得全網大多數人的同意。
二、什么是智能合約?
區別于比特幣,以太坊最大的不同是引入了智能合約的概念。比特幣是數字貨幣,以太坊也是數字貨幣,但遠不止這些。
「智能合約」這個名稱有點誤導人。它們不是真正的合約,也不特別智能。它們只是一些可以運行在區塊鏈上的代碼-或者說是計算機邏輯運算。
首先,我將介紹有關智能合約是以太坊網絡上的一種特殊賬戶。你有用戶賬戶,你還有智能合約賬戶。
聲音 | 央行研究局局長:將深入研究完善金融科技監管制度框架等問題:據財聯社消息,央行研究局局長王信今日在數字金融開放研究計劃首屆學術研討會上表示,央行高度總是金融科技應用的相關研發,下一階段值得深入研究的課題包括:Libra等加密數字貨幣有關問題,如是否會形成法定數字貨幣、少數數字穩定幣并存格局;探索數字金融更好地支持實體經濟發展,應開發多元化、全方位金融服務;完善金融科技監管制度框架,發展監管科技,如何將科技巨頭納入宏觀審慎監管框架;加強數字金融基礎設施建設,加強數字金融領域的國際協調合作等。[2019/7/8]
一個用戶賬戶包括:
一個地址
余額
一個智能合約賬戶包括:
一個地址
余額
一個狀態
代碼
地址和普通賬戶的地址是一樣的,它是該賬戶的唯一識別符。
余額和普通賬戶也是一樣的概念。唯一令人激動的是,智能合約上的余額意味著代碼可以擁有金錢。它可以處理這些錢,也可能因為編碼錯誤而造成處理不當。
智能合約帳戶的狀態是智能合約中聲明的所有字段和變量的當前狀態。它的工作方式與大多數編程語言中類的字段變量相同。事實上,一個類的實體化對象可能是理解智能合約的最簡單方法。唯一的區別是這個對象是永久存在的(除非被編程為自我毀滅)。
動態 | 未來區塊鏈等金融科技在農村金融領域的應用將會持續深入推廣:據中國金融新聞網消息,日前,央行等五部委聯合發布《關于金融服務鄉村振興的指導意見》(以下簡稱《指導意見》),其中,在強化金融產品和服務方式創新方面,鼓勵推動新技術的運用。業內人士認為,未來金融科技在農村金融領域的應用將繼續深入推廣。正如上述《指導意見》提出,積極運用大數據、區塊鏈等技術,提高涉農信貸風險的識別、監控、預警和處置水平;鼓勵開發針對農村電商的專屬貸款產品和小額支付結算功能,打通農村電商資金鏈條等。[2019/2/16]
智能合約的代碼是編譯好的字節代碼,以太坊客戶機和節點可以在上面運行。它是在創建智能合約時執行的代碼,并且包含可以調用的函數。就像面向對象編程的語言中的任何對象一樣。
關于智能合約的趣事:它們可以調用其它的智能合約。這就開啟了創建自主代理的能力,這些代理可以自己花錢和進行交易。
假設我用上面的代碼創建了一個智能合約。該代碼有一個名為counter的字段,類型為uint(整數)。counter變量的內容是本合約的狀態。每當我調用count()函數時,任何人都能看到這個智能合約在區塊鏈上的狀態將會加1。
稍后我們將通過更多的例子來解釋它是如何工作的,但首先我想回到以太坊和比特幣的交易,并以此來解釋一些事情。
聲音 | 李東榮:依托區塊鏈研究工作組等 就國內外金融科技熱點重點問題開展深入研究:據人民網報道,中國互聯網金融協會會長李東榮做客人民網視頻訪談表示,從四方面加強金融科技發展,其中提到: 第一,依托移動金融專委會、網絡與信息安全專委會、金融科技發展與研究工作組、區塊鏈研究工作組等,牽頭組織行業研究力量,就國內外金融科技熱點重點問題開展深入研究,主要包括英美及部分新興市場國家金融科技監管最新進展,網絡借貸、股權眾籌等金融科技業態國際比較,監管科技、監管沙箱發展情況,大數據、云計算、人工智能、區塊鏈等技術在金融領域的應用情況等。其次是持續加強金融科技標準化建設,提升行業標準化規范化水平。三是履行社會組織對外交往職能,不斷加強金融科技國際交流合作。 第四,協會綜合運用自身掌握數據,以及司法系統、科技公司等第三方合作數據,針對互聯網資管、網絡借貸、ICO、互聯網非法外匯交易、涉嫌違法違規宣傳活動等重點領域持續開展監測。[2018/12/27]
三、交易水平上,以太坊VS比特幣
比特幣交易非常簡單。你可以只做一件事。一種類型的交易。略過一些細節,一切都可以歸結為TO,FROM和AMOUNT。這使得比特幣成為一種價值儲存手段,能夠在網絡參與者之間傳遞價值。
以太坊的不同之處在于交易還有一個「DATA」字段。該「DATA」字段支持三種類型的交易:
價值轉移
TO接收地址;
DATA字段為空或包含要附加的任何消息;
FROM你
AMOUNT是你要發送的以太坊數量
創建智能合約
TO字段為空
DATA字段包含編譯為字節代碼的智能合約代碼
FROM你
AMOUNT可以是0或者任意你想放在合約里的以太坊數量
調用智能合約
TO字段是智能合約賬戶地址
DATA字段包含函數名稱和參數——如何調用智能合約
FROM你
AMOUNT可以是0或者任何數量的以太坊,比如你需要為一項服務合約支付的數目
在這些交易中還有更多的字段和復雜性,但以上這些已經很好地解釋了核心概念。讓我們看看關于這些交易的一些更具體的例子。
價值轉移
非常簡單。TO向一個地址發送一定數目的以太坊代幣。你也可以為一筆交易加上一條消息。
創建智能合約
正如以上提到的,一個空的TO字段表示創建一份智能合約。DATA字段包含編譯為字節代碼的智能合約。
調用合約
我們稍后會回到這個問題,但是其主要概念是你將交易發送到你想要調用的智能合約地址,然后將函數調用放在DATA字段中。
四、注意成本和執行
正如你所想象的,你不能一直在區塊鏈上免費運行計算量很大的程序。
代碼的執行是由調用者用一種叫做gas的東西來支付的。Gas是運行以太坊虛擬機的燃料。你可以將其視為每次執行指令的費用(就像一行代碼)。
你需要為一個特定的合約調用設置可花費的最大gas。比如,如果你調用的代碼進入了一個永久循環,將會確保在執行過程中所花費的gas不會超過設置的最大gas。
gas(執行)的成本由網絡的礦工(運行代碼的節點)決定。關于gas和執行,還有很多知識。但以上這些值得牢牢記住。
五、智能合約如何工作?
當一個智能合約被部署到以太坊網絡時,任何人都可以調用智能合約的函數。雖然出于安全考慮該函數可能阻止人們調用,但你可以自由嘗試。
假設有一個MyObject類型的對象。該對象有一個名為myFunction的函數。要調用它,只需引用對象的實例、調用哪個函數和使用哪個參數調用。
像這樣:
myObjectReference.myFunction(parameters);
該函數返回的任意值,可以將其存在變量中:
myVariable=myObject.myFunction
調用一個智能合約在概念上是一樣的。唯一的區別是,你必須將調用相關的所有信息放在交易中,對其簽名并發送到網絡上來執行。
假設你想要調用函數myFunction,其中包含智能合約「0x0123456」里的一些參數。調用智能合約分四步:
現在,當交易被放進區塊鏈中的一個塊,該狀態變化便會被記錄在整個網絡中。
六、世界計算機
許多人把以太坊稱為世界計算機。這是個不錯的類比。它就像一臺由整個世界來維護的虛擬機。
但是請記住:雖然智能合約是圖靈完備的,并且理論上可以做任何事情,但它們不太適合繁重的計算工作。
以太坊世界計算機就像一臺運行簡單程序的老式慢速計算機。由于成本和安全性,保持以太坊的智能合約小而簡單是至關重要的。
合約需要的計算量越多,運行的成本就越大。合約越復雜,就越有可能存在安全漏洞。而且智能合約中的安全漏洞是很難處理的——畢竟區塊鏈是不可變的。
舉例:通證
回歸重點,我想解釋一下通證是如何工作的。
大多數這些通證都是在以太坊上創建的,而且概念非常簡單。
如何使用Javascript或其他編程語言編寫一個簡單的貨幣系統?你可以在一個文件中完成所有的操作。你真正需要記錄的是:
總供應量
賬戶
賬戶中的余額
資金流向
通過用戶和余額之間的簡單映射,你可以得到123的答案:
該map只是把一個賬戶映射到一筆錢。
使用構造函數,你可以在自己的帳戶中設置初始供應量
資金的流動是通過簡單的函數來完成的,即從一個賬戶中減去,然后加在另一個賬戶上。
創建通證與我們在以太坊使用的概念完全相同。當然,還有一些更復雜和額外的功能,但是基本概念非常簡單。
以下就是基本的通證合約在以太坊編程語言中呈現的樣子(再次重申:為清晰起見進行了簡化):
這就是基礎編程概念。我認為這說明了以太坊作為一個平臺的力量。通過一些簡單的代碼,你可以憑空生成一個代幣,它本質上就是由世界計算機記錄的一些變量。歡迎來到新的互聯網。
來源鏈接:www.gjermundbjaanes.com
白話區塊鏈 從入門到精通,看我就夠了!“教主,我感覺PoS共識機制好像漸漸要成為主流了”戰士難得的做了點思考,直接扔給我一個結論。“哦,這話怎么講呢?”我饒有興趣的看著他.
1900/1/1 0:00:00尊敬的ZG用戶: ZG.top即將上線PJD掛單售賣和交易。 PJD交易細則: 每輪可交易量分別為:13,600,000PJD、6,666,666PJD價格限定:限價期的兩輪限定價格分別為:1P.
1900/1/1 0:00:00親愛的用戶: Binance將于2019年04月19日18:00上線MITH/BNB、MITH/USDT交易市場.
1900/1/1 0:00:00親愛的KuCoin用戶:KuCoin計劃于2019年4月12日下午2點至下午3點(新加坡時間)對部分交易對進行服務整合,整合期間涉及交易對的撮合將會有最長2分鐘左右的延遲,其他服務將不受影響.
1900/1/1 0:00:00|作者:區塊律動BlockBeats0x29|歡迎添加作者微信qkldlinda與他進行交流!未經授權禁止轉載!4月15日晚,幣安交易所宣布即將在4月22日下架BCHSV.
1900/1/1 0:00:00尊敬的BihuEx用戶:幣虎全球交易所將于新加坡時間2019年5月5日上線SmartShoppingExperience/LESS上線時間:開放充值:2019年5月5日10:00:00;開放交易.
1900/1/1 0:00:00