从零构建以太坊(Ethereum)智能合约到项目实战——学习笔记10
P57 、1-Solidity Types - 玩转 Solidity 数组 (Arrays)
学习目标
1、掌握Arrays的可变不可变的创建
2、深度理解可变数组和不可变数组之间的区别
3、二维数组
4、memory arrays的创建
5、bytes0~bytes32、bytes与byte[]对比
P58 、2-固定长度的数组(Arrays)系统讲解
固定长度类型数组的声明
pragma solidity ^0.4.4; contract C{ //数组的长度为5,数组里面的存储的值的类型为uint类型 uint [5] T = [1,2,3,4,5]; }
通过Length方法获取数组长度遍历数组求总和
pragma solidity ^0.4.4; contract C{ //数组的长度为5,数组里面的存储的值的类型为uint类型 uint [5] T = [1,2,3,4,5]; //通过for循环计算数组内部的值的总和 function numbers() constant public returns (uint){ uint num = 0; for(uint i=0 ; i < T.length ; i++){ num = num + T[i]; } return num; } }
尝试修改T数组的长度
pragma solidity ^0.4.4; contract C{ //数组的长度为5,数组里面的存储的值的类型为uint类型 uint [5] T = [1,2,3,4,5]; function setTLength(uint len) public { //报错 T.length = len; } }
PS:声明数组时,一旦长度固定,将不能在修改数组的长度。
尝试修改T数组内部值
pragma solidity ^0.4.4; contract C{ //数组的长度为5,数组里面的存储的值的类型为uint类型 uint [5] T = [1,2,3,4,5]; function setTIndex0Value() public { T[0] = 10; } //通过for循环计算数组内部的值的总和 function numbers() constant public returns (uint){ uint num = 0; for(uint i=0 ; i < T.length ; i++){ num = num + T[i]; } return num; } }
PS:通过一个简单的试验可证明固定长度的数组只是不可修改它的长度,不过可以修改它内部的值,而bytes0~bytes32固定大小字节数组中,大小固定,内容固定,长度和字节均不可修改。
尝试通过push往T数组中添加值
pragma solidity ^0.4.4; contract C{ //数组的长度为5,数组里面的存储的值的类型为uint类型 uint [5] T = [1,2,3,4,5]; function pushUintToT() public { //报错 T.push(6); } }
PS:固定大小的数组不能调用push方法向里面添加存储内容。
P59 、3-可变长度的Arrays(上)
可变长度类型数组的声明
pragma solidity ^0.4.4; contract C{ //数组的长度为5,数组里面的存储的值的类型为uint类型 uint [] T = [1,2,3,4,5]; //通过for循环计算数组内部的值的总和 function T_Length() constant returns(uint) { return T.length; } }
通过Length方法获取数组长度遍历数组求总和
pragma solidity ^0.4.4;
contract C{
//数组的长度为5,数组里面的存储的值的类型为uint类型
uint [] T = [1,2,3,4,5];
//通过for循环计算数组内部的值的总和
function numbers() constant public returns (uint){
uint num = 0;
for(uint i=0 ; i < T.length ; i++){
num = num + T[i];
}
return num;
}
}
尝试修改T数组的长度
pragma solidity ^0.4.4;
contract C{
//数组的长度为5,数组里面的存储的值的类型为uint类型
uint [] T = [1,2,3,4,5];
function setTLength(uint len) public {
T.length = len;
}
function TLength() constant returns(uint){
return T.length;
}
}
PS:对可变长度的数组而言,可随时通过length修改数组的长度。
尝试通过push往T数组中添加值
pragma solidity ^0.4.4; contract C{ //数组的长度为5,数组里面的存储的值的类型为uint类型 uint [] T = [1,2,3,4,5]; function T_Length() constant public returns (uint){ return T.length; } function pushUintToT() public { T.push(6); } //通过for循环计算数组内部的值的总和 function numbers() constant public returns (uint){ uint num = 0; for(uint i=0 ; i < T.length ; i++){ num = num + T[i]; } return num; } }
PS:当往里面增加一个值,数组的个数就会加1,当求和时也会将新增的数字加起来。
P60 、4-可变长度的Arrays(下)
pragma solidity ^0.4.4; contract C{ uint [] T = new uint[](5); function C(){ for(uint i=0;i<5;i++){ T[i] = i+1; } for(i=0;i<5;i++){ T.push(i+1); } } //通过for循环计算数组内部的值的总和 function numbers() constant public returns (uint){ uint num = 0; for(uint i=0 ; i < T.length ; i++){ num = num + T[i]; } return num; } }
P61 、5-Solidity 二维数组
P62 、6-创建 Memory Arrays
P63 、7-数组字面量 Array Literals 内联数组 Inline Arrays
P64 、8-创建固定大小字节数组/可变大小字节数组
P65 、Solidity Types - 枚举(Enums)
P66 、Solidity Types - Solidity 结构体(Structs)
P67 、Solidity Types - Solidity 字典/映射(Mappings)
P68 、集资(CrowdFunding)智能合约(Smart Contract)综合案例
P69 、单位(Units) 和 全局变量(Globally Available Variables)
P70 、1-Solidity 元组(Tuples)- 什么是元组,元组能做什么
P71 、2-Solidity 元组(Tuples)的使用
P72 、1-truffle framework初体验 - 如何编写智能合约
truffle官网:https://truffleframework.com/
开发环境为:ubuntu
先安装nodejs,安装完查看版本
node --version v10.12.0
安装truffle框架
# npm install -g truffle
# truffle version
Truffle v5.0.1 (core: 5.0.1)
Solidity v0.5.0 (solc-js)
Node v10.12.0
P73 、2-建立简易的加密代币
P74 、3-通过zeppelin-solidity建立标准代币部落币「P 、BLC」