TARAXA
Loading...
Searching...
No Matches
transaction.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <json/value.h>
4#include <libdevcore/RLP.h>
5#include <libdevcore/SHA3.h>
6
8#include "common/types.hpp"
9
10namespace taraxa {
11
13 struct InvalidTransaction : std::runtime_error {
14 explicit InvalidTransaction(const std::string &msg) : runtime_error("invalid transaction - " + msg) {}
15 };
16
18 explicit InvalidSignature(const std::string &msg) : InvalidTransaction("signature:\n" + msg) {}
19 };
20
22 explicit InvalidFormat(const std::string &msg) : InvalidTransaction("rlp format:\n" + msg) {}
23 };
24
25 protected:
31 std::optional<addr_t> receiver_;
32 uint64_t chain_id_ = 0;
35 mutable bool hash_initialized_ = false;
36 bool is_zero_ = false;
37 mutable std::mutex hash_mu_;
38 mutable bool sender_initialized_ = false;
39 mutable bool sender_valid_ = false;
40 mutable addr_t sender_;
41 mutable std::mutex sender_mu_;
42 mutable bool cached_rlp_set_ = false;
44 mutable std::mutex cached_rlp_mu_;
45
47 addr_t const &get_sender_() const;
48 virtual void streamRLP(dev::RLPStream &s, bool for_signature) const;
49 virtual void fromRLP(const dev::RLP &_rlp, bool verify_strict);
50
51 public:
52 // TODO eliminate and use shared_ptr<Transaction> everywhere
53 Transaction() : is_zero_(true) {}
54 Transaction(const trx_nonce_t &nonce, const val_t &value, const val_t &gas_price, gas_t gas, bytes data,
55 const secret_t &sk, const std::optional<addr_t> &receiver = std::nullopt, uint64_t chain_id = 0);
56 explicit Transaction(dev::RLP &&_rlp, bool verify_strict = false);
57 explicit Transaction(const bytes &_rlp, bool verify_strict = false);
58 virtual ~Transaction() = default;
59
60 bool intrinsicGasCovered() const;
61 auto isZero() const { return is_zero_; }
62 const trx_hash_t &getHash() const;
63 auto getNonce() const { return nonce_; }
64 const auto &getValue() const { return value_; }
65 const auto &getGasPrice() const { return gas_price_; }
66 auto getGas() const { return gas_; }
67 const auto &getData() const { return data_; }
68 const auto &getReceiver() const { return receiver_; }
69 auto getChainID() const { return chain_id_; }
70 const auto &getVRS() const { return vrs_; }
71 auto getCost() const { return gas_price_ * gas_ + value_; }
72
73 virtual const addr_t &getSender() const;
74
75 bool operator==(Transaction const &other) const { return getHash() == other.getHash(); }
76
77 const bytes &rlp() const;
78
79 Json::Value toJSON() const;
80
82};
83
84using SharedTransaction = std::shared_ptr<Transaction>;
85using Transactions = std::vector<Transaction>;
86using SharedTransactions = std::vector<SharedTransaction>;
87using TransactionHashes = std::vector<trx_hash_t>;
88
89uint64_t IntrinsicGas(const std::vector<uint8_t> &data, bool is_contract_creation);
91
92} // namespace taraxa
Definition RLP.h:56
Class for writing to an RLP bytestream.
Definition RLP.h:484
#define HAS_RLP_FIELDS
Definition encoding_rlp.hpp:208
Definition app.hpp:16
std::shared_ptr< Transaction > SharedTransaction
Definition transaction.hpp:84
std::vector< Transaction > Transactions
Definition transaction.hpp:85
uint64_t IntrinsicGas(const std::vector< uint8_t > &data, bool is_contract_creation)
Definition transaction.cpp:181
std::vector< byte > bytes
Definition types.hpp:53
std::vector< SharedTransaction > SharedTransactions
Definition transaction.hpp:86
val_t trx_nonce_t
Definition types.hpp:54
std::vector< trx_hash_t > TransactionHashes
Definition transaction.hpp:87
TransactionHashes hashes_from_transactions(const SharedTransactions &transactions)
Definition transaction.cpp:23
dev::u256 val_t
Definition types.hpp:48
uint64_t gas_t
Definition types.hpp:46
Definition Common.h:38
Definition transaction.hpp:21
InvalidFormat(const std::string &msg)
Definition transaction.hpp:22
Definition transaction.hpp:17
InvalidSignature(const std::string &msg)
Definition transaction.hpp:18
Definition transaction.hpp:13
InvalidTransaction(const std::string &msg)
Definition transaction.hpp:14
Definition transaction.hpp:12
trx_hash_t hash_
Definition transaction.hpp:34
Transaction()
Definition transaction.hpp:53
bytes data_
Definition transaction.hpp:30
val_t gas_price_
Definition transaction.hpp:28
bool sender_initialized_
Definition transaction.hpp:38
bool sender_valid_
Definition transaction.hpp:39
bool operator==(Transaction const &other) const
Definition transaction.hpp:75
bool hash_initialized_
Definition transaction.hpp:35
auto getCost() const
Definition transaction.hpp:71
val_t value_
Definition transaction.hpp:27
virtual void fromRLP(const dev::RLP &_rlp, bool verify_strict)
Definition transaction.cpp:71
bytes cached_rlp_
Definition transaction.hpp:43
virtual const addr_t & getSender() const
Definition transaction.cpp:114
auto getNonce() const
Definition transaction.hpp:63
const auto & getGasPrice() const
Definition transaction.hpp:65
uint64_t chain_id_
Definition transaction.hpp:32
std::mutex hash_mu_
Definition transaction.hpp:37
std::mutex cached_rlp_mu_
Definition transaction.hpp:44
const auto & getReceiver() const
Definition transaction.hpp:68
Json::Value toJSON() const
Definition transaction.cpp:155
bool intrinsicGasCovered() const
Definition transaction.cpp:208
addr_t const & get_sender_() const
Definition transaction.cpp:102
const auto & getData() const
Definition transaction.hpp:67
virtual void streamRLP(dev::RLPStream &s, bool for_signature) const
Definition transaction.cpp:122
auto getGas() const
Definition transaction.hpp:66
auto getChainID() const
Definition transaction.hpp:69
addr_t sender_
Definition transaction.hpp:40
virtual ~Transaction()=default
const bytes & rlp() const
Definition transaction.cpp:138
std::optional< addr_t > receiver_
Definition transaction.hpp:31
auto isZero() const
Definition transaction.hpp:61
std::mutex sender_mu_
Definition transaction.hpp:41
const trx_hash_t & getHash() const
Definition transaction.cpp:93
gas_t gas_
Definition transaction.hpp:29
bool is_zero_
Definition transaction.hpp:36
bool cached_rlp_set_
Definition transaction.hpp:42
const auto & getValue() const
Definition transaction.hpp:64
trx_nonce_t nonce_
Definition transaction.hpp:26
trx_hash_t hash_for_signature() const
Definition transaction.cpp:149
dev::SignatureStruct vrs_
Definition transaction.hpp:33
const auto & getVRS() const
Definition transaction.hpp:70