Add Elements-style witness serialization

This commit is contained in:
Steven Roose 2019-01-29 12:39:33 +00:00
parent 6ed8fd8ab0
commit fb72ee8fc8
50 changed files with 873 additions and 414 deletions

View file

@ -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;
}