合约的科普知识
在以太坊虚拟机上,合约程序自动执行,无法被人类干预。一旦部署无法修改。每次执行合约即需要消耗GAS,所以,像C语言一样严谨是必要的。我戏称它为:业务C语言
开发
→编程的语法
pragma solidity ^0.50意味着所使用的编译器,0.50<=编译器版本<0.60
→可见修饰符含义
→→public与private
对于public和private,相信学过其他主流语言的人都能明白:
- public修饰的变量和函数,任何用户或者合约都能调用和访问。
- private修饰的变量和函数,只能在其所在的合约中调用和访问,即使是其子合约也没有权限访问。
→→external和internal
除 public 和 private 属性之外,Solidity 还使用了另外两个描述函数可见性的修饰词:internal(内部) 和 external(外部)。
- internal 和 某些面向对象的protected关键字类似,如果某个合约继承自其父合约,这个合约即可以访问父合约中定义的“内部”函数。
- external 与public 类似,只不过这些函数只能在合约之外调用 – 它们不能被合约内的其他函数调用。只能修饰函数不能状态变量。
→→函数是否改变状态修饰符
- view—可读状态变量,但不能修改
- pure—不能改也不能读状态变量,是更加严格,而不是与view相反
→→payable修饰符
可以理解成事务,只有被其修饰,函数才有变动账户资金的权利。
→→存储位置修饰符
可以出现在变量或者函数参数前。对于值类型来说,永远是引用传递,而引用类型时,需要参考下面的修饰符来确定是否是引用传递。
- storage:链上的持久存储的。
- memory:EVM中的内存,可易失的。不能将memory类型赋值给局部变量(有待考证,因为引用传递下可以改变其赋值)。
- calldata:EVM中的内存,只读的。外部函数的参数(不含返回值),场景多为系统使用。
→货币单位
→编译器和开发框架
三种主流的:remix-ide ,solc和jssolc
https://www.jianshu.com/p/8794afea1996?from=timeline&isappinstalled=0https://truffle.tryblockchain.org/https://www.jianshu.com/p/eac99bb0a9bc
→技巧参考
https://blog.csdn.net/tianlongtc/article/details/80220142