Skip to content

solidity

datatype

solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2 <0.9.0;

contract ArrayType {
    uint8[3] data;

    uint8[] ddata;

    // function testStaticArray1() internal view returns (uint8[3] storage) {
    //     return data;
    // }

    // function testStaticArray2() public view returns (uint8[3] memory) {
    //     // data[0] = 25;
    //     return data;
    // }

    function testStaticArray() public returns (uint8[3] memory) {
        data[0] = 25;
        return data;
    }

    function testReadDynamicStorageArray()
        public
        view
        returns (uint8[] memory)
    {
        return ddata;
    }

    function testWriteDynamicStorageArray() public {
        ddata.push(32);
        ddata.pop();
        ddata.push(60);
    }

    function testMemoryDynamicArra(
        uint8 size
    ) public pure returns (uint8[] memory) {
        uint8[] memory mdata = new uint8[](size + 1);
        // for (uint8 i = 0; i < size; i++) {
        //     mdata[i] = i;
        // }
        // mdata.push(67);
        return mdata;
    }
}
solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2 <0.9.0;

contract BasicType {
    function testInt() public pure returns (uint256) {
        uint8 i8_0 = 12;
        uint8 i8_1 = 0;
        uint8 i8_2 = 8;
        // uint8 i8_3 = -1;
        uint8 i8_4 = 255;
        // uint8 i8_5 = 256;
        // i8_4++;

        uint8 x = 8;
        uint16 y = 9;
        // x = y; // error
        // 强制类型转换
        // x = uint8(y);
        y = x;

        uint256 i256_1 = 255;
        i256_1++;
        uint256 max = type(uint256).max;
        return max;
        // 115792089237316195423570985008687907853269984665640564039457584007913129639935
    }

    enum OrderState {
        layorder,
        paymen
    }

    function enumTest() public view returns (OrderState) {
        OrderState state = OrderState.layorder;
        // OrderState state = OrderState.paymen;
        return state;
    }
}
solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2 <0.9.0;

contract BytesAndString {
    // 初始化方式 new
    string name = "BytesAndString"; // new string(5);
    bytes name1 = "BytesAndString1"; // new bytes(5);

    // bytes memory name1 = bytes("BytesAndString1");
    // bytes memory name1 = bytes(abi.encodePacked("BytesAndString1"));

    // string 是不能修改的, bytes 是可以修改的

    function testStringAndBytes() public view returns (string memory) {
        // 初始化方式 new
        // 为什么用 new ?
        // struct 初始化为什么不用 new ?
        string memory data = "xyz";
        bytes memory data1 = "cd";

        // 不同 location 的 memory 拷贝
        data = name;
        data1 = name1;

        // 类型转换
        data1 = bytes(data);
        data = string(data1);
        // 下标访问
        bytes1 b = data1[0];
        data1[0] = 0x88;
        // bytes(data)[0] = 0x88;

        // name1.push(0x00);
        // data1.push(0x00);
        return data;
    }

    // bytes 与 byte1[] 的区别
}
solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2 <0.9.0;

contract ComplexValueType {
    function testAddress() public view returns (address) {
        address addr = msg.sender;
        // 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4
        // 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4

        return addr;
    }

    function testMyAddress() public view returns (address) {
        address addr = address(this);

        // 0x5FD6eB55D12E759a21C09eF703fe0CBa1DC9d88D
        // 0x5FD6eB55D12E759a21C09eF703fe0CBa1DC9d88D
        return addr;
    }

    // Contract Type
    // function testContract() public view {
    //     ComplexValueType myContract = this;
    // }

    function testFixedByteArray() public pure returns (bytes3) {
        // default: 0x000000
        bytes3 data = 0x111111;
        return data;
    }

    function testFixedByteArray1() public pure returns (bytes1) {
        // default: 0x000000
        bytes3 data = 0x111111;

        // 0x11
        bytes1 first = data[0];
        return first;
    }
}
solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2 <0.9.0;

contract MappingType {
    mapping(string => uint8) public ages;
    mapping(string => mapping(string => uint8)) public ages1;

    function getAge(string memory name) public view returns (uint8) {
        return ages[name];
    }

    function setAge(string memory name, uint8 age) public {
        // mapping(string => uint8) storage myages = ages;
        ages[name] = age;
    }

    // 一般规则: public menory calldata internal private 可以是 storage
    // mapping: 只能是 storage
    //  => public 函数参数或者返回值不可能出现 mapping 类型

    // 写一个 internal 或者 private 函数,传递 storage 的 mapping
    // function setAge1(
    //     mapping(string => uint8) storage myages,
    //     string memory name,
    //     uint8 age
    // ) internal {
    //     myages[name] = age;
    // }
}
solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2 <0.9.0;

contract StructType {
    struct Person {
        string name;
        uint8 age;
        Home home;

        // Person bestFriend;
        // 测试递归
    }

    Person master;

    struct Home {
        string country;
        string province;
        string city;
    }

    // 测试 struct 作为参数
    function readPerson() public view returns (Person memory) {
        return master;
    }

    function writePerson(Person memory p) public {
        master = p;
    }

    function writePersonName(string memory name) public {
        master.name = name;
    }

    // 测试内存 struct. 对 struct 来说,memory 与 storage 并没有大的影响
    function testMemoryStruct() public pure returns (Person memory) {
        // Person memory p = Person(
        //     "zhangsan",
        //     18,
        //     Home("China", "Shanghai", "Shanghai")
        // );
        // return p;
        Person memory p;
        p.name = "cd";
        p.age = 28;

        return p;
    }

    // 测试内存 location 为 storage 的局部变量
    function testStorageLocalStruct() public view returns (Person memory) {
        Person storage p = master;

        // p.name = "dd";
        // p.age = 29;

        return p;
    }
}

contracts

solidity
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.8.2 <0.9.0;

contract BanlanceManager {
    mapping(address => uint256) public balanceOf;

    string public name = "MYDOLLAR";
    string public symbol = "$";
    uint8 public decimals = 4;

    constructor(uint256 totalBalance) {
        balanceOf[msg.sender] = totalBalance;
    }

    function transfer(
        // address from,
        address to,
        uint256 amount
    ) public {
        address from = msg.sender;
        uint256 fb = balanceOf[from];
        uint256 tb = balanceOf[to];

        require(amount <= fb, "Insufficient balance");

        fb -= amount;
        tb += amount;
        balanceOf[from] = fb;
        balanceOf[to] = tb;
    }
}

// 0x3261f5Fe789eB2780062B8cc3a98e947ac9F801B
// 0x380d495A265ACd2D1D6c506d28CD70FA7610f8B2

// 0x6Ad1B2dD054eB74F4CeBbC6D5681062A250189C5

Layout Switch

Adjust the layout style of VitePress to adapt to different reading needs and screens.

Expand all
The sidebar and content area occupy the entire width of the screen.
Expand sidebar with adjustable values
Expand sidebar width and add a new slider for user to choose and customize their desired width of the maximum width of sidebar can go, but the content area width will remain the same.
Expand all with adjustable values
Expand sidebar width and add a new slider for user to choose and customize their desired width of the maximum width of sidebar can go, but the content area width will remain the same.
Original width
The original layout width of VitePress

Page Layout Max Width

Adjust the exact value of the page width of VitePress layout to adapt to different reading needs and screens.

Adjust the maximum width of the page layout
A ranged slider for user to choose and customize their desired width of the maximum width of the page layout can go.

Content Layout Max Width

Adjust the exact value of the document content width of VitePress layout to adapt to different reading needs and screens.

Adjust the maximum width of the content layout
A ranged slider for user to choose and customize their desired width of the maximum width of the content layout can go.

Spotlight

Highlight the line where the mouse is currently hovering in the content to optimize for users who may have reading and focusing difficulties.

ONOn
Turn on Spotlight.
OFFOff
Turn off Spotlight.