Solidity学习01 HelloWorld
01HelloWorld
编写合约
// SPDX-License-Identifier: MIT
pragma solidity 0.8.0;
contract HelloWeb3 {
string public _string = "Hello Web3!";
}
获取_string值
02 状态变量
类似于c#中的成员变量
https://docs.soliditylang.org/zh/latest/types.html
变量可见性 | ||
---|---|---|
public | 公有 | 合约外部可访问 |
private | 私有 | 合约内部可访问 |
internal | 内部 | 合约内部、继承的合约可访问(相当于c#的protect) |
// SPDX-License-Identifier: MIT
pragma solidity 0.8.0;
contract Test {
// 布尔类型
bool public _isActive;
// 整数类型
int256 public _age;
uint256 public _age1;
// 地址类型
address public _address = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;
address payable public _address1 = payable(_address);
// 地址类型的成员
uint256 public balance = _address1.balance; // balance of address
// 定长字节数组
bytes32 public _byte32 = "Hello Solidity";
bytes1 public _byte = _byte32[0];
// 枚举类型 查询结果为无符号整形
enum Gender {
Man,
Woman
}
Gender public gender = Gender.Woman;
}
03 函数
c#中函数的定义为
public|private|protected <return type> <function name>(<parameter types>) { // Function body }
solidity的函数定义
function <function name>(<parameter types>) {internal|external|public|private} [pure|view|payable] [returns (<return types>)]
函数可见性 | |
---|---|
public | 合约外部可访问 |
private | 合约内部可访问 |
internal | 合约内部、继承的合约可访问(相当于c#的protect) |
external | 只能从合约外部访问 |
- | - |
pure | 不能访问、不能修改状态变量 |
view | 只能访问状态变量,但是不能修改 无gas |
payable | 可以给合约转Eth |
- | 默认为可读可写状态变量,但是调用会收取gas |
// SPDX-License-Identifier: MIT
pragma solidity 0.8.0;
contract Mycontract {
int256 public number = 10;
// 默认function
function add() external {
number = number + 1;
}
// internal
function internalNumber() internal {
number--;
}
// external
function externalNumber() external {
internalNumber();
}
// 默认为可读可写状态变量,但是调用会收取gas
// pure/view 被收取gas的合约调用时,会收取gas
// pure 不能访问、不能修改状态变量 无gas
function pureNumber(int256 _n) public pure returns (int256) {
return _n + 1;
}
// view 只能访问状态变量,但是不能修改 无gas
function viewNumber() public view returns (int256) {
return number + 3;
}
// payable 可以给合约转Eth
function payableNumber() external payable returns (uint256 balance) {
internalNumber();
balance = address(this).balance;
}
}