I’m doing a simulation of a super simple bitcoin-like protocol in gossipsub in Go and I’m using libp2p to connect the peers. Every peer creates a block and then it shares the block on the network.
In my implementation I have 3 types of messages (based on the same struct, with a field messageType): data, ihave, iwant. When a peer A creates a block, it publishes an ihave message through the gossip network. Then, a peer B receives the ihave message, and sees that it doesn’t have that block. Now, the peer B has to send a message iwant directly to the peer A (not through the gossipsub network) asking for that block. After that, peer A sends a data message with the block to peer B (again on a direct connection), so that B can store it.
How can I establish the direct connection between A and B to send iwant and data messages? I would like to avoid using a streamHandler and setting different things, it would be better if I can send the message directly using gossipsub’s structures and inside its loop. Is it possible?
To develop my protocol, I followed this example go-libp2p-examples/pubsub/chat at master · libp2p/go-libp2p-examples · GitHub
If you want to check the code of my project, you can find it here GitHub - 0xfederama/bitcoin-simulation-libp2p: Simple Bitcoin protocol simulation using Go and Libp2p