/
Receipt.h
149 lines (121 loc) · 3.93 KB
/
Receipt.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/**
*** Copyright (c) 2016-2019, Jaguar0625, gimre, BloodyRookie, Tech Bureau, Corp.
*** Copyright (c) 2020-present, Jaguar0625, gimre, BloodyRookie.
*** All rights reserved.
***
*** This file is part of Catapult.
***
*** Catapult is free software: you can redistribute it and/or modify
*** it under the terms of the GNU Lesser General Public License as published by
*** the Free Software Foundation, either version 3 of the License, or
*** (at your option) any later version.
***
*** Catapult is distributed in the hope that it will be useful,
*** but WITHOUT ANY WARRANTY; without even the implied warranty of
*** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*** GNU Lesser General Public License for more details.
***
*** You should have received a copy of the GNU Lesser General Public License
*** along with Catapult. If not, see <http://www.gnu.org/licenses/>.
**/
#pragma once
#include "Mosaic.h"
#include "ReceiptType.h"
#include "SizePrefixedEntity.h"
#include "catapult/types.h"
namespace catapult { namespace model {
#pragma pack(push, 1)
// region Receipt
/// Binary layout for a receipt entity.
struct Receipt : public SizePrefixedEntity {
/// Receipt version.
uint16_t Version;
/// Receipt type.
ReceiptType Type;
};
// endregion
// region BalanceTransferReceipt
/// Binary layout for a balance transfer receipt.
struct BalanceTransferReceipt : public Receipt {
public:
/// Creates a receipt around \a receiptType, \a senderAddress, \a recipientAddress, \a mosaicId and \a amount.
BalanceTransferReceipt(
ReceiptType receiptType,
const Address& senderAddress,
const Address& recipientAddress,
catapult::MosaicId mosaicId,
catapult::Amount amount)
: Mosaic({ mosaicId, amount })
, SenderAddress(senderAddress)
, RecipientAddress(recipientAddress) {
Size = sizeof(BalanceTransferReceipt);
Version = 1;
Type = receiptType;
}
public:
/// Mosaic.
model::Mosaic Mosaic;
/// Mosaic sender address.
Address SenderAddress;
/// Mosaic recipient address.
Address RecipientAddress;
};
// endregion
// region BalanceChangeReceipt
/// Binary layout for a balance change receipt.
struct BalanceChangeReceipt : public Receipt {
public:
/// Creates a receipt around \a receiptType, \a targetAddress, \a mosaicId and \a amount.
BalanceChangeReceipt(ReceiptType receiptType, const Address& targetAddress, catapult::MosaicId mosaicId, catapult::Amount amount)
: Mosaic({ mosaicId, amount })
, TargetAddress(targetAddress) {
Size = sizeof(BalanceChangeReceipt);
Version = 1;
Type = receiptType;
}
public:
/// Mosaic.
model::Mosaic Mosaic;
/// Account address.
Address TargetAddress;
};
// endregion
// region InflationReceipt
/// Binary layout for an inflation receipt.
struct InflationReceipt : public Receipt {
public:
/// Creates a receipt around \a receiptType, \a mosaicId and \a amount.
InflationReceipt(ReceiptType receiptType, catapult::MosaicId mosaicId, catapult::Amount amount) : Mosaic({ mosaicId, amount }) {
Size = sizeof(InflationReceipt);
Version = 1;
Type = receiptType;
}
public:
/// Mosaic.
model::Mosaic Mosaic;
};
// endregion
// region ArtifactExpiryReceipt
/// Binary layout for an artifact expiry receipt.
template<typename TArtifactId>
struct ArtifactExpiryReceipt : public Receipt {
public:
/// Creates a receipt around \a receiptType and \a artifactId.
ArtifactExpiryReceipt(ReceiptType receiptType, TArtifactId artifactId) : ArtifactId(artifactId) {
Size = sizeof(ArtifactExpiryReceipt);
Version = 1;
Type = receiptType;
}
public:
/// Artifact id.
TArtifactId ArtifactId;
};
// endregion
#pragma pack(pop)
/// Defines constants for a receipt with \a TYPE and \a VERSION.
#define DEFINE_RECEIPT_CONSTANTS(TYPE, VERSION) \
/* Receipt format version. */ \
static constexpr uint8_t Current_Version = VERSION; \
/* Receipt type. */ \
static constexpr ReceiptType Receipt_Type = TYPE;
}}