Я провел тест, чтобы увидеть, что произойдет, если я попытаюсь получить CID, которого не существует, чтобы увидеть, могу ли я постоянно спрашивать каждого однорангового узла в IPFS. Похоже, это не работает. Я подключаюсь примерно к 10 партнерам, а затем он отказывается. Я не уверен, что на самом деле подключаюсь. Я не совсем понимаю, что происходит. Я не знаю, действительно ли я подключаюсь к какому-либо партнеру и запрашиваю у них CID. Мне кажется, что я подключаюсь к звездообразному серверу и вижу список одноранговых узлов, но не уверен, что когда-либо подключаюсь к любому из этих узлов.
Есть ли другие события, которые я должен слушать, чтобы отладить то, что происходит? Как я могу прослушивать сообщения, которые я отправляю партнерам?
Мое предположение о том, как работает Bittorrent DHT, заключается в том, что, если CID не существует, я должен в конечном итоге спрашивать каждого однорангового узла в сети, есть ли у них этот CID. Во всей сети всего 10 пиров? Или только 10 пиров на этом звездообразном сервере? Нет ли открытия звездообразного сервера? Как мне найти занятый звездный сервер?
<script src="https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js"></script>
<script>
(async () => {
window.node = await Ipfs.create()
window.node.libp2p.on('peer:discovery', (peer) => console.log('peer:discovery', peer))
window.node.libp2p.on('peer:connect', peerInfo => console.log('peer:connect', peerInfo))
window.node.libp2p.on('peer:disconnect', peerInfo => console.log('peer:disconnect', peerInfo))
window.node.libp2p.peerStore.on('peer', (peerId) => console.log('peer', peerId))
window.node.libp2p.peerStore.on('change:multiaddrs', ({ peerId, multiaddrs}) => {
const addresses = []
for (const multiaddr of multiaddrs) {
addresses.push(multiaddr.buffer.toString())
}
console.log('change:multiaddrs', {peerId, multiaddrs, addresses})
})
window.node.libp2p.peerStore.on('change:protocols', ({ peerId, protocols}) => console.log('change:protocols', {peerId, protocols}))
window.node.libp2p.on('error', (err) => console.log('error', err))
window.node.libp2p.connectionManager.on('peer:connect', (connection) => {
console.log('connectionManager:peer:connect', {connection, remoteAddr: connection.remoteAddr.buffer.toString()})
})
window.node.libp2p.connectionManager.on('peer:disconnect', (connection) => console.log('connectionManager:peer:disconnect', connection))
// fake CID does not exist
results = window.node.get("QmZbj5ruYneZb8FuR9wnLuJCpCXMQudhSdWhdhp5U1oPWJ")
for await (res of results) {
for await (content of res.content) {
window.content = content
console.log(content.toString())
}
}
})()
</script>