如何使用Meteor開發以太坊Dapp

Tybyq發表於2018-12-04

常問問題

Meteor不是一個完整的堆疊框架,它是如何適應Ðapp開發的

是的,Meteor是一個完整的堆疊框架,它的主要改進是實時Web應用程式,但Meteor也是第一個框架(我知道),它完全支援了單頁app(SPA)開發並提供了所有必要的工具。

Meteor非常適合的5個理由:

  • 它純粹用JS編寫,具有SPA所需的所有工具(模板引擎,模型,動態編譯,繫結等)。

  • 你將獲得一個開發環境,它具有實時重新載入,CSS注入和支援許多預編譯器(LESS,Coffeescript等)即插即用。

  • 你可以使用 meteor-build-client 將所有前端程式碼作為單個 index.html ,使用一個 js css 檔案載入你的資源。然後,你可以在任何地方託管它或簡單地執行 index.html 本身或稍後在 swarm 上分發它。

  • 它包含完整的響應性,這使得構建一致的介面更容易(類似於angular.js  $scope 或binding)

  • 它有一個名為Minimongo的優秀模型,它為你提供了一個類似mongoDB的介面,用於一個被動的記憶體資料庫,它也可以自動持久化到 localstorage indexedDB

我是否需要在伺服器上託管我的Ðapp?

不,使用 ,你可以在沒有伺服器的情況下執行Ðapp的所有靜態資源,但是如果你使用像 iron flow-router 這樣的路由器 ,則需要使用hash( index.html#!/mypath )路由而不是乾淨的HTML5 pushstate路由。

建立你的Ðapp

如果還沒有安裝Meteor:

$ curl |  SH

然後建立一個app:

$ meteor create myDapp$ cd myDapp

接下來新增web3包:

$ meteor add ethereum:web3

我還建議新增以下包:

  • :LESS/CSS框架,它為你的dapp提供了一個很好的Mist-consistent外觀。

  • :這個包為 EthTools 物件提供了一組格式轉換函式和ether的模板助手。

  • :一組專門為以太坊製作的介面元素。

  • : 為你提供所有當前可用的以太坊帳戶的響應式 EthAccounts 集合,其中餘額將自動更新。

  • :為你提供最新50個塊的響應式 EthBlocks 集合。要獲得最新的塊,請使用 EthBlocks.latest (它還將具有最新的預設 gasPrice

  • :為你提供 TemplateVar 物件,允許你設定特定於模板例項的反應變數。

  • :允許你在本地儲存中自動保留 minimongo 集合。

啟動你的Ðapp

遊覽Meteors資料夾結構

Meteor不會強制你擁有特定的資料夾結構,儘管某些資料夾具有特定含義,並且在繫結/執行你的應用程式時將被區別對待。

具有特定處理的資料夾

  • client:名為 client 的資料夾中的檔案只會由應用程式的客戶端部分載入,因為我們正在構建一個Ðapp,這就是我們大多數檔案所在的位置。

  • lib:名為 lib 資料夾中的檔案將在同一資料夾中的其他檔案之前載入。這是你的init檔案,庫或以太坊特定檔案的理想位置。

  • public:一個名為 public 的資料夾包含meteor資源將在你的網路伺服器的根目錄上提供(或以後繫結的Ðapp)。

  • 還有一些更具體的資料夾,如 server tests packages 等。如果你想了解它們,請檢視

因此,為了構建Ðapp,我們理想狀況下是在myDapp資料夾中建立以下資料夾結構:

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

注意社群還提供了像Nick Dodson這樣的Meteor Ðapp Boilerplates:

連線你的Ðapp

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

$ geth --rpc --rpccorsdomain "

我們還需要設定provider。理想情況下,我們在lib資料夾中建立一個名為 init.js 的檔案,並新增以下行:

if(typeof web3 === 'undefined')
    web3 = new Web3(new Web3.providers.HttpProvider('));

執行你的Ðapp

現在我們可以透過簡單執行來執行我們的Ðapp:

$ meteor

如果我們轉到 ,我們應該看到一個網站出現,如果我們開啟瀏覽器控制檯,我們可以使用web3物件來查詢geth節點:

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

新增Ðapp樣式

如果你希望你的Ðapp很好地適應 Mist 並且遵循官方的外觀,請使用 。

請注意,它們正在大量開發中,類名稱和元素可能會發生變化。

要新增它,請將以下包新增到Ðapp:

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

現在將 myDapp.css 重新命名為 myDapp.less 並在其中新增以下行:

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

現在,你可以使用所有 dapp-styles 類,也可以覆蓋框架的所有變數。你可以在回撥中找到它們。透過將它們複製到 myDapp.less 檔案並設定不同的值來覆蓋它們。

使用以太坊包

為了讓你的Ðapp開發人員更輕鬆,我們提供了一些幫助你更快地構建Ðapp的軟體包。

如果你新增上面推薦的軟體包,你應該使用以太坊: ethereum:tools ethereum:accounts ethereum:blocks

這3個包為你提供了 EthTools EthAccounts Ethblocks 物件,它們為你提供格式化程式功能,包含來自 web3.eth.accounts (具有自動更新餘額)的帳戶的集合以及最近50個塊的集合。

大多數這些功能都是響應式的,因此它們應該使構建介面變得輕而易舉。

用法示例

如果你看看 myDapp.html 你會發現 hello 模板。只需在 <template name="hello">..</template> 標籤之間新增一個名為 {{currentBlock}} helper

現在開啟 myDapp.js 並在 counter() {..} 之後新增 currentBlock  helper:

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

然後透過新增 EthBlocks.init() ;初始化 EthBlocks EthBlocks.init() ;在 this.counter = new ReactiveVar(0)

如果你現在在瀏覽器中檢查Ðapp,你應該會看到最新的塊號,一旦你開採,它將會增加。

有關更多示例,請檢視軟體包的readme檔案和   以獲取更多資訊。

Ðapp程式碼結構

本教程不會用Meteor構建應用程式。有關這方面的資訊,請參閱 ,  或使用Meteor或Discover Meteor構建單頁Web應用程式等書籍。

TODO:

  • 把以太坊相關的東西放到 client/lib/ethereum/somefile.js

  • 使用 myCollection.observe({added: func, changed: func, removed: func}) 與ethereum進行通訊,儘可能地保持ethereum邏輯不在你的應用中。這樣你只需要編寫和讀取你的響應集合,觀察函式將處理其餘的(例如sendTransactions)

  • 過濾器等會將日誌等新增到你的集合。因此,你可以將所有回撥資訊從應用邏輯中刪除。

有關示例,請參閱 。

繫結你的Ðapp

要將Ðapp繫結到本地獨立檔案,請使用 meteor-build-client

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

這會將你的Ðapps靜態檔案放入 myDapp 資料夾上方的build資料夾中。

最後一個選項 --path 將使所有檔案相對連結,允許你透過單擊 build/index.html 啟動應用程式。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31557424/viewspace-2284095/,如需轉載,請註明出處,否則將追究法律責任。

相關文章