research/hello-pss
Oskar Thoren 11e2d5d303 Extra uploads to get hash, but it kind of works 2019-04-11 00:06:36 +08:00
..
scripts Add Charlie third node 2019-04-10 17:44:15 +08:00
README.md Can upload and download raw messages 2019-04-10 22:28:15 +08:00
alice.key Add private keys because why not 2019-04-09 13:18:52 +08:00
bob.key Add private keys because why not 2019-04-09 13:18:52 +08:00
charlie.key Add Charlie third node 2019-04-10 17:44:15 +08:00
feed-check.sh Add feed check script 2019-04-10 17:43:58 +08:00
hello_pss.go Extra uploads to get hash, but it kind of works 2019-04-11 00:06:36 +08:00

README.md

Hello PSS

Swarm hello world

# Geth new account
geth account new
echo "0ab9f275308307188de76f82cbc08a5258b03110" >> alice.tmp

# Get rid of password prompt later
echo "" >> password.tmp

# Start swarm node
swarm --bzzaccount `cat alice.tmp`

# Test up and down
swarm up README.md > readme-ref.tmp
swarm down bzz:/`cat readme-ref.tmp` test.tmp

Feeds

# Using human readable topic, can equally well use --topic
swarm --bzzaccount `cat alice.tmp` feed create --name "bob"
# Returns feed manifest
# 2a0ddb7d63cc4926d168697da1ad76bdad3782611c8f75bd1ce2f8b5e096b6e0

# XXX: What's the difference? Doesn't it use bzzapi and use local instance by default?
swarm --bzzaccount `cat alice.tmp` --bzzapi http://localhost:8500 feed create --name "bob"
# 2a0ddb7d63cc4926d168697da1ad76bdad3782611c8f75bd1ce2f8b5e096b6e0

# XXX: What to do with feed manifest? How get it?

# Posting to a feed using name/topic/manifest, need hex, example here
swarm --bzzaccount `cat alice.tmp` feed update --name bob 0x68656c6c6f2031

# Reading feed info 
swarm --bzzaccount `cat alice.tmp` feed info --name "bob"
# {"feed":{"topic":"0x626f620000000000000000000000000000000000000000000000000000000000","user":"0x0ab9f275308307188de76f82cbc08a5258b03110"},"epoch":{"time":1554695168,"level":24},"protocolVersion":0}

# Reading feed updates, can't with CLI but
curl 'http://localhost:8500/bzz-feed:/?user=0x0ab9f275308307188de76f82cbc08a510&name=bob'
# `hello 1` = hex above? +1

# Posting message to feed 
echo "Hello world" > message
# Need right format for hex
cat message | hexdump -v -e '/1 "%02x"' > hex-message

swarm --bzzaccount `cat alice.tmp` --password password.tmp feed update --name bob 0x`cat hex-message`

curl 'http://localhost:8500/bzz-feed:/?user=0x0ab9f275308307188de76f82cbc08a5258b03110&name=bob'
# Hello world

We can use --user to refer to another person as opposed to bzzaccount by default.

PSS

First, standalone with ethereum-samples. Second, in Go script send and receive (WIP).

Testing only: private keys galore

Ok we have two (hardcoded) independent, locally running Geth nodes with swarm service messaging over PSS:

Received message Hello world from 307830346335363133316438646564393065373962373662393766323665386663303332353937383836666636386162363535376639316334626631616534366561623934343135633664663330626236343739636634306638313139373762623262323337373837663562383037643937313931663761393934613535383633336530

How to run

# Run receiver
./scripts/run-bob 

# Run sender
 ./scripts/run-alice

Troubleshooting

To see connected peers: geth attach .data_9600/bzz.ipc --exec 'admin.peers'

For som reason I can attach to 9600 but not 9601 after adding peers:

Fatal: Failed to start the JavaScript console: api modules: context deadline exceeded
DEBUG[04-10|16:45:08.428] Resolving node failed                    id=0x869830         newdelay=2m0s caller=dial.go:333
DEBUG[04-10|16:45:08.630] fetcher request hop count limit reached  hops=20 caller=fetcher.go:162
DEBUG[04-10|16:45:09.004] ChunkStore.Get can not retrieve chunk    peer=b4425dfb4fed04248b4a2ef1eb9a9253b8685a6d4775e2d6264762d8cc8b1a60 addr=c5e800bb76ca919e601440a1192fd94bfbd6e461b9921460272e258aaabb53ab                                                                                                                                                                            hopcount=16 err="context deadline exceeded"            caller=delivery.go:177
DEBUG[04-10|16:45:09.038] ChunkStore.Get can not retrieve chunk    peer=b4425dfb4fed04248b4a2ef1eb9a9253b8685a6d4775e2d6264762d8cc8b1a60 addr=bfb19b17e25ec9981ba740dffc965635099c4306b9d0d6d19a738bdd5c1a2b68                                                                                                                                                                            hopcount=18 err="context deadline exceeded"            caller=delivery.go:177
INFO [04-10|16:45:09.177] unable to request                        request addr=ae61264cc22c960b62abfcefac8059c6f6ef481dfd972381024967915cfebdea err="no peer found"                        caller=fetcher.go:238
   ruid=d0ecbecb code=200 time=4.903668ms   caller=middleware.go:83
TRACE[04-10|18:15:29.000] search timed out: requesting             request addr=7e05ce20f890f52f793a9fdb438aeef93b96cbc04e21ebb4e5ea3c6f811c957a doRequest=true  caller=fetcher.go:224
TRACE[04-10|18:15:29.000] Delivery.RequestFromPeers: skip peer     peer id=258ab5a8630d8d9d caller=delivery.go:278
TRACE[04-10|18:15:29.000] Delivery.RequestFromPeers: skip peer     peer id=443030fd43226716 caller=delivery.go:278
INFO [04-10|18:15:29.000] unable to request                        request addr=7e05ce20f890f52f793a9fdb438aeef93b96cbc04e21ebb4e5ea3c6f811c957a err="no peer found"

Why is it rskipping peer

Two hypothesis of what's wrong:

  • Bad kademlia connectivity, implement health check to inspect
    • can attach swarm and hello pss nodes and diff options, since swarm default seems to propagate basic e.g. swarmup ends up on swarm gateway
  • Local network shenanighans that only shows up for some flows, need to use external ip or so

Next steps?

  • Put logs elsewhere
  • Allow send and receive from both (bg subscribe)?
  • Allow interactive message send?
  • When sending, also update to feeds
  • For feeds, move from curl cli to go/jsonrpc api
  • When going online, allow querying of feeds
  • In message, also includes message dependencies

Later

Simple Go CLI