Solidity笔记11:合约2

1、库

pragma solidity >=0.6.0<0.8.0;

// 定义库
library Search {
      function indexOf(uint[] storage data, uint _value) public view returns(int){
        for (uint i = 0; i< data.length; ++i) {
            if (data[i] == _value) {
                return int(i);
            }
        }
        return -1;
    }
}

contract TestLibrary {
    uint[] data;
    constructor() public {
        data.push(1);
        data.push(2);
        data.push(3);
    }
    
    function indexOf(uint _value) public view returns(int){
        // 调用库函数
        return Search.indexOf(data, _value);
    }
}

使用using for调用库函数

contract TestLibrary {
    using Search for uint[]; // 第1步绑定
    uint[] data;
    constructor() public {
        data.push(1);
        data.push(2);
        data.push(3);
    }
    
    function indexOf(uint _value) public view returns(int){
        // 第2步调用
        return data.indexOf(_value);
        //return Search.indexOf(data, _value);
    }
}

2、销毁合约

pragma solidity >=0.6.0<0.8.0;

contract TestSelfedStructContract{
    address owner;
    
    constructor() public {
        owner = msg.sender;
    }
    
    modifier onlyOwner() {
        require(owner == msg.sender);
        _;
    }
    
    // 销毁合约,通过修改器限定只有创建者才能销毁
    function kill() public onlyOwner {
        // 全局函数
        selfdestruct(msg.sender);
    }
}

3、映射

pragma solidity >=0.6.0<0.8.0;

contract TestMapping{

    // 定义
    mapping(uint=>string) public uintMapping;
    mapping(address=>uint) public addressMapping;
    mapping(string=>mapping(uint=>address)) public stringMapping;
    
    constructor() public {
        // 赋值
        uintMapping[1] = "nico";
        uintMapping[2] = 'lisi';
        
        addressMapping[0xD74B5921558C780dE418b22225fb704E06dB327A] = 100;
        
        stringMapping['nico'][1] = 0xD74B5921558C780dE418b22225fb704E06dB327A;
        
    }
}

4、结构体 

pragma solidity >=0.6.0<0.8.0;

// 结构体没有mapping时,返回结构体变量时需要加这个
// pragma experimental ABIEncoderV2;

contract TestStruct{
    struct Student{
        uint id;
        string name;
        mapping(string=>uint) grade;
    }
    
    // 定义
    Student stu;
    constructor() public {
        // 初始化时,只有mapping变量不需要给出,其它的都要指定
        stu = Student(11, "ceshi");
        // stu = Student({id: 11, name: "ceshi"}); // 还可以使用这种方式初始化
        stu.grade["100"] = 100;
    }
    
    // 有mapping成员时,只能使用internal或private。
    // 没有mapping成员时,没有这限制
    function getStu() internal view returns(Student memory) {
        return stu;
    }
}

5、枚举

pragma solidity >=0.6.0<0.8.0;

contract TestEnum{
    // 第1个为0,第2个为1
    enum Sex{Man, Woman}
    
    function getEnum1() public pure returns(Sex) {
        return Sex.Man;
    }
    
    function getEnum2() public pure returns(uint) {
        return uint(Sex.Woman);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值