3 智能合约函数
恒为链提供了一系列的智能合约内置函数,部分函数可以调用区块链服务,等同于调用JSON-RPC接口。
3.1 保存合约状态
合约状态实际上是以一个K/V对的形式存在,
接口名称:
saveContractStatus(k, v)
参数说明:
k: 必须是字符串或者数字,其是合约状态的ID,必选参数。
v: 是该状态对应的值,当v是非null时,则对v采取JSON格式编码后保存, v可以是对象,也可以是简单类型:字符串,数字或boolean。当v是null时,则删除该合约状态。
返回值:
成功,如果v是非null, 则如果k不存在,为true, 否则为false; 如果v是null,则如果k存在,为true,否则为false。
失败,产生错误异常。
3.2 查询合约状态
接口名称:
getContractStatus(k, exist, v)
参数说明:
k: 被查询的合约状态的ID,必须是字符串或数字,其在整个合约空间内唯一。
exist: 是否k的状态必须存在,可选参数。
v: 当前k不存在时,其返回的缺省值,可选参数。
返回值:
如果被查询k的合约状态v不存在,则如果exist为false,返回null,如果exist为true,产生错误异常。
如果被查询k的合约状态v存在,则对v进行解码后,返回。
3.3 保存合约MAP状态
合约MAP可以认为是相关K/V对的集合,每个MAP由一个name唯一标记, MAP内的数据项仍然是由一个k来区分,
接口名称:
saveContractMap(name, k, v)
参数说明:
name: MAP的ID,必须是字符串
k: 被查询的Map内的合约状态ID,其类型必须是字符串或数字,其在该Map内唯一。
v: 是该状态的值,其为可选参数,含义如下:
当v是非null时,则对v采取JSON格式编码后保存, v可以是对象,也可以是简单类型:字符串,数字或boolean,
当v是null时,则从Map中删除该合约状态。
返回值:
成功,如果v是非null, 则如果k不存在,为true, 否则为false; 如果v是null,则如果k存在,为true,否则为false
失败,产生错误异常
注: Map的引入使得不同Map可以有相同的k。
3.4 查询合约MAP状态
接口名称:
getContractMap(name, k, exist, v)
参数说明:
name: Map的ID。
k: 被查询的Map内的合约状态ID。
exist: 是否k必须存在,可选参数,Boolean类型。
v: 当查询的k不存在且exist为false时,返回的缺省值, 可选参数。
返回值:
如果被查询k的合约状态v不存在,则如果exist为false,返回null,如果exist为true,产生错误异常。
如果被查询k的合约状态v存在,则对其解码后返回。
3.5 查询合约Map所包含的状态数
接口名称:
getContractMapTotal(name)
参数说明:
name: Map的ID。
返回值:
被查询Map中所包含的K/V对的数目。
3.6 根据索引查询合约MAP状态
每个被添加到MAP中的K/V对,都有一个对应的整数索引,索引从1开始编号,整个MAP中的索引范围是[1, N],N是 MAP中所包含的状态数,即通过前面的getContractMapTotal获取的结果。
接口名称:
getContractMapByIndex(name, index, exist)
参数说明:
name: Map的ID。
index: 整数索引。
exist: 是否该值必须存在,可选参数。
返回值:
如果被查询的合约状态不存在,则,如果exist为false, 返回null,如果exist为true,产生错误异常。
如果被查询的合约状态v存在,则对其解码后,返回v。除此之外, 该接口还会在第二个返回值里返回该状态在Map中的对应k,字符串类型。即当查询的MAP中的状态存在时,其返回值是一对值,即(v, k)。
3.7 从合约账号转出数字货币
合约代码可调用该接口从合约账号中转出资产到指定账号。
接口名称:
transferAmount(to, amount)
参数说明:
to: 转出的目的账号。
amount: 转出的资产数额,可以是二级资产。
返回值:
转账失败,则产生错误异常,否则,执行成功。
注:向合约账号转入数字货币,是在调用合约时,完成的。
3.8 查询账号
用于判断账号是否在账本上存在。
接口名称:
accountExists(account)
参数说明:
account: 账号地址,字符串类型。
返回值:
存在为true,否则,为false。
3.9 创建NFTAsset
合约账号创建NFT Asset。
接口名称:
createNFAsset(id, flags, name)
参数说明:
id: 创建NFT Asset的用户ID,字符串类型。
flags: 该类NFT Asset的特性或者说允许的操作的编码,与AssetCreate交易中的Flags字段一致,整数类型。
name: 可选,资产描述性名称,字符串类型。
返回值:
成功,返回AssetID字符串;失败,则产生错误异常。
3.10 销毁NFTAsset
合约账号销毁自己创建的NFT Asset。
接口名称:
destroyNFAsset(assetid)
destroyNFAsset(account, id)
参数说明:
assetid: NFT Asset的唯一ID,Hash256字符串。
account: NFT Asset创建者的账号,字符串类型。
id: NFT Asset的用户ID,字符串类型。
返回值:
如果销毁失败,则产生错误异常;如果销毁成功,则正常返回,合约继续执行。
3.11 创建NFT
被调用合约账号创建NFT,
接口名称:
createNFToken(assetid, id, name, owner)
参数说明:
assetid: 创建的NFT Token所属的Asset ID,字符串类型。
id: 创建的NFT Token的用户ID,字符串类型。
name: 创建的NFT Token的名字,可选参数,字符串类型。
owner: 创建的NFT Token的所有者,可选参数,字符串类型,如果没有该参数,则所有者是合约账号。
返回值:
如果创建失败,则产生错误异常;如果创建成功,则返回TokenID,字符串类型;
如果相同id的Token已经存在,则会创建失败。
3.12 废除NFT
被调用合约账号废除其发行的NFT,
接口名称:
revokeNFToken(assetid, id)
revokeNFToken(tokenid)
参数说明:
assetid: 废除的NFT AssetID,字符串类型。
id: 废除的NFT Token用户ID,字符串类型。
tokenid: 废除的NFT TokenID,字符串类型。
返回值:
如果废除失败,则产生错误异常;如果废除成功,则正常返回,合约继续执行。
3.13 转入NFT到合约账号
将调用合约的账号上的NFT转入到被调用合约账号。
接口名称:
transferInNFToken(assetid, id)
transferInNFToken(tokenid)
参数说明:
assetid: 转移的NFT AssetID,字符串类型。
id: 转移的NFT Token用户ID,字符串类。
tokenid: 转移的NFT TokenID,字符串类型。
返回值:
如果转移失败,则产生错误异常;如果转移成功,则正常返回,合约继续执行。
3.14 从合约账号转出NFT
将被调用合约账号上的NFT转入到指定账号。
接口名称:
transferOutNFToken(to, assetid, id)
transferOutNFToken(to, tokenid)
参数说明:
to: 转出NFT的目的账号
assetid: 转移的NFT AssetID,字符串类型。
id: 转移的NFT Token用户ID,字符串类型。
tokenid: 转移的NFT TokenID,字符串类型。
返回值:
如果转移失败,则产生错误异常;如果转移成功,则正常返回,合约继续执行。
3.15 销毁NFT
将被调用合约账号上的NFT进行销毁。
接口名称:
destroyNFToken(assetid, id)
destoryNFToken(tokenid)
参数说明:
assetid: 被销毁的NFT AssetID,字符串类型。
id: 被销毁的NFT Token用户ID,字符串类型。
tokenid: 被销毁的NFT TokenID,字符串类型。
返回值:
如果销毁失败,则产生错误异常;如果销毁成功,则正常返回,合约继续执行。
3.16 查询NFTAsset信息
查询某个NFT资产信息。
接口名称:
getNFAssetInfo(account, id, exist, v)
getNFAssetInfo(assetid, exist, v)
参数说明:
account: 创建资产的账号,字符串类型。
id: 资产用户ID,字符串类型。
assetid: NFT AssetID,字符串类型。
exist: 是否查询的资产必须存在,可选参数,Boolean类型。
v: 当查询的资产不存在,且exist为false时,返回的缺省值, 可选参数,对象类型。
返回值:
如果被查询NFT资产不存在,则如果exist为false,返回null,如果exist为true,产生错误异常。
如果被查询NFT资产存在,则返回资产信息,对象类型,其具体内容与调用NFT Asset查询RPC接口,返回的NFT Asset信息一致。
3.17 查询NFTToken信息
查询某个NFToken信息。
接口名称:
getNFTokenInfo(assetid, id, exist, v)
getNFTokenInfo(tokenid, exist, v)
参数说明:
assetid: NFT AssetID,字符串类型。
id: NFT Token用户ID,字符串类型。
tokenid: NFT TokenID,字符串类型。
exist: 是否查询的Token必须存在,可选参数,Boolean类型。
v: 当查询的Token不存在,且exist为false时,返回的缺省值,可选参数,对象类型。
返回值:
如果被查询NFToken不存在,则如果exist为false,返回null,如果exist为true,产生错误异常。
如果被查询NFToken存在,则返回Token信息,对象类型,其具体内容与调用NFT Token查询RPC接口,返回的NFT Token信息一致。
3.18 计算Hash值
计算某个输入串的Hash值,
接口名称:
calcHash(data, type)
参数说明:
data: 计算Hash的输入字符串。
type: Hash类型,保留参数,暂时未用到,忽略即可。目前,计算的Hash类型是SHA256。
返回值:
如果执行成功,返回的是Hash的字符串;如果执行失败,则产生错误异常。
3.19 合约账号设置
设置合约账号的相关信息。
接口名称:
setAccountInfo(info)
参数说明:
info: 要设置的信息,对象或字符串类型,如果要设置账号的Flags字段,则info为如下形式: { "Flags":8 }
返回值:
如果失败,则产生错误异常;如果成功,则正常返回,合约继续执行。
3.20 合约账号授信
合约账号授信某个二级资产。
接口名称:
setTrustLine(limit)
参数说明:
limit: 授信的二级资产信息,对应TrustSet交易中的LimitAmount字段,其格式可以是对象或字符串类型,如下所示:
{ "currency":"CNY", "issuer":"hBms2u4NmEhF6iuNdwwqv75iTMBi5N8mnW", "value":100000000}
返回值:
如果失败,则产生错误异常;如果成功,则正常返回,合约继续执行。