-
Notifications
You must be signed in to change notification settings - Fork 129
Expand file tree
/
Copy pathtxvisitor.h
More file actions
104 lines (89 loc) · 3.39 KB
/
Copy pathtxvisitor.h
File metadata and controls
104 lines (89 loc) · 3.39 KB
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
// Copyright (c) 2023 The DeFi Blockchain Developers
// Distributed under the MIT software license, see the accompanying
// file LICENSE or http://www.opensource.org/licenses/mit-license.php.
#ifndef DEFI_DFI_CONSENSUS_TXVISITOR_H
#define DEFI_DFI_CONSENSUS_TXVISITOR_H
#include <amount.h>
#include <dfi/balances.h>
#include <dfi/oracles.h>
#include <dfi/res.h>
#include <dfi/vault.h>
class ATTRIBUTES;
class BlockContext;
struct CBalances;
class CCoinsViewCache;
struct CCreateProposalMessage;
class CCustomCSView;
struct CLoanSchemeData;
class CPoolPair;
class CScript;
class CScopedTemplate;
class CTokenImplementation;
class CTransaction;
class CVaultAssets;
class TransactionContext;
namespace Consensus {
struct Params;
}
enum AuthStrategy : uint32_t {
DirectPubKeyMatch,
Mapped,
};
namespace AuthFlags {
enum Type : uint32_t {
None = 0,
Bech32InSource = 1 << 1,
PKHashInSource = 1 << 2,
};
}
Res HasAuth(const CTransaction &tx,
const CCoinsViewCache &coins,
const CScript &auth,
AuthStrategy strategy = AuthStrategy::DirectPubKeyMatch,
AuthFlags::Type flags = AuthFlags::None);
Res GetERC55AddressFromAuth(const CTransaction &tx, const CCoinsViewCache &coins, CScript &script);
Res CheckTimeRelatedVars(const std::vector<std::string> &keys);
Res CheckTimeRelatedVars(const ATTRIBUTES &var);
class CCustomTxVisitor {
protected:
BlockContext &blockCtx;
const TransactionContext &txCtx;
public:
CCustomTxVisitor(BlockContext &blockCtx, const TransactionContext &txCtx);
protected:
Res HasAuth(const CScript &auth) const;
Res HasCollateralAuth(const uint256 &collateralTx) const;
Res HasFoundationAuth() const;
Res CheckCustomTx() const;
Res TransferTokenBalance(DCT_ID id, CAmount amount, const CScript &from, const CScript &to) const;
ResVal<CBalances> MintedTokens(uint32_t mintingOutputsStart) const;
Res SetShares(const CScript &owner, const TAmounts &balances) const;
Res DelShares(const CScript &owner, const TAmounts &balances) const;
void CalculateOwnerRewards(const CScript &owner) const;
Res SubBalanceDelShares(const CScript &owner, const CBalances &balance) const;
Res AddBalanceSetShares(const CScript &owner, const CBalances &balance) const;
Res AddBalancesSetShares(const CAccounts &accounts) const;
Res SubBalancesDelShares(const CAccounts &accounts) const;
Res CollateralPctCheck(const bool hasDUSDLoans, const CVaultAssets &collateralsLoans, const uint32_t ratio) const;
ResVal<CVaultAssets> CheckCollateralRatio(const CVaultId &vaultId,
const CLoanSchemeData &scheme,
const CBalances &collaterals,
bool useNextPrice,
bool requireLivePrice) const;
};
class AuthManager {
std::optional<Res> foundationAuth;
std::optional<Res> governanceAuth;
BlockContext &blockCtx;
const TransactionContext &txCtx;
public:
AuthManager(BlockContext &blockCtx, const TransactionContext &txCtx)
: blockCtx(blockCtx),
txCtx(txCtx){};
Res HasFoundationAuth();
Res HasGovernanceAuth();
Res HasGovOrFoundationAuth();
Res CanSetGov(const std::vector<std::string> &keys);
Res CanSetGov(const ATTRIBUTES &var);
};
#endif // DEFI_DFI_CONSENSUS_TXVISITOR_H