zoukankan      html  css  js  c++  java
  • 从零构建以太坊(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」

  • 相关阅读:
    STL——increment/decrement/dereference操作符
    STL——静态常量整数成员在class内部直接初始化
    STL——临时对象的产生与运用
    C++中模板类使用友元模板函数
    模板编程中的技巧
    plsql 表数据中文显示乱码(配置环境变量)
    plsql 常用快捷键(自动替换)
    javascript 跳出(终止)forEach循环
    plsql 快捷键配置
    plsql oracle client没有正确安装(plsql连接远程数据库)
  • 原文地址:https://www.cnblogs.com/little-kwy/p/10343998.html
Copyright © 2011-2022 走看看