- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
基础语法
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: 保证不修改状态 接收以太币函数receive:receive() external payable { ... }函数声明不用function- 如下图