合约数据类型
基本数据类型
蚂蚁区块链合约平台基本支持 Solidity 所有的数据类型,但是对于一些用户编写的合约的输入参数类型并没有完全的支持,比如参数输入中二维数组的输入。同时,蚂蚁区块链合约平台提供了 identity
类型来标注每一个用户的身份,不支持原生 Solidity 中的 address
类型,identity 的长度为 32 字节。
平台建议使用数据类型示例如下所示:
数据类型 | 参考样例 | 合约内部是否支持 | 输入参数是否支持 |
bool | bool a = true | 是 | 是 |
uint | uint a = 1 | 是 | 是 |
uint8 ~ uint256 | uint8 a = 1 | 是 | 是 |
int | int a = 1 | 是 | 是 |
int8 ~ int256 | int8 a = 1 | 是 | 是 |
bytes | bytes a = “test” | 是 | 是 |
bytes1 ~ bytes32 | bytes1 a = “a” | 是 | 是 |
string | string a = “test” | 是 | 是 |
identity | identity id = 0x1234567890123456789012345678901234567890123456789012345678901234567890000 | 是 | 是 |
int[] | int256[] a = [1,2,3,4,5] | 是 | 是 |
uint[] | uint256[] a = [1,2,3,4,5] | 是 | 是 |
bytes1[] ~ bytes32[] | bytes4[] asd = new bytes4; | 是 | 是 |
string[] | string[] a = [“adbc”,”dg”] | 是 | 否 |
enum | enum a {a,b,c} | 是 | 否 |
struct | struct a { string name;} | 是 | 否 |
合约内部使用:指在合约内部的使。
输入参数:指在客户端调用函数方法时传入参数的类型。
例如在 前述的积分管理合约 的发放方法中,identity
类型和 int256
类型属于输入参数的类型,在合约内部和输入参数都支持。
function Issue(identity account, int256 value)
但是,对于用户积分和账户 ID 对应的声明类型 mapping,在合约内部使用时是可以的,但是无法作为函数的传入类型,如下所示:
function example(mapping(identity=>int256) map) // 错误,不支持 mapping 作为输入参数类型
其他类型
除了上述数据类型外,Solidity 还支持其他类型,比如:
映射、字典(mapping)
结构体(struct)
时间单位(seconds,minutes,hours,days,weeks,years)
更多信息,可查看 Solidity 官网关于类型的文档(英文)。