企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 处理两个chan通道的消息 ``` // HandleEvents 处理两个chan通道的消息:Blocks和Transactions // 将block消息或transaction消息通过节点的通信通道发布(Publish)到全网 func HandleEvents(net *Network) { for { select { case block := <-net.Blocks:           net.SendBlock("", block) case tnx := <-net.Transactions: //mine := false           net.SendTx("", tnx) } } } ``` ### SendTx ``` func (net *Network) SendTx(peerId string, transaction *blockchain.Transaction) {     memoryPool.Add(*transaction) tnx := Tx{net.Host.ID().Pretty(), transaction.Serializer()} payload := GobEncode(tnx) request := append(CmdToBytes("tx"), payload...) // 给全节点(FullNode)的通信通道发布此消息,全节点(FullNode)将进行处理     net.FullNodesChannel.Publish("接收到 Send transaction 命令", request, peerId) } ``` ### Publish(channel.go) ``` // Publish 发布消息 func (channel *Channel) Publish(message string, payload []byte, SendTo string) error { m := ChannelContent{         Message: message,         SendFrom: ShortID(channel.self),         SendTo: SendTo,         Payload: payload, }     msgBytes, err := json.Marshal(m) if err != nil { return err } //从Publish实现来看,pub系统实际上也是直接将msgBytes发送到全网,并不先做解析,因此构建的消息结构只有Data和Topic赋值了 //From和Seqno均设置为nil。这意味着必然接受到消息 return channel.topic.Publish(channel.ctx, msgBytes) ```