这篇文章,是通过制作一款可爱的游戏(DAPP,也可以称做智能合约),从而学习Solidity语言。和ETH网络的一些基础知识。
全程在线编程,无需搭建复杂的环境,只需要有任何其他语言的编程经验,即可马上学习。
这篇文章是一篇关于制作游戏的总结。
1
在线游戏简介
支持多语言界面:
课程:
cryptozombies课程
编辑页面
在线编辑页面
学习总结
可视范围的
函数专用限制语法
整数
int是带符号整数
其他变量
2
solidity语言的知识点
modifier
modifier 和 function有些相似。
主要用于提前检查function的参数是否符合function的要求。
这个就是经典检查调用智能合约的owner是否是此智能合约的开发者的modifier。
出自:https://github.com/OpenZeppelin/openzeppelin-solidity
OpenZeppelin is a library for writing secure Smart Contracts on Ethereum.
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
在游戏里面,我们增加了对于级别的判断。
modifier aboveLevel(uint _level, uint _zombieId) {
require(zombies[_zombieId].level >= _level);
_;
}
用法:添加在需要检查的function定义的末尾
function changeName(uint _zombieId, string _newName) external aboveLevel(2, _zombieId) {
}
Gas
在ETH网络上,用户在通过智能合约修改区块链上的数值的时候,需要支付Gas的。Gas可以通过以太币来兑换。
简单的说,修改区块链的时候,不是免费的。不免费的理由可以参照网络。
而只是查询区块链上的信息的时候,是免费。所以为了给你的用户节约费用,开发者可用通过设置函数为 view 和 pure 来实现。
比如,用户可以查询自己拥有的东东的时候,可以这样写function。
function getZombiesByOwner(address _owner) external view returns (uint[]) {
}
还记得 external 么?
storage
更新区块链是需要支付Gas的,尤其是 storage 的写入操作。
开发者需要尽量避免 storage 的写入。其他语言,循环是效率低的,但在solidity里面,比起Gas的消耗,我们还是倾向于用循环。
除非,让逻辑过于复杂化的处理,比如每次都需要在 memory 上重新建立序列。
或者是每次都需要调用函数来得到特定值的时候。
通过在变量定义的时候,加入 memory 可以在 memory 上新建一个仅仅存储在 memory 里面的变量
function getArray() external pure returns(uint[]) {
// Instantiate a new array in memory with a length of 3
uint[] memory values = new uint[](3);
// Add some values to it
values.push(1);
values.push(2);
values.push(3);
// Return the array
return values;
}
pure : 函数内没有使用任何外部数据
本系列文章作者:HiBlock区块链技术布道群-A****mywu
原文发布于简书
加微信baobaotalk_com,加入技术布道群
Blockathon|48小时极客竞赛,区块链马拉松等你挑战(上海)
时间:2018年10月19-21日
地点:(上海黄浦)露香园路1号(近淮海东路)P2
- 招募50名开发者(识别下图二维码或点击“阅读原文”即可了解详情并报名)
北京blockathon回顾:
Blockathon(北京):48小时极客开发,区块松11个现场交付项目创意公开
成都blockathon回顾:
Blockathon2018(成都站)比赛落幕,留给我们这些区块链应用思考
来源:oschina
链接:https://my.oschina.net/u/3782027/blog/2222457