Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

语法学习

//没有这一句会有警告
// SPDX-License-Identifier: GPL-3.0

//指明版本
pragma solidity >=0.8.7 <0.9.0;

//声明合约
contract trans{
    uint8 tt;

    function setTT(uint8 i) public {
        tt = i;
    }

    //view : 当前函数不会修改账本数据
    //int uint : 默认是uint256
    function getTT() public view  returns (uint8){
        return tt;
    }
}

关键字

  • contract
  • constructor
  • public
  • private
  • external
  • internal
  • view
  • pure
  • payable

数据类型

  1. uint8 -> uint256: 地址长度 8位递增
  2. string -> 字符串,不可变,可强转
  3. mapping(uint => uint) scoreList; 字典

数据存储位置

  1. memory 内存变量,调用结束就消失
  2. storage 状态变量,随着合约进入分布式账本
  3. calldata 永久存储

修饰符

  1. 变量修饰符: public or private
  2. 函数修饰符
    • view 函数不会改变任何东西,被view修饰的函数可以读取外部变量,不能修改
    • pure 函数只能处理参数,不能读写函数以外的任何东西

合约调用者地址 address owner = msg.sender; address payable // 可转账合约地址

地址和地址相关操作

address 合约地址&外部账户地址

  • balacne : 地址余额
  • transfer : 转账 ,将当前合约余额转给调用者 ex:
contract TestTransfer{
    address addr = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;
    function trans() public {
        payable(addr).transfer(3*10**18);
    }   
}

常见问题

Warning: Visibility for constructor is ignored. If you want the contract to be non-deployable, making it "abstract" is sufficient.

合约构造方法添加了错误的可见性修饰符,比如 public