2019年09月26日11:17:55
solidity编程语言类型-2——2020年07月12日12:32:20
编译网址
编译网址:
http://remix.ethereum.org/#optimize=false&evmVersion=null&version=soljson-v0.4.24+commit.e67f0147.js
1.整形
uint 无符号整型 只能表示正数
int和js中的number类似
2.地址
以太坊的地址
以太坊地址表示的字符串“0x3211B6a9fc5ea8bEf649bb617E3123a5755A0aC1”大概42位,以太坊一直是20个字节,一个字节8位,所以有160位
3.msg.sender
是合约里的全局变量,它是部署合约的地址。
-
balance 查看余额
-
transfer 转账
address owner; //谁部署合约,这个地址就是谁 owener=msg.sender;
4.数组
uint [5] arr=[1,1,1,1,1];
for(uint i=0;i<arr.length;i++){
}
arr.push(6);
5.map
mapping(string=>uint) users;
//{woniu:18}
users["woniu"]=18;
6.结构体struct
Struct Student{
uint age;
uint id;
string name;
uint phone;
}
woniu=Student(18,141001,"xiaoye",151611895417);
7.枚举
enum sex{male,female};
8.public private
public共有的,合约内外都能调用;
private为私有的,只有合约内部可以调用。
也可以修饰状态变量;
状态变量默认是私有的;
pragma solidity ^0.4.24;
contract Test{
uint public a=256;
int public b=254;
function add() private view returns(uint){
return a + uint(b);
}
function ADD() public view returns(uint){
return add();
}
}
9.pure view constant
如果⼀个函数⾥⾯,访问了状态变量,但是没有修改,我们使⽤view或者constant修饰。
-
如果访问了状态变量,⽽且修改了,那么就不能constant和view,否则会报错,不修饰即可。
-
如果没有使⽤过状态变量,我们要修饰为pure。
-
如果你修饰为constant,但是你在函数中修改了,效果是:不会报错,正常执⾏,但是值不会改
变。
pragma solidity ^0.4.24;
contract Test{
uint public a=256;
int public b=254;
uint private c=1000;
function add() private view returns(uint){
return a + uint(b);
}
function ADD() public view returns(uint){
return add()+c;
}
function returnString() public pure returns(string){
return "hello";
}
}
10.address 匿名函数
pragma solidity ^0.4.24;
contract Test{
//以太坊地址的⻓长度,⼤⼩ 20个字节 ,20 * 8 = 160位 ,所以可以⽤⼀个 uint160 编码。
//地址是所 有合约的基础,所有的合约都会继承地址对象,通过合约的地址串,调⽤合约内的函数。
//可以进⾏加减,需要强制转换
//1. 匿名函数:没有函数名,没有参数,没有返回值的函数,就是匿名函数
//2. 当调⽤⼀个不存在的⽅法时,合约会默认的去调⽤匿名函数
//3. 匿名函数⼀般⽤来给合约转账,因为费⽤低
string public str;
address public addr1=0x00CA35b7d915458EF540aDe6068dFe2F44E8fa733c;
function () public payable{
}
function add() public view returns(uint160) {
return uint160(addr1) + 10;
}
function getBalance1() public view returns(uint256){
return this.balance;
}
function getBalance() public view returns(uint256){
return addr1.balance;
}
}
11.transfer
//1. 转账的时候单位是wei
//2. 1 ether = 10 ^18 wei (10的18次⽅)
//3. 向谁转钱,就⽤谁调⽤tranfer函数
//4. 花费的是合约的钱
//5. 如果⾦额不⾜,transfer函数会抛出异常
//send转账与tranfer使⽤⽅式⼀致,但是如果转账⾦额不⾜,不会抛出异常,⽽是会返 回false
//由合约向addr1 转账10以太币
function transfer() public {
addr1.transfer(10 * 10 **18);
}