本文整理匯總了Golang中github.com/c-darwin/dcoin-go/packages/dcparser.Parser.ClearIncompatibleTx方法的典型用法代碼示例。如果您正苦於以下問題:Golang Parser.ClearIncompatibleTx方法的具體用法?Golang Parser.ClearIncompatibleTx怎麽用?Golang Parser.ClearIncompatibleTx使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/c-darwin/dcoin-go/packages/dcparser.Parser
的用法示例。
在下文中一共展示了Parser.ClearIncompatibleTx方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: QueueParserTestblock
//.........這裏部分代碼省略.........
}
continue
}
newBlock := []byte(data["data"])
newHeaderHash := utils.BinToHex([]byte(data["head_hash"]))
tx := utils.DeleteHeader(newBlock)
// сразу можно удалять данные из таблы-очереди
err = d.ExecSql("DELETE FROM queue_testblock WHERE hex(head_hash) = ?", newHeaderHash)
if err != nil {
if d.unlockPrintSleep(utils.ErrInfo(errors.New("len(data) == 0")), d.sleepTime) {
break BEGIN
}
continue
}
// прежде всего нужно проверить, а нет ли в этом блоке ошибок с несовметимыми тр-ми
// при полной проверке, а не только фронтальной проблем с несовместимыми тр-ми не будет, т.к. там даные сразу пишутся в таблицы
// а тут у нас данные пишутся только в log_time_
// и сами тр-ии пишем в отдельную таблу
p := new(dcparser.Parser)
p.DCDB = d.DCDB
if len(tx) > 0 {
log.Debug("len(tx): %d", len(tx))
for {
log.Debug("tx: %x", tx)
txSize := utils.DecodeLength(&tx)
log.Debug("txSize: %d", txSize)
// отделим одну транзакцию от списка транзакций
txBinaryData := utils.BytesShift(&tx, txSize)
log.Debug("txBinaryData: %x", txBinaryData)
// проверим, нет ли несовместимых тр-ий
fatalError, waitError, _, _, _, _ := p.ClearIncompatibleTx(txBinaryData, false)
if len(fatalError) > 0 || len(waitError) > 0 {
if d.unlockPrintSleep(utils.ErrInfo(errors.New(" len(fatalError) > 0 || len(waitError) > 0")), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
if len(tx) == 0 {
break
}
}
}
// откатим тр-ии тестблока, но не удаляя их, т.к. далее еще можем их вернуть
p.RollbackTransactionsTestblock(false)
// проверим блок, который получился с данными, которые прислал другой нод
p.BinaryData = newBlock
err = p.ParseDataGate(false)
if err != nil {
log.Error("%v", err)
// т.к. мы откатили наши тр-ии из transactions_testblock, то теперь нужно обработать их по новой
// получим наши транзакции в 1 бинарнике, просто для удобства
var myTestBlockBody []byte
transactionsTestblock, err := d.GetAll("SELECT data FROM transactions_testblock ORDER BY id ASC", -1)
if err != nil {
if d.dPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN