1.solidity中的值类型:Boolean,Integer,Address,String
2.address保存一个20字节的值(以太坊地址的大小)。地址类型也有members,并作为所有合约的基础。
1)地址有两个成员:balance与transfer。我们可以用balance查询地址的余额,并使用transfer函数将以太网发送到地址。(根据下面这个例子,我推测transfer的出户是this,入户是调用transfer的地址)
address x=0x123;
address myAddress=this;
if(x.balance<10 && myAddress.balance>=10)
x.transfer(10);
3.solidity提供三种数据结构:
1)struct只能有16个成员,超过该数量可能会发生以下错误:Stack too Deep堆栈太深
2)映射mappings:映射可以看作是哈希表,它们被虚拟地初始化,使得每个可能的键都存在并被映射到其字节表示全为0的值:类型的默认值。映射的声明为:
Mapping(_keytype=>_ValueType)
注意一下,_keytype几乎可以是任何类型,除了动态大小的数组,合约,枚举和结构,例:
pragma solidity ^0.4.0;
contract MappingExample{
mapping(address=>uint)public balances;
function update(uint newBalance){
balances[msg.sender]=newBalance;
}
}
contract MappingUser{
function f() returns (uint){
MappingExample m=new MappingExample();
m.update(100);
return m.balances(this);
}
}
4.函数:以下是在solidity中声明函数的方式:
function sampleFunc(string name,uint amount){}
上面的声明是一个空体函数,它有两个参数:一个字符和一个uint
我们可以这样调用此函数:sampleFunc(“haha”,1000);
5.函数修饰符:它用于轻松更改函数的行为。甚至在进行函数调用之前也可以检查这些条件。比如:
pragma solidity ^0.4.0;
contract FunctionModifiers{
address public creator;
function FunctionModifiers(){
creator=msg.sender;
}
modifier onlycreator(){
if(msg.sender!=creator)
throw;
_;
}
function killContract() onlycreator{
selfdestruct(creator);
}
}