cita 节点在接收到合约交易是chain微服务退出

你们可以将日志等级调整到trace看一下,直接在启动节点的命令后面加日志等级即可:

$ bin/cita start test-chain/0/ trace

get_rich_receipt里有一个trace级别的日志,会被要查询的交易hash打印出来。

找到报错的交易hash了,Get receipt by hash: 0x679ac7dc61bf882392509f8ffd868a01d1aa6c701a90e0ebea8a9f474cb55eb8,接下来怎么处理呢?

2020-11-21 - 09:30:37 | cita_chain::forward  - 363   | TRACE - Received consensus block: block_number:867092 current_height: 867091 
2020-11-21 - 09:30:37 | cita_chain::forward  - 370   | DEBUG - consensus block 867092 txs_root 0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421 txs_len 0 block_version 2
2020-11-21 - 09:30:37 | core::libchain::chai - 473   | DEBUG - consensus nodes [0xf6c5196616b0eb257924262af17476714ba9197f, 0xe35819e6db2b6f07794c7b07463d8ab3b40be2ac], block_interval 3000, version 2
2020-11-21 - 09:30:37 | core::libchain::chai - 1315  | TRACE - validate_height current_height 867091 need validate block_number 867092
2020-11-21 - 09:30:37 | core::libchain::chai - 545   | TRACE - Save ExecutedResult's header: Header { open_header: OpenHeader { parent_hash: 0xd80e04c48e089569baa4445c5e3f237353eafba0ff64a215ab013a7829bf7578, timestamp: 1605922234682, number: 867092, transactions_root: 0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421, quota_limit: 0, proof: content: "B\000\000\000\000\000\000\0000xace8c4b00701de106ffe489a5e6ba32f3e5a84c399a77f4f2143f86d659d5e2f\023;\r\000\000\000\000\000\001\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000*\000\000\000\000\000\000\0000xf6c5196616b0eb257924262af17476714ba9197fA\000\000\000\000\000\000\000@\227\035q\304\370\255\201\177\355\310\225K\300\257I\302db\322\276\366^9K\272gK\2755\212\037\0047wha\373\000Lo\201\263\216\255\257\"\021G\274o\307\"\347&+\357\2433\226\014\316\322\315\000*\000\000\000\000\000\000\0000xe35819e6db2b6f07794c7b07463d8ab3b40be2acA\000\000\000\000\000\000\000-\337m\335X%\253\220\242\351\373\366kc4\206\361\374\260\205\237v\374<)\244\233\257\226\365\277z~\220\334^\377r\004T\203\263\302\364C)\264*\374\213\314k{0\021\364\330\353\222\272\255\007\2333\001" type: Bft, version: 2, proposer: 0xf6c5196616b0eb257924262af17476714ba9197f }, state_root: 0xdcf8e602676ae2f53e4ce4203a6a67beb55ca79af204eae64ff013b2a30a1685, receipts_root: 0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421, log_bloom: 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, quota_used: 0, hash: Some(0x35a13da2b6a4df104fd205b06c764b3d3a7790538b3dddf2a1ad3ea5a9195795) }
2020-11-21 - 09:30:37 | core::libchain::chai - 1238  | TRACE - delivery block's tx hashes for height: 867092
2020-11-21 - 09:30:37 | core::libchain::chai - 1356  | INFO  - new chain status height 867092, hash 35a13da2b6a4df104fd205b06c764b3d3a7790538b3dddf2a1ad3ea5a9195795
2020-11-21 - 09:30:37 | core::libchain::chai - 653   | DEBUG - executed set consensus block-867092
2020-11-21 - 09:30:37 | core::libchain::chai - 944   | TRACE - Get receipt by hash: 0x679ac7dc61bf882392509f8ffd868a01d1aa6c701a90e0ebea8a9f474cb55eb8
2020-11-21 - 09:30:37 | panic_hook           - 59    | ERROR - 
============================
stack backtrace:
   0:     0x7f63effb54ed - backtrace::backtrace::trace::h427274634b26cc90
   1:     0x7f63effb50d2 - <backtrace::capture::Backtrace as core::default::Default>::default::h094442244fd75184
   2:     0x7f63effb43e4 - panic_hook::panic_hook::h49ebbf6f4135f29c
   3:     0x7f63effb4118 - core::ops::function::Fn::call::h4af4df279732d685
   4:     0x7f63f0472358 - rust_panic_with_hook
                        at src/libstd/panicking.rs:482
   5:     0x7f63efed7b74 - std::panicking::begin_panic::h02f3cdf15ae90cdb
   6:     0x7f63efeb83b8 - core::libchain::chain::Chain::get_rich_receipt::hef8bd138b8162c43
   7:     0x7f63efe362b4 - cita_chain::forward::Forward::reply_request::hcaadbf09f3e93fe9
   8:     0x7f63efe338f4 - cita_chain::forward::Forward::dispatch_msg::hd3a7f57ea5cbdef4
   9:     0x7f63efe499f4 - cita_chain::main::{{closure}}::h28fcd68681e80c23
  10:     0x7f63efe4670d - std::sys_common::backtrace::__rust_begin_short_backtrace::h1c1878ddddb2e41f
  11:     0x7f63efe1452d - std::panicking::try::do_call::h48bc8208049f9304
  12:     0x7f63f0476889 - __rust_maybe_catch_panic
                        at src/libpanic_unwind/lib.rs:87
  13:     0x7f63efe480ae - <F as alloc::boxed::FnBox<A>>::call_box::hb5ac7e1bd40f359a
  14:     0x7f63f0475c8d - call_once<(),()>
                        at /rustc/6c2484dc3c532c052f159264e970278d8b77cdc9/src/liballoc/boxed.rs:759
                         - start_thread
                        at src/libstd/sys_common/thread.rs:14
                         - thread_start
                        at src/libstd/sys/unix/thread.rs:81
  15:     0x7f63ef1946da - start_thread
  16:     0x7f63eeca588e - __clone
  17:                0x0 - <unknown>

