Bitcoin ABC  0.26.3
P2P Digital Currency
transaction.cpp
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2016 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
7 
8 #include <consensus/amount.h>
9 #include <hash.h>
10 #include <tinyformat.h>
11 #include <util/strencodings.h>
12 
13 #include <cassert>
14 
15 std::string COutPoint::ToString() const {
16  return strprintf("COutPoint(%s, %u)", txid.ToString().substr(0, 10), n);
17 }
18 
19 std::string CTxIn::ToString() const {
20  std::string str;
21  str += "CTxIn(";
22  str += prevout.ToString();
23  if (prevout.IsNull()) {
24  str += strprintf(", coinbase %s", HexStr(scriptSig));
25  } else {
26  str += strprintf(", scriptSig=%s", HexStr(scriptSig).substr(0, 24));
27  }
28  if (nSequence != SEQUENCE_FINAL) {
29  str += strprintf(", nSequence=%u", nSequence);
30  }
31  str += ")";
32  return str;
33 }
34 
35 std::string CTxOut::ToString() const {
36  return strprintf("CTxOut(nValue=%d.%08d, scriptPubKey=%s)", nValue / COIN,
37  (nValue % COIN) / SATOSHI,
38  HexStr(scriptPubKey).substr(0, 30));
39 }
40 
42  : nVersion(CTransaction::CURRENT_VERSION), nLockTime(0) {}
44  : vin(tx.vin), vout(tx.vout), nVersion(tx.nVersion),
45  nLockTime(tx.nLockTime) {}
46 
48  return SerializeHash(tx, SER_GETHASH, 0);
49 }
50 
52  return TxId(ComputeCMutableTransactionHash(*this));
53 }
54 
57 }
58 
60  return SerializeHash(*this, SER_GETHASH, 0);
61 }
62 
68  : vin(), vout(), nVersion(CTransaction::CURRENT_VERSION), nLockTime(0),
69  hash() {}
71  : vin(tx.vin), vout(tx.vout), nVersion(tx.nVersion),
72  nLockTime(tx.nLockTime), hash(ComputeHash()) {}
74  : vin(std::move(tx.vin)), vout(std::move(tx.vout)), nVersion(tx.nVersion),
75  nLockTime(tx.nLockTime), hash(ComputeHash()) {}
76 
78  Amount nValueOut = Amount::zero();
79  for (const auto &tx_out : vout) {
80  if (!MoneyRange(tx_out.nValue) ||
81  !MoneyRange(nValueOut + tx_out.nValue)) {
82  throw std::runtime_error(std::string(__func__) +
83  ": value out of range");
84  }
85  nValueOut += tx_out.nValue;
86  }
87  assert(MoneyRange(nValueOut));
88  return nValueOut;
89 }
90 
91 unsigned int CTransaction::GetTotalSize() const {
93 }
94 
95 std::string CTransaction::ToString() const {
96  std::string str;
97  str += strprintf("CTransaction(txid=%s, ver=%d, vin.size=%u, vout.size=%u, "
98  "nLockTime=%u)\n",
99  GetId().ToString().substr(0, 10), nVersion, vin.size(),
100  vout.size(), nLockTime);
101  for (const auto &nVin : vin) {
102  str += " " + nVin.ToString() + "\n";
103  }
104  for (const auto &nVout : vout) {
105  str += " " + nVout.ToString() + "\n";
106  }
107  return str;
108 }
bool MoneyRange(const Amount nValue)
Definition: amount.h:166
static constexpr Amount SATOSHI
Definition: amount.h:143
static constexpr Amount COIN
Definition: amount.h:144
A mutable version of CTransaction.
Definition: transaction.h:280
TxHash GetHash() const
Definition: transaction.cpp:55
TxId GetId() const
Compute the id and hash of this CMutableTransaction.
Definition: transaction.cpp:51
uint32_t n
Definition: transaction.h:25
TxId txid
Definition: transaction.h:24
std::string ToString() const
Definition: transaction.cpp:15
bool IsNull() const
Definition: transaction.h:35
The basic transaction that is broadcasted on the network and contained in blocks.
Definition: transaction.h:194
CTransaction()
Construct a CTransaction that qualifies as IsNull()
Definition: transaction.cpp:67
const uint32_t nLockTime
Definition: transaction.h:215
const std::vector< CTxOut > vout
Definition: transaction.h:213
uint256 ComputeHash() const
Definition: transaction.cpp:59
std::string ToString() const
Definition: transaction.cpp:95
unsigned int GetTotalSize() const
Get the total transaction size in bytes.
Definition: transaction.cpp:91
Amount GetValueOut() const
Definition: transaction.cpp:77
const int32_t nVersion
Definition: transaction.h:214
const std::vector< CTxIn > vin
Definition: transaction.h:212
const TxId GetId() const
Definition: transaction.h:246
uint32_t nSequence
Definition: transaction.h:65
static const uint32_t SEQUENCE_FINAL
Setting nSequence to this value for every input in a transaction disables nLockTime.
Definition: transaction.h:71
std::string ToString() const
Definition: transaction.cpp:19
CScript scriptSig
Definition: transaction.h:64
COutPoint prevout
Definition: transaction.h:63
CScript scriptPubKey
Definition: transaction.h:133
Amount nValue
Definition: transaction.h:132
std::string ToString() const
Definition: transaction.cpp:35
std::string ToString() const
Definition: uint256.h:78
256-bit opaque blob.
Definition: uint256.h:127
uint256 SerializeHash(const T &obj, int nType=SER_GETHASH, int nVersion=PROTOCOL_VERSION)
Compute the 256-bit hash of an object's serialization.
Definition: hash.h:192
static uint256 ComputeCMutableTransactionHash(const CMutableTransaction &tx)
Definition: transaction.cpp:47
@ SER_GETHASH
Definition: serialize.h:168
size_t GetSerializeSize(const T &t, int nVersion=0)
Definition: serialize.h:1259
std::string HexStr(const Span< const uint8_t > s)
Convert a span of bytes to a lower-case hexadecimal string.
Definition: amount.h:19
static constexpr Amount zero()
Definition: amount.h:32
A TxHash is the double sha256 hash of the full transaction data.
Definition: txid.h:22
A TxId is the identifier of a transaction.
Definition: txid.h:14
#define strprintf
Format arguments and return the string or write to given std::ostream (see tinyformat::format doc for...
Definition: tinyformat.h:1201
assert(!tx.IsCoinBase())
static const int PROTOCOL_VERSION
network protocol versioning
Definition: version.h:11