Meteor開發(fā)以太坊Dapp教程

本教程將向你展示如何設(shè)置Meteor應(yīng)用程序以用作Dapp栗柒,并可能回答幾個(gè)關(guān)于為什么應(yīng)該使用Meteor的問題。

常問問題

Meteor不是一個(gè)完整的堆棧框架,它是如何適應(yīng)Dapp開發(fā)的

是的鳍鸵,Meteor是一個(gè)完整的堆棧框架尉间,它的主要改進(jìn)是實(shí)時(shí)Web應(yīng)用程序,但Meteor也是第一個(gè)框架(我知道)击罪,它完全支持了單頁app(SPA)開發(fā)并提供了所有必要的工具哲嘲。

Meteor非常適合的5個(gè)理由:

  • 它純粹用JS編寫,具有SPA所需的所有工具(模板引擎媳禁,模型眠副,動(dòng)態(tài)編譯,綁定等)竣稽。
  • 你將獲得一個(gè)開發(fā)環(huán)境囱怕,它具有實(shí)時(shí)重新加載霍弹,CSS注入和支持許多預(yù)編譯器(LESS,Coffeescript等)即插即用娃弓。
  • 你可以使用meteor-build-client將所有前端代碼作為單個(gè)index.html典格,使用一個(gè)jscss文件加載你的資源。然后台丛,你可以在任何地方托管它或簡(jiǎn)單地運(yùn)行index.html本身或稍后在swarm上分發(fā)它耍缴。
  • 它包含完整的響應(yīng)性,這使得構(gòu)建一致的界面更容易(類似于angular.js $scope或binding)
  • 它有一個(gè)名為Minimongo的優(yōu)秀模型挽霉,它為你提供了一個(gè)類似mongoDB的接口防嗡,用于一個(gè)被動(dòng)的內(nèi)存數(shù)據(jù)庫,它也可以自動(dòng)持久化到localstorageindexedDB

我是否需要在服務(wù)器上托管我的Dapp侠坎?

不蚁趁,使用meteor-build-client,你可以在沒有服務(wù)器的情況下運(yùn)行Dapp的所有靜態(tài)資源实胸,但是如果你使用像ironflow-router這樣的路由器 他嫡,則需要使用hash(index.html#!/mypath)路由而不是干凈的HTML5 pushstate路由。

創(chuàng)建你的Dapp

如果還沒有安裝Meteor:

$ curl https://install.meteor.com/ |  SH 

然后創(chuàng)建一個(gè)app:

$ meteor create myDapp
$ cd myDapp

接下來添加web3包:

$ meteor add ethereum:web3 

我還建議添加以下包:

  • ethereum:dapp-styles:LESS/CSS框架童芹,它為你的dapp提供了一個(gè)很好的Mist-consistent外觀涮瞻。
  • ethereum:tools:這個(gè)包為EthTools對(duì)象提供了一組格式轉(zhuǎn)換函數(shù)和ether的模板助手儡首。
  • ethereum:elements:一組專門為以太坊制作的界面元素盈罐。
  • ethereum:accounts: 為你提供所有當(dāng)前可用的以太坊帳戶的響應(yīng)式EthAccounts集合栈暇,其中余額將自動(dòng)更新刷晋。
  • ethereum:blocks:為你提供最新50個(gè)塊的響應(yīng)式EthBlocks集合鞋喇。要獲得最新的塊步做,請(qǐng)使用EthBlocks.latest(它還將具有最新的默認(rèn)gasPrice
  • frozeman:template-var:為你提供TemplateVar對(duì)象晌杰,允許你設(shè)置特定于模板實(shí)例的反應(yīng)變量铸磅。
  • frozeman:persistent-minimongo2:允許你在本地存儲(chǔ)中自動(dòng)保留minimongo集合缀遍。

啟動(dòng)你的Dapp

游覽Meteors文件夾結(jié)構(gòu)

Meteor不會(huì)強(qiáng)制你擁有特定的文件夾結(jié)構(gòu)慕匠,盡管某些文件夾具有特定含義,并且在綁定/運(yùn)行你的應(yīng)用程序時(shí)將被區(qū)別對(duì)待域醇。

具有特定處理的文件夾

  • client:名為client的文件夾中的文件只會(huì)由應(yīng)用程序的客戶端部分加載台谊,因?yàn)槲覀冋跇?gòu)建一個(gè)Dapp,這就是我們大多數(shù)文件所在的位置譬挚。
  • lib:名為lib文件夾中的文件將在同一文件夾中的其他文件之前加載锅铅。這是你的init文件,庫或以太坊特定文件的理想位置减宣。
  • public:一個(gè)名為public的文件夾包含meteor資源將在你的網(wǎng)絡(luò)服務(wù)器的根目錄上提供(或以后綁定的Dapp)盐须。
  • 還有一些更具體的文件夾,如server漆腌,tests贼邓,packages等阶冈。如果你想了解它們,請(qǐng)查看Meteor

因此塑径,為了構(gòu)建Dapp女坑,我們理想狀況下是在myDapp文件夾中創(chuàng)建以下文件夾結(jié)構(gòu):

- myDapp
   - client
      - lib
      - myDapp.html
      - myDapp.js
      - myDapp.css
   - public

注意社區(qū)還提供了像Nick Dodson這樣的Meteor Dapp Boilerplates:https://github.com/SilentCicero/meteor-dapp-boilerplate

連接你的Dapp

要連接我們的dapp,我們需要在另一個(gè)終端中使用正確的CORS頭開始geth

$ geth --rpc --rpccorsdomain "http://localhost:3000"

我們還需要設(shè)置provider晓勇。理想情況下堂飞,我們?cè)趌ib文件夾中創(chuàng)建一個(gè)名為init.js的文件,并添加以下行:

if(typeof web3 === 'undefined')
    web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));

運(yùn)行你的Dapp

現(xiàn)在我們可以通過簡(jiǎn)單運(yùn)行來運(yùn)行我們的Dapp:

$ meteor 

如果我們轉(zhuǎn)到http://localhost:3000绑咱,我們應(yīng)該看到一個(gè)網(wǎng)站出現(xiàn)绰筛,如果我們打開瀏覽器控制臺(tái),我們可以使用web3對(duì)象來查詢geth節(jié)點(diǎn):

> web3.eth.accounts
['0xfff2b43a7433ddf50bb82227ed519cd6b142d382']

添加Dapp樣式

如果你希望你的Dapp很好地適應(yīng)Mist并且遵循官方的外觀描融,請(qǐng)使用dapp-styles css css/less框架铝噩。

請(qǐng)注意,它們正在大量開發(fā)中窿克,類名稱和元素可能會(huì)發(fā)生變化骏庸。

要添加它,請(qǐng)將以下包添加到Dapp:

$ meteor add less
$ meteor add ethereum:dapp-styles

現(xiàn)在將myDapp.css重命名為myDapp.less并在其中添加以下行:

// libs
@import '{ethereum:dapp-styles}/dapp-styles.less';

現(xiàn)在年叮,你可以使用所有dapp-styles類具被,也可以覆蓋框架的所有變量。你可以在回調(diào)中找到它們只损。通過將它們復(fù)制到myDapp.less文件并設(shè)置不同的值來覆蓋它們一姿。

使用以太坊包

為了讓你的Dapp開發(fā)人員更輕松,我們提供了一些幫助你更快地構(gòu)建Dapp的軟件包跃惫。

如果你添加上面推薦的軟件包叮叹,你應(yīng)該使用以太坊:ethereum:toolsethereum:accountsethereum:blocks爆存。

這3個(gè)包為你提供了EthTools蛉顽,EthAccountsEthblocks對(duì)象,它們?yōu)槟闾峁└袷交绦蚬δ芟冉希瑏碜?code>web3.eth.accounts(具有自動(dòng)更新余額)的帳戶的集合以及最近50個(gè)塊的集合携冤。

大多數(shù)這些功能都是響應(yīng)式的,因此它們應(yīng)該使構(gòu)建界面變得輕而易舉闲勺。

用法示例

如果你看看myDapp.html你會(huì)發(fā)現(xiàn)hello模板噪叙。只需在<template name="hello">..</template>標(biāo)簽之間添加一個(gè)名為{{currentBlock}}helper

現(xiàn)在打開myDapp.js并在counter() {..}之后添加currentBlock helper:

Template.elements.helpers({
    counter() {
      ...
    },
    currentBlock() {
        return EthBlocks.latest.number;
    }
  });

然后通過添加EthBlocks.init()霉翔;初始化EthBlocks EthBlocks.init();在this.counter = new ReactiveVar(0)苞笨;

如果你現(xiàn)在在瀏覽器中檢查Dapp债朵,你應(yīng)該會(huì)看到最新的塊號(hào)子眶,一旦你開采,它將會(huì)增加序芦。

有關(guān)更多示例臭杰,請(qǐng)查看軟件包的readme文件和演示 (源代碼)以獲取更多信息。

Dapp代碼結(jié)構(gòu)

本教程不會(huì)用Meteor構(gòu)建應(yīng)用程序谚中。有關(guān)這方面的信息渴杆,請(qǐng)參閱Meteor的教程優(yōu)秀資源列表 或使用Meteor或Discover Meteor構(gòu)建單頁Web應(yīng)用程序等書籍宪塔。

TODO:

  • 把以太坊相關(guān)的東西放到client/lib/ethereum/somefile.js磁奖。
  • 使用myCollection.observe({added: func, changed: func, removed: func})與ethereum進(jìn)行通信,盡可能地保持ethereum邏輯不在你的應(yīng)用中某筐。這樣你只需要編寫和讀取你的響應(yīng)集合比搭,觀察函數(shù)將處理其余的(例如sendTransactions)
  • 過濾器等會(huì)將日志等添加到你的集合。因此南誊,你可以將所有回調(diào)信息從應(yīng)用邏輯中刪除身诺。

有關(guān)示例,請(qǐng)參閱以太坊錢包抄囚。

綁定你的Dapp

要將Dapp綁定到本地獨(dú)立文件霉赡,請(qǐng)使用meteor-build-client

$ npm install -g meteor-build-client
$ cd myDapp
$ meteor-build-client ../build --path ""

這會(huì)將你的Dapps靜態(tài)文件放入myDapp文件夾上方的build文件夾中。

最后一個(gè)選項(xiàng)--path將使所有文件相對(duì)鏈接幔托,允許你通過單擊build/index.html啟動(dòng)應(yīng)用程序穴亏。

請(qǐng)注意,在file://協(xié)議上運(yùn)行應(yīng)用程序時(shí)柑司,由于Web安全性迫肖,你將無法使用客戶端路由。稍后你將能夠使用客戶端路由蟆湖,因?yàn)閐apps是通過eth://協(xié)議提供的。

將來你可以簡(jiǎn)單地在swarm上傳你的Dapp隅津。

提交你的Dapp

要獲得Dapp的早期流量,你可以將Dapp提交給Dapp Insight伦仍。 這是一個(gè)最受歡迎的Dapp分析工具,它列出了世界上所有正在運(yùn)行的Dapps充蓝。

======================================================================

分享一些以太坊、EOS谓苟、比特幣等區(qū)塊鏈相關(guān)的交互式在線編程實(shí)戰(zhàn)教程:

  • java以太坊開發(fā)教程官脓,主要是針對(duì)java和android程序員進(jìn)行區(qū)塊鏈以太坊開發(fā)的web3j詳解。
  • python以太坊涝焙,主要是針對(duì)python工程師使用web3.py進(jìn)行區(qū)塊鏈以太坊開發(fā)的詳解卑笨。
  • php以太坊,主要是介紹使用php進(jìn)行智能合約開發(fā)交互仑撞,進(jìn)行賬號(hào)創(chuàng)建赤兴、交易、轉(zhuǎn)賬隧哮、代幣開發(fā)以及過濾器和交易等內(nèi)容桶良。
  • 以太坊入門教程,主要介紹智能合約與dapp應(yīng)用開發(fā)近迁,適合入門艺普。
  • 以太坊開發(fā)進(jìn)階教程,主要是介紹使用node.js鉴竭、mongodb歧譬、區(qū)塊鏈、ipfs實(shí)現(xiàn)去中心化電商DApp實(shí)戰(zhàn)搏存,適合進(jìn)階瑰步。
  • C#以太坊,主要講解如何使用C#開發(fā)基于.Net的以太坊應(yīng)用璧眠,包括賬戶管理缩焦、狀態(tài)與交易、智能合約開發(fā)與交互责静、過濾器和交易等袁滥。
  • EOS教程,本課程幫助你快速入門EOS區(qū)塊鏈去中心化應(yīng)用的開發(fā)灾螃,內(nèi)容涵蓋EOS工具鏈题翻、賬戶與錢包、發(fā)行代幣腰鬼、智能合約開發(fā)與部署嵌赠、使用代碼與智能合約交互等核心知識(shí)點(diǎn),最后綜合運(yùn)用各知識(shí)點(diǎn)完成一個(gè)便簽DApp的開發(fā)熄赡。
  • java比特幣開發(fā)教程姜挺,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念彼硫,例如區(qū)塊鏈存儲(chǔ)炊豪、去中心化共識(shí)機(jī)制凌箕、密鑰與腳本、交易與UTXO等词渤,同時(shí)也詳細(xì)講解如何在Java代碼中集成比特幣支持功能陌知,例如創(chuàng)建地址掖肋、管理錢包志笼、構(gòu)造裸交易等纫溃,是Java工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程紊浩。
  • php比特幣開發(fā)教程疗锐,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念口芍,例如區(qū)塊鏈存儲(chǔ)鬓椭、去中心化共識(shí)機(jī)制小染、密鑰與腳本贮折、交易與UTXO等,同時(shí)也詳細(xì)講解如何在Php代碼中集成比特幣支持功能岛都,例如創(chuàng)建地址臼疫、管理錢包扣孟、構(gòu)造裸交易等,是Php工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程拔创。
  • tendermint區(qū)塊鏈開發(fā)詳解富蓄,本課程適合希望使用tendermint進(jìn)行區(qū)塊鏈開發(fā)的工程師立倍,課程內(nèi)容即包括tendermint應(yīng)用開發(fā)模型中的核心概念口注,例如ABCI接口、默克爾樹娇斑、多版本狀態(tài)庫等毫缆,也包括代幣發(fā)行等豐富的實(shí)操代碼悔醋,是go語言工程師快速入門區(qū)塊鏈開發(fā)的最佳選擇兽叮。

匯智網(wǎng)原創(chuàng)翻譯鹦聪,轉(zhuǎn)載請(qǐng)標(biāo)明出處泽本。這里是原文如何使用Meteor開發(fā)以太坊Dapp

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末规丽,一起剝皮案震驚了整個(gè)濱河市赌莺,隨后出現(xiàn)的幾起案子艘狭,更是在濱河造成了極大的恐慌,老刑警劉巖遵倦,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梧躺,死亡現(xiàn)場(chǎng)離奇詭異掠哥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門目代,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榛了,“玉大人煞抬,你說我怎么就攤上這事革答。” “怎么了途茫?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)错沃。 經(jīng)常有香客問我,道長(zhǎng)玉掸,這世上最難降的妖魔是什么排截? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任断傲,我火速辦了婚禮认罩,結(jié)果婚禮上垦垂,老公的妹妹穿的比我還像新娘。我一直安慰自己间校,他們只是感情好憔足,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著州袒,像睡著了一般他匪。 火紅的嫁衣襯著肌膚如雪夸研。 梳的紋絲不亂的頭發(fā)上陈惰,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音井辆,去河邊找鬼杯缺。 笑死萍肆,一個(gè)胖子當(dāng)著我的面吹牛塘揣,可吹牛的內(nèi)容都是我干的亲铡。 我是一名探鬼主播才写,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼奖蔓!你這毒婦竟也來了赞草?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤吆鹤,失蹤者是張志新(化名)和其女友劉穎厨疙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疑务,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轰异,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了暑始。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡廊镜,死狀恐怖虫溜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情歧杏,我是刑警寧澤凯力,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布慷暂,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏讹蘑。R本人自食惡果不足惜翠拣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望变泄。 院中可真熱鬧驳癌,春花似錦典予、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雕欺。三九已至谅海,卻和暖如春侥袜,著一層夾襖步出監(jiān)牢的瞬間九杂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工屋休, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盯蝴,地道東北人闽烙。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓很魂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親法挨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子荐糜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 目標(biāo)讀者: 專業(yè)的程序員; 想深入了解以太坊/區(qū)塊鏈及其生態(tài)的讀者舍败; 如果你已經(jīng)有一定的以太坊技術(shù)基礎(chǔ)灵嫌,只想研究一...
    編程狂魔閱讀 1,651評(píng)論 0 11
  • 元旦這個(gè)“陽歷年” 元旦葛作,元寿羞,謂“首”;旦赂蠢,謂“日”绪穆;“元旦”意即“首日”】湍辏“元旦”一詞最早出現(xiàn)于《晉書》霞幅,但其含...
    王福彬閱讀 232評(píng)論 0 0
  • 從小漠吻,我就崇拜哥哥量瓜,因?yàn)樗矣诜纯拱职值膶V疲驗(yàn)樗袀€(gè)性有主見途乃,當(dāng)然绍傲,他的缺點(diǎn)也很明顯,素質(zhì)不是很高,...
    愛自滿溢閱讀 368評(píng)論 0 0