这篇文章,是经过制做一款可爱的游戏(DAPP,也能够称作智能合约),从而学习Solidity语言。和ETH网络的一些基础知识。git
全程在线编程,无需搭建复杂的环境,只须要有任何其余语言的编程经验,便可立刻学习。github
这篇文章是一篇关于制做游戏的总结。微信
支持多语言界面:网络
课程:学习
cryptozombies课程区块链
编辑页面ui
在线编辑页面code
学习总结
可视范围的
函数专用限制语法
整数
int是带符号整数
其余变量
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
北京blockathon回顾:
Blockathon(北京):48小时极客开发,区块松11个现场交付项目创意公开
成都blockathon回顾: