语法学习
//没有这一句会有警告
// 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
数据类型
- uint8 -> uint256: 地址长度 8位递增
- string -> 字符串,不可变,可强转
- mapping(uint => uint) scoreList; 字典
数据存储位置
memory内存变量,调用结束就消失storage状态变量,随着合约进入分布式账本calldata永久存储
修饰符
- 变量修饰符:
publicorprivate - 函数修饰符
- 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