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、韩依依