Ethereum  PoC-8
The C++ Implementation of Ethereum
Transaction.h
Go to the documentation of this file.
1 /*
2  This file is part of cpp-ethereum.
3 
4  cpp-ethereum is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 3 of the License, or
7  (at your option) any later version.
8 
9  cpp-ethereum is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
16 */
22 #pragma once
23 
24 #include <libethcore/Common.h>
27 #include <libdevcore/RLP.h>
28 #include <libdevcore/SHA3.h>
29 
30 namespace dev
31 {
32 namespace eth
33 {
34 
36 {
37  None = 0,
38  Unknown,
39  BadRLP,
45  OutOfGasBase,
49  OutOfGas,
50  OutOfStack,
55 };
56 
57 enum class CodeDeposit
58 {
59  None = 0,
60  Failed,
61  Success
62 };
63 
64 struct VMException;
65 
67 std::ostream& operator<<(std::ostream& _out, TransactionException const& _er);
68 
71 {
78  unsigned depositSize = 0;
80 };
81 
82 std::ostream& operator<<(std::ostream& _out, ExecutionResult const& _er);
83 
86 {
87 public:
90 
92  Transaction(TransactionSkeleton const& _ts, Secret const& _s = Secret()): TransactionBase(_ts, _s) {}
93 
95  Transaction(u256 const& _value, u256 const& _gasPrice, u256 const& _gas, Address const& _dest, bytes const& _data, u256 const& _nonce, Secret const& _secret):
96  TransactionBase(_value, _gasPrice, _gas, _dest, _data, _nonce, _secret)
97  {}
98 
100  Transaction(u256 const& _value, u256 const& _gasPrice, u256 const& _gas, bytes const& _data, u256 const& _nonce, Secret const& _secret):
101  TransactionBase(_value, _gasPrice, _gas, _data, _nonce, _secret)
102  {}
103 
105  Transaction(u256 const& _value, u256 const& _gasPrice, u256 const& _gas, Address const& _dest, bytes const& _data, u256 const& _nonce = Invalid256):
106  TransactionBase(_value, _gasPrice, _gas, _dest, _data, _nonce)
107  {}
108 
110  Transaction(u256 const& _value, u256 const& _gasPrice, u256 const& _gas, bytes const& _data, u256 const& _nonce = Invalid256):
111  TransactionBase(_value, _gasPrice, _gas, _data, _nonce)
112  {}
113 
115  explicit Transaction(bytesConstRef _rlp, CheckTransaction _checkSig);
116 
118  explicit Transaction(bytes const& _rlp, CheckTransaction _checkSig): Transaction(&_rlp, _checkSig) {}
119 };
120 
122 using Transactions = std::vector<Transaction>;
123 
125 {
126 public:
128  Transaction const& _t,
129  h256 const& _blockHash,
130  unsigned _transactionIndex,
131  BlockNumber _blockNumber = 0
132  ):
133  Transaction(_t),
134  m_blockHash(_blockHash),
135  m_transactionIndex(_transactionIndex),
136  m_blockNumber(_blockNumber)
137  {}
138 
139  h256 const& blockHash() const { return m_blockHash; }
140  unsigned transactionIndex() const { return m_transactionIndex; }
141  BlockNumber blockNumber() const { return m_blockNumber; }
142 
143 private:
144  h256 m_blockHash;
145  unsigned m_transactionIndex;
146  BlockNumber m_blockNumber;
147 };
148 
149 }
150 }
dev::eth::TransactionException::InvalidSignature
@ InvalidSignature
dev::eth::TransactionException::OutOfStack
@ OutOfStack
Ran out of stack executing code of the transaction.
dev::eth::TransactionSkeleton
Definition: Common.h:184
dev::eth::TransactionException::BadInstruction
@ BadInstruction
dev::eth::Transaction
Encodes a transaction, ready to be exported to or freshly imported from RLP.
Definition: Transaction.h:86
dev::eth::ExecutionResult::gasForDeposit
u256 gasForDeposit
Amount of gas remaining for the code deposit phase.
Definition: Transaction.h:79
dev::vector_ref< byte const >
dev::eth::TransactionException::BlockGasLimitReached
@ BlockGasLimitReached
dev::eth::Transactions
std::vector< Transaction > Transactions
Nice name for vector of Transaction.
Definition: Transaction.h:122
dev::eth::ExecutionResult::gasUsed
u256 gasUsed
Definition: Transaction.h:72
dev::eth::LocalisedTransaction
Definition: Transaction.h:125
dev::SecureFixedHash< 32 >
dev::eth::TransactionException::AddressAlreadyUsed
@ AddressAlreadyUsed
dev::eth::TransactionBase
Encodes a transaction, ready to be exported to or freshly imported from RLP.
Definition: TransactionBase.h:50
dev::eth::Transaction::Transaction
Transaction(TransactionSkeleton const &_ts, Secret const &_s=Secret())
Constructs from a transaction skeleton & optional secret.
Definition: Transaction.h:92
dev::eth::TransactionException::BadRLP
@ BadRLP
dev::eth::TransactionException::OutOfGasIntrinsic
@ OutOfGasIntrinsic
Too little gas to pay for the base transaction cost.
dev::eth::LocalisedTransaction::blockNumber
BlockNumber blockNumber() const
Definition: Transaction.h:141
ChainOperationParams.h
dev::FixedHash< 20 >
dev::eth::Transaction::Transaction
Transaction(u256 const &_value, u256 const &_gasPrice, u256 const &_gas, Address const &_dest, bytes const &_data, u256 const &_nonce, Secret const &_secret)
Constructs a signed message-call transaction.
Definition: Transaction.h:95
dev::Exception
Base class for all exceptions.
Definition: Exceptions.h:39
Common.h
dev::eth::Transaction::Transaction
Transaction(u256 const &_value, u256 const &_gasPrice, u256 const &_gas, bytes const &_data, u256 const &_nonce, Secret const &_secret)
Constructs a signed contract-creation transaction.
Definition: Transaction.h:100
dev::eth::ExecutionResult::newAddress
Address newAddress
Definition: Transaction.h:74
dev::eth::TransactionException::None
@ None
dev::eth::CodeDeposit
CodeDeposit
Definition: Transaction.h:58
dev::eth::LocalisedTransaction::transactionIndex
unsigned transactionIndex() const
Definition: Transaction.h:140
TransactionBase.h
dev::eth::TransactionException::InvalidFormat
@ InvalidFormat
dev::bytes
std::vector< byte > bytes
Definition: Common.h:72
dev::eth::CodeDeposit::Success
@ Success
SHA3.h
dev::eth::LocalisedTransaction::LocalisedTransaction
LocalisedTransaction(Transaction const &_t, h256 const &_blockHash, unsigned _transactionIndex, BlockNumber _blockNumber=0)
Definition: Transaction.h:127
dev::eth::Transaction::Transaction
Transaction()
Constructs a null transaction.
Definition: Transaction.h:89
dev::eth::CodeDeposit::None
@ None
dev::eth::TransactionException::OutOfGasBase
@ OutOfGasBase
Too little gas to pay for the base transaction cost.
dev::eth::TransactionException
TransactionException
Definition: Transaction.h:36
dev::Invalid256
constexpr u256 Invalid256
Definition: Common.h:147
dev::eth::TransactionException::NotEnoughCash
@ NotEnoughCash
dev::eth::CheckTransaction
CheckTransaction
Definition: TransactionBase.h:42
dev::eth::Transaction::Transaction
Transaction(u256 const &_value, u256 const &_gasPrice, u256 const &_gas, bytes const &_data, u256 const &_nonce=Invalid256)
Constructs an unsigned contract-creation transaction.
Definition: Transaction.h:110
dev::eth::TransactionException::Unknown
@ Unknown
dev::eth::ExecutionResult::gasRefunded
u256 gasRefunded
Definition: Transaction.h:77
dev::eth::BlockNumber
unsigned BlockNumber
Definition: Common.h:64
dev::u256
boost::multiprecision::number< boost::multiprecision::cpp_int_backend< 256, 256, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void > > u256
Definition: Common.h:121
dev::eth::operator<<
std::ostream & operator<<(std::ostream &_out, BlockHeader const &_bi)
Definition: BlockHeader.h:217
dev::eth::TransactionException::BadJumpDestination
@ BadJumpDestination
dev::eth::TransactionException::StackUnderflow
@ StackUnderflow
dev
Definition: Address.cpp:21
dev::eth::ExecutionResult::depositSize
unsigned depositSize
Amount of code of the creation's attempted deposit.
Definition: Transaction.h:78
dev::eth::TransactionException::RevertInstruction
@ RevertInstruction
dev::eth::toTransactionException
TransactionException toTransactionException(Exception const &_e)
Definition: Transaction.cpp:42
dev::eth::ExecutionResult
Description of the result of executing a transaction.
Definition: Transaction.h:71
dev::Secret
SecureFixedHash< 32 > Secret
Definition: Common.h:36
dev::eth::TransactionException::OutOfGas
@ OutOfGas
Ran out of gas executing code of the transaction.
dev::eth::ExecutionResult::excepted
TransactionException excepted
Definition: Transaction.h:73
dev::eth::TransactionException::InvalidNonce
@ InvalidNonce
dev::eth::ExecutionResult::codeDeposit
CodeDeposit codeDeposit
Failed if an attempted deposit failed due to lack of gas.
Definition: Transaction.h:76
dev::eth::CodeDeposit::Failed
@ Failed
RLP.h
dev::eth::Transaction::Transaction
Transaction(u256 const &_value, u256 const &_gasPrice, u256 const &_gas, Address const &_dest, bytes const &_data, u256 const &_nonce=Invalid256)
Constructs an unsigned message-call transaction.
Definition: Transaction.h:105
dev::eth::Transaction::Transaction
Transaction(bytes const &_rlp, CheckTransaction _checkSig)
Constructs a transaction from the given RLP.
Definition: Transaction.h:118
dev::eth::ExecutionResult::output
bytes output
Definition: Transaction.h:75
dev::eth::TransactionException::InvalidZeroSignatureFormat
@ InvalidZeroSignatureFormat
dev::eth::LocalisedTransaction::blockHash
h256 const & blockHash() const
Definition: Transaction.h:139