Skip to content

智能合约开发2

🕒 Published at:

合约的组成

solidity
// SPDX-License-Identifier:  MIT //开源协议
pragma solidity ^0.8.0; //编译器版本要大于0.8.0
contract Counter {  //定义合约
	uint public counter; //状态变量
	constructor(){
		counter =0;
	}
	funtion count()public{ //合约函数
		counter+=1;
	}
}
// SPDX-License-Identifier:  MIT //开源协议
pragma solidity ^0.8.0; //编译器版本要大于0.8.0
contract Counter {  //定义合约
	uint public counter; //状态变量
	constructor(){
		counter =0;
	}
	funtion count()public{ //合约函数
		counter+=1;
	}
}

solidity 语言

  • 静态类型、编译型、高级语言
  • 针对 EVM 专门设计 zh
  • 受 c++、javascript 等语言影响
  • 文档中文,官方

solidity 数据类型

  • 值类型
    • 布尔、整型、定长浮点型、定长字节数组、枚举、函数类型、地址类型
    • 十六进制常量、有理数和整型常量、字符串常量、地址常量
  • 引用类型
    • 结构体
    • 数组
  • 映射类型

整型

int/uint,uint8...uint256

支持的运算符

  • 比较运算:<=,<,==,!=,>=,>
  • 位运算:&,|,^(异或),~(位取反)
  • 算数运算:+,-,*,/,%(取余数),**(幂)
  • 移位:<<(左移),>>(右移)

在使用整型时,要特别注意整型的大小及所能容纳的最大值和最小值,如 uint8 的最大值是 0xff(255),最小值是 0

从 solidity0.6.0 版本开始可以通过 Type(T).min 和 Type(T).max 获得整型的最小值和最大值

地址类型

solidity 使用地址类型来表示一个账号,地址类型有两种形式

  • address:一个 20 字节的值
  • address payable:表示可支付地址,与 address 相同也是 20 字节,不过它有成员函数 transfer 和 send

成员函数

  • <address>balance(uint256):返回地址的余额
  • <address payable>transfer(uint256 amount):向地址发送以太币,失败时抛出异常
  • <address payable>send(uint256 amount) returns(bool):向地址发送以太币,失败时返回 false
  • 3 个底层成员函数:call,delegatecall,staticcall 例如<address>.call(bytes memory) returns (bool, bytes memory),通常用于合约交互,直接控制编码的方式调用合约函数

合约类型

每个合约都是一个类型

合约可以显示地转换为 address 类型,从而可以使用地址类型的成员函数

这段时间太忙了,先学到这吧...挖坑,后面再填