mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-16 13:01:19 +02:00
Move asset issuance funcionality to own file
This commit is contained in:
parent
4891c1dbf1
commit
87ebb9a2e0
5 changed files with 98 additions and 79 deletions
|
|
@ -261,6 +261,8 @@ libbitcoin_consensus_a_SOURCES = \
|
|||
core_write.cpp \
|
||||
hash.cpp \
|
||||
hash.h \
|
||||
issuance.h \
|
||||
issuance.cpp \
|
||||
merkleblock.cpp \
|
||||
pow.cpp \
|
||||
prevector.h \
|
||||
|
|
@ -311,6 +313,7 @@ libbitcoin_common_a_SOURCES = \
|
|||
global/common.cpp \
|
||||
key.cpp \
|
||||
keystore.cpp \
|
||||
issuance.cpp \
|
||||
merkleblock.cpp \
|
||||
netbase.cpp \
|
||||
pow.cpp \
|
||||
|
|
|
|||
49
src/issuance.cpp
Normal file
49
src/issuance.cpp
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
#include "issuance.h"
|
||||
|
||||
#include "primitives/transaction.h"
|
||||
#include "amount.h"
|
||||
|
||||
void GenerateAssetEntropy(uint256& entropy, const COutPoint& prevout, const uint256& contracthash)
|
||||
{
|
||||
// E : entropy
|
||||
// I : prevout
|
||||
// C : contract
|
||||
// E = H( H(I) || H(C) )
|
||||
std::vector<uint256> leaves;
|
||||
leaves.reserve(2);
|
||||
leaves.push_back(SerializeHash(prevout, SER_GETHASH, 0));
|
||||
leaves.push_back(contracthash);
|
||||
entropy = ComputeFastMerkleRoot(leaves);
|
||||
}
|
||||
|
||||
void CalculateAsset(CAsset& asset, const uint256& entropy)
|
||||
{
|
||||
static const uint256 kZero = uint256S("0x0000000000000000000000000000000000000000000000000000000000000000");
|
||||
// H_a : asset tag
|
||||
// E : entropy
|
||||
// H_a = H( E || 0 )
|
||||
std::vector<uint256> leaves;
|
||||
leaves.reserve(2);
|
||||
leaves.push_back(entropy);
|
||||
leaves.push_back(kZero);
|
||||
asset = CAsset(ComputeFastMerkleRoot(leaves));
|
||||
}
|
||||
|
||||
void CalculateReissuanceToken(CAsset& reissuanceToken, const uint256& entropy, bool fConfidential)
|
||||
{
|
||||
static const uint256 kOne = uint256S("0x0000000000000000000000000000000000000000000000000000000000000001");
|
||||
static const uint256 kTwo = uint256S("0x0000000000000000000000000000000000000000000000000000000000000002");
|
||||
// H_a : asset reissuance tag
|
||||
// E : entropy
|
||||
// if not fConfidential:
|
||||
// H_a = H( E || 1 )
|
||||
// else
|
||||
// H_a = H( E || 2 )
|
||||
std::vector<uint256> leaves;
|
||||
leaves.reserve(2);
|
||||
leaves.push_back(entropy);
|
||||
leaves.push_back(fConfidential? kTwo: kOne);
|
||||
reissuanceToken = CAsset(ComputeFastMerkleRoot(leaves));
|
||||
}
|
||||
|
||||
|
||||
45
src/issuance.h
Normal file
45
src/issuance.h
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
#include "primitives/transaction.h"
|
||||
#include "amount.h"
|
||||
#include "hash.h"
|
||||
#include "consensus/merkle.h"
|
||||
|
||||
#ifndef BITCOIN_ISSUANCE_H
|
||||
#define BITCOIN_ISSUANCE_H
|
||||
|
||||
/**
|
||||
* Calculate the asset entropy from an COutPoint and a tx-author specified
|
||||
* Ricardian contract. See Definition 18 of the confidential assets paper.
|
||||
*
|
||||
* @param[out] entropy The asset entropy, which is used as input to
|
||||
* CalculateAsset and CalculateReissuanceToken.
|
||||
* @param[in] prevout Reference to the UTXO being spent.
|
||||
* @param[in] contracthash Root hash of the issuer-specified Ricardian
|
||||
* contract.
|
||||
*/
|
||||
void GenerateAssetEntropy(uint256& entropy, const COutPoint& prevout, const uint256& contracthash);
|
||||
|
||||
/**
|
||||
* Derive the asset from the entropy. See Definintion 19 of the confidential
|
||||
* assets paper.
|
||||
*
|
||||
* @param[out] asset The nonce used as auxiliary input to the Pedersen
|
||||
* commitment setup to derive the unblinded asset tag.
|
||||
* @param[in] entropy The asset entropy returned by GenerateAssetEntropy.
|
||||
*/
|
||||
void CalculateAsset(CAsset& asset, const uint256& entropy);
|
||||
|
||||
/**
|
||||
* Derive the asset reissuance token asset from the entropy and reissuance
|
||||
* parameters (confidential or explicit). See Definition 21 of the confidential
|
||||
* assets paper.
|
||||
*
|
||||
* @param[out] reissuanceToken The nonce used as auxiliary input to the
|
||||
* Pedersen commitment setup to derive the
|
||||
* unblinded reissuance asset tag.
|
||||
* @param[in] entropy The asset entropy returned by GenerateAssetEntropy.
|
||||
* @param[in] fConfidential Set to true if the initial issuance was blinded,
|
||||
* false otherwise.
|
||||
*/
|
||||
void CalculateReissuanceToken(CAsset& reissuanceToken, const uint256& entropy, bool fConfidential);
|
||||
|
||||
#endif // BITCOIN_ISSUANCE_H
|
||||
44
src/main.cpp
44
src/main.cpp
|
|
@ -18,6 +18,7 @@
|
|||
#include "consensus/validation.h"
|
||||
#include "hash.h"
|
||||
#include "init.h"
|
||||
#include "issuance.h"
|
||||
#include "merkleblock.h"
|
||||
#include "net.h"
|
||||
#include "policy/fees.h"
|
||||
|
|
@ -2619,49 +2620,6 @@ bool CheckTxInputs(const CTransaction& tx, CValidationState& state, const CCoins
|
|||
}
|
||||
}// namespace Consensus
|
||||
|
||||
void GenerateAssetEntropy(uint256& entropy, const COutPoint& prevout, const uint256& contracthash)
|
||||
{
|
||||
// E : entropy
|
||||
// I : prevout
|
||||
// C : contract
|
||||
// E = H( H(I) || H(C) )
|
||||
std::vector<uint256> leaves;
|
||||
leaves.reserve(2);
|
||||
leaves.push_back(SerializeHash(prevout, SER_GETHASH, 0));
|
||||
leaves.push_back(contracthash);
|
||||
entropy = ComputeFastMerkleRoot(leaves);
|
||||
}
|
||||
|
||||
void CalculateAsset(CAsset& asset, const uint256& entropy)
|
||||
{
|
||||
static const uint256 kZero = uint256S("0x0000000000000000000000000000000000000000000000000000000000000000");
|
||||
// H_a : asset tag
|
||||
// E : entropy
|
||||
// H_a = H( E || 0 )
|
||||
std::vector<uint256> leaves;
|
||||
leaves.reserve(2);
|
||||
leaves.push_back(entropy);
|
||||
leaves.push_back(kZero);
|
||||
asset = CAsset(ComputeFastMerkleRoot(leaves));
|
||||
}
|
||||
|
||||
void CalculateReissuanceToken(CAsset& reissuanceToken, const uint256& entropy, bool fConfidential)
|
||||
{
|
||||
static const uint256 kOne = uint256S("0x0000000000000000000000000000000000000000000000000000000000000001");
|
||||
static const uint256 kTwo = uint256S("0x0000000000000000000000000000000000000000000000000000000000000002");
|
||||
// H_a : asset reissuance tag
|
||||
// E : entropy
|
||||
// if not fConfidential:
|
||||
// H_a = H( E || 1 )
|
||||
// else
|
||||
// H_a = H( E || 2 )
|
||||
std::vector<uint256> leaves;
|
||||
leaves.reserve(2);
|
||||
leaves.push_back(entropy);
|
||||
leaves.push_back(fConfidential? kTwo: kOne);
|
||||
reissuanceToken = CAsset(ComputeFastMerkleRoot(leaves));
|
||||
}
|
||||
|
||||
bool CheckInputs(const CTransaction& tx, CValidationState &state, const CCoinsViewCache &inputs, bool fScriptChecks, unsigned int flags, bool cacheStore, PrecomputedTransactionData& txdata, set<pair<uint256, COutPoint> >& setWithdrawsSpent, std::vector<CCheck*> *pvChecks)
|
||||
{
|
||||
if (!tx.IsCoinBase())
|
||||
|
|
|
|||
36
src/main.h
36
src/main.h
|
|
@ -372,42 +372,6 @@ bool CheckTxInputs(const CTransaction& tx, CValidationState& state, const CCoins
|
|||
|
||||
} // namespace Consensus
|
||||
|
||||
/**
|
||||
* Calculate the asset entropy from an COutPoint and a tx-author specified
|
||||
* Ricardian contract. See Definition 18 of the confidential assets paper.
|
||||
*
|
||||
* @param[out] entropy The asset entropy, which is used as input to
|
||||
* CalculateAsset and CalculateReissuanceToken.
|
||||
* @param[in] prevout Reference to the UTXO being spent.
|
||||
* @param[in] contracthash Root hash of the issuer-specified Ricardian
|
||||
* contract.
|
||||
*/
|
||||
void GenerateAssetEntropy(uint256& entropy, const COutPoint& prevout, const uint256& contracthash);
|
||||
|
||||
/**
|
||||
* Derive the asset from the entropy. See Definintion 19 of the confidential
|
||||
* assets paper.
|
||||
*
|
||||
* @param[out] asset The nonce used as auxiliary input to the Pedersen
|
||||
* commitment setup to derive the unblinded asset tag.
|
||||
* @param[in] entropy The asset entropy returned by GenerateAssetEntropy.
|
||||
*/
|
||||
void CalculateAsset(CAsset& asset, const uint256& entropy);
|
||||
|
||||
/**
|
||||
* Derive the asset reissuance token asset from the entropy and reissuance
|
||||
* parameters (confidential or explicit). See Definition 21 of the confidential
|
||||
* assets paper.
|
||||
*
|
||||
* @param[out] reissuanceToken The nonce used as auxiliary input to the
|
||||
* Pedersen commitment setup to derive the
|
||||
* unblinded reissuance asset tag.
|
||||
* @param[in] entropy The asset entropy returned by GenerateAssetEntropy.
|
||||
* @param[in] fConfidential Set to true if the initial issuance was blinded,
|
||||
* false otherwise.
|
||||
*/
|
||||
void CalculateReissuanceToken(CAsset& reissuanceToken, const uint256& entropy, bool fConfidential);
|
||||
|
||||
/**
|
||||
* Verify the transaction's outputs spend exactly what its inputs provide, plus some excess amount.
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue