原创

学习solidity-2


字符串

声明字符串

pragma solidity ^0.6.0;

contract Test {
   string public name = "web03";
   string public url = 'web03.cn';
}

字符串内置转换

pragma solidity ^0.6.0;

contract Test {
	// 可以是双引号 
   bytes public name = "web03";
   // 也可以是单引号
   string url = 'web03.cn';
   
   function nameTostring() public view returns(string memory){
       string memory str = string(name);
       return str;
   }
}

转义字符

\n 开始新的一行
\\ 反斜杠
\’ 单引号
\” 双引号
\b 退格
\f 换页
\r 回车
\t 制表符
\v 垂直制表符
\xNN 表示十六进制值并插入适当的字节。
\uNNNN 表示Unicode值并插入UTF-8序列。

数组

声明数组

uint balance[10];

初始化数组

uint balance[3] = [1, 2, 3];
uint balance[] = [1, 2, 3];

创建内存数组

pragma solidity ^0.6.0;

contract Test {
    function test(uint len) public {
        uint[] memory arr1 = new uint[](7);
        bytes memory arr2 = new bytes(len);
    }
}

数组属性.length
数组方法.push()

枚举(enum)

pragma solidity ^0.6.0;

contract Test {
    // 顺序 0,1,2,3...
    enum COLOR{RED, GREEN, YELLOW, BLACK}
   COLOR color;//默认 0
   function setColor() public{
       color = COLOR.BLACK;//设置3
   }
   function getColor() public view returns(COLOR){
       return color;//3
   }
}

结构体(struct)

pragma solidity ^0.6.0;

contract Test {
    struct User{
        string name;
        uint id;
        address addr;
    }
    User public user;
   function setUser() public{
       user = User("零三", 3, 0x23FCB0E1DDbC821Bd26D5429BA13B7D5c96C0DE0);
   }
   function getUserName() public view returns(string memory){
       return user.name;
   }
}

映射(mapping)

pragma solidity ^0.6.0;

contract Test {
    mapping(address => uint) public countMap;
    // 每次调用count递增
    function updateCount() public{
        countMap[msg.sender] += 1; 
    }
}

单位

以太单位

assert(1 wei == 1);
assert(1 szabo == 1e12);
assert(1 finney == 1e15);
assert(1 ether == 1e18);
assert(2 ether == 2000 fenny);

时间单位

assert(1 seconds == 1);
assert(1 minutes == 60 seconds);
assert(1 hours == 60 minutes);
assert(1 day == 24 hours);
assert(1 week == 7 days);

全局变量

名称返回值类型描述
blockhash(uint blockNumber)bytes32给定区块的哈希值 – 只适用于256最近区块, 不包含当前区块。
block.coinbaseaddress当前区块矿工的地址
block.difficultyuint当前区块的难度
block.gaslimituint当前区块的gaslimit
block.numberuint当前区块的number
block.timestampuint当前区块的时间戳,单位秒
gasleft()uint256剩余 gas
msg.databytes完成 calldata
msg.senderaddress消息发送者 (当前 caller)
msg.sigbytes4calldata的前四个字节 (function identifier)
msg.valueuint当前消息的wei值
nowuint当前块的时间戳,单位秒
tx.gaspriceuint交易的gas价格
tx.originaddress交易的发送方
入门知识
以太坊