以太坊構建DApps系列教程(一):應用程式規則和區塊鏈設定

tualala發表於2018-12-21

這將是一個如何使用以太坊區塊鏈構建去中心化應用程式DApps的系列教程。

第一篇教程重點介紹應用程式的規則和功能以及設定私有區塊鏈,展示在使用或不使用DAO和應用程式的情況下如何構建自己自定義的以太坊代幣。

我們要構建3件事:

  • 自定義代幣。
  • 使用代幣作為投票的DAO。
  • 用於與智慧合約互動的原型Web UI。

按照本教程中的說明操作後,你將能夠構建自己的自定義以太坊代幣,無論是否包含DAO和應用程式。

我們將要構建什麼?

我們正在建設的專案名為The Neverending Story(TNS)。完整的專案可以在storydao.bitfalls.com找到。它的完整程式碼在GitHub上。

The Nendingnding Story是一個帶有輸入欄位(可以是文字和影像)的Web應用程式,其中安裝了MetaMask的使用者可以根據特定條件傳送一段文字或影像。(影像每50個段落只出現一次,並且只能是一個URL。)

完整的故事呈現在輸入欄位旁邊。故事中存在的條目越多,提交條目的成本就越高。提交條目需要支付費用,列入白名單的並且至少有一個TNS代幣的人可以使用的這個操作。

操作型別:

  • 提交條目:要求發件人至少擁有1個TNS代幣並位於白名單中(見下文)。成本0.0001 ether * number of entries in current chapter。 (參見下面的“章節”部分)。這可以是每50個文字條目只有一次影像,並且只能是一個URL。否則就是文字。沒有程式碼,只有純文字。 在任何一種情況下,文字欄位大小限制為256個字元。
  • 轉讓所有權(僅限所有者):可以將所有權轉移到新地址。
  • 減少費用(僅限所有者):所有者可以在不要求投票的情況下提交較低的費用(參見下面的費用“Free”部分)。
  • 購買TNS代幣:將以太傳送到DAO以獲得自動發回一定比例數量的TNS代幣。如果DAO中沒有足夠的TNS代幣,則必須從交易所獲得它們。
  • 檢查代幣餘額:一個只讀操作,用於檢查DAO中有多少個TNS代幣。
  • 白名單:當以太傳送到DAO的地址時,會自動呼叫此函式。它將發件人記錄在白名單陣列中以供將來參考,獲得大量TNS的人不能將它們分發到各種帳戶。
  • 結束章節:觸發​​分配以太分紅和重置輸入費用的章節結束流程。
  • 撤回:當利益相關者想要撤回分紅時呼叫。
  • 所有者提款(僅限所有者):由所有者呼叫以便提取費用收入。

利益相關者(TNS代幣持有人)將能夠對提案進行投票,任何達到“Yes”比“No”更多的投票提案都將獲得批准。投票數無關緊要;這個比例很重要。根據提案的型別,提案需要在特定時間段內開放投票。

提案型別:

  • 刪除條目:通過投票確認後,目標條目將被刪除。投票時間:48小時。
  • 緊急刪除條目(僅限所有者):只能由所有者觸發。通過投票確認後,目標條目將被刪除。投票時間:12小時。
  • 緊急刪除影像(僅限所有者):僅適用於影像條目。只能由所有者觸發。通過投票確認後,目標條目將被刪除。投票時間:4小時。

稍後我們可以使用相同的方法新增其他型別的提案。

所有提案都需要在使用者介面中明確列出,以便人們知道他們需要投票。選民只需要一個TNS代幣即可投票,但他們擁有的代幣越多,他們的投票就越值得。

重要提示:使用者的代幣在投票期間被鎖定。這可以防止TNS大鱷持有者壓倒每一個活躍的投票。選民必須在對他們重要的選票上分配投票權。

Chapters章節

在1000個條目或三個星期的時間之後,任何使用者都可以呼叫章節的結尾。然後,DAO將向所有TNS持有者分發收集的以太幣,與其餘額成比例。持有人不需要在DAO中列入白名單以獲得以太分紅。他們只需要在分發時保留TNS代幣。

分發是一種拉動機制:持有者需要呼叫DAO的撤銷功能來獲得他們的以太。它不會被自動呼叫。退出視窗是72小時。50%的無人認領的gas歸於擁有者,50%進入下一章的分紅。

free費用

每個提交的參賽費的1%將轉給當前所有者。其餘部分放入池中,並在每章結束後分發給所有TNS持有者,與其TNS持有量成比例。

所有者的費用被分為單獨的餘額,他們可以隨意定期退出。

要進入白名單,使用者必須向DAO傳送0.01以太。所有未來的代幣購買價格都要低得多。0.01以太入場費是為了防止Sybil攻擊。如果使用者在第一次傳送時傳送的數量超過0.01,則0.01將轉向白名單,剩餘部分將用於計算使用者獲得的TNS數量。所有代幣將一次性發回給使用者。

簡而言之,將這個專案視為眾包選擇你自己的冒險故事,包括人群策劃和社群審查。一個故事——DAO(story-DAO)。

bootstrapping:PoA私有區塊鏈

我們將使用兩個載入程式:第一個程式將專注於在本地執行我們自己真正的以太坊區塊鏈。它將使用PoA作為共識機制,並且像任何真正的以太坊testnet一樣起作用 。

  • 下載並安裝Virtualbox
  • 下載並安裝Vagrant。如果你不瞭解虛擬機器是什麼,請參閱此帖子
  • 從這裡下載Geth。請務必在下載頁面向下滾動並下載“Geth&Tools”,而不僅僅是“Geth”。如果你使用的是macOS,還可以使用Homebrew並使用brew install ethereum進行安裝。
  • Mist可以在這裡下載。一定要下載“Mist”而不是“Ethereum Wallet”。Mist是以太坊“瀏覽器”,它可以開啟各種DApps。以太坊錢包“Ethereum Wallet”可以幹同樣的事,但鎖定在錢包模式,所以你不能用它開啟其他應用程式。這是為了防止非技術使用者訪問到惡意DApp。

如果你很好奇,請在這裡瞭解更多關於Mist和Geth的資訊 。

我們需要VirtualBoxVagrant,因為我們將使用這種方法啟動我們的節點並執行兩臺虛擬機器,模擬執行以太坊節點的兩臺計算機。

接下來,按照此帖子中的說明設定PoA私有區塊鏈。

你最終將得到兩個執行節點。每個人都將挖掘到自己的地址。記下這些地址。我的是:

Node 1:0x4b61dc81fe382068e459444e8beed1aab9940e3b
Node 2:0x97e01610f1c4f4367c326ed1e9c41896b4378458

bootstrapping:Ganache CLI

我們可以使用的第二個的載入程式,這對於測試我們的合約特別有用,它是Ganache CLI,以前稱為Testrpc

Ganache是一個基於JavaScript的本地區塊鏈模擬。每次我們執行測試或重新啟動應用程式時,它都會從頭開始重新執行區塊鏈。這有助於我們快速測試邊緣情況,但不適合長期合約的長期測試。

首先,使用npm install -g ganache-cli安裝Ganache

然後,只需執行ganache-cli就可以了。你應該看到與此類似的輸出:

$ ganache-cli
Ganache CLI v6.1.0 (ganache-core: 2.1.0)
(node:40584) ExperimentalWarning: The fs.promises API is experimental

Available Accounts
==================
(0) 0xa0b7139a36ecda5ffda66b9cf97cb9de36e63f2f
(1) 0x1f5546797a0ff7efe42ecafaeebd5c932f1a0143
(2) 0x0eacbad38a642db2204574ad01b2b51c82ff7080
(3) 0x77f40a8add69b0e0806c0c506208e5783b89076d
(4) 0x1ea41547984ecb949c2b2df311bffe0fdeae4632
(5) 0xa1ad154fd5fd11ebe5410c992e5e97b461c516a2
(6) 0x34da52fd90c015a41bcc383ba3d804f7cebbc84e
(7) 0xddd5232788c1f1192d6ac5e82e74ca80945e119e
(8) 0x7ebc838124a676eac57f9b6275cd29b1a1c63d4d
(9) 0x6feed7913319ffb1b01f767960dd843ea7f96181

Private Keys
==================
(0) 62727ad35a288eb34f268cffb1ce620ef3ee80910138aed0e81f24d912fd8a49
(1) a6c76b382c655dcc66dd92428e3e0a0f14b7458162ad8e5cbbbcc64d3362d28c
(2) eef05f81fd995329c80d8875d5cb62b81f8f28c39951665b4b15688dc48b4c47
(3) 5ae06fc34da5d47a64a814ee088f7c6f0d1cae3c63d7ad2d6b71b8128bce1764
(4) 8cc43f28054f90243dea496263bd9a45f33db44ea3956ab8d0e8704e15d0787e
(5) dcf37436237105ea2f5b1be608b6aa1fe6fb7ca80b8b23ce01ff96930a2a3045
(6) f896b6f0ee11ea272c1567ec1950f7ff610df79193cbb7b668ae0ea11f6ec825
(7) 877b5868dca9a2f5c7d9546647171c9825f1b02922442f18dd4e90d108b9e54d
(8) 7f1f3515d71d348a78ae85a755e02df49be4e0b374447b822abe5a6481fe0c58
(9) 20d50b28c8b051406edc6aa61becc3443e430d7d68925a108958f8abecd55ed3

HD Wallet
==================
Mnemonic:      soda tower talk dynamic swim tattoo edit cook pair bid glance beauty
Base HD Path:  m/44`/60`/0`/0/{account_index}

Listening on localhost:8545

Ganache在這裡做的是啟動私有區塊鏈,幾乎沒有挖掘時間,也沒有節點。它會在進入時立即執行交易。它還會生成10個預載入了大量虛擬以太的地址,併產生出私鑰,以便將它們匯入各種工具,如MetaMask,MyEtherWallet或之前下載的Mist。

我們將根據我們的需要使用此方法和上述方法的混合,因此請確保同時設定這兩種方法。

注意:最好也可以使用Ganache UI工具,使用可視介面來管理Ganache區塊鏈。

結論

使用本指南通過MetaMask,MyEtherWallet或之前下載的Mist等工具連線到私有區塊鏈(任一版本)。兩個bootstrapping選項在執行時預設執行在localhost:8545。因此連線它們的過程是相同的。

現在我們的應用程式的基本規則和功能已經佈局,我們的私有區塊鏈已經建立,我們可以連線到它,接下來我們將重點放在工具,包和依賴項上。

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

分享一些以太坊、EOS、比特幣等區塊鏈相關的互動式線上程式設計實戰教程:

  • java以太坊開發教程,主要是針對java和android程式設計師進行區塊鏈以太坊開發的web3j詳解。
  • python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
  • php以太坊,主要是介紹使用php進行智慧合約開發互動,進行賬號建立、交易、轉賬、代幣開發以及過濾器和交易等內容。
  • 以太坊入門教程,主要介紹智慧合約與dapp應用開發,適合入門。
  • 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
  • C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括賬戶管理、狀態與交易、智慧合約開發與互動、過濾器和交易等。
  • EOS教程,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智慧合約開發與部署、使用程式碼與智慧合約互動等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
  • java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Java程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
  • php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈儲存、去中心化共識機制、金鑰與指令碼、交易與UTXO等,同時也詳細講解如何在Php程式碼中整合比特幣支援功能,例如建立地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
  • tendermint區塊鏈開發詳解,本課程適合希望使用tendermint進行區塊鏈開發的工程師,課程內容即包括tendermint應用開發模型中的核心概念,例如ABCI介面、默克爾樹、多版本狀態庫等,也包括代幣發行等豐富的實操程式碼,是go語言工程師快速入門區塊鏈開發的最佳選擇。

匯智網原創翻譯,轉載請標明出處。這裡是原文以太坊構建DApps系列教程(一):應用程式規則和區塊鏈設定

相關文章