Solidity学习01 HelloWorld

01HelloWorld

编写合约


// SPDX-License-Identifier: MIT
pragma solidity 0.8.0;

contract HelloWeb3 {
    string public _string = "Hello Web3!";
}

获取_string值
image

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;
    }
}

posted @ 2021-01-13 13:51  sorachannel  阅读(359)  评论(0)    收藏  举报