本文整理汇总了C++中CAccount::GetHash方法的典型用法代码示例。如果您正苦于以下问题:C++ CAccount::GetHash方法的具体用法?C++ CAccount::GetHash怎么用?C++ CAccount::GetHash使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CAccount
的用法示例。
在下文中一共展示了CAccount::GetHash方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: VerifyPosTx
bool VerifyPosTx(CAccountViewCache &accView, const CBlock *pBlock, CTransactionDBCache &txCache, CScriptDBViewCache &scriptCache, bool bNeedRunTx) {
// LogPrint("INFO", "VerifyPoxTx begin\n");
uint64_t maxNonce = SysCfg().GetBlockMaxNonce(); //cacul times
if (pBlock->GetNonce() > maxNonce) {
return ERRORMSG("Nonce is larger than maxNonce");
}
if (pBlock->GetHashMerkleRoot() != pBlock->BuildMerkleTree()) {
return ERRORMSG("hashMerkleRoot is error");
}
CAccountViewCache view(accView, true);
CScriptDBViewCache scriptDBView(scriptCache, true);
CAccount account;
CRewardTransaction *prtx = (CRewardTransaction *) pBlock->vptx[0].get();
if (view.GetAccount(prtx->account, account)) {
if(!CheckSignScript(pBlock->SignatureHash(), pBlock->GetSignature(), account.PublicKey)) {
if (!CheckSignScript(pBlock->SignatureHash(), pBlock->GetSignature(), account.MinerPKey)) {
// LogPrint("ERROR", "block verify fail\r\n");
// LogPrint("ERROR", "block hash:%s\n", pBlock->GetHash().GetHex());
// LogPrint("ERROR", "signature block:%s\n", HexStr(pBlock->vSignature.begin(), pBlock->vSignature.end()));
return ERRORMSG("Verify miner publickey signature error");
}
}
} else {
return ERRORMSG("AccountView have no the accountid");
}
//校验reward_tx 版本是否正确
if (prtx->nVersion != nTxVersion2) {
return ERRORMSG("CTransaction CheckTransction,tx version is not equal current version, (tx version %d: vs current %d)",
prtx->nVersion, nTxVersion2);
}
if (bNeedRunTx) {
int64_t nTotalFuel(0);
uint64_t nTotalRunStep(0);
for (unsigned int i = 1; i < pBlock->vptx.size(); i++) {
shared_ptr<CBaseTransaction> pBaseTx = pBlock->vptx[i];
if (uint256() != txCache.IsContainTx(pBaseTx->GetHash())) {
return ERRORMSG("VerifyPosTx duplicate tx hash:%s", pBaseTx->GetHash().GetHex());
}
CTxUndo txundo;
CValidationState state;
if (CONTRACT_TX == pBaseTx->nTxType) {
LogPrint("vm", "tx hash=%s VerifyPosTx run contract\n", pBaseTx->GetHash().GetHex());
}
pBaseTx->nFuelRate = pBlock->GetFuelRate();
if (!pBaseTx->ExecuteTx(i, view, state, txundo, pBlock->GetHeight(), txCache, scriptDBView)) {
return ERRORMSG("transaction UpdateAccount account error");
}
nTotalRunStep += pBaseTx->nRunStep;
if(nTotalRunStep > MAX_BLOCK_RUN_STEP) {
return ERRORMSG("block total run steps exceed max run step");
}
nTotalFuel += pBaseTx->GetFuel(pBlock->GetFuelRate());
LogPrint("fuel", "VerifyPosTx total fuel:%d, tx fuel:%d runStep:%d fuelRate:%d txhash:%s \n",nTotalFuel, pBaseTx->GetFuel(pBlock->GetFuelRate()), pBaseTx->nRunStep, pBlock->GetFuelRate(), pBaseTx->GetHash().GetHex());
}
if(nTotalFuel != pBlock->GetFuel()) {
return ERRORMSG("fuel value at block header calculate error");
}
if (view.GetAccount(prtx->account, account)) {
//available acc
// cout << "check block hash:" << pBlock->SignatureHash().GetHex() << endl;
// cout << "check signature:" << HexStr(pBlock->vSignature) << endl;
// cout <<"account miner"<< account.ToString()<< endl;
if(account.GetAccountPos(pBlock->GetHeight()) <= 0 || !account.IsMiner(pBlock->GetHeight()))
return ERRORMSG("coindays of account dismatch, can't be miner, account info:%s", account.ToString());
} else {
LogPrint("ERROR", "AccountView have no the accountid\r\n");
return false;
}
}
uint256 prevblockhash = pBlock->GetHashPrevBlock();
const uint256 targetHash = CBigNum().SetCompact(pBlock->GetBits()).getuint256(); //target hash difficult
uint64_t posacc = account.GetAccountPos(pBlock->GetHeight());
/*
arith_uint256 bnNew;
bnNew.SetCompact(pBlock->nBits);
string timeFormat = DateTimeStrFormat("%Y-%m-%d %H:%M:%S", pBlock->nTime);
LogPrint("coinday","height:%.10d, account:%-10s, coinday:%.10ld, difficulty=%.8lf, time=%-20s, interval=%d\n", pBlock->nHeight, account.regID.ToString(), posacc/COIN/SysCfg().GetIntervalPos(), CaculateDifficulty(bnNew.GetCompact()), timeFormat, pBlock->nTime-chainActive[pBlock->nHeight-1]->nTime);
*/
if (posacc == 0) {
return ERRORMSG("Account have no pos");
}
uint256 adjusthash = GetAdjustHash(targetHash, posacc, pBlock->GetHeight()-1); //adjust nbits
//need compute this block proofofwork
struct PosTxInfo postxinfo;
postxinfo.nVersion = pBlock->GetVersion();
postxinfo.hashPrevBlock = prevblockhash;
postxinfo.hashMerkleRoot = account.GetHash();
//.........这里部分代码省略.........