Solidity代码都包含在合约里面,一份合约就是以太币应用的基本模块,所有的变量都属于一份合约,它是所有应用的起点。
一份名为HelloWorld的空合约
版本指令
所有的Solidity源码都必须有“version
pragma”—标明Solidity编译器的版本,以避免将来新的编译器可能破坏代码。(当前最新版本是0.4.19)
状态变量
无符号整数:uint
其值不能是负数,在Solidity中,uint实际上是uint256代名词,一个256位的无符号整数。
字符串:string
字符串用于保存任意长度的UTF-8编码数据
string greeting = “Hello world!”
结构体
结构体允许生成一个更复杂的数据类型,有多个属性.
数组
如果想建立一个集合,可以用数组这样的数据类型,Solidity支持静态数组和动态数组。也可以建立一个结构体类型的数组。状态变量被永久保存在区块链中。所以在合约中创建动态数组来保存成结构的数据是非常有意义的。
函数
习惯上Solodity函数里的变量都是以(_)开头以区别全局变量,这是一个名为eatHamburgers的空函数,它接受两个参数:一个string类型的和一个uint类型的参数。
Solidity定义的函数的属性默认为public,这就意味着任何一方(或者其他合约)都可以调用合约里的函数。显然并不是任何时候都需要这样,而且这样的合约易于受到攻击,所以函数定义为private是一个好的编程习惯,只有需要外部调用时才设置为public。
返回值
Solidity里,函数的定义里可以包含返回值的数据类型。函数的修饰符用于确定函数的权限。当函数定义为view时,意味着它只能读取数据不能更改数据,pure函数表明这个函数甚至都不访问应用里的数据、状态,它的返回值完全取决于它的输入参数。Solidity编译器会给出提示,提醒应该使用的修饰符。
Keccak256
Ethereum内部有一个散列函数keccak256,它用了SHA3版本,能够在Ethereal中有很多应用,同样也可以用它造一个伪随机数。(在区块链中安全地产生一个随机数是一个很难的问题)
事件
事件是合约和区块链通讯的一种机制。用户前端应用“监听”某些事件,并做出反应。
Leave a Reply