2018年已過了大半,幣圈跌跌蕩蕩,而鏈圈的人在等待鳳凰涅槃,熊市專心作技術,牛市才能一展身手、衝破雲霄!前端
本文主要告訴你,如何成爲一名優秀的以太坊開發者!git
若是你是以太坊開發者中的「老司機」,請直接看最後一部分:30個爲你量身定作的挑戰示例!github
若是你是以太坊初學者,請認真讀完,相信你終會受益不淺。web
圖較多,不想看圖,文末有代碼!編程
我曾經買過加密貨幣,曾試圖使用一些醜陋礦機挖礦,看過一些稀稀拉拉的Solidity教程。但不得不認可,在當時,我更偏心前者,我切身體會到了加密貨幣的狂熱,急切須要一種平衡,急切中止這種狂熱行爲,我最終選擇了離開,大概四五個月的時間吧。json
是的,我又回來了,此次我選擇了後者,要作一名區塊鏈開發者!選擇了以太坊,選擇了Solidity。安全
以前看過的教程再也不是最新的,課程、文章、博客數不勝數,可是仍然很難找到正確的學習方式。網絡
探索了一段時間,終於找到了,在這裏分享出來,但願對大家有所幫助。app
小編認爲,對於初學Solidity的區塊鏈愛好者來講, cryptozombies.io 網站就是一個很不錯的選擇。框架
每次一打開它的主界面,植物大戰殭屍的場景就立馬浮如今個人腦海中,就會想要不要開發一款區塊鏈版植物大戰殭屍,激發了我濃厚的學習興趣!
編遊戲的同時,也學習了以太坊智能合約,何樂而不爲呢?
這個網站一共有6個教程,每一個教程大約須要1-2小時。小編建議你用一週的時間,天天一節。記住,必定要作一些必要的筆記和備忘單。
推薦使用 Google Docs,固然,你可使用符合自身偏好的工具,好比 Gist、EverNote 等,如下爲來自 Google Docs 的備忘單截圖。
作備忘單的目的就是在學習新知識時不丟棄以前學到的東西(切記不要學狗熊掰棒子)!
學完這6個教程,你就掌握了以太坊開發的基礎知識。
但這樣就能夠了嗎?如今就能使用Solidity碼代碼,成爲優秀的以太坊開發者?
Not yet ! 在完成 CryptoZombies並確保你記錄了完整的備忘單以後,就能夠進入第二階段了。
在學習CryptoZombies 6個互動課程的過程當中,你已瞭解如何編寫智能合約和建立DApp,這個過程頗有趣。CryptoZombies網站以外,你須要一個編譯器。
關於編譯器,我使用的是 Visual Studio Code(你能夠根據我的偏好自由選擇),它能夠運行在Windows、 Mac 和 Linux環境中。
首先,咱們須要安裝Visual Studio code。以Windows操做系統爲例,在 chocolatey.org/中使用如下命令:
choco install VisualstudioCode –
choco installVisualstudioCode –y
安裝完成,操做界面是這樣的,是否是很簡潔?!
那麼,如何安裝Solidity?點擊extensions,安裝Solidity和Material Icon Theme,以下圖:
是否是很簡單?小編想要操做界面看起來更「性感」?須要依次點擊 File –> Preferences –> File Icon Theme
看下圖!是否是很性感?!
完成基本配置後,開始建立一個簡單的合約:File -> New File
注意,左下角出現了一個warning(感嘆號!)
Code contains empty block!這是在提示你寫一些有效的代碼!
No problems have been…沒有報錯!
必定要利用好Solidity官方文檔!細細品讀 Solidity documentation ,好比文檔中關於智能合約的介紹Introduction to Smart Contracts ,仍是要提醒你,在整個學習過程當中,必定要作筆記,作筆記!
除此以外,你還須要瞭解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(以太坊去中心化存儲網絡)
一、閱讀要求
瞭解要求,獲取材料
二、Write your code
對於沒有測試覆蓋和前端部分的挑戰,可使用在線編譯器 Remix,因爲它有自動調試器/編譯器,便於使用並捕獲錯誤。固然,也能夠用Visual Studio Code了。
三、對比解決方案
完成以後,與提供的解決方案做對比。
切記,必定要本身動手作一遍!動手作一遍!作一遍!
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
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 一、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
21_random_oraclize
22_raffle_oraclize
用戶能夠參與一次抽獎
全部者不能參與
使用Oraclize的RNG選出贏家
23_ipfs_oraclize
向IPF中添加一個簡單的json文件
使用Oraclize讀取該文件
將一個json屬性的結果存儲在字符串變量中
24_election
每一次選舉建立一個合約,爲每一個候選人提供一個簡短的名字和地址
合約建立者有權對每一個地址單獨投票
每一個投票參與者能夠投票一次
投票參與者不能爲本身投票
25_faucet
添加回退函數以接受付款
增長退出功能,每人最多能獲得1ETH
使用事件記錄兩個金額(已支付、轉移)
26_swarm_oraclize
將文本文件添加到Swarm public gateway (swarm-gateways.net)
經過Oraclize API讀取合約中的文件
27_dapp_pet_shop
容許全部者取消收養
編寫取消收養的測試(TDD)
在SMART合約中添加取消功能
28_infura_deployment
29_tic_tac_toe
爲2名玩家添加基本的tic tac toe
3x3 board
無需人工智能
30_web3_DAO_deploy
將其更新爲Solity0.4.24並編譯
使用 web3 和ethereumjs-tx發送已簽名的交易
使用 Infura將編譯好的合同部署到Ropsten網絡
如下爲各個示例的所有(或部分)代碼,圖較多,不肯看圖,文末有代碼連接!
01_say_hello
02_balance_address_checker
03_basic_random
04_lottery_10_users
04_lottery_10_users_adamskrodzki
05_lottery_no_limit
06_lottery_multiple_winners
07_fundraising
08_basic_token
09_erc_20_token
10_PiotrexToken
11_DirtyToken
12_StringConverter
13_RouteManager
14_RouteManagerTest
15_SharedWallet
16_MultiSigWallet
17_BuseoCoin
17_BuseoCrowdsale
18_Roles
19_Attacker
19_MiniDAO
20_LpgPrice
21_ RandomOraclize
22_ Raffle
23_ IpfsOraclize
24_Election
25_Faucet
26_SwarmOraclize
27_Adoption
28_truffle
29_TicTacToe
30_web3-deploy-example-master
挑戰成功了嗎? Warriors!
密碼:i6td
其餘資源
Official sites: Truffle, Ethereum, Solidity
Repositories: solidity-by-example, solidity-baby-steps
Channels: Dapp University
Blogs: michalzalecki.com/
內容來源:區塊鏈大本營(ID:blockchain_camp)
做者 | Piotr Brudny
編譯 | kou、韓依依