本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1、合约的一些重要关键字:
public 公有,任何人(拥有以太坊账户的)都可以调用
private 私有, 只有智能合约内部可以调用
external 仅合约外部可以调用,合约内部需使用this调用
internal 仅合约内部和继承的合约可以调用
view/constant 函数会读取但是不会修改任何contract的状态变量
pure(纯净的) 函数不使用任何智能合约的状态变量
payable 调用函数需要付钱,钱付给了智能合约的账户
returns 返回值函数声明中使用 //含s
2、先创建一个合约
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract SimpleStorage {
//这样我们就创建了一个名为SimpleStorage的空合约
}
3、我们可以在这个合约里声明一些变量。
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract SimpleStorage {
uint a ; //声明一个无符号整型 a 默认为uint256
int b ; //声明一个无符号整型 b 默认为int256
bool c ; //声明一个bool类型
string d ; //声明一个字符串类型
address f ; //声明一个地址,通过地址校验和测试的十六进制字面常量
ixed g ; // 定长浮点型,有的符号的固定位浮点数
uixed h ;//定长浮点型,无符号固定位浮点数
enum weekday{sun,mon,tue,wed,the,fri,sat}; //枚举
}
3、我们再声明一个方法
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract SimpleStorage {
address f ;
function getBalance(address people) public view returns (uint){
return address(people).balance; //获取余额
}
}
4、再来一个映射
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract SimpleStorage {
address f ;
mapping (uint => address) public addressData;
function getBalance(address people ,unit b) public view returns (uint){
people=addressData[b]
return address(people).balance; //获取余额
}
}
5、可以讲讲solidity的专属变量address
以太坊中的地址的长度为`20字节`,`一字节等于8位`,一共`160位`,所以`address`其实亦可以用`uint160`来声明。
类型转换:`address payable`可以隐式转换为简单的`address`类型,这表示你可以将`address payable`分配给`address`类型,而无需显式转换。