Skip to content

Instantly share code, notes, and snippets.

@ivan4th
Created January 18, 2024 03:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ivan4th/c8add0b4d6a6fffb3da248b6b6bac346 to your computer and use it in GitHub Desktop.
Save ivan4th/c8add0b4d6a6fffb3da248b6b6bac346 to your computer and use it in GitHub Desktop.
Spacemesh low-bandwidth test

To test:

  1. Adjust paths in the configs
  2. For the first node, use a copy of an up-to-date database
  3. For another node, use a blank database (don't create any) or a database that's missing some ATXs etc.
  4. Prepare network namespaces:
    $ sudo ./setup.sh
  5. Run the first node:
    sudo ip netns exec ns1 go-spacemesh --config /path/to/config1.json
  6. In another terminal window, run the second node:
    sudo ip netns exec ns2 go-spacemesh --config /path/to/config2.json
{
"main": {
"data-folder": "/home/ivan4th/work/spacemesh/nettest/data1",
"filelock": "/home/ivan4th/work/spacemesh/nettest/data1/lock",
"layer-duration": "5m",
"layers-per-epoch": 4032,
"db-query-cache": true
},
"smeshing": {
"smeshing-opts": {
"smeshing-opts-datadir": "/path/to/data1/post-data"
}
},
"post": {
"post-labels-per-unit": 4294967296,
"post-max-numunits": 1048576
},
"poet": {
"cycle-gap": "12h"
},
"genesis": {
"genesis-time": "2023-07-14T08:00:00Z",
"genesis-extra-data": "00000000000000000001a6bc150307b5c1998045752b3c87eccf3c013036f3cc",
"accounts": {
"sm1qqqqqqylyl2l0zsmmax0wnutt4dwnrkcwef5eeq3xladz": 2743200000000000,
"sm1qqqqqqyp8ueuuh2dgrc2g6ps4xvueyjpky6rfaqnxdy97": 5867100000000000,
"sm1qqqqqqzgmt5vv4jgucas8vvrlu4daa4r29cunwqpv0trt": 1022800000000000,
"sm1qqqqqq80we5pmwztmqgpxu6xasapgn65r4xjczqxu39a2": 409000000000000,
"sm1qqqqqqy6anfdew2sdtvuuaffjy0l7ssu9r8vjsss5c442": 2045400000000000,
"sm1qqqqqqyw9lvmmayckrxlnf8u7850tsjdg8zz6dg956gxg": 270600000000000,
"sm1qqqqqq9a8g5act6ewmmmmmux8l570kr6l68htzsq94wg4": 4090900000000000,
"sm1qqqqqqrgqc65x5q6exujgjs970fvcakd790na3gsr3uu7": 333300000000000,
"sm1qqqqqqpc4ppx8s4gmdaa5tzg35s6l3v6ujg6hmqz3s4lc": 859100000000000,
"sm1qqqqqq8za0geafhj4avegdwhtaw9fmgjh07s55cufk695": 293300000000000,
"sm1qqqqqqpf6djx3axy7aag8zhyf84ljsulhfypfxgpw5y0u": 1990600000000000,
"sm1qqqqqq827v998nt99vupxlrfucdk0tapp2hjyygmn3kyd": 409100000000000,
"sm1qqqqqqpc55ghjq6sxf5k77yc8n82fkwhlj0jedcgw2zck": 4909100000000000,
"sm1qqqqqqxq54zvz484hhcnrghnqrjlw26twwld32slz3lxa": 191800000000000,
"sm1qqqqqqyf5uc2n8mutm3tuateu5efcm9awvrclmcm5mhdf": 2933540000000000,
"sm1qqqqqq99klpy92mwlfcft5lmz8q5sef2v2qvtucd9y55v": 2933540000000000,
"sm1qqqqqqyjpjgup8fz32cufcv2nlqrr3nyvge7akqt0daea": 2933540000000000,
"sm1qqqqqq8zukfwtggnfq4jaqpv6m8xgtg5ay2ezaqpr2w6y": 2933540000000000,
"sm1qqqqqqrhftrq9knsetema7dt0qfzgd5a20m9rcczk0gk5": 2933540000000000,
"sm1qqqqqqyfq5f522mmrzs4lczhaf30jh4pmqyfrzcg8vrpc": 3303792000000000,
"sm1qqqqqqx55z5795569fq5kym3gw2h6zp6ajeh46c5wtrzf": 455300000000000,
"sm1qqqqqqyvet26gqsxjt6w50nnp80jvajr3n25xzsdpxn65": 831250000000000,
"sm1qqqqqqzgqpjxdw77aw74f8mz540rykda4x2jgjgaca7z5": 184375000000000,
"sm1qqqqqq9s5l9tc87wspycr68dfagmzxplzdn7zlcymnkup": 15000000000000,
"sm1qqqqqqptx3mdg4gm67arv4ykau6nfy6w9v03x9s49wmru": 100000000000000,
"sm1qqqqqq9fwfymdr7qv0tfc3ppa4q8ara6qm7kwugw9gdme": 500000000000000,
"sm1qqqqqqy3fc8nvdetan6qjz5cju7h4c60mjyvdlqnlqpxu": 15688500000000000,
"sm1qqqqqqrt64knhuxu3kzq50ak04nrkk9yf2zxprshmvkcy": 88818783000000000
}
},
"api": {
"grpc-public-services": [
"debug",
"global",
"mesh",
"node",
"transaction",
"activation"
],
"grpc-public-listener": "0.0.0.0:10190",
"grpc-private-services": [
"smesher",
"admin"
],
"grpc-private-listener": "127.0.0.1:10191",
"grpc-json-listener": "0.0.0.0:10192"
},
"p2p": {
"listen": ["/ip4/0.0.0.0/tcp/5000"],
"disable-reuseport": false,
"p2p-disable-legacy-discovery": true,
"autoscale-peers": true,
"disable-dht": true,
"bootnodes": [
"/ip4/10.0.0.3/tcp/5000/p2p/12D3KooWMuoWtShb1B3RoDaVXHWcksS54SPvYdsF3heVuZ2kf7dg"
],
"min-peers": 1,
"low-peers": 1,
"high-peers": 10,
"inbound-fraction": 1,
"outbound-fraction": 1,
"p2p-metrics": true
},
"logging": {
"p2p": "warn"
},
"cache": {
"atx-size": 600000
}
}
{
"main": {
"data-folder": "/path/to/data2",
"filelock": "/path/to/data2/lock",
"layer-duration": "5m",
"layers-per-epoch": 4032
},
"smeshing": {
"smeshing-opts": {
"smeshing-opts-datadir": "/path/to/data2/post-data"
}
},
"post": {
"post-labels-per-unit": 4294967296,
"post-max-numunits": 1048576
},
"poet": {
"cycle-gap": "12h"
},
"genesis": {
"genesis-time": "2023-07-14T08:00:00Z",
"genesis-extra-data": "00000000000000000001a6bc150307b5c1998045752b3c87eccf3c013036f3cc",
"accounts": {
"sm1qqqqqqylyl2l0zsmmax0wnutt4dwnrkcwef5eeq3xladz": 2743200000000000,
"sm1qqqqqqyp8ueuuh2dgrc2g6ps4xvueyjpky6rfaqnxdy97": 5867100000000000,
"sm1qqqqqqzgmt5vv4jgucas8vvrlu4daa4r29cunwqpv0trt": 1022800000000000,
"sm1qqqqqq80we5pmwztmqgpxu6xasapgn65r4xjczqxu39a2": 409000000000000,
"sm1qqqqqqy6anfdew2sdtvuuaffjy0l7ssu9r8vjsss5c442": 2045400000000000,
"sm1qqqqqqyw9lvmmayckrxlnf8u7850tsjdg8zz6dg956gxg": 270600000000000,
"sm1qqqqqq9a8g5act6ewmmmmmux8l570kr6l68htzsq94wg4": 4090900000000000,
"sm1qqqqqqrgqc65x5q6exujgjs970fvcakd790na3gsr3uu7": 333300000000000,
"sm1qqqqqqpc4ppx8s4gmdaa5tzg35s6l3v6ujg6hmqz3s4lc": 859100000000000,
"sm1qqqqqq8za0geafhj4avegdwhtaw9fmgjh07s55cufk695": 293300000000000,
"sm1qqqqqqpf6djx3axy7aag8zhyf84ljsulhfypfxgpw5y0u": 1990600000000000,
"sm1qqqqqq827v998nt99vupxlrfucdk0tapp2hjyygmn3kyd": 409100000000000,
"sm1qqqqqqpc55ghjq6sxf5k77yc8n82fkwhlj0jedcgw2zck": 4909100000000000,
"sm1qqqqqqxq54zvz484hhcnrghnqrjlw26twwld32slz3lxa": 191800000000000,
"sm1qqqqqqyf5uc2n8mutm3tuateu5efcm9awvrclmcm5mhdf": 2933540000000000,
"sm1qqqqqq99klpy92mwlfcft5lmz8q5sef2v2qvtucd9y55v": 2933540000000000,
"sm1qqqqqqyjpjgup8fz32cufcv2nlqrr3nyvge7akqt0daea": 2933540000000000,
"sm1qqqqqq8zukfwtggnfq4jaqpv6m8xgtg5ay2ezaqpr2w6y": 2933540000000000,
"sm1qqqqqqrhftrq9knsetema7dt0qfzgd5a20m9rcczk0gk5": 2933540000000000,
"sm1qqqqqqyfq5f522mmrzs4lczhaf30jh4pmqyfrzcg8vrpc": 3303792000000000,
"sm1qqqqqqx55z5795569fq5kym3gw2h6zp6ajeh46c5wtrzf": 455300000000000,
"sm1qqqqqqyvet26gqsxjt6w50nnp80jvajr3n25xzsdpxn65": 831250000000000,
"sm1qqqqqqzgqpjxdw77aw74f8mz540rykda4x2jgjgaca7z5": 184375000000000,
"sm1qqqqqq9s5l9tc87wspycr68dfagmzxplzdn7zlcymnkup": 15000000000000,
"sm1qqqqqqptx3mdg4gm67arv4ykau6nfy6w9v03x9s49wmru": 100000000000000,
"sm1qqqqqq9fwfymdr7qv0tfc3ppa4q8ara6qm7kwugw9gdme": 500000000000000,
"sm1qqqqqqy3fc8nvdetan6qjz5cju7h4c60mjyvdlqnlqpxu": 15688500000000000,
"sm1qqqqqqrt64knhuxu3kzq50ak04nrkk9yf2zxprshmvkcy": 88818783000000000
}
},
"api": {
"grpc-public-services": [
"debug",
"global",
"mesh",
"node",
"transaction",
"activation"
],
"grpc-public-listener": "0.0.0.0:10290",
"grpc-private-services": [
"smesher",
"admin"
],
"grpc-private-listener": "127.0.0.1:10291",
"grpc-json-listener": "0.0.0.0:10292"
},
"p2p": {
"listen": ["/ip4/0.0.0.0/tcp/5000"],
"disable-reuseport": false,
"p2p-disable-legacy-discovery": true,
"autoscale-peers": true,
"disable-dht": true,
"bootnodes": [
"/ip4/10.0.0.1/tcp/5000/p2p/12D3KooWSz4PQm7HnSN25EB5rAjjhPRsYFXNnVSFpe28xHLL8Bnm"
],
"min-peers": 1,
"low-peers": 1,
"high-peers": 10,
"inbound-fraction": 1,
"outbound-fraction": 1,
"p2p-metrics": true
},
"logging": {
"p2p": "warn"
},
"cache": {
"atx-size": 600000
}
}
#!/bin/bash
set -u -e -x
ip netns del ns1 || true
ip netns del ns2 || true
# Create two network namespaces
ip netns add ns1
ip netns add ns2
# Create a veth pair
ip link add veth1 type veth peer name veth2
# Assign the veth interfaces to the namespaces
ip link set veth1 netns ns1
ip link set veth2 netns ns2
# Configure the interfaces in the namespaces
ip netns exec ns1 ip addr add 10.0.0.1/24 dev veth1
ip netns exec ns2 ip addr add 10.0.0.2/24 dev veth2
# Bring up the loopback and veth interfaces inside the namespaces
ip netns exec ns1 ip link set lo up
ip netns exec ns1 ip link set veth1 up
ip netns exec ns2 ip link set lo up
ip netns exec ns2 ip link set veth2 up
# Apply traffic shaping (1Mbps limit)
ip netns exec ns1 tc qdisc add dev veth1 root tbf rate 1mbit burst 32kbit latency 400ms
ip netns exec ns2 tc qdisc add dev veth2 root tbf rate 1mbit burst 32kbit latency 400ms
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment