Ethereum 确认后,挂起的以太坊事务日志消失
当我使用“eth_getLogs”查询挂起事务的日志时,日志信息显示如下,但在确认发送后,这些日志在etherescan上不可用。此tx使用了代理调用。有人能告诉我为什么日志消失了吗 发送挂起时通过查询“eth_getLogs”记录信息:Ethereum 确认后,挂起的以太坊事务日志消失,ethereum,solidity,go-ethereum,Ethereum,Solidity,Go Ethereum,当我使用“eth_getLogs”查询挂起事务的日志时,日志信息显示如下,但在确认发送后,这些日志在etherescan上不可用。此tx使用了代理调用。有人能告诉我为什么日志消失了吗 发送挂起时通过查询“eth_getLogs”记录信息: topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000006463bd6026a2e
topics: [
'0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
'0x0000000000000000000000006463bd6026a2e7bfab5851b62969a92f7cca0eb6',
'0x000000000000000000000000860bd2dba9cd475a61e6d1b45e16c365f6d78f66'
],
data: '0x00000000000000000000000000000000000000000000058677bb9e53cb507ddd',
blockNumber: '0xb117d6',
transactionHash: '0x9b51d7093c4507fa96af3fd4418c508700cb9f69f3cea9d7f5a192afa30cd1bf',
transactionIndex: '0x41',
blockHash: '0x0000000000000000000000000000000000000000000000000000000000000000',
logIndex: '0x4f',
removed: false
}
确认后etherscan上的事务:由于事务执行的结果(包括生成的事件)取决于执行时合同和帐户的状态,因此,显然,显示的日志对应于块0xb117d6中包含的事务的状态,但是在块0xb117d8的上下文中实际执行时,状态块/帐户已经不同,这导致了不同的结果
此外,对挂起事务的执行的预测是基于您特定节点的数据的,在存在forks的情况下,这些数据可能与主链的数据不同。@Mad Jacal感谢您的回答!我的理解正确吗 假设有这样一个合同:
contract test {
bool isTrue = true;
function foo() public {
if (isTrue) {
emit Event(..)
} else {
return;
}
}
function changeToFalse() public {
isTrue = false;
}
}
第一个调用方称为“foo”函数,第二个调用方称为“changeToFalse”函数。两个tx位于同一区块,但由于天然气价格较高,第二个呼叫者的tx位于第一个呼叫者的tx之前。如果节点尚未听到第二个调用方的发送消息,则挂起日志将显示事件日志。这就是你的意思吗?谢谢@Mad Jackal的回答,我在上面的另一个回答中发布了我的理解。我的理解正确吗?是的,它会有那种效果。严格地说,如果矿工和矿工都在队列中,则不可能预测他们执行交易的顺序。