【问题标题】:How sending transactions and receiving events work in backends in Ethereum blockchain发送交易和接收事件如何在以太坊区块链的后端工作
【发布时间】:2021-04-26 02:00:21
【问题描述】:

我正在从事一个以太坊项目,但我有一些疑问。我有一个通过 web3.js 连接到区块链的后端。为了连接到区块链,我使用了一个 geth 节点。 我知道顺序是这样的:

发送交易 听事件 我的问题是:

  • 发送事务的组件是什么?是后端组件还是geth节点?
  • 然后假设网络中的另一个智能合约发出了我想要捕获的事件。捕获事件的组件是什么?是后端组件还是geth节点?

【问题讨论】:

  • 发送交易的组件?那要看。您是从后端以原始格式发送它,还是通过解锁帐户使用geth 发送它?如果是第一个,那么它是后端,如果是第二个,那么它的 geth 发送 Tx
  • 没有人捕捉到这些事件。事件存储在收据中。您可以获得该区块的所有收据并扫描它们以选择您感兴趣的那些。您可以一遍又一遍地阅读事件,因此无需任何捕获。以这种方式读取时,您唯一需要验证的是区块的父哈希与前一个区块的哈希匹配,因此您可以免受链分裂(即链重组)
  • @Nulik 谢谢你的回答。但是,我需要在各个箭头上写下步骤,所以我遇到了麻烦,因为我找不到正确的方法

标签: events transactions blockchain ethereum


【解决方案1】:

一个很好的问题,先生。

通常,在这种后端signs 这样的设置中,交易及其钱包密钥。后端有一个hot wallet 和 ETH 余额,以便能够创建和广播交易。

事务通过 JSON-RPC 推送到 Ethereum API node。节点将交易广播到P2P networkminermempool 中提取交易。创建了一个新块。矿工将新创建的块广播回点对点网络。你的以太坊节点获取新区块。 Web3.js 后端应用程序从您的以太坊节点轮询或订阅与智能合约相关的事件。 Backend event web3.js handlers are fired 表示新区块的状态变化。

请注意,在次要 blockchain reorganisation 的情况下,这些块也可以回滚。在这种情况下或重组中,事件处理程序为每个竞争块再次触发(两次、三次等)。小的区块链重组可能在一小时内发生多次。当前状态是概率性的,因此您总是需要等待几个块才能确定。

对于区块链中其他参与者的事件和交易,您只需订阅事件并在新块从矿工到达您的节点时处理它们。

【讨论】:

  • 那么说后端从geth请求新块,从中提取事件并选择必要的块是否正确?
  • 是的,尽管后端不请求新块。您的以太坊节点(geth 不是唯一的)请求新块并管理权威状态。然后,您的后端只需读取它选择的此状态下的变量。
  • 谢谢,你给了我最清楚的答案。好的,最后是我的后端正在监听事件。对吗?
  • 我能再问你一个问题吗?我在 stackExchange 中写了这个问题。 Geth 既可以是全节点也可以是轻节点,但有人问我这个问题link
  • 后端监听事件正确。
猜你喜欢
  • 2019-12-09
  • 2018-11-04
  • 2021-07-27
  • 2019-01-24
  • 2018-08-25
  • 2022-07-19
  • 2018-06-23
  • 2022-11-16
  • 1970-01-01
相关资源
最近更新 更多