国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

干貨 | 以太坊Mist負(fù)責(zé)人教你建立無服務(wù)器應(yīng)用

villainhr / 2063人閱讀

摘要:它同時會檢查確保沒有意外發(fā)送的以太幣。當(dāng)任何以太幣被存入智能合約時,匿名函數(shù)會被執(zhí)行,并會自動拒絕接收以太幣。

作者:Alex Van de Sande
譯者:王建/蔡佳慧
譯者介紹:
  王建:萬云平臺區(qū)塊鏈技術(shù)專家,擁有多年應(yīng)用系統(tǒng)架構(gòu)經(jīng)驗(yàn),目前在區(qū)塊鏈落地方面進(jìn)行積極探索
  蔡佳慧:萬云平臺實(shí)習(xí)生,區(qū)塊鏈技術(shù)愛好者,英國帝國理工學(xué)院數(shù)學(xué)專業(yè)在讀

這篇教程是由以太坊Mist瀏覽器的負(fù)責(zé)人撰寫,完整地介紹了如何開發(fā)一個標(biāo)準(zhǔn)的DApp。

以下是正文:

以太坊并不是那種需要一個STEM文憑(1)才能理解的高深莫測的智能合約應(yīng)用建立平臺,它的目標(biāo)其實(shí)是成為萬維網(wǎng)中各種應(yīng)用架構(gòu)的支柱。在這篇文章里,我們嘗試去闡述如何實(shí)現(xiàn)這個目標(biāo),并提供一些基本例子來展示如何開始構(gòu)建一個去中心化的應(yīng)用。

譯者注:

(1)STEM文憑,指:科學(xué)-science,科技-technology,工程-engineering,及數(shù)學(xué)-mathematics相關(guān)文憑。

目標(biāo)讀者

這篇文章面向有以下背景的讀者:對于Web技術(shù)有基本了解,并知道如何構(gòu)建一個簡單的基于javascript和html的應(yīng)用。同時,希望使用這些技能為以太坊生態(tài)系統(tǒng)構(gòu)建應(yīng)用。

沒有服務(wù)器,應(yīng)用是如何運(yùn)行的

當(dāng)前,Web應(yīng)用中的服務(wù)器所做的工作已經(jīng)遠(yuǎn)超當(dāng)初的設(shè)想。除了提供靜態(tài)網(wǎng)頁,它們還保管私有信息,處理用戶驗(yàn)證,同時還提供復(fù)雜數(shù)據(jù)分析與保存。而用戶計算機(jī)(在Web技術(shù)剛被發(fā)明的年代,這種設(shè)備會被認(rèn)為是超級計算機(jī))所做的僅僅是加載信息,并展示給用戶而已。

Current server models

與此不同的是,更為去中心化的系統(tǒng)結(jié)構(gòu)則會允許一種更加模塊化的處理方式。在這種方式中,不同的機(jī)器與不同的協(xié)議將會處理特定的任務(wù),有些屬于用戶方面,而也有些屬于配置于點(diǎn)對點(diǎn)網(wǎng)絡(luò)中的專用機(jī)器方面。因此所有的數(shù)據(jù)邏輯(什么會被儲存,誰會去儲存,如何解決沖突等)是由區(qū)塊鏈上的智能合約解決的,靜態(tài)文檔由Swarm提供,同時實(shí)時通信在Whisper上進(jìn)行。用戶設(shè)備保留用戶認(rèn)證信息并運(yùn)行程序界面。

幾乎沒有單節(jié)點(diǎn)保留大量未加密數(shù)據(jù),這么做將會降低數(shù)據(jù)泄漏與攻擊的危險。同時,通過將其分散于全網(wǎng)絡(luò),也可以降低應(yīng)用的加載與花銷成本。由于所有這些協(xié)議都是去中心化的,任何人都可以連接到網(wǎng)絡(luò)并開始提供特定服務(wù):比如說,如果用戶在一個功能強(qiáng)大的筆記本電腦上瀏覽,這臺電腦也可以向網(wǎng)絡(luò)鄰居們提供靜態(tài)文件。

Decentralised Server models

一個去中心化的系統(tǒng)結(jié)構(gòu)同時鼓勵創(chuàng)新:由于交互界面脫離于數(shù)據(jù),任何人都可以為同一個應(yīng)用提出一個全新的用戶界面,創(chuàng)建一個更富生機(jī)與競爭力的生態(tài)系統(tǒng)。可以說,Twitter歷史上最具趣味性及創(chuàng)新力的時期之一便是它作為中央數(shù)據(jù)中心提供服務(wù),同時任何人都可以創(chuàng)建他們自己的Twitter應(yīng)用。

觀察它如何運(yùn)作

如果你想在學(xué)習(xí)這個應(yīng)用之前實(shí)驗(yàn)它,我們推薦你下載Mist并閱讀我們關(guān)于如何安裝應(yīng)用并運(yùn)行的入門教程(下載鏈接:https://github.com/ethereum/m...)。如果你只是想要看一看完整的應(yīng)用,你可以直接從Github上將其下載下來(下載鏈接:https://github.com/ethereum/s...)。

Stake Voice running on the Mist Browser

我們現(xiàn)在上手操作

我們將會建立一個叫做“Stake Voice”的非常簡單的應(yīng)用。其主旨是允許以太幣投注人對任何他們想投的事情進(jìn)行投票,同時這個應(yīng)用將會計算所有同意與不同意這個陳述的以太幣總和。

下面代碼是這個應(yīng)用里用Solidity語言編寫合約,Solidity是一種類似于javascript的語言,非常簡單:

第一行建立了合約名稱,同時第二行創(chuàng)建了一個命名為“LogVote”的事件,它將會在日志文件中記錄以下內(nèi)容:

將會被投票的提案的哈希值
投票者是同意還是反對提案
投票者的地址

函數(shù)“vote”接著會啟動日志,應(yīng)用程序稍后會計數(shù)。它同時會檢查確保沒有意外發(fā)送的以太幣。當(dāng)任何以太幣被存入智能合約時,“匿名”函數(shù)會被執(zhí)行,并會自動拒絕接收以太幣。

如果你想要學(xué)習(xí)關(guān)于Solidity更多的編程內(nèi)容,我們推薦你從以太網(wǎng)solidity教程( https://ethereum.org/dao)開始,閱讀官方文檔頁面( https://solidity.readthedocs....)并在你的瀏覽器上嘗試在線編譯器( https://ethereum.github.io/br...)。

大致上就是如此了:你選擇一個哈希值,選擇一方然后運(yùn)行Vote()。所以這又如何轉(zhuǎn)化成一個投票應(yīng)用?

無服務(wù)器架構(gòu)

遵循KISS原則,我們正在制作盡量小卻仍然可使用的產(chǎn)品。這意味著我們不會使用數(shù)據(jù)庫來儲存提案,也不會使用普通javascript與純粹html之外的功能。

因此,我們將使用應(yīng)用本身的URL來保存提案文本,并且我們會使用URL來向用戶展示提案內(nèi)容,再生成一個用來檢測投票的哈希值。用戶可以使用社交媒體來分享他們想要辯論的提案,或者直接使用鏈接。

從基礎(chǔ)開始

拿出你最喜歡的html框架,并在你本地機(jī)器上建立一個簡單網(wǎng)站,然后在Mist上打開它。Mist上所有的頁面都可以訪問一個名叫web3的javascript對象,這也是你的主要工作區(qū)域。我們要做的第一件事就是檢查web3是否存在:

一些應(yīng)用開發(fā)者也許會想要去加載他們自己的web3對象,以保證向前的兼容性。要做到這些,只需要在標(biāo)簽前加上:

然后在初始函數(shù)上加上這個去加載你自定義的web3提供方(provider):

從區(qū)塊鏈上加載信息

你檢查到你連接到區(qū)塊鏈網(wǎng)絡(luò)上了嗎?但是到底是哪一個區(qū)塊鏈網(wǎng)絡(luò)呢?是主體(main)以太坊網(wǎng)絡(luò)嗎?也許是一個測試網(wǎng)絡(luò)(testnet)或者是一個私有(private)網(wǎng)絡(luò)?或許未來某一天,你會分叉(fork)一個以太坊源碼,構(gòu)建一個屬于你自己的全新品牌區(qū)塊鏈。檢查網(wǎng)絡(luò)的最好辦法是查看你想要加載的合約地址中是否包含了代碼。

此外,為了執(zhí)行一個合約你需要知道兩個基本事項:它的地址和ABI(ABI是使用json編碼的接口文檔)。

現(xiàn)在有了上面這些內(nèi)容,你就能夠在啟動函數(shù)上檢測合約是否存在了:

你甚至可以遞歸地運(yùn)行這條命令,嘗試用不同的地址去連接(假定你測試網(wǎng)絡(luò)上)。一旦你找到你的合約,你就可以在這里加載它了:

你用web3對象創(chuàng)建的javascript對象,能夠直接在瀏覽器中執(zhí)行所有以太坊命令。如果你僅僅想要加載一個合同的實(shí)例,你甚至可以在一行代碼里做到:

用戶鑒別

獲取用戶賬戶披露了這個用戶的大量信息:賬戶余額中有多少以太幣和其他代幣,以及其交易歷史。因此,默認(rèn)讓所有應(yīng)用獲取這一信息將會創(chuàng)建一個超級cookie,由于對隱私的侵犯,這是不可以接收的。另一方面,要求用戶為每一個網(wǎng)站創(chuàng)建一個帶有登錄信息的賬戶,這不僅對用戶來說是一個痛苦,而且把你的隱私交給第三方來掌控,這種方式將會讓個第三方變成一個可被黑客隨意掘取的巨大蜂蜜罐。

面對這一困境,多數(shù)用戶選擇將自己個人信息及驗(yàn)證信息交由一個幾十億美元公司處理。隱私權(quán)不應(yīng)該為了取得實(shí)用性而妥協(xié):用戶應(yīng)該在掌控他們的個人信息的同時,能夠輕松地驗(yàn)證身份信息以登入任何應(yīng)用。

使用Mist,應(yīng)用不擁有關(guān)于用戶的信息,除非用戶決定公布其自身信息給應(yīng)用。當(dāng)你想要查詢自己的賬戶信息,你應(yīng)該調(diào)用getAccounts函數(shù):

目前,返回對象是一個數(shù)組,其中包含了用戶擁有本地訪問權(quán)限的簡單賬戶,但是在未來,其中還會包含用戶用于自身識別的智能合約賬戶。這將會使得用戶擁有權(quán)限來訪問目前只供給集中式驗(yàn)證器(centralized authenticators)的特性,比如雙重身份驗(yàn)證或者云備份。用戶同樣將會擁有權(quán)限來訪問未來針對智能合約的改進(jìn),比如在你遺失密鑰的時候允許一些受信任的朋友來給你訪問賬戶的權(quán)限,或者對于不活動賬戶行使自動繼承權(quán)。

每一個未來的以太坊瀏覽器將會解決用戶如何向應(yīng)用辨別自身的問題。在Mist中我們由兩種方式:要么用戶可以通過敲擊“connect”按鍵(目前僅叫做“no accounts”按鍵)來啟動它,或者應(yīng)用可以通過調(diào)用“requestAccount”api來要求身份驗(yàn)證。

注意:這個列表上的賬戶僅僅只是用戶聲明擁有密鑰的賬戶,但是用戶并沒有提供證明,因此你可以展示一個不同的界面,但是不要給用戶發(fā)送任何與賬戶有關(guān)的加密信息。如果需要用戶證明他們的身份,你需要讓用戶對信息簽名,同時Mist也會在未來支持它,請注意這會要求用戶做一個額外步驟--輸入密碼。所以只在必要的時候,你才會需要用戶簽名。

投票

一旦你有了合約對象,投票就僅僅只是從javascript中調(diào)用它。調(diào)用函數(shù)會下面這段代碼處提供操作器將會解決用戶們?nèi)绾蜗驊?yīng)用辨別會包含用戶們彈出一個Mist交易面板,用戶可以在面板上檢查交易內(nèi)容,并輸入密碼。

因此,首先我們要創(chuàng)建兩個可以調(diào)用投票函數(shù)的可點(diǎn)擊對象:

注意我們調(diào)用的一個函數(shù)參數(shù)為true,另一個則為false。投票函數(shù)可以像下面這么簡單:

“Ethervote”是我們之前創(chuàng)建的對象,并且“vote”是它函數(shù)中的一個,對應(yīng)著合約函數(shù)的一個:

根據(jù)函數(shù)的要求,我們需要傳入兩個參數(shù),并增加包含交易信息的第三個對象,比如:誰發(fā)送了此交易,以及兩個可選項:包含多少gas或者購買gas的費(fèi)用。

由此,這將會創(chuàng)建一個面板,以要求用戶確認(rèn)交易——但是多數(shù)情況下它會返回一個錯誤信息,因?yàn)槟壳皐eb3.eth.accounts對象默認(rèn)是一個空數(shù)組,所以你需要檢查其是否為空,若為空,則從用戶處請求賬戶:

你應(yīng)該只在用戶初始化一項操作的情況下請求賬戶:無中生有地顯示一項交易只會理所當(dāng)然地激怒用戶,更可能使他/她關(guān)閉你的應(yīng)用。如果我們觀察到應(yīng)用對于這一功能的濫用行為,我們可以對于何時彈出警報施加更為嚴(yán)格的要求。

查看合約

最后,為了累計所有的投票,我們需要查看合約事件,以及投票內(nèi)容。為了完成這些工作,在我們實(shí)例化“ethervote”后我們需要去運(yùn)行這個函數(shù)一次來查看事件:

上述代碼會從第180萬(這是合約被上傳的時間點(diǎn))高度讀取所有的區(qū)塊,沒讀取一個區(qū)塊時,都會執(zhí)行receivedEvent()函數(shù);并且,每產(chǎn)生一個新區(qū)塊時,這個函數(shù)就會被再次觸發(fā),所以你不需要連續(xù)調(diào)用。那么,這個函數(shù)到底有什么用呢?

從初始solidity合約中,你可以看到LogVote帶有三個參數(shù),proposalHash,Pro和Addr:

所以這個函數(shù)的作用是它會使用函數(shù)web3.eth.getBalance來檢查投票地址當(dāng)下的以太幣余額。所有的余額都會返回以wei為單位的數(shù)字,也就是一個以太幣的1/1000000000000000000,這對于這個特定的應(yīng)用并非非常的有用,所以我們也使用另一個包含的web3函數(shù)來將其轉(zhuǎn)換為任何我們需要的以太幣單位。這里,我們會使用finney,也就是一個以太幣的一千分之一。

接下來,這個函數(shù)將會保存投票者的余額及位置于一個以用戶地址為Key的Map上。所以如果有人投了兩次票,只有他們最后的意見會被保留。

另外我們還能鑒別用戶,并展示他們是否投票。

累積票數(shù)

最后,我們應(yīng)該加入一個獨(dú)立的函數(shù)來計算票數(shù)的總數(shù):

為什么我們會想要通過一個獨(dú)立的函數(shù)來累積票數(shù)呢?因?yàn)槠睌?shù)權(quán)重是建立在每一個賬戶的當(dāng)前余額之上的,我們應(yīng)該對于每一個新區(qū)塊重新計算余額,即使我們并沒有收到新的事件。為了做到這個,你可以增加這個函數(shù),使它每收到一個新區(qū)塊時就會自動執(zhí)行;

