# 用户智能合约 API
# 概述
删除Lua的一些特性,不提供io, os, coroutine, debug, package库。
不支持:
collectgarbage, dofile, getmetatable, loadfile, load, lpcall, setmetatable, xpcall。
支持:
assert, error, ipairs, next, pairs, warn, tonumber, toText, type。
保留Lua table以及基本的语法。
# 方法列表
方法 | 描述 |
---|---|
require_owner_auth():bool | 当前执行合约的账户是否是合约父账户。 |
exec_account():String | 获取当前调用合约账户。 |
get_balance():number | 获取合约父账户余额。 |
get_pay_fee():String,number,String | 获取合约调用者交易费用信息。 |
create_key(key:String):nil | 创建名为key的Text属性。 |
set_key(key:String, value:String):nil | 设置Text属性的key和value。 |
get_key(key:String):String | 返回名为key的Text属性。 |
lcreate(key:String):nil | 创建名为key的list属性。 |
lpush(key:String, value:String):nil | 往名为key的list属性左边添加value。 |
rpush(key:String, value:String):nil | 往名为key的list属性右边添加value。 |
lpop(key:String):String | 删除名为key的list属性左边1个元素,返回删除元素。 |
rpop(key:String):String | 删除为key的list属性右边1个元素,返回删除元素。 |
ldel(key:String):nil | 删除名为key的list属性。 |
llen(key:String):number | 返回名为key的list属性的长度。 |
lall(key:String):table | 返回名为key的list属性所有元素。 |
hcreate(key:String):nil | 创建名为key的hash_map属性。 |
hset(key:String, field:String, value:String):nil | 往名为key的hash_map中添加kv,分别为field和value。 |
hget(key:String, field:String):String | 返回名为key的hash_map中k为field的value。 |
hlen(key:String):number | 返回名为key的hash_map的size。 |
hdel(key:String):nil | 删除名为key的hash_map。 |
grant(account:String, amount:number):nil | 给account转账amount金额。 |
random_seed():number | account下的随机数。 |
# 单聊合约示例
首先需要双方都加入聊天,然后调用send_chat发送聊天。
--
IN = '1';
OUT = '0';
MAX_NUMBER = 256;--最大聊天记录数
MAX_CONTENT_LEN = 128;--最长聊天内容
CHAT_USERS_KEY = 'chat_users';
CHAT_KEY = 'chat';
SENDER = 'sender';
RECEIVER = 'receiver';
TIMESTAMP = 'timestamp';
CONTENT = 'content';
-- 初始化方法
function init()
lcreate(CHAT_KEY);
hcreate(CHAT_USERS_KEY);
end
-- 添加用户
function add_user()
hset(CHAT_USERS_KEY, exec_account(), IN);
end
-- 删除用户
function del_user()
hset(CHAT_USERS_KEY, exec_account(), OUT);
end
--[[
发送聊天
receiver 接收者
timestamp 时间戳
content 聊天内容
--]]
function send_chat(receiver, timestamp, content)
local sender = exec_account();
local sender_user_state = hget(CHAT_USERS_KEY, sender);
local receiver_user_state = hget(CHAT_USERS_KEY, receiver);
if sender_user_state ~= IN or receiver_user_state ~= IN then
error('user first need add to chat_users');
end
if #content >= MAX_CONTENT_LEN then
error('content length must less than '.. MAX_CONTENT_LEN);
end
if llen(CHAT_KEY) >= MAX_NUMBER then
lpop(CHAT_KEY);
end
local chat_info = '{"'.. SENDER .. '":"' .. sender .. '","' .. RECEIVER .. '":"' .. receiver .. '","'.. TIMESTAMP .. '":' .. timestamp ..',"'.. CONTENT .. '":"' .. content .. '"}';
rpush(CHAT_KEY, chat_info);
end