Solidity语法讲解基本篇(文件结构,数据类型,函数声明与使用)

Solidity源文件布局

pragma (版本杂注)

• 源文件可以被版本 杂注pragma所注解,表明要求的编译
器版本
• 例如:pragma solidity ^0.4.0;
• 源文件将既不允许低于 0.4.0 版本的编译器编译, 也不允许高于(包含) 0.5.0 版本的编译器编译(第二个条件因使用 ^ 被添加)

import(导入其它源文件)

• Solidity 所支持的导入语句import,语法同 JavaScript(从ES6 起)非常类似Solidity源文件布局-- importimport “filename”;

• 从“filename”中导入所有的全局符号到当前全局作用域中
import * as symbolName from “filename”;

• 创建一个新的全局符号 symbolName,其成员均来自 “filename”
中全局符号import {symbol1 as alias, symbol2} from “filename”;

• 创建新的全局符号 alias 和 symbol2,分别从 “filename” 引 用 symbol1 和 symbol2 import “filename” as symbolName;

• 这条语句等同于 import * as symbolName from “filename”;

Solidity值类型

• 布尔(bool):可能的取值为字符常量值 true 或 false

• 整型(int/uint):分别表示有符号和无符号的不同位数的整型变量; 支持
关键字 uint8 到 uint256(无符号,从 8 位到 256 位)以及 int8 到 int256, 以 8 位为步长递增

• 定长浮点型(fixed / ufixed): 表示各种大小的有符号和无符号的定长浮
点型;在关键字 ufixedMxN 和 fixedMxN 中,M 表示该类型占用的位数,N 表示可用的小数位数

• 地址(address):存储一个 20 字节的值(以太坊地址大小)

• 定长字节数组:关键字有 bytes1, bytes2, bytes3, …, bytes32

• 枚举(enum):一种用户可以定义类型的方法,与C语言类似,默认从0
开始递增,一般用来模拟合约的状态

• 函数(function):一种表示函数的类型

Solidity引用类型

数组(Array)

• 数组可以在声明时指定长度(定长数组),也可以动态调整大小(变长数组、动态数组)

• 对于存储型(storage) 的数组来说,元素类型可以是任意的(即元素也可以是数组类型,映射类型或者结构体);对于内存型(memory)的数组来说,元素类型不能是映射(mapping)类型

结构体(Struct)

• Solidity 支持通过构造结构体的形式定义新的类型

映射(Mapping)

• 映射可以视作 哈希表 ,在实际的初始化过程中创建每个可能的 key,并将其映射到字节形式全是零的值(类型默认值)

Solidity地址类型

address

• 地址类型存储一个 20 字节的值(以太坊地址的大小);地址类型也有成员
变量,并作为所有合约的基础address payable(v0.5.0引入) • 与地址类型基
本相同,不过多出了 transfer 和 send 两个成员变量两者区别和转换

• Payable 地址是可以发送 ether 的地址,而普通 address 不能

• 允许从 payable address 到 address 的隐式转换,而反过来的直接转换是
不
可能的(唯一方法是通过uint160来进行中间转换)

• 从0.5.0版本起,合约不再是从地址类型派生而来,但如果它有payable的回
退函数,那同样可以显式转换为 address 或者 address payable 类型
地址类型成员变量<address>.balance (uint256)

• 该地址的 ether 余额,以Wei为单位
<address payable>.transfer(uint256 amount)

• 向指定地址发送数量为 amount 的 ether(以Wei为单位),失败时抛出异常,
发送 2300 gas 的矿工费,不可调节
<address payable>.send(uint256 amount) returns (bool)

• 向指定地址发送数量为 amount的 ether(以Wei为单位),失败时返回
 false,发送 2300 gas 的矿工费用,不可调节
 <address>.call(bytes memory) returns (bool, bytes memory)

• 发出底层函数 CALL,失败时返回 false,发送所有可用 gas,可调节
<address>.delegatecall(bytes memory) returns (bool, bytes memory)

• 发出底层函数 DELEGATECALL,失败时返回 false,发送所有可用 gas,
可调节<address>.staticcall(bytes memory) returns (bool, bytes memory)

• 发出底层函数 STATICCALL ,失败时返回 false,发送所有可用 gas,可调节

地址成员变量用法

balance 和 transfer

• 可以使用 balance 属性来查询一个地址的余额, 可以使用 transfer 函数向一个payable地址发送 以太币Ether(以 wei 为单位)

address payable x = address(0x123); 
address myAddress = address(this); 
if (x.balance < 10 && myAddress.balance >= 10) 
x.transfer(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值