position:
Thread <unnamed> panicked at arithmetic operation overflow, /opt/.cargo/registry/src/github.com-1ecc6299db9ec823/ethereum-types-0.4.2/src/uint.rs:32

This is a bug. Please report it at:

    https://github.com/cryptape/cita/issues/new?labels=bug&template=bug_report.md

============================

https://docs.citahub.com/zh-CN/next/cita/rpc-guide/rpc#gettransaction 接口查一下是什么交易

现在挂掉的是node0,我还没重启,在node1上找不到这笔交易,说明不是历史交易。接下来怎么查?

不是getTransactionReceipt,是getTransaction

你查Receipt返回system timeout是因为我之前说的,只要一查这笔交易,chain就挂了。。。
正常查不存在的交易会报交易不存在,而不是system timeout

找到这笔交易了,是一个ERC721合约,这个是调用合约mint方法的交易。

http://scan.uchance-leasing.com/#/block/id/512617
http://scan.uchance-leasing.com/#/transaction/hash/0x679ac7dc61bf882392509f8ffd868a01d1aa6c701a90e0ebea8a9f474cb55eb8
HEX:

0x2fb102cf0000000000000000000000006c5318924ba02c147dfa9f27585a913060bab5be000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000ae6b2aa41646331313131000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012444c466473666466736466313132323232320000000000000000000000000000
UTF8:
{
“0”: “0x6c5318924Ba02c147DfA9f27585a913060bAB5bE”,
“1”: {
“_hex”: “0x0d”
},
“2”: “沪Adc1111”,
“3”: “DLFdsfdfsdf1122222”,
“to”: “0x6c5318924Ba02c147DfA9f27585a913060bAB5bE”,
“tokenId”: {
“_hex”: “0x0d”
},
“_lpn”: “沪Adc1111”,
“_vin”: “DLFdsfdfsdf1122222”
}

这笔交易Quota 消费确实很可疑

好的
@yuitta 看一下能不能本地复现?

能否提供下相关合约的bytecode以便我们这边复现你的问题

我重复了你过去的交易, 并为出现链挂掉的情况而是正常的revert

我注意到你链上的480086块高的有笔类似交易的quota消耗与我试验的存在差异, 你是1kw, 而我是0x5666

想请你们联系运维, 在链操作过程中是否存在链升级版本的行为

没有升级过版本。

这个是ERC721合约,这个合约是NFT,也就是tokenId是唯一的,如果调用mint方法传入相同的tokenId,则必然有一个会Reverted,如果是Reverted的交易则Quota消费会耗尽,即达到Quota限制的上限,我调用时Quota限制设置的是1kw,所以您看到的可以说是正常的。

如果有必要您可以登录服务器获取区块数据,或者查看logs研究下,我感觉这里还是有个bug,希望能找到并解决,感谢!

这个问题已经找到原因,在最新devlop分支上修复了。


你们可以先取最新代码试一下。我们后续会发一个版本。
不过这个修改是个breaking change,跟之前的版本数据上就不兼容了。

1赞

:+1: :+1:

我检查了下v20.2.0版本安装文件和源码,感觉上次的bug没有更新,请再确认下,谢谢!
https://github.com/citahub/cita/releases/download/v20.2.0/cita_secp256k1_sha3.tar.gz
https://github.com/citahub/cita/archive/v20.2.0.zip
https://github.com/citahub/cita/archive/v20.2.0.tar.gz

本帖子问题修复在develop分支上,还没有发版本

预计什么时间发版本呢?

年后吧。
现在CITA开源版本修改比较少了,总感觉凑不够发一个版本的量。
如果比较着急,可以先自己编译develop分支。
其实这么慢的变动节奏下,develop分支和发的正式版本也没太大的区别。