mirror of
https://github.com/vacp2p/research.logos.co.git
synced 2026-04-03 03:01:03 -04:00
1 line
21 KiB
JavaScript
1 line
21 KiB
JavaScript
"use strict";(self.webpackChunkresearch_logos_co=self.webpackChunkresearch_logos_co||[]).push([[4361],{1340:(e,n,s)=>{s.d(n,{A:()=>a});const a=s.p+"assets/images/waku1-vs-waku2-30-nodes-dc614f343b395e41c450f67e7e753881.png"},6797:(e,n,s)=>{s.d(n,{A:()=>a});const a=s.p+"assets/images/waku1-vs-waku2-overall-message-rate-aa6f7884f804b62ba14a6b4e369eaee3.png"},9245:(e,n,s)=>{s.d(n,{A:()=>a});const a=s.p+"assets/images/waku1-vs-waku2-overall-network-size-42e3912f3895367f3458c92e3e46ea47.png"},21466:(e,n,s)=>{s.d(n,{A:()=>a});const a=s.p+"assets/images/waku1-vs-waku2-10-nodes-fcc807080c17463099e65069a7580532.png"},28453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>r});var a=s(96540);const o={},i=a.createContext(o);function t(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),a.createElement(i.Provider,{value:n},e.children)}},34086:(e,n,s)=>{s.d(n,{A:()=>a});const a=s.p+"assets/images/waku1-vs-waku2-50-nodes-7facf8c03b87e2ebb2dd3967fac6e6a0.png"},39717:e=>{e.exports=JSON.parse('{"permalink":"/rlog/waku-v1-v2-bandwidth-comparison","source":"@site/rlog/2021-10-25-waku-v1-vs-waku-v2.mdx","title":"Waku v1 vs Waku v2: Bandwidth Comparison","description":"A local comparison of bandwidth profiles showing significantly improved scalability in Waku v2 over Waku v1.","date":"2021-11-03T10:00:00.000Z","tags":[],"readingTime":9.355,"hasTruncateMarker":true,"authors":[{"name":"Hanno Cornelius","twitter":"4aelius","github":"jm-clius","key":"hanno","page":null}],"frontMatter":{"layout":"post","name":"Waku v1 vs Waku v2: Bandwidth Comparison","title":"Waku v1 vs Waku v2: Bandwidth Comparison","date":"2021-11-03T10:00:00.000Z","authors":"hanno","published":true,"slug":"waku-v1-v2-bandwidth-comparison","categories":"research","image":"/img/waku1-vs-waku2/waku1-vs-waku2-overall-network-size.png","discuss":"https://forum.research.logos.co/t/discussion-waku-v1-vs-waku-v2-bandwidth-comparison/110"},"unlisted":false,"prevItem":{"title":"Opinion: Pseudo-ethics in the Surveillance Tech Industry","permalink":"/rlog/ethics-surveillance-tech"},"nextItem":{"title":"[Talk at COSCUP] Vac, Waku v2 and Ethereum Messaging","permalink":"/rlog/waku-v2-ethereum-coscup"}}')},59567:(e,n,s)=>{s.d(n,{A:()=>a});const a=s.p+"assets/images/waku1-vs-waku2-150-nodes-aee6ff3d7b339b78fd56cc52eb86268e.png"},67712:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>t,metadata:()=>a,toc:()=>c});var a=s(39717),o=s(74848),i=s(28453);const t={layout:"post",name:"Waku v1 vs Waku v2: Bandwidth Comparison",title:"Waku v1 vs Waku v2: Bandwidth Comparison",date:new Date("2021-11-03T10:00:00.000Z"),authors:"hanno",published:!0,slug:"waku-v1-v2-bandwidth-comparison",categories:"research",image:"/img/waku1-vs-waku2/waku1-vs-waku2-overall-network-size.png",discuss:"https://forum.research.logos.co/t/discussion-waku-v1-vs-waku-v2-bandwidth-comparison/110"},r=void 0,l={authorsImageUrls:[void 0]},c=[{value:"Background",id:"background",level:2},{value:"Theoretical improvements in Waku v2",id:"theoretical-improvements-in-waku-v2",level:2},{value:"Methodology",id:"methodology",level:2},{value:"Network size comparison",id:"network-size-comparison",level:2},{value:"Iteration 1: 10 nodes",id:"iteration-1-10-nodes",level:3},{value:"Iteration 2: 30 nodes",id:"iteration-2-30-nodes",level:3},{value:"Iteration 3: 50 nodes",id:"iteration-3-50-nodes",level:3},{value:"Iteration 4: 85 nodes",id:"iteration-4-85-nodes",level:3},{value:"Iteration 5: 150 nodes",id:"iteration-5-150-nodes",level:3},{value:"Discussion",id:"discussion",level:3},{value:"Network traffic comparison",id:"network-traffic-comparison",level:2},{value:"Conclusions",id:"conclusions",level:2},{value:"Future work",id:"future-work",level:2},{value:"References",id:"references",level:2}];function h(e){const n={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"A local comparison of bandwidth profiles showing significantly improved scalability in Waku v2 over Waku v1."}),"\n","\n",(0,o.jsx)(n.h2,{id:"background",children:"Background"}),"\n",(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.a,{href:"https://research.logos.co/waku-v2-plan",children:"original plan"})," for Waku v2 suggested theoretical improvements in resource usage over Waku v1,\nmainly as a result of the improved amplification factors provided by GossipSub.\nIn its turn, ",(0,o.jsx)(n.a,{href:"https://research.logos.co/fixing-whisper-with-waku",children:"Waku v1 proposed improvements"})," over its predecessor, Whisper."]}),"\n",(0,o.jsx)(n.p,{children:"Given that Waku v2 is aimed at resource restricted environments,\nwe are specifically interested in its scalability and resource usage characteristics.\nHowever, the theoretical performance improvements of Waku v2 over Waku v1,\nhas never been properly benchmarked and tested."}),"\n",(0,o.jsxs)(n.p,{children:['Although we\'re working towards a full performance evaluation of Waku v2,\nthis would require significant planning and resources,\nif it were to simulate "real world" conditions faithfully and measure bandwidth and resource usage across different network connections,\nrobustness against attacks/losses, message latencies, etc.\n(There already exists a fairly comprehensive ',(0,o.jsx)(n.a,{href:"https://research.protocol.ai/publications/gossipsub-v1.1-evaluation-report/vyzovitis2020.pdf",children:"evaluation of GossipSub v1.1"}),",\non which ",(0,o.jsx)(n.a,{href:"https://rfc.vac.dev/waku/standards/core/11/relay",children:(0,o.jsx)(n.code,{children:"11/WAKU2-RELAY"})})," is based.)"]}),"\n",(0,o.jsxs)(n.p,{children:["As a starting point,\nthis post contains a limited and local comparison of the ",(0,o.jsx)(n.em,{children:"bandwidth"})," profile (only) between Waku v1 and Waku v2.\nIt reuses and adapts existing network simulations for ",(0,o.jsx)(n.a,{href:"https://github.com/status-im/nim-waku/blob/master/waku/v1/node/quicksim.nim",children:"Waku v1"})," and ",(0,o.jsx)(n.a,{href:"https://github.com/status-im/nim-waku/blob/master/waku/v2/node/quicksim2.nim",children:"Waku v2"}),"\nand compares bandwidth usage for similar message propagation scenarios."]}),"\n",(0,o.jsx)(n.h2,{id:"theoretical-improvements-in-waku-v2",children:"Theoretical improvements in Waku v2"}),"\n",(0,o.jsxs)(n.p,{children:["Messages are propagated in Waku v1 using ",(0,o.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Flooding_(computer_networking)",children:"flood routing"}),".\nThis means that every peer will forward every new incoming message to all its connected peers (except the one it received the message from).\nThis necessarily leads to unnecessary duplication (termed ",(0,o.jsx)(n.em,{children:"amplification factor"}),"),\nwasting bandwidth and resources.\nWhat's more, we expect this effect to worsen the larger the network becomes,\nas each ",(0,o.jsx)(n.em,{children:"connection"})," will receive a copy of each message,\nrather than a single copy per peer."]}),"\n",(0,o.jsxs)(n.p,{children:["Message routing in Waku v2 follows the ",(0,o.jsx)(n.code,{children:"libp2p"})," ",(0,o.jsx)(n.em,{children:"GossipSub"}),' protocol,\nwhich lowers amplification factors by only sending full message contents to a subset of connected peers.\nAs a Waku v2 network grows, each peer will limit its number of full-message ("mesh") peerings -\n',(0,o.jsx)(n.code,{children:"libp2p"})," suggests a maximum of ",(0,o.jsx)(n.code,{children:"12"}),' such connections per peer.\nThis allows much better scalability than a flood-routed network.\nFrom time to time, a Waku v2 peer will send metadata about the messages it has seen to other peers ("gossip" peers).']}),"\n",(0,o.jsxs)(n.p,{children:["See ",(0,o.jsx)(n.a,{href:"https://hackmd.io/@vac/main/%2FYYlZYBCURFyO_ZG1EiteWg#11WAKU2-RELAY-gossipsub",children:"this explainer"})," for a more detailed discussion."]}),"\n",(0,o.jsx)(n.h2,{id:"methodology",children:"Methodology"}),"\n",(0,o.jsxs)(n.p,{children:["The results below contain only some scenarios that provide an interesting contrast between Waku v1 and Waku v2.\nFor example, ",(0,o.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Star_network",children:"star network topologies"})," do not show a substantial difference between Waku v1 and Waku v2.\nThis is because each peer relies on a single connection to the central node for every message,\nwhich barely requires any routing:\neach connection receives a copy of every message for both Waku v1 and Waku v2.\nHybrid topologies similarly show only a difference between Waku v1 and Waku v2 for network segments with ",(0,o.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Mesh_networking",children:"mesh-like connections"}),",\nwhere routing decisions need to be made."]}),"\n",(0,o.jsx)(n.p,{children:"For this reason, the following approach applies to all iterations:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Simulations are run ",(0,o.jsx)(n.strong,{children:"locally"}),".\nThis limits the size of possible scenarios due to local resource constraints,\nbut is a way to quickly get an approximate comparison."]}),"\n",(0,o.jsxs)(n.li,{children:["Nodes are treated as a ",(0,o.jsx)(n.strong,{children:"blackbox"})," for which we only measure bandwidth,\nusing an external bandwidth monitoring tool.\nIn other words, we do not consider differences in the size of the envelope (for v1) or the message (for v2)."]}),"\n",(0,o.jsxs)(n.li,{children:["Messages are published at a rate of ",(0,o.jsx)(n.strong,{children:"50 new messages per second"})," to each network,\nexcept where explicitly stated otherwise."]}),"\n",(0,o.jsxs)(n.li,{children:["Each message propagated in the network carries ",(0,o.jsx)(n.strong,{children:"8 bytes"})," of random payload, which is ",(0,o.jsx)(n.strong,{children:"encrypted"}),".\nThe same symmetric key cryptographic algorithm (with the same keys) are used in both Waku v1 and v2."]}),"\n",(0,o.jsxs)(n.li,{children:["Traffic in each network is ",(0,o.jsx)(n.strong,{children:"generated from 10 nodes"})," (randomly-selected) and published in a round-robin fashion to ",(0,o.jsx)(n.strong,{children:"10 topics"})," (content topics for Waku v2).\nIn practice, we found no significant difference in ",(0,o.jsx)(n.em,{children:"average"})," bandwidth usage when tweaking these two parameters (the number of traffic generating nodes and the number of topics)."]}),"\n",(0,o.jsxs)(n.li,{children:["Peers are connected in a decentralized ",(0,o.jsx)(n.strong,{children:"full mesh topology"}),",\ni.e. each peer is connected to every other peer in the network.\nWaku v1 is expected to flood all messages across all existing connections.\nWaku v2 gossipsub will GRAFT some of these connections for full-message peerings,\nwith the rest being gossip-only peerings."]}),"\n",(0,o.jsxs)(n.li,{children:["After running each iteration, we ",(0,o.jsx)(n.strong,{children:"verify that messages propagated to all peers"})," (comparing the number of published messages to the metrics logged by each peer)."]}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:['For Waku v1, nodes are configured as "full" nodes (i.e. with full bloom filter),\nwhile Waku v2 nodes are ',(0,o.jsx)(n.code,{children:"relay"})," nodes, all subscribing and publishing to the same PubSub topic."]}),"\n",(0,o.jsx)(n.h2,{id:"network-size-comparison",children:"Network size comparison"}),"\n",(0,o.jsx)(n.h3,{id:"iteration-1-10-nodes",children:"Iteration 1: 10 nodes"}),"\n",(0,o.jsx)(n.p,{children:"Let's start with a small network of 10 nodes only and see how Waku v1 bandwidth usage compares to that of Waku v2.\nAt this small scale we don't expect to see improved bandwidth usage in Waku v2 over Waku v1,\nsince all connections, for both Waku v1 and Waku v2, will be full-message connections.\nThe number of connections is low enough that Waku v2 nodes will likely GRAFT all connections to full-message peerings,\nessentially flooding every message on every connection in a similar fashion to Waku v1.\nIf our expectations are confirmed, it helps validate our methodology,\nshowing that it gives more or less equivalent results between Waku v1 and Waku v2 networks."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{src:s(21466).A+"",width:"1243",height:"734"})}),"\n",(0,o.jsx)(n.p,{children:"Sure enough, the figure shows that in this small-scale setup,\nWaku v1 actually has a lower per-peer bandwidth usage than Waku v2.\nOne reason for this may be the larger overall proportion of control messages in a gossipsub-routed network such as Waku v2.\nThese play a larger role when the total network traffic is comparatively low, as in this iteration.\nAlso note that the average bandwidth remains more or less constant as long as the rate of published messages remains stable."}),"\n",(0,o.jsx)(n.h3,{id:"iteration-2-30-nodes",children:"Iteration 2: 30 nodes"}),"\n",(0,o.jsxs)(n.p,{children:["Now, let's run the same scenario for a larger network of highly-connected nodes, this time consisting of 30 nodes.\nAt this point, the Waku v2 nodes will start pruning some connections to limit the number of full-message peerings (to a maximum of ",(0,o.jsx)(n.code,{children:"12"}),"),\nwhile the Waku v1 nodes will continue flooding messages to all connected peers.\nWe therefore expect to see a somewhat improved bandwidth usage in Waku v2 over Waku v1."]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{src:s(1340).A+"",width:"1240",height:"733"})}),"\n",(0,o.jsx)(n.p,{children:"Bandwidth usage in Waku v2 has increased only slightly from the smaller network of 10 nodes (hovering between 2000 and 3000 kbps).\nThis is because there are only a few more full-message peerings than before.\nCompare this to the much higher increase in bandwidth usage for Waku v1, which now requires more than 4000 kbps on average."}),"\n",(0,o.jsx)(n.h3,{id:"iteration-3-50-nodes",children:"Iteration 3: 50 nodes"}),"\n",(0,o.jsx)(n.p,{children:"For an even larger network of 50 highly connected nodes,\nthe divergence between Waku v1 and Waku v2 is even larger.\nThe following figure shows comparative average bandwidth usage for a throughput of 50 messages per second."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{src:s(34086).A+"",width:"1241",height:"735"})}),"\n",(0,o.jsx)(n.p,{children:"Average bandwidth usage (for the same message rate) has remained roughly the same for Waku v2 as it was for 30 nodes,\nindicating that the number of full-message peerings per node has not increased."}),"\n",(0,o.jsx)(n.h3,{id:"iteration-4-85-nodes",children:"Iteration 4: 85 nodes"}),"\n",(0,o.jsx)(n.p,{children:"We already see a clear trend in the bandwidth comparisons above,\nso let's confirm by running the test once more for a network of 85 nodes.\nDue to local resource constraints, the effective throughput for Waku v1 falls to below 50 messages per second,\nso the v1 results below have been normalized and are therefore approximate.\nThe local Waku v2 simulation maintains the message throughput rate without any problems."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{src:s(71636).A+"",width:"1237",height:"732"})}),"\n",(0,o.jsx)(n.h3,{id:"iteration-5-150-nodes",children:"Iteration 5: 150 nodes"}),"\n",(0,o.jsx)(n.p,{children:"Finally, we simulate message propagation in a network of 150 nodes.\nDue to local resource constraints, we run this simulation at a lower rate -\n35 messages per second -\nand for a shorter amount of time."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{src:s(59567).A+"",width:"1361",height:"803"})}),"\n",(0,o.jsx)(n.p,{children:"Notice how the Waku v1 bandwidth usage is now more than 10 times worse than that of Waku v2.\nThis is to be expected, as each Waku v1 node will try to flood each new message to 149 other peers,\nwhile the Waku v2 nodes limit their full-message peerings to no more than 12."}),"\n",(0,o.jsx)(n.h3,{id:"discussion",children:"Discussion"}),"\n",(0,o.jsx)(n.p,{children:"Let's summarize average bandwidth growth against network growth for a constant message propagation rate.\nSince we are particularly interested in how Waku v1 compares to Waku v2 in terms of bandwidth usage,\nthe results are normalised to the Waku v2 average bandwidth usage for each network size."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{src:s(9245).A+"",width:"1238",height:"731"})}),"\n",(0,o.jsx)(n.p,{children:"Extrapolation is a dangerous game,\nbut it's safe to deduce that the divergence will only grow for even larger network topologies.\nAlthough control signalling contributes more towards overall bandwidth for Waku v2 networks,\nthis effect becomes less noticeable for larger networks.\nFor network segments with more than ~18 densely connected nodes,\nthe advantage of using Waku v2 above Waku v1 becomes clear."}),"\n",(0,o.jsx)(n.h2,{id:"network-traffic-comparison",children:"Network traffic comparison"}),"\n",(0,o.jsx)(n.p,{children:"The analysis above controls the average message rate while network size grows.\nIn reality, however, active users (and therefore message rates) are likely to grow in conjunction with the network.\nThis will have an effect on bandwidth for both Waku v1 and Waku v2, though not in equal measure.\nConsider the impact of an increasing rate of messages in a network of constant size:"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{src:s(6797).A+"",width:"1129",height:"672"})}),"\n",(0,o.jsxs)(n.p,{children:["The ",(0,o.jsx)(n.em,{children:"rate"})," of increase in bandwidth for Waku v2 is slower than that for Waku v1 for a corresponding increase in message propagation rate.\nIn fact, for a network of 30 densely-connected nodes,\nif the message propagation rate increases by 1 per second,\nWaku v1 requires an increased average bandwidth of almost 70kbps at each node.\nA similar traffic increase in Waku v2 requires on average 40kbps more bandwidth per peer, just over half that of Waku v1."]}),"\n",(0,o.jsx)(n.h2,{id:"conclusions",children:"Conclusions"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Waku v2 scales significantly better than Waku v1 in terms of average bandwidth usage"}),",\nespecially for densely connected networks."]}),"\n",(0,o.jsxs)(n.li,{children:["E.g. for a network consisting of ",(0,o.jsx)(n.strong,{children:"150"})," or more densely connected nodes,\nWaku v2 provides more than ",(0,o.jsx)(n.strong,{children:"10x"})," better average bandwidth usage rates than Waku v1."]}),"\n",(0,o.jsx)(n.li,{children:"As the network continues to scale, both in absolute terms (number of nodes) and in network traffic (message rates) the disparity between Waku v2 and Waku v1 becomes even larger."}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"future-work",children:"Future work"}),"\n",(0,o.jsx)(n.p,{children:"Now that we've confirmed that Waku v2's bandwidth improvements over its predecessor matches theory,\nwe can proceed to a more in-depth characterisation of Waku v2's resource usage.\nSome questions that we want to answer include:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["What proportion of Waku v2's bandwidth usage is used to propagate ",(0,o.jsx)(n.em,{children:"payload"})," versus bandwidth spent on ",(0,o.jsx)(n.em,{children:"control"})," messaging to maintain the mesh?"]}),"\n",(0,o.jsx)(n.li,{children:"To what extent is message latency (time until a message is delivered to its destination) affected by network size and message rate?"}),"\n",(0,o.jsxs)(n.li,{children:["How ",(0,o.jsx)(n.em,{children:"reliable"})," is message delivery in Waku v2 for different network sizes and message rates?"]}),"\n",(0,o.jsxs)(n.li,{children:["What are the resource usage profiles of other Waku v2 protocols (e.g.",(0,o.jsx)(n.a,{href:"https://rfc.vac.dev/waku/standards/core/12/previous-versions00/filter",children:(0,o.jsx)(n.code,{children:"12/WAKU2-FILTER"})})," and ",(0,o.jsx)(n.a,{href:"https://rfc.vac.dev/waku/standards/core/19/lightpush",children:(0,o.jsx)(n.code,{children:"19/WAKU2-LIGHTPUSH"})}),")?"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:'Our aim is to get ever closer to a "real world" understanding of Waku v2\'s performance characteristics,\nidentify and fix vulnerabilities\nand continually improve the efficiency of our suite of protocols.'}),"\n",(0,o.jsx)(n.h2,{id:"references",children:"References"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://research.protocol.ai/publications/gossipsub-v1.1-evaluation-report/vyzovitis2020.pdf",children:"Evaluation of GossipSub v1.1"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://research.logos.co/fixing-whisper-with-waku",children:"Fixing Whisper with Waku"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://hackmd.io/@vac/main/%2FYYlZYBCURFyO_ZG1EiteWg#11WAKU2-RELAY-gossipsub",children:"GossipSub vs flood routing"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://www.techopedia.com/definition/13335/star-topology#:~:text=Star%20topology%20is%20a%20network,known%20as%20a%20star%20network.",children:"Network topologies: star"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Mesh_networking",children:"Network topologies: mesh"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.a,{href:"https://research.logos.co/waku-v2-plan",children:"Waku v2 original plan"})}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},71636:(e,n,s)=>{s.d(n,{A:()=>a});const a=s.p+"assets/images/waku1-vs-waku2-85-nodes-a4c56b478f03d471ae25bc36d6087bbf.png"}}]); |