前言
这门课在网站里面说的是高级solidity理论,实际上察觉并没有这样。
知识点
智能合约的特性
- 无法篡改
- 倘若代码错误后只能够转移到新的智能合约
- dapp的合约部分建议使用函数而不是硬编码的风格
修饰符
modifier是修饰符,代码如下:
modifier function Ownable () public {
ower=msg.sender;
}
这里的修饰符是能修改函数被其他函数默认调用的关键字,如需要在函数体还没有开始使用,就得先执行Ownable函数的代码:
function Test() extenal Ownable{}
写成这样就会先一步调用修饰符的代码
安全性问题
因为合约部分的部署者大多是拥有特权的,所以衍生了部分的安全性问题,所以需要部署者特权问题。
所以需要检查solidity的问题,但是我认为部署账户更需要注意。
solidity 的时间系统
他是使用now获取当前时间戳的,如:
uint TimeTest = now;
但是solidity这个语言也很有很多语法糖,所以还有获取一天的时间戳方法,是使用1 days,记住days这是day复数,不能是day
uint TimeTest = 1 days;
函数体传递指针
当我们需要修改外界参数的时候,可以使用函数的传参,但是函数必须传递的是指针。
传递指针的函数,只能是privae,internal等标识的函数,代码如下:
function Test(one storage _name) internal {}
这样就能传递执政了,storage在前文提到过。
使用view 标识的函数节省gas的消耗
当我们需要只读并且减少消耗时可以使用view函数。
memory时需要消耗gas的,但是放在view函数中不需要,代码如下:
function Test() view {
// 想要声明一个数组
uint[] memory test = uint[](zombies[dna])
}
注意事项:
当是memory声明的内存变量,倘若是uint类型则需要指定数组的长度,上文中的代码,我们假定zombies[dna],就是一个长度的数组。
这里看见解释说:
认为这样写代码是违反直觉的,这里表示并没有,只要分清什么是公有财产和私有财产即可。