1. 程式人生 > >這30個以太坊開發示例,讓你成為80萬都挖不走的區塊鏈人才!

這30個以太坊開發示例,讓你成為80萬都挖不走的區塊鏈人才!

image

2018年已過了大半,幣圈跌跌蕩蕩,而鏈圈的人在等待鳳凰涅槃,熊市專心做技術,牛市才能一展身手、衝破雲霄!

本文主要告訴你,如何成為一名優秀的以太坊開發者!

如果你是以太坊開發者中的“老司機”,請直接看最後一部分:30個為你量身定做的挑戰示例!

如果你是以太坊初學者,請認真讀完,相信你終會受益匪淺。

圖較多,不想看圖,文末有程式碼!

我曾經買過加密貨幣,曾試圖使用一些醜陋礦機挖礦,看過一些稀稀拉拉的Solidity教程。但不得不承認,在當時,我更偏愛前者,我切身體會到了加密貨幣的狂熱,急切需要一種平衡,急切停止這種狂熱行為,我最終選擇了離開,大概四五個月的時間吧。

是的,我又回來了,這次我選擇了後者,要做一名區塊鏈開發者!選擇了以太坊,選擇了Solidity。

之前看過的教程不再是最新的,課程、文章、部落格數不勝數,但是仍然很難找到正確的學習方式。

探索了一段時間,終於找到了,在這裡分享出來,希望對你們有所幫助。

小編認為,對於初學Solidity的區塊鏈愛好者來說, https://cryptozombies.io 網站就是一個很不錯的選擇。

每次一開啟它的主介面,植物大戰殭屍的場景就立馬浮現在我的腦海中,就會想要不要開發一款區塊鏈版植物大戰殭屍,激發了我濃厚的學習興趣!

image

編遊戲的同時,也學習了以太坊智慧合約,何樂而不為呢?

這個網站一共有6個教程,每個教程大約需要1-2小時。小編建議你用一週的時間,每天一節。記住,一定要做一些必要的筆記和備忘單。

image

推薦使用 Google Docs,當然,你可以使用符合自身偏好的工具,比如 Gist、EverNote 等,以下為來自 Google Docs 的備忘單截圖。

image

做備忘單的目的就是在學習新知識時不丟棄之前學到的東西(切記不要學狗熊掰棒子)!

學完這6個教程,你就掌握了以太坊開發的基礎知識。

但這樣就可以了嗎?現在就能使用Solidity碼程式碼,成為優秀的以太坊開發者?

Not yet ! 在完成 CryptoZombies並確保你記錄了完整的備忘單之後,就可以進入第二階段了。

在學習CryptoZombies 6個互動課程的過程中,你已瞭解如何編寫智慧合約和建立DApp,這個過程很有趣。CryptoZombies網站之外,你需要一個編譯器。

關於編譯器,我使用的是 Visual Studio Code(你可以根據個人偏好自由選擇),它可以執行在Windows、 Mac 和 Linux環境中。

首先,我們需要安裝Visual Studio code。以Windows作業系統為例,在 https://chocolatey.org/中使用以下命令:

choco install VisualstudioCode –

choco installVisualstudioCode –y

安裝完成,操作介面是這樣的,是不是很簡潔?!

image

那麼,如何安裝Solidity?點選extensions,安裝Solidity和Material Icon Theme,如下圖:

image

是不是很簡單?小編想要操作介面看起來更“性感”?需要依次點選 File –> Preferences –> File Icon Theme

image

看下圖!是不是很性感?!

image

完成基本配置後,開始建立一個簡單的合約:File -> New File

image

注意,左下角出現了一個warning(感嘆號!)

image

Code contains empty block!這是在提示你寫一些有效的程式碼!

image

No problems have been…沒有報錯!

image

一定要利用好Solidity官方文件!細細品讀 Solidity documentation ,比如文件中關於智慧合約的介紹Introduction to Smart Contracts ,還是要提醒你,在整個學習過程中,一定要做筆記,做筆記!

image

除此之外,你還需要了解Solidity官方文件中的 Style Guide. 還要做筆記!做筆記!

當然,這僅僅是一些參考,你可以有自己的專屬Style!

要想學好以太坊開發,有一個不得不提的方法,就是積極參與社群討論。如果你想更加快速地學習Solidity,學習以太坊,學習區塊鏈,你確實需要成為社群中的一員,這是十分有效且有趣的學習方式。

在社群中積極發言,提出問題,分享建議,甚至與 V神互動,可以支援他,也可以懟他(切記要有理有據)!Do whatever you want,it must be amazing!!!

那麼,你需要做什麼?又如何去做呢?

你需要註冊賬戶、選擇社群頻道、加入Facebook小組,關注技術大V或者與其他技術愛好者交流、討論,抓住一切機會,儘可能多地參加線下Meetups。

a)註冊Ethereum Stack Exchange賬戶

b)加入 Solidity Gitter channel

c)加入以太坊相關的Facebook小組, 比如international, polish

d)關注大V部落格

e)參加以太坊Meetups

這是第二階段,這是一個長期的學習過程。在這期間,你會不斷積累Solidity開發經驗,你會與來自五湖四海的以太坊技術開發者分享、交流任何與技術有關的話題,是不是很cool?

在掌握Solidity程式設計基礎,並安裝好 Visual Studio Code 編譯器後,write your code!

首先,開啟電腦;

隨後,開啟編譯器;

然後,敲一敲程式碼,找找指尖的感覺;

最後,往下看!

都說成功在於實踐,學了那麼多知識,就需要真刀真槍地操練一番!

小編為你準備了30個程式設計挑戰案例,涉及簡單智慧合約、測試和去中心化應用等。

主要包含以下主題:

1)Solidity智慧合約: lottery(彩票),ICO(首次代幣發行),DAO(去中心化自制組織)

2)Tokens: ERC20, ERC721

3)測試 :Solidity 測試,JavaScript 測試

4)安全: Re-entry attack(重入攻擊)

5)DAPPs & deployment:Truffle(以太坊Solidity程式語言開發框架),Web3

6)外部服務:Oraclize(以太坊預言機),Infura(一個託管的以太坊節點叢集)

7)儲存:IPFS(星際檔案系統),Swarm(以太坊去中心化儲存網路)

1、閱讀要求

瞭解要求,獲取材料

2、Write your code

對於沒有測試覆蓋和前端部分的挑戰,可以使用線上編譯器 Remix,由於它有自動偵錯程式/編譯器,便於使用並捕獲錯誤。當然,也可以用Visual Studio Code了。

3、對比解決方案

完成之後,與提供的解決方案作對比。

切記,一定要自己動手做一遍!動手做一遍!做一遍!

Now,挑戰開始!

以下為30個挑戰示例(程式碼在文末,圖片/文字格式均有)

01_say_hello

  • 在建立時設定問候語並允許所有者(合約建立者)進行更改

  • 向每個呼叫sayHello方法的人返回問候語

  • 將Hello Daddy返回給建立者

02_balance_address_checker

  • 返回合約地址

  • 返回合約建立者的地址

  • 返回傳送人的地址

  • 返回合約的餘額

  • 返回合約制定者的餘額(僅在你為該合約所有者的前提下)

  • 返回傳送人的餘額

03_basic_random

  • 返回0-99之間的隨機數

  • 計算中的“財務重要性”小於礦工挖掘單一區塊得到的

  • 如何將BLOCKHASH安全地用於隨機數?

04_lottery_10_users

  • 限制為10個使用者

  • 使用者必須支付0.1ETH才能加入以太坊彩票

  • 同一使用者只能加入一次

  • 合約建立者可以加入以太坊彩票

  • 第10個使用者進入後,選擇獲勝者

  • 贏家收走所有的錢

  • 選出獲勝者之後,開始下一輪

05_lottery_no_limit

  • 使用者支付0.1以太即可加入lottery

  • 不限使用者數量

  • 同一使用者可以多次加入

  • 合約所有人亦可以加入

  • 合約所有人決定何時選出贏家

  • 贏家將得到所有獎金

  • 選出贏家即可開始新一輪lottery

06_lottery_multiple_winners

  • 對使用者無限制

  • 使用者須支付0.1 ETH和並從1-100中挑選一個數字

  • 合約所有者決定何時生成隨機數(1-100)

  • 選擇生成數字的使用者獲勝

  • 所有獎勵將分配給所有贏家

07_fundraising

  • 有籌款目標的(創立時設定數額)

  • 籌資有時間限制(創立時設定時間)

  • 任何人都可以增加任何金額,直到時間結束或目標達到為止。

  • 時間到了,但目標尚未完成,使用者可以撤回他們的資金。

  • 當目標達到時,所有者可以取出所有錢

08_basic_token

  • 創造時設定代幣的初始供應量

  • 合約建立者獲得初始Token

  • Token可以轉移到任何帳戶

  • 有保護措施以防止溢位

  • 任何人可檢查餘額

09_ERC_20_token

  • 基於EIP規範實現ERC 20 token

10_ERC20_usage

  • 使用OpenZeppelin建立你自己的ERC 20令牌

  • 繼承“標準token”

  • 新增自定義名稱、符號、小數和初始供應

11_ERC_721_usage

  • 使用OpenZeppelin建立自己的ERC 721令牌

  • 繼承“ERC 721 Token”

  • 新增自定義名稱和符號

12_string_converter

  • 建立函式,將字串轉換為bytz 32

  • 為該函式新增可靠性測試

13_route_manager

  • 合約內必須儲存公交車站的列表。

  • 每個公共汽車站都有id、名稱和座標(例如:czn 1、PKS Cieszyn、10.123222, 33.212345)

  • 所有者能夠新增新的站點

  • 合約必須有測試範圍

14_testing_route_manager

  • 增加Solidity試驗

  • 新增JavaScript測試

15_shared_wallet

  • 合約有且只有一位所有者

  • 所有者可以新增和刪除管理員

  • 管理員可以提取所有資金

  • 合約具有接收轉帳的應付款回退功能

16_multisig_wallet

  • 建立一個多簽名錢包

  • 進行轉移須有3名管理員簽署交易

17_crowdsale

  • 製造可鑄造硬幣(使用Open Zeppelin)

  • 建立簡單的眾包銷售(使用Open Zeppelin)

  • 設定開啟和關閉時間

  • 固定費率和錢包地址

18_roles_management

  • 建立繼承自己的合約(Open Zeppelin)

  • 合約須有管理員名單

  • 所有者可以新增/更新/刪除管理員

  • 合約所有者也是管理員

  • 僅管理員可新增修飾符

19_the_dao_attack

  • 增加非常簡化的DAO合約(押金,提款)

  • 新增攻擊者合約

20_lpg_price

  • 利用Oraclize API獲取LPG價格

21_random_oraclize

  • 使用Oraclize API獲取隨機數

22_raffle_oraclize

  • 使用者可以參與一次抽獎

  • 所有者不能參與

  • 使用Oraclize的RNG選出贏家

23_ipfs_oraclize

  • 向IPF中新增一個簡單的json檔案

  • 使用Oraclize讀取該檔案

  • 將一個json屬性的結果儲存在字串變數中

24_election

  • 每一次選舉建立一個合約,為每個候選人提供一個簡短的名字和地址

  • 合約建立者有權對每個地址單獨投票

  • 每個投票參與者可以投票一次

  • 投票參與者不能為自己投票

25_faucet

  • 添加回退函式以接受付款

  • 增加退出功能,每人最多能得到1ETH

  • 使用事件記錄兩個金額(已支付、轉移)

26_swarm_oraclize

27_dapp_pet_shop

28_infura_deployment

  • 使用Infura新增Ropsten部署設定

29_tic_tac_toe

  • 為2名玩家新增基本的tic tac toe

  • 3x3 board

  • 無需人工智慧

30_web3_DAO_deploy

  • ethereum.org/dao複製DAO程式碼

  • 將其更新為Solity0.4.24並編譯

  • 使用 web3 和ethereumjs-tx傳送已簽名的交易

  • 使用 Infura將編譯好的合同部署到Ropsten網路

以下為各個示例的全部(或部分)程式碼,圖較多,不願看圖,文末有程式碼連結!

image

01_say_hello

image

02_balance_address_checker

image

03_basic_random

image

04_lottery_10_users

image

04_lottery_10_users_adamskrodzki

image

05_lottery_no_limit

image

06_lottery_multiple_winners

image

07_fundraising

image

08_basic_token

image

09_erc_20_token

image

10_PiotrexToken

image

11_DirtyToken

image

12_StringConverter

image

13_RouteManager

image

14_RouteManagerTest

image

15_SharedWallet

image

16_MultiSigWallet

image

17_BuseoCoin

image

17_BuseoCrowdsale

image

18_Roles

image

19_Attacker

image

19_MiniDAO

image

20_LpgPrice

image

21_ RandomOraclize

image

22_ Raffle

image

23_ IpfsOraclize

image

24_Election

image

25_Faucet

image

26_SwarmOraclize

image

27_Adoption

image

28_truffle

image

29_TicTacToe

image

30_web3-deploy-example-master

挑戰成功了嗎? Warriors!

連結:https://pan.baidu.com/s/1UVhLAsG167WC74jp5g9CRg

密碼:i6td

其他資源

內容來源:區塊鏈大本營(ID:blockchain_camp)

作者 | Piotr Brudny

編譯 | kou、韓依依

以下是我們的社群介紹,歡迎各種合作、交流、學習:)

image