加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads
首頁 > BNB > Info

開發者的以太坊入門指南,以太坊智能合約 + DApp 從入門到上線_以太坊:WEB

Author:

Time:1900/1/1 0:00:00

編者按:本文系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%不等。我們雖然沒有買單、沒有直接的去支付這些成本,但是實際上這些東西在政府開銷上占了很大比重。那區塊鏈做的事情他是因為取代信任的機制,即以計算機替代人工成為核心的概念。所以說智能合約他具體就是一個計算機程序,它來替代靠人工運營的這些機構。智能合約具體是什么

Aavegotchi 推出生態賞金計劃以激勵 DApp 開發者:9月27日消息,Pixelcraft 工作室推出 Aave 生態 NFT 游戲 Aavegotchi 的生態賞金計劃以激勵生態中 DApp 開發者,該賞金計劃將面向對已有游戲的再開發以及為 Aavegotchi 生態開發有價值的 DApp 的兩類開發者。賞金的規模在 500 DAI 到 5000 DAI 之間,項目確定接受資助時將先獲得一半賞金,另一半的賞金將在項目完成自定的目標時獲得。[2021/9/27 17:10:09]

接下來我們可看一下智能合約具體是什么東西。第一個例子就是亞馬遜的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全棧走一回

Uniswap創始人和Paradigm開發者合作構建新做市系統 用以執行大型交易:Uniswap創始人Hayden Adams和兩名Paradigm開發者DaveWhite和Dan Robinson正在構建一個做市系統,用于在以太坊上執行大型交易。該做市系統名為時間加權平均做市商(TWAMM),將長期訂單分解成無數個無限小的碎片,并隨著時間的推移在其嵌入式AMM上順利執行。目前這個想法還處于早期階段,Dave White呼吁更多開發者參與進來。(TheBlock)[2021/7/29 1:22:41]

那我們接下來更深入的看一下,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解析,解析的結果通常就是存出去要么就是給別的帳號打錢,大概就是這樣。區塊鏈現狀&未來

以太坊開發者:以太坊2.0中的ETH有26%來自交易所:以太坊開發者Tim Beiko透露,隨著質押在ETH2.0中生效,最大的問題仍然是驗證,以及如何在交易所、池或AWS上托管的用戶之間分布。數據顯示,當前以太坊2.0中參與質押的ETH有26%來自交易所,15%來自池,剩下的是所有可進行質押途徑的混合。以太坊開發者TimBeiko就此表示:“需要注意的一點是,以太坊的PoS算法使用的懲罰機制與有多少其他人和相關用戶一起‘犯錯’相關。”這意味著,即使以太坊網絡不能阻止用戶在AWS或其他受歡迎的客戶端上進行質押,它也可以提供“一種經濟激勵,以一種‘犯錯’與網絡其他構成不相關的方式設置質押節點。”(AMBCrypto)[2021/4/5 19:47:47]

區塊鏈的現況大家體會一下,有點天下大亂的樣子,區塊鏈的新世界,這個是我們對未來的小展望,現在大概是5000萬個用戶在炒幣,可能未來十年區塊鏈會增長到10億用戶,像手機一樣普及。如果這個事成真,每個人都會有一些數據的資產,變得像手機一樣普及,這樣的話我們要討論。這就牽扯到擴容,擴容的話有幾種方案我現在比較看好側鏈和跨鏈的方案,如果我們要做產品那就考慮說這個到底怎么樣做出好的產品給人用,所以說現在很多正在驅動的區塊鏈產品很難用被各種噴;再一個是隱私的問題,區塊鏈就是公開帳本,毫無隱私可言。智能合約發現了很多的問題,智能合約在安全上或者是在可用性上面他學習成本是相當高的,因為它是不同的平臺,所用的編程語言也與其他語言不同,一切都要從頭開始學。現在我們可以看到一些新一代的智能合約平臺可以出現了,像WEB3.0是在瀏覽器里面做一個接近底層的版本。所以說我們可以看到像以太坊生態圈里面truebit在嘗試然后像rholang這類項目,它也解決了合約并發的問題,像我們公司量子我現在做一個虛擬機,這個是模擬了CPU的架構,我們希望說通過這個架構可以支持一些比較底層的開發去做智能合約,然后我們會比較關注像操作系統和虛擬機的分層,現在你去分析EBM的原理,它是字節碼,里面會看到一些屬于操作系統的的這個指令,它其實是建在虛擬機里面,這個也是一個技術上的一些問題。剛剛也提到了一個問題,就是智能合約到底能不能更新,應該怎么更新,這也是現在行業里面討論的問題,我們會采用一個像DGP這種方式,我們通過投票去讓用戶選擇這個智能合約應該怎么更新。歡迎大家跟我交流,謝謝大家。

動態 | ETC引進EVM-LLVM項目 為開發者完善開發環境:ETC Labs Core正在為以太坊家族帶來LLVM生態系統。該項目被稱為EVM-LLVM,開發人員不僅可以使用更多選擇的編程語言(面向智能合約的Rust),而且還可以直接從圍繞LLVM基礎設施構建的各種開發工具中獲益,從而獲得未來的保障和長期的支持。[2019/8/29]

網傳神秘開發者直播挑戰幣安安全漏洞:網傳神秘開發者將于3月20日全程直播正面挑戰幣安安全漏洞,該神秘開發者的微博賬號為“程序員的快樂”,目前幣安對此事暫無回應。[2018/3/18]

Tags:以太坊WEB區塊鏈APP以太坊價格Webflix Token區塊鏈dapp開發一個多少錢聚幣交易所app官網下載

BNB
Ledgerx 推出比特幣有息儲蓄平臺,年回報率達16%_LED:GER

據Bitcoin報道,Ledgerx公司于本周宣布推出Ledgersavings比特幣儲蓄平臺,用戶可以通過該平臺存儲比特幣并獲得存款收益。據了解,儲蓄計劃將使客戶獲得大約16%的年回報率.

1900/1/1 0:00:00
傳比特大陸擬再融資10億美元,騰訊或將投資_ETH:TRU

7月23日消息,根據自媒體“IPO早知道”報道,比特大陸在6月底剛剛完成由紅杉領投的120億美元估值融資后,正在進行新一輪Pre-IPO輪融資,計劃融資10億美元,投后估值150億美元.

1900/1/1 0:00:00
「諭言」要做預測市場版的“素人養成秀”,打造有“言值”的預測明星_區塊鏈:以太坊最新價格行情平臺

預測市場被很多人認為是區塊鏈易落地的應用之一,可以一定程度上解決傳統預測市場的暗箱操作、金融監管等痛點。此前,Odaily星球日報報道過“天算”等項目.

1900/1/1 0:00:00
粉絲經濟項目「FanX」獲分布式資本投資,粉絲和主播之間的中介能去掉嗎?_FAN:區塊鏈

今日,粉絲經濟項目FanX宣布已獲得分布式資本投資,加上此前的投資方Blockshine、Bitshine、BlockchainGlobal、Sky9資本、科銀資本、BlockchainVent.

1900/1/1 0:00:00
區塊鏈技術為醫療健康行業保駕護航_區塊鏈:DHC

作者:曹黎軍、江澤武哈希未來以科普小白區塊鏈知識,“協議層—技術層—應用層”三位一體的區塊鏈資產交易平臺,解決資產上鏈與跨鏈流通,聚焦底層技術與應用場景的研究平臺,致力于打造可信的數字時代.

1900/1/1 0:00:00
福布斯:2018第二季ICO融資額度占IPO45%,同比環比均上升_福布斯:加密貨幣總市值最高多少

加密貨幣資本市場正在挑戰傳統投資銀行的融資方式,現有的投資銀行仍然缺席新興的加密貨幣資本市場,可能會逐漸失去他們的客戶.

1900/1/1 0:00:00
ads