Skip to content

Commit 8a61c33

Browse files
committed
Merge #257: Speed up peg-in validation
25c8a49 Remove unnecessary genesis hash check in IsConfirmedBitcoinBlock (Jonas Nick) 42b6330 Use getblockheader instead of getblock when checking if block is in the main chain (Jonas Nick)
2 parents 1e1a2e5 + 25c8a49 commit 8a61c33

File tree

4 files changed

+9
-21
lines changed

4 files changed

+9
-21
lines changed

src/callrpc.cpp

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -178,27 +178,15 @@ UniValue CallRPC(const std::string& strMethod, const UniValue& params, bool conn
178178
return reply;
179179
}
180180

181-
bool IsConfirmedBitcoinBlock(const uint256& genesishash, const uint256& hash, int nMinConfirmationDepth)
181+
bool IsConfirmedBitcoinBlock(const uint256& hash, int nMinConfirmationDepth)
182182
{
183-
184183
try {
185184
UniValue params(UniValue::VARR);
186-
params.push_back(UniValue(0));
187-
UniValue reply = CallRPC("getblockhash", params, true);
188-
if (!find_value(reply, "error").isNull())
189-
return false;
190-
UniValue result = find_value(reply, "result");
191-
if (!result.isStr())
192-
return false;
193-
if (result.get_str() != genesishash.GetHex())
194-
return false;
195-
196-
params = UniValue(UniValue::VARR);
197185
params.push_back(hash.GetHex());
198-
reply = CallRPC("getblock", params, true);
186+
UniValue reply = CallRPC("getblockheader", params, true);
199187
if (!find_value(reply, "error").isNull())
200188
return false;
201-
result = find_value(reply, "result");
189+
UniValue result = find_value(reply, "result");
202190
if (!result.isObject())
203191
return false;
204192
result = find_value(result.get_obj(), "confirmations");

src/callrpc.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,6 @@ class CConnectionFailed : public std::runtime_error
3535
};
3636

3737
UniValue CallRPC(const std::string& strMethod, const UniValue& params, bool connectToMainchain=false);
38-
bool IsConfirmedBitcoinBlock(const uint256& genesishash, const uint256& hash, int nMinConfirmationDepth);
38+
bool IsConfirmedBitcoinBlock(const uint256& hash, int nMinConfirmationDepth);
3939

4040
#endif // BITCOIN_CALLRPC_H

src/script/interpreter.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1580,7 +1580,7 @@ bool EvalScript(vector<vector<unsigned char> >& stack, const CScript& script, un
15801580
return set_error(serror, SCRIPT_ERR_WITHDRAW_VERIFY_OUTPUT_SCRIPT);
15811581

15821582
#ifndef BITCOIN_SCRIPT_NO_CALLRPC
1583-
if (GetBoolArg("-validatepegin", DEFAULT_VALIDATE_PEGIN) && !checker.IsConfirmedBitcoinBlock(genesishash, merkleBlock.header.GetHash(), flags & SCRIPT_VERIFY_INCREASE_CONFIRMATIONS_REQUIRED, GetArg("-peginconfirmationdepth", DEFAULT_PEGIN_CONFIRMATION_DEPTH)))
1583+
if (GetBoolArg("-validatepegin", DEFAULT_VALIDATE_PEGIN) && !checker.IsConfirmedBitcoinBlock(merkleBlock.header.GetHash(), flags & SCRIPT_VERIFY_INCREASE_CONFIRMATIONS_REQUIRED, GetArg("-peginconfirmationdepth", DEFAULT_PEGIN_CONFIRMATION_DEPTH)))
15841584
return set_error(serror, SCRIPT_ERR_WITHDRAW_VERIFY_BLOCKCONFIRMED);
15851585
#endif
15861586
} catch (std::exception& e) {
@@ -1975,10 +1975,10 @@ CConfidentialValue TransactionSignatureChecker::GetValueInPrevIn() const
19751975
return amountPreviousInput;
19761976
}
19771977

1978-
bool TransactionSignatureChecker::IsConfirmedBitcoinBlock(const uint256& genesishash, const uint256& hash, bool fConservativeConfirmationRequirements, uint32_t nConfirmationsRequired) const
1978+
bool TransactionSignatureChecker::IsConfirmedBitcoinBlock(const uint256& hash, bool fConservativeConfirmationRequirements, uint32_t nConfirmationsRequired) const
19791979
{
19801980
#ifndef BITCOIN_SCRIPT_NO_CALLRPC
1981-
return ::IsConfirmedBitcoinBlock(genesishash, hash, nConfirmationsRequired + (fConservativeConfirmationRequirements ? 2 : 0));
1981+
return ::IsConfirmedBitcoinBlock(hash, nConfirmationsRequired + (fConservativeConfirmationRequirements ? 2 : 0));
19821982
#else
19831983
return true;
19841984
#endif

src/script/interpreter.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ class BaseSignatureChecker
171171
return -1;
172172
}
173173

174-
virtual bool IsConfirmedBitcoinBlock(const uint256& genesishash, const uint256& hash, bool fConservativeConfirmationRequirements, uint32_t nConfirmationsRequired) const
174+
virtual bool IsConfirmedBitcoinBlock(const uint256& hash, bool fConservativeConfirmationRequirements, uint32_t nConfirmationsRequired) const
175175
{
176176
return false;
177177
}
@@ -219,7 +219,7 @@ class TransactionSignatureChecker : public TransactionNoWithdrawsSignatureChecke
219219
COutPoint GetPrevOut() const;
220220
CConfidentialValue GetValueIn() const;
221221
CConfidentialValue GetValueInPrevIn() const;
222-
bool IsConfirmedBitcoinBlock(const uint256& genesishash, const uint256& hash, bool fConservativeConfirmationRequirements, uint32_t nConfirmationsRequired) const;
222+
bool IsConfirmedBitcoinBlock(const uint256& hash, bool fConservativeConfirmationRequirements, uint32_t nConfirmationsRequired) const;
223223
virtual CScript GetFedpegScript() const
224224
{
225225
return fedpegScript;

0 commit comments

Comments
 (0)