定义用于查询操作属性的API.
uint32_t read_action_data (void *msg, uint32_t len)
将当前操作数据复制到指定的位置.
uint32_t action_data_size ()
获取当前操作的数据字段的长度。
void require_recipient (account_name name)
将指定的帐户添加到要通知的帐户集。
void require_auth (account_name name)
验证指定的帐户是否存在于所提供的一组授权中。
bool has_auth (account_name name)
void require_auth2 (account_name name, permission_name permission)
验证指定的帐户是否存在于所提供的一组授权中。
void send_inline (char *serialized_action, size_t size)
void send_context_free_inline (char *serialized_action, size_t size)
void require_write_lock (account_name name)
验证该名称存在于持有的写锁集合中。
void require_read_lock (account_name name)
验证该名称存在于保持的读锁集合中。
time publication_time ()
获取发布时间。
account_name current_sender ()
获取操作的执行者。
account_name current_receiver ()
获取该动作的当前接收者。
EOS.IO的action具有以下抽象结构:
struct action {
scope_name scope; // the contract defining the primary code to execute for code/type
action_name name; // the action to be taken
permission_level[] authorization; // the accounts and permission levels provided
bytes data; // opaque data processed by code
};
该API使您的合同能够检查当前操作的字段并相应采取行动。
例子:
// Assume this action is used for the following examples:
// {
// "code": "eos",
// "type": "transfer",
// "authorization": [{ "account": "inita", "permission": "active" }],
// "data": {
// "from": "inita",
// "to": "initb",
// "amount": 1000
// }
// }
char buffer[128];
uint32_t total = read_action(buffer, 5); // buffer contains the content of the action up to 5 bytes
print(total); // Output: 5
uint32_t msgsize = action_size();
print(msgsize); // Output: size of the above action's data field
require_recipient(N(initc)); // initc account will be notified for this action
require_auth(N(inita)); // Do nothing since inita exists in the auth list
require_auth(N(initb)); // Throws an exception
print(now()); // Output: timestamp of last accepted block
action_data_size()
uint32_t action_data_size()
获取当前动作的数据字段的长度此方法对动态大小的action很有用
current_receiver()
account_name current_receiver()
获取action的接收者。
返回
当前action接收者的帐户
current_sender()
account_name current_sender()
获取当前action的发送者账户
has_auth()
bool has_auth(account_name name)
publication_time()
time publication_time()
返回publication_time 1970年以秒为单位的时间.
read_action_data()
uint32_t read_action_data(void * msg, uint32_t len)
将当前操作数据的len个字节复制到指定的位置
require_auth()
void require_auth(account_name name)
验证该操作中提供的身份验证集中是否存在该名称。 如果找不到,则throws
require_auth2()
void require_auth2(account_name name,permission_name permission)
验证该操作中提供的身份验证集中是否存在该名称。 如果找不到,则throws
require_read_lock()
void require_read_lock(account_name name)
验证该动作中保存的读锁的名称是否存在。 如果找不到,则throws
参数
require_recipient()
void require_recipient(account_name name)
将指定的帐户添加到要通知的帐户集
参数
- name - 待验证账户的名称
require_write_lock()
void require_write_lock(account_name name)
验证该操作中保存的写锁集合中是否存在该名称。 如果找不到,则throws
send_context_free_inline()
void send_context_free_inline(char * serialized_action, size_t size)
在此操作的父事务处理的上下文中发送内联上下文免费操作
send_inline()
void send_inline(char * serialized_action, size_t size)
在此操作的父事务处理的上下文中发送内联操作