CDT  v4.2.0
инструменты разработчика
permission.hpp
См. документацию.
1
5#pragma once
6
7#include "transaction.hpp"
8#include "../../core/eosio/crypto.hpp"
9#include "../../core/eosio/name.hpp"
10#include "../../core/eosio/time.hpp"
11
12#include <set>
13#include <limits>
14
15namespace eosio {
16 namespace internal_use_do_not_use {
17 extern "C" {
18 __attribute__((eosio_wasm_import))
19 int32_t check_transaction_authorization(const char*, uint32_t,
20 const char*, uint32_t,
21 const char*, uint32_t);
22 __attribute__((eosio_wasm_import))
23 int32_t check_permission_authorization( uint64_t, uint64_t,
24 const char*, uint32_t,
25 const char*, uint32_t,
26 uint64_t);
27 __attribute__((eosio_wasm_import))
28 int64_t get_permission_last_used(uint64_t, uint64_t);
29
30 __attribute__((eosio_wasm_import))
31 int64_t get_account_creation_time(uint64_t);
32 }
33 }
34
48 bool
49 check_transaction_authorization( const char* trx_data, uint32_t trx_size,
50 const char* pubkeys_data, uint32_t pubkeys_size,
51 const char* perms_data, uint32_t perms_size ) {
52 return internal_use_do_not_use::check_transaction_authorization( trx_data, trx_size, pubkeys_data, pubkeys_size, perms_data, perms_size );
53 }
54
69 bool
70 check_permission_authorization( name account,
71 name permission,
72 const char* pubkeys_data, uint32_t pubkeys_size,
73 const char* perms_data, uint32_t perms_size,
74 microseconds delay ) {
75 int64_t delay_us = delay.count();
76 check(delay_us >= 0, "negative delay is not allowed");
77 return internal_use_do_not_use::check_permission_authorization( account.value, permission.value, pubkeys_data, pubkeys_size, perms_data, perms_size, static_cast<uint64_t>(delay_us) );
78 }
79
80
98 bool
99 check_transaction_authorization( const transaction& trx,
100 const std::set<permission_level>& provided_permissions ,
101 const std::set<public_key>& provided_keys = std::set<public_key>()
102 )
103 {
104 auto packed_trx = pack(trx);
105
106 std::vector<char> packed_keys;
107 auto nkeys = provided_keys.size();
108 if( nkeys > 0 ) {
109 packed_keys = pack(provided_keys);
110 }
111
112 std::vector<char> packed_perms;
113 auto nperms = provided_permissions.size();
114 if( nperms > 0 ) {
115 packed_perms = pack(provided_permissions);
116 }
117
118 auto res = internal_use_do_not_use::check_transaction_authorization( packed_trx.data(),
119 packed_trx.size(),
120 (nkeys > 0) ? packed_keys.data() : (const char*)0,
121 (nkeys > 0) ? packed_keys.size() : 0,
122 (nperms > 0) ? packed_perms.data() : (const char*)0,
123 (nperms > 0) ? packed_perms.size() : 0
124 );
125
126 return (res > 0);
127 }
128
142 bool
143 check_permission_authorization( name account,
144 name permission,
145 const std::set<public_key>& provided_keys,
146 const std::set<permission_level>& provided_permissions = std::set<permission_level>(),
147 microseconds provided_delay = microseconds{std::numeric_limits<int64_t>::max()}
148 )
149 {
150 int64_t provided_delay_us = provided_delay.count();
151 check(provided_delay_us >= 0, "negative delay is not allowed");
152 std::vector<char> packed_keys;
153 auto nkeys = provided_keys.size();
154 if( nkeys > 0 ) {
155 packed_keys = pack(provided_keys);
156 }
157
158 std::vector<char> packed_perms;
159 auto nperms = provided_permissions.size();
160 if( nperms > 0 ) {
161 packed_perms = pack(provided_permissions);
162 }
163
164 auto res = internal_use_do_not_use::check_permission_authorization( account.value,
165 permission.value,
166 (nkeys > 0) ? packed_keys.data() : (const char*)0,
167 (nkeys > 0) ? packed_keys.size() : 0,
168 (nperms > 0) ? packed_perms.data() : (const char*)0,
169 (nperms > 0) ? packed_perms.size() : 0,
170 static_cast<uint64_t>(provided_delay_us)
171 );
172
173 return (res > 0);
174 }
175
186 time_point get_permission_last_used( name account, name permission ) {
187 return time_point(
188 microseconds(
189 internal_use_do_not_use::get_permission_last_used(account.value, permission.value)));
190
191 }
192
202 time_point get_account_creation_time( name account ) {
203 return time_point(
204 microseconds(
205 internal_use_do_not_use::get_account_creation_time(account.value)));
206
207 }
208}