CDT  v4.2.0
инструменты разработчика
transaction.hpp
См. документацию.
1
5#pragma once
6#include "action.hpp"
7#include "system.hpp"
8#include "../../core/eosio/time.hpp"
9#include "../../core/eosio/serialize.hpp"
10
11#include <vector>
12
13namespace eosio {
14 namespace internal_use_do_not_use {
15 extern "C" {
16 __attribute__((eosio_wasm_import))
17 void send_deferred(const uint128_t&, uint64_t, const char*, size_t, uint32_t);
18
19 __attribute__((eosio_wasm_import))
20 int cancel_deferred(const uint128_t&);
21
22 __attribute__((eosio_wasm_import))
23 size_t read_transaction(char*, size_t);
24
25 __attribute__((eosio_wasm_import))
26 size_t transaction_size();
27
28 __attribute__((eosio_wasm_import))
29 int tapos_block_num();
30
31 __attribute__((eosio_wasm_import))
33
34 __attribute__((eosio_wasm_import))
36
37 __attribute__((eosio_wasm_import))
38 int get_action( uint32_t, uint32_t, char*, size_t);
39
40 __attribute__((eosio_wasm_import))
41 int get_context_free_data( uint32_t, char*, size_t);
42 }
43 }
44
65 typedef std::tuple<uint16_t, std::vector<char>> extension;
66
70 typedef std::vector<extension> extensions_type;
71
80 public:
81
89 {}
90
92 uint16_t ref_block_num;
94 unsigned_int max_net_usage_words = 0UL;
95 uint8_t max_cpu_usage_ms = 0UL;
96 unsigned_int delay_sec = 0UL;
97
98 EOSLIB_SERIALIZE( transaction_header, (expiration)(ref_block_num)(ref_block_prefix)(max_net_usage_words)(max_cpu_usage_ms)(delay_sec) )
99 };
100
107 public:
108
113
121 void send(const uint128_t& sender_id, name payer, bool replace_existing = false) const {
122 auto serialize = pack(*this);
123 internal_use_do_not_use::send_deferred(sender_id, payer.value, serialize.data(), serialize.size(), replace_existing);
124 }
125
126 std::vector<action> context_free_actions;
127 std::vector<action> actions;
129
130 EOSLIB_SERIALIZE_DERIVED( transaction, transaction_header, (context_free_actions)(actions)(transaction_extensions) )
131 };
132
138 struct onerror {
139 uint128_t sender_id;
140 std::vector<char> sent_trx;
141
148 return unpack_action_data<onerror>();
149 }
150
155 return unpack<transaction>(sent_trx);
156 }
157
158 EOSLIB_SERIALIZE( onerror, (sender_id)(sent_trx) )
159 };
160
171 inline void send_deferred(const uint128_t& sender_id, name payer, const char* serialized_transaction, size_t size, bool replace = false) {
172 internal_use_do_not_use::send_deferred(sender_id, payer.value, serialized_transaction, size, replace);
173 }
182 inline action get_action( uint32_t type, uint32_t index ) {
183 constexpr size_t max_stack_buffer_size = 512;
184 int s = internal_use_do_not_use::get_action( type, index, nullptr, 0 );
185 eosio::check( s > 0, "get_action size failed" );
186 size_t size = static_cast<size_t>(s);
187 char* buffer = (char*)( max_stack_buffer_size < size ? malloc(size) : alloca(size) );
188 auto size2 = internal_use_do_not_use::get_action( type, index, buffer, size );
189 eosio::check( size == static_cast<size_t>(size2), "get_action failed" );
190 return eosio::unpack<eosio::action>( buffer, size );
191 }
192
199 inline size_t read_transaction(char* ptr, size_t sz) {
201 }
202
221 inline int cancel_deferred(const uint128_t& sender_id) {
223 }
224
231 inline size_t transaction_size() {
233 }
234
245 inline int tapos_block_num() {
247 }
248
259 inline int tapos_block_prefix() {
261 }
262
272 }
273
283 inline int get_context_free_data( uint32_t index, char* buff, size_t size ) {
285 }
286}