Ethereum 确认后,挂起的以太坊事务日志消失

Ethereum 确认后,挂起的以太坊事务日志消失,ethereum,solidity,go-ethereum,Ethereum,Solidity,Go Ethereum,当我使用“eth_getLogs”查询挂起事务的日志时,日志信息显示如下,但在确认发送后,这些日志在etherescan上不可用。此tx使用了代理调用。有人能告诉我为什么日志消失了吗 发送挂起时通过查询“eth_getLogs”记录信息: topics: [ '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', '0x0000000000000000000000006463bd6026a2e

当我使用“eth_getLogs”查询挂起事务的日志时,日志信息显示如下,但在确认发送后,这些日志在etherescan上不可用。此tx使用了代理调用。有人能告诉我为什么日志消失了吗

发送挂起时通过查询“eth_getLogs”记录信息:

  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的回答,我在上面的另一个回答中发布了我的理解。我的理解正确吗?是的,它会有那种效果。严格地说,如果矿工和矿工都在队列中,则不可能预测他们执行交易的顺序。