data parsing issues
This commit is contained in:
@@ -1457,6 +1457,7 @@ int32_t komodo_is_PoSblock(int32_t slowflag,int32_t height,CBlock *pblock,arith_
|
|||||||
|
|
||||||
bool GetStakeParams(const CTransaction &stakeTx, CStakeParams &stakeParams);
|
bool GetStakeParams(const CTransaction &stakeTx, CStakeParams &stakeParams);
|
||||||
bool ValidateMatchingStake(const CTransaction &ccTx, uint32_t voutNum, const CTransaction &stakeTx, bool &cheating);
|
bool ValidateMatchingStake(const CTransaction &ccTx, uint32_t voutNum, const CTransaction &stakeTx, bool &cheating);
|
||||||
|
bool ValidateStakeTransaction(const CTransaction &stakeTx, CStakeParams &stakeParams, bool validateSig = true);
|
||||||
|
|
||||||
// for now, we will ignore slowFlag in the interest of keeping success/fail simpler for security purposes
|
// for now, we will ignore slowFlag in the interest of keeping success/fail simpler for security purposes
|
||||||
bool verusCheckPOSBlock(int32_t slowflag, CBlock *pblock, int32_t height)
|
bool verusCheckPOSBlock(int32_t slowflag, CBlock *pblock, int32_t height)
|
||||||
@@ -1632,12 +1633,14 @@ bool verusCheckPOSBlock(int32_t slowflag, CBlock *pblock, int32_t height)
|
|||||||
strcpy(cbaddr, CBitcoinAddress(cbaddress).ToString().c_str());
|
strcpy(cbaddr, CBitcoinAddress(cbaddress).ToString().c_str());
|
||||||
if (newPOSEnforcement)
|
if (newPOSEnforcement)
|
||||||
{
|
{
|
||||||
if (!strcmp(destaddr,voutaddr))
|
if (!strcmp(destaddr, voutaddr))
|
||||||
{
|
{
|
||||||
// allow delegation of stake, but require all ouputs to be
|
// allow delegation of stake, but require all ouputs to be
|
||||||
// crypto conditions
|
// crypto conditions
|
||||||
CStakeParams p;
|
CStakeParams p;
|
||||||
if (GetStakeParams(pblock->vtx[txn_count-1], p))
|
// validatestake transaction sets the pubkey of the stake output
|
||||||
|
// if it has no override into the pubkey
|
||||||
|
if (ValidateStakeTransaction(pblock->vtx[txn_count-1], p, false))
|
||||||
{
|
{
|
||||||
COptCCParams cpp;
|
COptCCParams cpp;
|
||||||
// loop through all outputs to make sure they are sent to the proper pubkey
|
// loop through all outputs to make sure they are sent to the proper pubkey
|
||||||
|
|||||||
@@ -96,8 +96,7 @@ bool CScriptExt::ExtractVoutDestination(const CTransaction& tx, int32_t voutNum,
|
|||||||
// if this is a timelocked transaction, get the destination behind the time lock
|
// if this is a timelocked transaction, get the destination behind the time lock
|
||||||
if (tx.IsCoinBase() && tx.vout.size() == 2 && voutNum == 0 &&
|
if (tx.IsCoinBase() && tx.vout.size() == 2 && voutNum == 0 &&
|
||||||
spk.IsPayToScriptHash(&scriptHash) &&
|
spk.IsPayToScriptHash(&scriptHash) &&
|
||||||
tx.vout[1].scriptPubKey.size() >= 7 && // minimum for any possible future to prevent out of bounds
|
tx.vout[1].scriptPubKey.IsOpReturn())
|
||||||
tx.vout[1].scriptPubKey[0] == OP_RETURN)
|
|
||||||
{
|
{
|
||||||
opcodetype op;
|
opcodetype op;
|
||||||
std::vector<uint8_t> opretData = std::vector<uint8_t>();
|
std::vector<uint8_t> opretData = std::vector<uint8_t>();
|
||||||
|
|||||||
@@ -191,16 +191,11 @@ bool Solver(const CScript& scriptPubKey, txnouttype& typeRet, vector<vector<unsi
|
|||||||
if (vParams.size())
|
if (vParams.size())
|
||||||
{
|
{
|
||||||
COptCCParams cp = COptCCParams(vParams[0]);
|
COptCCParams cp = COptCCParams(vParams[0]);
|
||||||
if (cp.IsValid() && vParams.size() > cp.n)
|
if (cp.IsValid())
|
||||||
{
|
{
|
||||||
// all addresses that should be there must be 33 byte pub keys
|
for (auto k : cp.vKeys)
|
||||||
for (int i = 1; i <= cp.n; i++)
|
|
||||||
{
|
{
|
||||||
if (vParams[i].size() != 33)
|
vSolutionsRet.push_back(std::vector<unsigned char>(k.begin(), k.end()));
|
||||||
{
|
|
||||||
// we accept no errors
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user