Solidity入门

561 阅读1分钟

基础语法

pragma solidity >=0.4.16 < 0.9.0;

contract SimpleStorage {
    uint storedData;

    function set(uint x) public {
        storedData = x;
    }

    function get() public view returns (uint) {
        return storedData;
    }
}
  • 其中pragma代表当前Solidity代码适用的版本
  • uint代表基础类型

结构体

contract Coin {
    struct Test { // 结构体
        uint size;
        bool id;
        address school;
    }
}

枚举

enum State { HTC, Apple, Nax } // 枚举
}
  • 基础类型如下
uint8 无符号8位数的整型变量
uint256 256位~~
  • 地址类型
address:代表20字节的值或者可以说是 
address payable:顾名思义->可以支付的地址,或者说是 以太币地址
  • address地址中的成员变量
    • balance查询一个地址的余额
    • transfer 向一个地址支付以太币

状态变量

Evrnt事件

  • 调用以太坊虚拟机(EVM)日志功能的接口
contract Coins {
    event Withdraw(address bidder, uint amount); // 事件

    function bid() public payable {
        // ...
        emit Withdraw(msg.sender, msg.value); // 触发事件
    }
}

Mapping

  • Coinns  合约定义了一个公共 balances 映射
    • 键类型为 address,值类型为 uint, 将以太坊地址映射为 无符号整数值。
    • 由于 uint 是值类型,因此getter返回与该类型匹配的值
contract Coins {
    mapping(address => uint) public balances;

    function update(uint newBalance) public {
        balances[msg.sender] = newBalance;
    }
}

特殊的外部调用

  • external: 可以从其他合约和交易中调用
  • public:在内部或通过消息调用
  • internal: 只能通过内部调用
  • private: 只能在当前的合约中调用

Owner

  • modifier可以将这个关键词认为是java中的重载
    • 下面的代码,只有当Owner调用的时候才能自动出发出发
modifier onlyOwner {
        require(
            msg.sender == owner,
            "Only owner can call this function."
        );
        _;
    }

定义常量

  • constant: 合约一旦部署以后,值不允许改变
  • immutable: 修饰的值,只有在部署的时候才能确定 视图函数
  • view: 保证不修改状态 接收以太币函数
  • receivereceive() external payable { ... } 函数声明不用function
    • 如下图

image.png