最后,直到加到最終的總數(shù)為止。我們之前已經(jīng)在同步模式下使用了eth.getBalance,在此模式下,應(yīng)用會等待前一個操作的結(jié)果再繼續(xù)。此處,因?yàn)槲覀兛梢詫τ诿恳粋€區(qū)塊調(diào)用大量操作,我們將會在異步模式下運(yùn)行它:你可以異步調(diào)用getBalance函數(shù),等到節(jié)點(diǎn)返回后,再進(jìn)行票數(shù)統(tǒng)計。

就像你根據(jù)代碼所作的一樣,應(yīng)用所做的就是在循環(huán)投票地址中的每一個并得到它們的余額,只要它返回結(jié)果,它會將其加到支持或反對陣營中,并計算總和。

額外的好處

一些附加說明:當(dāng)沒有事件時,什么也不會被返回,并且投票也不會被計算,所以你應(yīng)該對依賴于區(qū)塊鏈上事件的所有函數(shù)增加一個超時函數(shù)。

現(xiàn)在你可以隨意地使用所有你現(xiàn)有的網(wǎng)絡(luò)開發(fā)工具來施展你想要的任何魔法。使用數(shù)字來構(gòu)建一個漂亮的3D可視化效果或者關(guān)聯(lián)你最愛的社交媒體來分享最佳問題。

Mist也嘗試提供一些基本的導(dǎo)覽,以及UI方式來簡化你的代碼。如果你想要你的應(yīng)用不包含header并且占據(jù)mist應(yīng)用的所有高度,只要將這個加入到你的標(biāo)簽:

并且如果你想要使用Mist自身來導(dǎo)覽?你的應(yīng)用,你可以使用Mist.menu對象:

以太坊強(qiáng)大的一點(diǎn)是你可以在不需要許可的情況下,擴(kuò)展這項簡單的合約功能:你可以把每個額外的功能放到一個獨(dú)立的合約里,讓每個獨(dú)立合約的功能簡單且可以更輕松的調(diào)試。這也意味著別人可以在他們自己的應(yīng)用中使用你創(chuàng)建的合約并增加新的功能。同時,所有的應(yīng)用使用相同的數(shù)據(jù)和后端。

你可以在Github上(https://github.com/ethereum/s...)在線體驗(yàn)這個應(yīng)用,但是這不是權(quán)威的規(guī)范,只是它眾多可能接口中的一個。同一個應(yīng)用也可能在你的電腦上或一個IPFS網(wǎng)絡(luò)( https://ipfs.io)中作為一個本地html文檔工作,并且在未來它可以使用Swarm技術(shù),在Mist里直接下載應(yīng)用。

關(guān)于如何嘗試的一些建議:

創(chuàng)建當(dāng)前可用發(fā)言列表。任何人都可以通過查看提案文本的sha3來檢查它們,所以你不需要任何許可。

創(chuàng)建線性化的評論,在這里用戶可以回復(fù)評論并通過投票來表達(dá)支持或反對,就像一個基于Reddit的去中心化的投票制。

除了使用以太幣余額,你還可以使用一些其它的以太坊代幣,比如TheDAO或者Digix Gold來給你的問題加權(quán)。因?yàn)樗泻霞s保存的原始位置是發(fā)送方,你可以檢查全部發(fā)送方的余額。或者也許你可以基于信譽(yù)(reputation)、甚至是業(yè)力(karma)或者其它方式來創(chuàng)建你自己的貨幣。

本文為萬云BasS編譯,未經(jīng)允許不可轉(zhuǎn)載

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/51730.html

相關(guān)文章

  • 干貨 | 以太Mist負(fù)責(zé)人教建立務(wù)器應(yīng)用

    摘要:它同時會檢查確保沒有意外發(fā)送的以太幣。當(dāng)任何以太幣被存入智能合約時,匿名函數(shù)會被執(zhí)行,并會自動拒絕接收以太幣。 作者:Alex Van de Sande譯者:王建/蔡佳慧譯者介紹:  王建:萬云平臺區(qū)塊鏈技術(shù)專家,擁有多年應(yīng)用系統(tǒng)架構(gòu)經(jīng)驗(yàn),目前在區(qū)塊鏈落地方面進(jìn)行積極探索  蔡佳慧:萬云平臺實(shí)習(xí)生,區(qū)塊鏈技術(shù)愛好者,英國帝國理工學(xué)院數(shù)學(xué)專業(yè)在讀 這篇教程是由以太坊Mist瀏覽器的負(fù)責(zé)人...

    JessYanCoding 評論0 收藏0
  • 以太連載(六):以太客戶端的選擇與安裝

    摘要:一選擇客戶端為什么有多個以太坊客戶端以太坊客戶端與虛擬機(jī)和運(yùn)行環(huán)境類似,能夠讓你在電腦上運(yùn)行以太坊程序。參考資料文章中的列表對應(yīng)的鏈接可以參考第頁下一篇文章我們將會介紹以太坊連載七客戶端的安裝與定制感謝朝夕團(tuán)隊參與的翻譯和校驗(yàn)。 一、選擇客戶端 為什么有多個以太坊客戶端? 以太坊客戶端與Java虛擬機(jī)和.NET運(yùn)行環(huán)境類似,能夠讓你在電腦上運(yùn)行以太坊程序。以太坊客戶端按照書面說明(黃皮...

    canger 評論0 收藏0
  • 2018以太智能合約編程語言solidity的最佳IDEs

    摘要:使用基于以太坊的智能合約的集成開發(fā)環(huán)境。以太坊教程,主要介紹智能合約與應(yīng)用開發(fā),適合入門。以太坊,主要是介紹使用進(jìn)行智能合約開發(fā)交互,進(jìn)行賬號創(chuàng)建交易轉(zhuǎn)賬代幣開發(fā)以及過濾器和事件等內(nèi)容。 Solidity是一種以智能合約為導(dǎo)向的編程語言。這是一種只有四年的年輕語言,旨在幫助開發(fā)基于以太坊數(shù)字貨幣的智能合約。 理解它官方文檔應(yīng)該是學(xué)習(xí)Solidity的最佳來源:solidity.read...

    darkerXi 評論0 收藏0
  • 以太:Dapp及相關(guān)開發(fā)工具介紹

    摘要:郵件列表以太坊上的開發(fā)者郵件列表停止使用。開發(fā)的移動以太坊瀏覽器開發(fā)階段由支持的瀏覽器內(nèi)。是以太坊的開發(fā)環(huán)境,測試框架和資產(chǎn)管道。審查隨機(jī)數(shù)以太坊虛擬機(jī)是以太坊智能合約的執(zhí)行環(huán)境。 去中心化應(yīng)用去中心化應(yīng)用是可以使用戶和供應(yīng)商之間直接互動的服務(wù)(例如,連接某些市場上的買方和賣方,文件存儲里的持有者和儲存者)。以太坊去中心化應(yīng)用典型地通過HTML/Javascript網(wǎng)絡(luò)應(yīng)用與用戶互動,...

    FleyX 評論0 收藏0
  • 在區(qū)塊鏈上編程:DApp 開發(fā)簡介

    摘要:目前通常指代基于以太坊或者上的智能合約開發(fā)的相關(guān)應(yīng)用。引入以太坊通過的交互流程大致如下總結(jié)隨著區(qū)塊鏈近些年的大紅大紫,被推上了風(fēng)口浪尖,本文從技術(shù)的角度大致介紹了一下所涉及的技術(shù)要點(diǎn)。 當(dāng)你開始探索區(qū)塊鏈開發(fā),需要了解到這些。 showImg(https://segmentfault.com/img/remote/1460000016608233?w=1370&h=389); 一、DA...

    huangjinnan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<