以太坊構(gòu)建DApps系列教程(一):應(yīng)用程序規(guī)則和區(qū)塊鏈設(shè)置

這將是一個(gè)如何使用以太坊區(qū)塊鏈構(gòu)建去中心化應(yīng)用程序DApps的系列教程形导。

第一篇教程重點(diǎn)介紹應(yīng)用程序的規(guī)則和功能以及設(shè)置私有區(qū)塊鏈百匆,展示在使用或不使用DAO和應(yīng)用程序的情況下如何構(gòu)建自己自定義的以太坊代幣砌些。

我們要構(gòu)建3件事:

  • 自定義代幣。
  • 使用代幣作為投票的DAO加匈。
  • 用于與智能合約交互的原型Web UI存璃。

按照本教程中的說明操作后,你將能夠構(gòu)建自己的自定義以太坊代幣雕拼,無論是否包含DAO和應(yīng)用程序纵东。

我們將要構(gòu)建什么?

我們正在建設(shè)的項(xiàng)目名為The Neverending Story(TNS)啥寇。完整的項(xiàng)目可以在storydao.bitfalls.com找到偎球。它的完整代碼在GitHub上洒扎。

The Nendingnding Story是一個(gè)帶有輸入字段(可以是文本和圖像)的Web應(yīng)用程序,其中安裝了MetaMask的用戶可以根據(jù)特定條件發(fā)送一段文本或圖像衰絮。(圖像每50個(gè)段落只出現(xiàn)一次袍冷,并且只能是一個(gè)URL。)

完整的故事呈現(xiàn)在輸入字段旁邊猫牡。故事中存在的條目越多胡诗,提交條目的成本就越高。提交條目需要支付費(fèi)用镊掖,列入白名單的并且至少有一個(gè)TNS代幣的人可以使用的這個(gè)操作乃戈。

操作類型:

  • 提交條目:要求發(fā)件人至少擁有1個(gè)TNS代幣并位于白名單中(見下文)褂痰。成本0.0001 ether * number of entries in current chapter亩进。 (參見下面的“章節(jié)”部分)。這可以是每50個(gè)文本條目只有一次圖像缩歪,并且只能是一個(gè)URL归薛。否則就是文字。沒有代碼匪蝙,只有純文本主籍。 在任何一種情況下,文本字段大小限制為256個(gè)字符逛球。
  • 轉(zhuǎn)讓所有權(quán)(僅限所有者):可以將所有權(quán)轉(zhuǎn)移到新地址千元。
  • 減少費(fèi)用(僅限所有者):所有者可以在不要求投票的情況下提交較低的費(fèi)用(參見下面的費(fèi)用“Free”部分)。
  • 購買TNS代幣:將以太發(fā)送到DAO以獲得自動(dòng)發(fā)回一定比例數(shù)量的TNS代幣颤绕。如果DAO中沒有足夠的TNS代幣喇完,則必須從交易所獲得它們伴找。
  • 檢查代幣余額:一個(gè)只讀操作,用于檢查DAO中有多少個(gè)TNS代幣。
  • 白名單:當(dāng)以太發(fā)送到DAO的地址時(shí)复局,會(huì)自動(dòng)調(diào)用此函數(shù)。它將發(fā)件人記錄在白名單數(shù)組中以供將來參考虚茶,獲得大量TNS的人不能將它們分發(fā)到各種帳戶捅暴。
  • 結(jié)束章節(jié):觸發(fā)??分配以太分紅和重置輸入費(fèi)用的章節(jié)結(jié)束流程。
  • 撤回:當(dāng)利益相關(guān)者想要撤回分紅時(shí)調(diào)用帚称。
  • 所有者提款(僅限所有者):由所有者調(diào)用以便提取費(fèi)用收入官研。

利益相關(guān)者(TNS代幣持有人)將能夠?qū)μ岚高M(jìn)行投票,任何達(dá)到“Yes”比“No”更多的投票提案都將獲得批準(zhǔn)闯睹。投票數(shù)無關(guān)緊要戏羽;這個(gè)比例很重要。根據(jù)提案的類型瞻坝,提案需要在特定時(shí)間段內(nèi)開放投票蛛壳。

提案類型:

  • 刪除條目:通過投票確認(rèn)后杏瞻,目標(biāo)條目將被刪除。投票時(shí)間:48小時(shí)衙荐。
  • 緊急刪除條目(僅限所有者):只能由所有者觸發(fā)捞挥。通過投票確認(rèn)后,目標(biāo)條目將被刪除忧吟。投票時(shí)間:12小時(shí)砌函。
  • 緊急刪除圖像(僅限所有者):僅適用于圖像條目。只能由所有者觸發(fā)溜族。通過投票確認(rèn)后讹俊,目標(biāo)條目將被刪除。投票時(shí)間:4小時(shí)煌抒。

稍后我們可以使用相同的方法添加其他類型的提案仍劈。

所有提案都需要在用戶界面中明確列出,以便人們知道他們需要投票寡壮。選民只需要一個(gè)TNS代幣即可投票贩疙,但他們擁有的代幣越多,他們的投票就越值得况既。

重要提示:用戶的代幣在投票期間被鎖定这溅。這可以防止TNS大鱷持有者壓倒每一個(gè)活躍的投票。選民必須在對(duì)他們重要的選票上分配投票權(quán)棒仍。

Chapters章節(jié)

在1000個(gè)條目或三個(gè)星期的時(shí)間之后悲靴,任何用戶都可以調(diào)用章節(jié)的結(jié)尾。然后莫其,DAO將向所有TNS持有者分發(fā)收集的以太幣癞尚,與其余額成比例。持有人不需要在DAO中列入白名單以獲得以太分紅榜配。他們只需要在分發(fā)時(shí)保留TNS代幣否纬。

分發(fā)是一種拉動(dòng)機(jī)制:持有者需要調(diào)用DAO的撤銷功能來獲得他們的以太。它不會(huì)被自動(dòng)調(diào)用蛋褥。退出窗口是72小時(shí)临燃。50%的無人認(rèn)領(lǐng)的gas歸于擁有者,50%進(jìn)入下一章的分紅烙心。

free費(fèi)用

每個(gè)提交的參賽費(fèi)的1%將轉(zhuǎn)給當(dāng)前所有者膜廊。其余部分放入池中,并在每章結(jié)束后分發(fā)給所有TNS持有者淫茵,與其TNS持有量成比例爪瓜。

所有者的費(fèi)用被分為單獨(dú)的余額,他們可以隨意定期退出匙瘪。

要進(jìn)入白名單铆铆,用戶必須向DAO發(fā)送0.01以太蝶缀。所有未來的代幣購買價(jià)格都要低得多。0.01以太入場(chǎng)費(fèi)是為了防止Sybil攻擊薄货。如果用戶在第一次發(fā)送時(shí)發(fā)送的數(shù)量超過0.01翁都,則0.01將轉(zhuǎn)向白名單,剩余部分將用于計(jì)算用戶獲得的TNS數(shù)量谅猾。所有代幣將一次性發(fā)回給用戶柄慰。

簡(jiǎn)而言之,將這個(gè)項(xiàng)目視為眾包選擇你自己的冒險(xiǎn)故事税娜,包括人群策劃和社區(qū)審查坐搔。一個(gè)故事——DAO(story-DAO)。

bootstrapping:PoA私有區(qū)塊鏈

我們將使用兩個(gè)引導(dǎo)程序:第一個(gè)程序?qū)W⒂谠诒镜剡\(yùn)行我們自己真正的以太坊區(qū)塊鏈敬矩。它將使用PoA作為共識(shí)機(jī)制概行,并且像任何真正的以太坊testnet一樣起作用 。

  • 下載并安裝Virtualbox谤绳。
  • 下載并安裝Vagrant占锯。如果你不了解虛擬機(jī)是什么,請(qǐng)參閱此帖子缩筛。
  • 從這里下載Geth。請(qǐng)務(wù)必在下載頁面向下滾動(dòng)并下載“Geth&Tools”堡称,而不僅僅是“Geth”瞎抛。如果你使用的是macOS,還可以使用Homebrew并使用brew install ethereum進(jìn)行安裝却紧。
  • Mist可以在這里下載桐臊。一定要下載“Mist”而不是“Ethereum Wallet”。Mist是以太坊“瀏覽器”晓殊,它可以打開各種DApps断凶。以太坊錢包“Ethereum Wallet”可以干同樣的事,但鎖定在錢包模式巫俺,所以你不能用它打開其他應(yīng)用程序认烁。這是為了防止非技術(shù)用戶訪問到惡意DApp。

如果你很好奇介汹,請(qǐng)?jiān)?a target="_blank" rel="nofollow">這里了解更多關(guān)于Mist和Geth的信息 却嗡。

我們需要VirtualBoxVagrant,因?yàn)槲覀儗⑹褂眠@種方法啟動(dòng)我們的節(jié)點(diǎn)并運(yùn)行兩臺(tái)虛擬機(jī)嘹承,模擬運(yùn)行以太坊節(jié)點(diǎn)的兩臺(tái)計(jì)算機(jī)窗价。

接下來,按照此帖子中的說明設(shè)置PoA私有區(qū)塊鏈叹卷。

你最終將得到兩個(gè)運(yùn)行節(jié)點(diǎn)撼港。每個(gè)人都將挖掘到自己的地址坪它。記下這些地址。我的是:

Node 1:0x4b61dc81fe382068e459444e8beed1aab9940e3b
Node 2:0x97e01610f1c4f4367c326ed1e9c41896b4378458

bootstrapping:Ganache CLI

我們可以使用的第二個(gè)的引導(dǎo)程序帝牡,這對(duì)于測(cè)試我們的合約特別有用哟楷,它是Ganache CLI,以前稱為Testrpc否灾。

Ganache是一個(gè)基于JavaScript的本地區(qū)塊鏈模擬卖擅。每次我們運(yùn)行測(cè)試或重新啟動(dòng)應(yīng)用程序時(shí),它都會(huì)從頭開始重新運(yùn)行區(qū)塊鏈墨技。這有助于我們快速測(cè)試邊緣情況惩阶,但不適合長(zhǎng)期合約的長(zhǎng)期測(cè)試。

首先扣汪,使用npm install -g ganache-cli安裝Ganache断楷。

然后,只需運(yùn)行g(shù)anache-cli就可以了崭别。你應(yīng)該看到與此類似的輸出:

$ 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在這里做的是啟動(dòng)私有區(qū)塊鏈冬筒,幾乎沒有挖掘時(shí)間,也沒有節(jié)點(diǎn)茅主。它會(huì)在進(jìn)入時(shí)立即執(zhí)行交易舞痰。它還會(huì)生成10個(gè)預(yù)加載了大量虛擬以太的地址,并產(chǎn)生出私鑰诀姚,以便將它們導(dǎo)入各種工具响牛,如MetaMask,MyEtherWallet或之前下載的Mist赫段。

我們將根據(jù)我們的需要使用此方法和上述方法的混合呀打,因此請(qǐng)確保同時(shí)設(shè)置這兩種方法。

注意:最好也可以使用Ganache UI工具糯笙,使用可視界面來管理Ganache區(qū)塊鏈贬丛。

結(jié)論

使用本指南通過MetaMask,MyEtherWallet或之前下載的Mist等工具連接到私有區(qū)塊鏈(任一版本)给涕。兩個(gè)bootstrapping選項(xiàng)在運(yùn)行時(shí)默認(rèn)運(yùn)行在localhost:8545豺憔。因此連接它們的過程是相同的。

現(xiàn)在我們的應(yīng)用程序的基本規(guī)則和功能已經(jīng)布局稠炬,我們的私有區(qū)塊鏈已經(jīng)建立焕阿,我們可以連接到它,接下來我們將重點(diǎn)放在工具首启,包和依賴項(xiàng)上暮屡。

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

分享一些以太坊、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)明出處葵陵。這里是原文以太坊構(gòu)建DApps系列教程(一):應(yīng)用程序規(guī)則和區(qū)塊鏈設(shè)置

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末液荸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子脱篙,更是在濱河造成了極大的恐慌娇钱,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绊困,死亡現(xiàn)場(chǎng)離奇詭異文搂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)秤朗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門煤蹭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事疯兼∪欢簦” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵吧彪,是天一觀的道長(zhǎng)待侵。 經(jīng)常有香客問我,道長(zhǎng)姨裸,這世上最難降的妖魔是什么秧倾? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮傀缩,結(jié)果婚禮上那先,老公的妹妹穿的比我還像新娘。我一直安慰自己赡艰,他們只是感情好售淡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著慷垮,像睡著了一般揖闸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上料身,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天汤纸,我揣著相機(jī)與錄音,去河邊找鬼芹血。 笑死贮泞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的幔烛。 我是一名探鬼主播啃擦,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼饿悬!你這毒婦竟也來了议惰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤乡恕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后俯萎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體傲宜,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年夫啊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了函卒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡撇眯,死狀恐怖报嵌,靈堂內(nèi)的尸體忽然破棺而出虱咧,到底是詐尸還是另有隱情,我是刑警寧澤锚国,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布腕巡,位于F島的核電站,受9級(jí)特大地震影響血筑,放射性物質(zhì)發(fā)生泄漏绘沉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一豺总、第九天 我趴在偏房一處隱蔽的房頂上張望车伞。 院中可真熱鬧,春花似錦喻喳、人聲如沸另玖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谦去。三九已至,卻和暖如春绑榴,著一層夾襖步出監(jiān)牢的瞬間哪轿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工翔怎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窃诉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓赤套,卻偏偏與公主長(zhǎng)得像飘痛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子容握,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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