編者按:本文系Qtum的Howard葉倍宏講師,在由掘金技術社區主辦,以太坊社區基金會、以太坊愛好者與ConsenSys協辦的《開發者的以太坊入門指南|Jeth第一期-北京場》活動上的分享整理。(https://www.bilibili.com/video/av25806054/)分享整理傳送門
以太坊智能合約+DApp從入門到上線:來自前端工程師的實戰指南-王仕軍|Jeth第一期詳解ERC20代幣及眾籌-熊麗兵|Jeth第一期Howard是《DeepDiveIntoEthereumVirtualMachine》一書的作者,該書深度剖析了Solidity和以太坊的原理。目前,Howard任Qtum量子鏈DApp平臺核心工程師,負責開發工具和數據庫。Howard在創業界擁有10年的產品開發經驗,并且對構建去中心化產品充滿熱情。他也是本次活動的出品人。大家好,很榮幸今天跟大家分享一下以太坊智能合約的一些開發經驗,在開始之前,我今天先給大家先講一個高層面的介紹,從前端到后端介紹一下以太坊的技術棧;然后之后我們兩位老師會給大家去介紹一些細節。所以我的這場分享只需要大家腦海里有個對以太坊的概念即可,具體細節后面我們兩位老師會給大家更精彩的講解。我今天就先介紹一下智能合約以及它存在的理由,然后帶大家看一下智能合約長什么樣子,最后會帶大家梳理以太坊的整個架構,從前面面對用戶的DApp到后面的存儲數據庫。先簡單自我介紹一下,我是臺灣同胞,目前在大理遠程辦公。為什么要智能合約
切入主題,為什么要有智能合約,挖礦非常的費資源,為什么要花這么多的精力這么多的資源在挖礦上面?有位區塊鏈先驅者提了這樣一個概念:技術讓人跟人之間去協作。我們個人自己跟自己協作,但是我可能多做一點事情,會找我的朋友找我的親人去合作,以此讓我做更大的事情,這樣我們需要一些合作,我信任我的兄弟,我信任我的同學這種類型的合作。更多的合作我們跟以太坊的愛好者我們掘金的事情我們互相的愛好及把我們捆綁在一起讓我們做更大的事情,再更大一點在一個城市,這個時候我們要有法律,我們需要各種政府部門,機關,就算我不認識你,我不認識買我產品的人,但我可以通過我們的合約去保證我們合作的可行性,更大一點就是國家跟國家、國際法院的合作等,這些跨邊界的合作是更復雜的體系。人類的文明跟技術是隨著這個合作的復雜性而增長的。那為什么我們要有規則呢,信任其實是非常昂貴的資源,我最信任的人就是我的親人和我的朋友,尤其是從小一起長大的朋友;但是我來到城市、國家這個級別的話,其實是很難信任一個不認識的人,所以我們要提高達成合作的可能性,就要降低信任最小的需求。我們只要通過這個概念降低互相傷害的風險,友誼的小船就不會翻。我們要盡量的信任別人,他講這些東西是科技,我們從人跟人之間的信任上升到法律,所以我們開始講法律時就不需要提及信任。從人情到市場,我可能愿意跟人合作,到市場我們開始講價格,我們有價格的協調機制,就不需要講人情了。我們點對點的對話,必須要認識你這個人我才有辦法跟你協作,多對多的撮合市場機制,這是一個持續演化的過程。所以我們開始講這些事情的時候,會牽扯到社會擴容,社會的擴容是需要成本的,我們需要有政府,需要有法院,需要有警察機構。上圖中我們可以看到OECD政府的GDP占比是從36%到58%不等。我們雖然沒有買單、沒有直接的去支付這些成本,但是實際上這些東西在政府開銷上占了很大比重。那區塊鏈做的事情他是因為取代信任的機制,即以計算機替代人工成為核心的概念。所以說智能合約他具體就是一個計算機程序,它來替代靠人工運營的這些機構。智能合約具體是什么
加密瀏覽器Opera推出VPN Pro服務的桌面端開發者版本:5月25日消息,集成加密錢包的瀏覽器Opera推出VPN Pro服務的桌面端開發者版本,可提供完全集成的VPN解決方案,電腦至少裝有Windows 8或者Mac配備了最新的MacOS,即能下載最新的Opera Developer,并在7天免費試用期內試用。注,VPN Pro是Opera推出的付費VPN服務,此前已在Android端推出。[2022/5/25 3:40:21]
接下來我們可看一下智能合約具體是什么東西。第一個例子就是亞馬遜的LAMBDA服務,LAMBDA一個特性是你在LAMBDA這個平臺寫程序的時候,你只是去寫你的業務邏輯,而這個業務邏輯你直接上傳到LAMBDA平臺上面,好像只是一個服務器的回調。只要有請求進來它就調用這個回調,計算完成后就直接終止了,你要自己去部署一個服務器,沒有邏輯。LAMBDA這個平臺讓你直接把服務器的這個業務邏輯放在平臺上面,完全不用去管后面對應哪些具體服務器,一有請求進來,并把LAMBDA啟動,這個跟智能合約的架構非常像。我們可以看一個較為簡單的例子,這個計數器的業務邏輯很簡單,這邊有一個COUNT,把它想成數據庫里的數據,這個合約有數據也有業務邏輯,這個業務邏輯要做的事情就是把這個數字遞增。當外部調用這個遞增的時候,它去數據庫里面修改這個COUNT這個變量,這個就是你的智能合約,從概念上來講也沒有什么,它之所以牛逼是因為我們用去中心化的網絡去同意了這個數據應該是什么,我們具體接下來看一個更好的例子。我們把這個合約的這些變量理解成一個數據庫,我們可能平常在寫一個加法的類型,它只是存在于類型里面,你的假若死掉了,這個內存就清空了。在智能合約里面,雖然它是變量,但是你是寫在鏈上面,而這個數據庫恰巧是特別昂貴的數據庫。我們類比成Java的偽代碼,我們會想象后面每一個合約它有一個相對應的數據存儲,它是一個對象,是一個數據庫,在這個方法里面剛才講了遞增的方法,它只是去操作這個數據庫,在這個鍵修改它里面的值,所以你每次去改一個變量其實是對數據庫做一個操作,而且這個操作是特別昂貴的操作,可以給一個概念,普通所有的這些指定是要費用的,普通的一個紙幣,比如說加減乘除,大概是2到5個不等,存儲的話是2萬個,大概算是5000倍的倍增。我們看一個更完整的例子,功德香火鏈,這個例子大概介紹了智能合約非常本質的一個東西。為什么要寫智能合約,我們并不是只是為了寫這個數據,他之所以牛逼是因為他里面有金融屬性,大家可以相信你,如果在我自己的亞馬遜LAMBDA上搞一個功德香火鏈是沒有人相信的,我在數據庫里面可以隨便修改,但如果我們改成在智能合約中就變成是一個去中心化、不需要信任的一個程序。大家來看一下這個東西,有一些需求,他初始化的時候我們要設定管理員,任何人我們都允許他捐款,最后要用這個款項的時候我們允許管理員取款,然后讓他寫出所有取款他的去處去了哪里。這個就是我們整個智能合約的代碼,就十幾行而已,這上面大概有兩點需要留意,有合約屬性,擁有者的姓名,我們會用這個屬性來存儲他的管理員,我們控制了管理員權限才可以進行修改。下方分別是捐款和取款的函數,我們接下來把這兩個函數分開講解。初始化設定管理員,所以說這邊我們是要把數據存起來,我們要知道誰是管理員,在創建這個合約的時候它是用一筆交易創建的,即有一個錢包去付錢然后去說這筆交易誰創建的。這里的屬性指出當前用戶的身份,這一筆交易的操作者以及合約的操作者。我們這邊做的事情很簡單,在創建這個合約的時候我們把當前的操作者存儲在這個數據庫里面,有了這個東西之后我們就可以驗證正在操作的人是不是管理員。接下來我們開始做這個核心的東西,即任何人都可以轉款,之后你要做眾籌讓別人給你轉錢,這個東西就涉及到金融的屬性了。我們看到這個函數也是一樣,在操作這個把錢的用戶,我們要記下來,也就是要記下這個功德;PAYABLE它只是一般拿來處理跟金錢相關的東西,這里是處理存進來的錢。這里要有個斷言,要確認這筆錢必須要大于0.001,因為我不想要太少,太少就看不上、不想要;最后這邊有一個日志,說我們把這個輸出和這個功德記下來,然后保佑發送這個錢的人,這個日志就記在鏈子上面了。報錯是直接退款,他沒有滿足這一個條件這筆交易就失敗了,他捐了錢就打回原本的帳號,當然這個真實的合約你會做各種其他的需求,理念上就是你先檢查滿足了你的需求之后,你再去操作你的業務邏輯,然后最后你就可以輸出記錄這個事情。我認為比較有意思的事情,這個合約他有一個相對應的帳號,這個帳號合約有多少錢,你看里面的業務邏輯并沒有顯性的說把這個錢給這個合約,你這個隱性只是說這一筆交易進來了,只喜歡這個邏輯,然后最后就會給這個帳號,但是你不需要代碼直接說這個事。接下來看看看管理員取款,我們這個函數可以讓管理員指出取錢的數量,這里又有一個斷言,我們在斷言里面判斷當前操作這一筆交易的人是否是這個合約的擁有者,我們一開始就要把這個擁有者記錄下來,之后的操作中我們再去驗證一下他是否是當初創建合約的人,如果是的話我就給這個用戶給他打錢,轉給他所要的錢。我們首先要做一個小測試,假如說這個帳號當前有10個以太坊幣,然后擁有者試著去取11個以太坊會發生什么事、觸發什么條件會報錯。假如說它試著轉錢,這邊是從合約里面把錢轉給A,它賬戶里面的錢不夠多就會報錯,同事狀態會直接全部回到原來的狀態。這個回滾的概念特別的重要,一般你在寫程序做一個操作的時候就有一個請求進來了,你對數據庫做一個操作,那你報錯了,之前的數據庫要回滾;以太坊會自動做這個回滾的事情,只要一失敗它就馬上回滾。我們可以看一下一些平臺的特性,過去通常是你自己公司買這個服務器,大家用這個服務是不用錢的;現在是用戶承擔所有的計算費用,GAS模型去計算,然后很核心的點是用戶他掌握了權限,比如說你用支付寶想轉帳你在支付寶平臺上確認這筆帳能不能轉,那現在用客戶端在客戶端做了簽名,然后服務端說讓你轉帳,他是不會去驗證這個客戶在終端到底是誰。還有一點,雖然說以太坊或者量子,有著幾千幾萬的節點,其中以太坊是有17000多個節點,看似這17000個節點計算能力還不錯,事實上并沒有。因為每一個節點要重復每一個計算,計算每一個數據,所以當我們說存儲數據庫,如果是當成傳統數據庫來用是不可行的,因為太貴了。去中心化平臺也是有他自己的缺點,他很慢,處理一筆交易要花20秒;其次貴,每一筆交易要花大概0.1或者是0.2美元,如果你要發一筆比較大的合約就是10美元到100塊人民幣左右了。你做應用交易的生命周期極其復雜,這個東西你必須要等他確認,等一次兩次三次,然后他可能中間會拋錯,各種不同拋錯情況,有可能是業務邏輯拋錯,也有可能是他給的GAS不夠,然后跑一半邏輯他沒有錢了,就終止了,還有一些其他的在業務上有一些沒有辦法做,沒有網絡請求沒有隨機員,還有你不能更新合約代碼,之前出了一些漏洞,有些人寫了合約,這個合約被別人刪了,然后他很多錢就卡在里面,幾千萬美金的錢卡在里面。所以說在做的時候就可能需要思考一下我這個東西去中心化有意義嗎,到底是哪些東西值得去中心化。DAPP全棧走一回
首屆Substrate開發者黑客馬拉松創業大賽結束:3月20日-21日,Polkadot Hackathon在上海長寧舉辦。這是首屆Substrate開發者黑客馬拉松創業大賽,33個戰隊、50天的充足線上備賽、36小時現場Hacking,基于Substrate框架進行開發和創造產品原型。來自北京、深圳、上海、杭州、南京、成都、香港、西雅圖等地開發者組成的21個隊伍晉級線下DemoDay決賽。Apron Network獲得一等獎,獎金80000元。InkBridge、Deeper Network獲得二等獎,獎金40000元。Parallel、SkyePass獲得三等獎,獎金20000元。Web3Games獲得最受開發者歡迎獎,Deeper Network獲得最受社區歡迎獎。
此外,IOSG創始人Jocy宣布正式開啟開發者資助計劃,歡迎各位早期個人開發者和團隊給IOSG Post代碼和opensource的創業想法,IOSG將提供10萬美元以內的資助和支持。(一塊Plus社區)[2021/3/23 19:09:43]
那我們接下來更深入的看一下,DApp全棧走一回,我們用一個簡單的例子然后走到最后面的區塊鏈上面存儲的數據。這個合約中,我有一個變量,有一個值,然后我唯一要做的事情就是修改這個值或者是讀取這個值,這個就是我的一個簡單的智能合約。我們會從前端開始,我們看一下從前端再遞增RPC,這個是ABI的編碼,我們一會兒再展開來說,這個合約就是他的業務邏輯,EVM最后到區塊鏈存儲,我們一個一個展開來再說。所以說你可以比較一下WEB2.0到3.0他們技術站的對比,然后WEB3.0就在吹牛說WEB3.0技術是一樣的,只是換湯不換藥,在WEB2.0我們做了一個請求,用戶按一個鈕就產生一個請求,用戶按一個鈕就產生了一筆交易,會帶有一定的金額,這個需要整個網絡去確認,而不是單一的服務器去確認,但是在前端是由用戶批準交易之后再丟給網絡讓網絡去處理。然后你寫后端說我這個請求他里面具體的數據是怎么樣的給一些結構,那我們現在做后臺的話常常是用ABI的結構,以太坊這邊它相對應的這個數據結構就是叫做ABI編碼,傳給智能合約的數據就是用ABI編碼,在WEB2.0我們做服務,后來在WEB3.0我們想寫智能合約去做這些服務。但操作系統層面在WEB2.0時是Windows這些操作系統,現在的以太坊就是虛擬機,同時也能做一些操作系統方面的處理,比如說存儲數據轉錢,或者是調用其他合約,這些是用EBM來做的,這些是混合了兩個不同的東西在一起,又是虛擬機又是操作系統。最后我們要存儲數據,就是在WEB2.0文件系統這些去存數據,在WEB3.0我們有電子版本控制,你可以有各個版本。那我們看看前端,前端要做的事情就是展現鏈上的數據,重點還是一樣,用戶在本地簽名之后再把數據提交到鏈上,這個權利是握在用戶的手上,我們可以比較一下WEB服務和純客戶端的兩個概念,大家熟悉這個應用就是幣安這種平臺做交易,實際上這些不夠形成這些權限的控制都在平臺手上,像錢包這種東西才是比較正兒八經去中心化,你說了話不算,是用戶控制權限。在這兩個極端去糾結如果我真的要做一個去中心化應用的話,它的用戶體驗會很差很難用;好處是中心化的服務,用戶體驗好且反應快,但是就是出了事的話那大家都一鍋掀了,現在是在兩個極端里面去糾結怎么做。我們看一下前端的例子,這個REMIXIDE,他指向合約,他有兩個按鈕,一個是GET的按紐,還有一個是SET的按鈕,我要通過調用的方法去改那個值。然后當我按向那個按鈕我要去設定666,這個時候他用RPC去遞交一個事物,然后在以太坊就是這個RPC的方法,他們的概念是一樣的。所以我調用這個方法從我的錢包去打這個數據,然后我們之后會把這個數據去展開,它也是一個RPC,這里面的數據傳給智能合約的數據,我們來展開看一下。我把剛剛那個東西調用到網絡上面,我就可以看到這一筆交易,這個就會把交易里面的一些信息顯示出來,我花了多少Gas,然后里面傳了一些數據。我們看ABI的編碼,我們可以拆開兩部分,這個60fe47b1他也是調用方法,這個是他的方法名然后拼接在一起去取這個前面四個字節就是這個方法的選擇器,我調調用智能合約的時候前面四個字節指定我要調用哪些方法,后面那些就是我傳參,就是用這個編碼出來的,雖然666其實只需要2個字節,但是他ABI編碼的設計必須要32個字節,所以說這里可以看到他是有一定的浪費的。剛剛傳到數據上來之后EVM的節點就會把智能合約的代碼加在這個里面去執行,這個是我們剛剛設定的方法,傳值進去進行修改。我們可以看一下EVM的字節碼,剛剛看到這個是智能合約,這個智能合約最后通過編譯器會編譯到字節碼,他基本上是從上到下一個一個執行的。我們要關注的是有兩個可以關注的,上面這邊60fe47b1這個就是我們選擇器,我先判斷一下是不是這個方法,是這個方法的話我跳到這邊來去繼續執行。所以說這個就是我們SED方法,最下面我們存儲數據了,這點是一個關鍵點,我們剛剛是要存到value這個屬性,這個屬性他可以理解為建值,他直接是映射到0的位置,我用0去存儲,最終把這個數據存儲到內存里面去,所以說這是整個合約最關鍵的指令,存儲數據。我們把剛剛說的那些東西從EVM字節碼變成代碼,這個是我發的時候他里面會帶著一些數據,這個數據就是有一個指令,然后我取前面四個字節這個就是我要選擇的方法,如果匹配了這個字節我就跳到tag這邊,這邊我要取參數,我也是從這里去取,我直接從四個字節以后取32個字節出來,這個就是我的參數,然后最后我把我讀出來的參數存到這個位置,這個就是我們剛剛合約做的事情。我們下面分析一下sstore這個指令是在干啥,我們剛剛做的事情就是把數據存在第一個位置,L1這個位置,這個位置可以是無限多的,我存在這個位置之后他就會更改,其實最上面的這個就是我的版本號,我的版本號他是取這兩邊的,然后每一個節點都一樣,這邊的hash是由下面來更改的,如果我更改了這里面的數據,這邊的hash會變,然后導致最上面的這個版本號也變了,所以說直接把這個hash當成版本號就可以了。如果我去改動這邊的數據那通過這個路徑去改變最上面的版本,下面這邊是我存儲數據的地方,我任何地方存儲的數據都會影響到最上面的版本號,跟top的版本控制有點像。這邊就是我們存儲數據的數據結構,接下來我們看一下這個數據結構最后是如何融入到鏈里面去,這個就是咱們的區塊鏈,里面會存著版本號,像說你去GitHub上面看一個項目,會有歷史更新文檔,會講這個版本號修改了什么,這個版本號修改了什么。這個就數據結構類似于一個版本,每個版本會去記錄這一個相對應的版本號是什么,然后從這個版本號可以取出相對版本所有的數據。再回顧一下剛才提到的,我們從前端通過RPC,這個是以太坊節點提供的服務,通過到RPC調用這個節點,調用里面的數據是由ABI編碼結構化,然后傳給合約,合約處理這個數據,最后這個合約是相對應字節碼,然后由EVM解析,解析的結果通常就是存出去要么就是給別的帳號打錢,大概就是這樣。區塊鏈現狀&未來
以太坊開發者反駁EIP-1559還有幾周時間推出的傳聞:去中心化組織PieDAO市場負責人William Brealey今日在推特表示,EIP-1559可能最終導致通貨緊縮的ETH模型,現在只剩下幾周時間了。對此,以太坊開發者Tim Beiko回復稱,我從沒提過EIP-1559還有“幾周”推出。說清楚一點,不是這樣的。[2021/1/14 16:09:16]
區塊鏈的現況大家體會一下,有點天下大亂的樣子,區塊鏈的新世界,這個是我們對未來的小展望,現在大概是5000萬個用戶在炒幣,可能未來十年區塊鏈會增長到10億用戶,像手機一樣普及。如果這個事成真,每個人都會有一些數據的資產,變得像手機一樣普及,這樣的話我們要討論。這就牽扯到擴容,擴容的話有幾種方案我現在比較看好側鏈和跨鏈的方案,如果我們要做產品那就考慮說這個到底怎么樣做出好的產品給人用,所以說現在很多正在驅動的區塊鏈產品很難用被各種噴;再一個是隱私的問題,區塊鏈就是公開帳本,毫無隱私可言。智能合約發現了很多的問題,智能合約在安全上或者是在可用性上面他學習成本是相當高的,因為它是不同的平臺,所用的編程語言也與其他語言不同,一切都要從頭開始學。現在我們可以看到一些新一代的智能合約平臺可以出現了,像WEB3.0是在瀏覽器里面做一個接近底層的版本。所以說我們可以看到像以太坊生態圈里面truebit在嘗試然后像rholang這類項目,它也解決了合約并發的問題,像我們公司量子我現在做一個虛擬機,這個是模擬了CPU的架構,我們希望說通過這個架構可以支持一些比較底層的開發去做智能合約,然后我們會比較關注像操作系統和虛擬機的分層,現在你去分析EBM的原理,它是字節碼,里面會看到一些屬于操作系統的的這個指令,它其實是建在虛擬機里面,這個也是一個技術上的一些問題。剛剛也提到了一個問題,就是智能合約到底能不能更新,應該怎么更新,這也是現在行業里面討論的問題,我們會采用一個像DGP這種方式,我們通過投票去讓用戶選擇這個智能合約應該怎么更新。歡迎大家跟我交流,謝謝大家。
早期比特幣開發者:Coinjoin等比特幣混幣方案是垃圾:Dark Wallet創造者和早期比特幣開發者Amir Taaki近日在推特批評比特幣的隱私保護方式。Taaki聲稱像Coinjoin這樣的UTXO混合概念是“絕對的垃圾。”Taaki還抨擊了其他概念,如Mimblewimble(有趣但對隱私毫無價值)和以隱私為中心的代幣,如門羅幣(稍微好一點,但不是匿名的);并且聲稱零知識累加器將是未來的“匿名金本位”。(Bitcoin.com)[2020/7/21]
聲音 | 以太坊核心開發者:希望結束對開發人員的威脅和攻擊:據breakermag報道,全球110余位以太坊核心開發者共同發布了致以太坊社區的公開信。該公開信稱,雖然Afri的推文確實是挑釁性的,但這些是以個人身份發表的意見。其中很多用戶對此表示尊重,但以太坊社區中的一些其他人聲稱他參與野蠻陰謀,??要求他立即辭職,以及對Afri個人發出威脅。這種類似行為遠非第一次,文中并列舉一些類似事件,呼吁以太坊社區結束對開發人員的威脅和攻擊行為,共同構建和諧社區。[2019/2/20]
今日,去中心化旅行服務平臺Tripio宣布,已和火幣生態達成合作。火幣平臺幣HT將接入Tripio支付系統,持有HT的用戶可用其預定平臺上的全球45萬家酒店、民宿.
1900/1/1 0:00:00根據CNN消息,近日,暗網的創始人RossUlbricht開通了推特賬號@RealRossU,RossUlbricht的推特賬號在一天之內吸引了上千名粉絲,并且粉絲量還在持續上漲.
1900/1/1 0:00:00本文來自:吳解區塊鏈,作者:馬莎卡,星球日報經授權轉發。Winklevoss兩兄弟就沒有放棄過比特幣ETF.
1900/1/1 0:00:00編者按:本文來自哈希派,作者:哈希派,星球日報經授權轉發。自比特幣誕生以來,數字貨幣市場發展至今已達千億美元的市值,同時領域內發行超過1700種數字貨幣.
1900/1/1 0:00:00據CNN報道,韓國政府已撥出5萬億韓元預算,用于8個關鍵領域的投資項目,重點是區塊鏈和人工智能.
1900/1/1 0:00:00彈窗、邊欄和底欄的小動畫、貼片……基本代表了我對在線廣告的印象。它們的共同點是:無視我是否想看、廣告大多與頁面內容無關、遮擋了我想看的內容、浪費了我的時間……不過,Odaily星球日報近期接觸的.
1900/1/1 0:00:00