mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-16 13:01:19 +02:00
Add Elements-style witness serialization
This commit is contained in:
parent
6ed8fd8ab0
commit
fb72ee8fc8
50 changed files with 873 additions and 414 deletions
|
|
@ -336,7 +336,7 @@ SignatureData DataFromTransaction(const CMutableTransaction& tx, unsigned int nI
|
|||
SignatureData data;
|
||||
assert(tx.vin.size() > nIn);
|
||||
data.scriptSig = tx.vin[nIn].scriptSig;
|
||||
data.scriptWitness = tx.vin[nIn].scriptWitness;
|
||||
data.scriptWitness = tx.witness.vtxinwit.size() > nIn ? tx.witness.vtxinwit[nIn].scriptWitness : CScriptWitness();
|
||||
Stacks stack(data);
|
||||
|
||||
// Get signatures
|
||||
|
|
@ -396,10 +396,11 @@ SignatureData DataFromTransaction(const CMutableTransaction& tx, unsigned int nI
|
|||
return data;
|
||||
}
|
||||
|
||||
void UpdateInput(CTxIn& input, const SignatureData& data)
|
||||
{
|
||||
input.scriptSig = data.scriptSig;
|
||||
input.scriptWitness = data.scriptWitness;
|
||||
void UpdateTransaction(CMutableTransaction& tx, const size_t nIn, const SignatureData& data) {
|
||||
assert(tx.vin.size() > nIn);
|
||||
tx.witness.vtxinwit.resize(tx.vin.size());
|
||||
tx.vin[nIn].scriptSig = data.scriptSig;
|
||||
tx.witness.vtxinwit[nIn].scriptWitness = data.scriptWitness;
|
||||
}
|
||||
|
||||
void SignatureData::MergeSignatureData(SignatureData sigdata)
|
||||
|
|
@ -421,12 +422,15 @@ void SignatureData::MergeSignatureData(SignatureData sigdata)
|
|||
bool SignSignature(const SigningProvider &provider, const CScript& fromPubKey, CMutableTransaction& txTo, unsigned int nIn, const CAmount& amount, int nHashType)
|
||||
{
|
||||
assert(nIn < txTo.vin.size());
|
||||
txTo.witness.vtxinwit.resize(txTo.vin.size());
|
||||
CTransaction txToConst(txTo);
|
||||
//TransactionSignatureCreator creator(&keystore, &txToConst, nIn, amount, nHashType);
|
||||
|
||||
MutableTransactionSignatureCreator creator(&txTo, nIn, amount, nHashType);
|
||||
|
||||
SignatureData sigdata;
|
||||
bool ret = ProduceSignature(provider, creator, fromPubKey, sigdata);
|
||||
UpdateInput(txTo.vin.at(nIn), sigdata);
|
||||
UpdateTransaction(txTo, nIn, sigdata);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue