Bitcoin Core 22.99.0
P2P Digital Currency
transaction.cpp
Go to the documentation of this file.
1// Copyright (c) 2009-2010 Satoshi Nakamoto
2// Copyright (c) 2009-2020 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 <assert.h>
14
15std::string COutPoint::ToString() const
16{
17 return strprintf("COutPoint(%s, %u)", hash.ToString().substr(0,10), n);
18}
19
20CTxIn::CTxIn(COutPoint prevoutIn, CScript scriptSigIn, uint32_t nSequenceIn)
21{
22 prevout = prevoutIn;
23 scriptSig = scriptSigIn;
24 nSequence = nSequenceIn;
25}
26
27CTxIn::CTxIn(uint256 hashPrevTx, uint32_t nOut, CScript scriptSigIn, uint32_t nSequenceIn)
28{
29 prevout = COutPoint(hashPrevTx, nOut);
30 scriptSig = scriptSigIn;
31 nSequence = nSequenceIn;
32}
33
34std::string CTxIn::ToString() const
35{
36 std::string str;
37 str += "CTxIn(";
38 str += prevout.ToString();
39 if (prevout.IsNull())
40 str += strprintf(", coinbase %s", HexStr(scriptSig));
41 else
42 str += strprintf(", scriptSig=%s", HexStr(scriptSig).substr(0, 24));
44 str += strprintf(", nSequence=%u", nSequence);
45 str += ")";
46 return str;
47}
48
49CTxOut::CTxOut(const CAmount& nValueIn, CScript scriptPubKeyIn)
50{
51 nValue = nValueIn;
52 scriptPubKey = scriptPubKeyIn;
53}
54
55std::string CTxOut::ToString() const
56{
57 return strprintf("CTxOut(nValue=%d.%08d, scriptPubKey=%s)", nValue / COIN, nValue % COIN, HexStr(scriptPubKey).substr(0, 30));
58}
59
60CMutableTransaction::CMutableTransaction() : nVersion(CTransaction::CURRENT_VERSION), nLockTime(0) {}
61CMutableTransaction::CMutableTransaction(const CTransaction& tx) : vin(tx.vin), vout(tx.vout), nVersion(tx.nVersion), nLockTime(tx.nLockTime) {}
62
64{
66}
67
69{
71}
72
74{
75 if (!HasWitness()) {
76 return hash;
77 }
78 return SerializeHash(*this, SER_GETHASH, 0);
79}
80
81CTransaction::CTransaction(const CMutableTransaction& tx) : vin(tx.vin), vout(tx.vout), nVersion(tx.nVersion), nLockTime(tx.nLockTime), hash{ComputeHash()}, m_witness_hash{ComputeWitnessHash()} {}
82CTransaction::CTransaction(CMutableTransaction&& tx) : vin(std::move(tx.vin)), vout(std::move(tx.vout)), nVersion(tx.nVersion), nLockTime(tx.nLockTime), hash{ComputeHash()}, m_witness_hash{ComputeWitnessHash()} {}
83
85{
86 CAmount nValueOut = 0;
87 for (const auto& tx_out : vout) {
88 if (!MoneyRange(tx_out.nValue) || !MoneyRange(nValueOut + tx_out.nValue))
89 throw std::runtime_error(std::string(__func__) + ": value out of range");
90 nValueOut += tx_out.nValue;
91 }
92 assert(MoneyRange(nValueOut));
93 return nValueOut;
94}
95
96unsigned int CTransaction::GetTotalSize() const
97{
99}
100
101std::string CTransaction::ToString() const
102{
103 std::string str;
104 str += strprintf("CTransaction(hash=%s, ver=%d, vin.size=%u, vout.size=%u, nLockTime=%u)\n",
105 GetHash().ToString().substr(0,10),
106 nVersion,
107 vin.size(),
108 vout.size(),
109 nLockTime);
110 for (const auto& tx_in : vin)
111 str += " " + tx_in.ToString() + "\n";
112 for (const auto& tx_in : vin)
113 str += " " + tx_in.scriptWitness.ToString() + "\n";
114 for (const auto& tx_out : vout)
115 str += " " + tx_out.ToString() + "\n";
116 return str;
117}
bool MoneyRange(const CAmount &nValue)
Definition: amount.h:27
int64_t CAmount
Amount in satoshis (Can be negative)
Definition: amount.h:12
static constexpr CAmount COIN
The amount of satoshis in one BTC.
Definition: amount.h:15
An outpoint - a combination of a transaction hash and an index n into its vout.
Definition: transaction.h:27
uint32_t n
Definition: transaction.h:30
std::string ToString() const
Definition: transaction.cpp:15
bool IsNull() const
Definition: transaction.h:40
uint256 hash
Definition: transaction.h:29
Serialized script, used inside transaction inputs and outputs.
Definition: script.h:406
The basic transaction that is broadcasted on the network and contained in blocks.
Definition: transaction.h:260
uint256 ComputeWitnessHash() const
Definition: transaction.cpp:73
bool HasWitness() const
Definition: transaction.h:332
const uint256 & GetHash() const
Definition: transaction.h:302
const uint32_t nLockTime
Definition: transaction.h:273
CTransaction(const CMutableTransaction &tx)
Convert a CMutableTransaction into a CTransaction.
Definition: transaction.cpp:81
const std::vector< CTxOut > vout
Definition: transaction.h:271
uint256 ComputeHash() const
Definition: transaction.cpp:68
std::string ToString() const
unsigned int GetTotalSize() const
Get the total transaction size in bytes, including witness data.
Definition: transaction.cpp:96
CAmount GetValueOut() const
Definition: transaction.cpp:84
const int32_t nVersion
Definition: transaction.h:272
const std::vector< CTxIn > vin
Definition: transaction.h:270
const uint256 hash
Memory only.
Definition: transaction.h:277
uint32_t nSequence
Definition: transaction.h:70
static const uint32_t SEQUENCE_FINAL
Definition: transaction.h:75
std::string ToString() const
Definition: transaction.cpp:34
CScript scriptSig
Definition: transaction.h:69
COutPoint prevout
Definition: transaction.h:68
CScript scriptPubKey
Definition: transaction.h:132
CAmount nValue
Definition: transaction.h:131
std::string ToString() const
Definition: transaction.cpp:55
std::string ToString() const
Definition: uint256.cpp:64
256-bit opaque blob.
Definition: uint256.h:124
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 const int SERIALIZE_TRANSACTION_NO_WITNESS
A flag that is ORed into the protocol version to designate that a transaction should be (un)serialize...
Definition: transaction.h:23
@ SER_GETHASH
Definition: serialize.h:140
size_t GetSerializeSize(const T &t, int nVersion=0)
Definition: serialize.h:1080
std::string HexStr(const Span< const uint8_t > s)
Convert a span of bytes to a lower-case hexadecimal string.
A mutable version of CTransaction.
Definition: transaction.h:345
uint256 GetHash() const
Compute the hash of this CMutableTransaction.
Definition: transaction.cpp:63
#define strprintf
Format arguments and return the string or write to given std::ostream (see tinyformat::format doc for...
Definition: tinyformat.h:1164
assert(!tx.IsCoinBase())
static const int PROTOCOL_VERSION
network protocol versioning
Definition: version.h:12