Proof of Pillar or Sentinel

I’m thinking about how pillars and sentinels can prove ownership so when people talk to them they know for sure they are talking to a “real” owner. THORChain has a tool like this where they relay signed messages directly from the node to Discord. The message is signed and certain to have come from the node. The devs can interact with real “node” operators this way.

As proposals come in I hope to interact with the community to get feedback. But how does the community know I or anyone else actually runs a node? And how does a Pillar owner know they are interacting with someone who delegates to them or owns ZNN?

Do you think this basic proof of ownership would be a valuable tool? This could eventually extend into a more robust tool in the wallet where pillars and delegator could interact.

1 Like

This is actually a really important aspect for when the community grows to a larger footprint - there will no doubt be instances of people trying to masquerade as infrastructure owners. Can the signing function within Syrius be used to achieve this?

1 Like

@georgezgeorgez said yes but we need some code to convert the public key into a wallet address. We can either do this as a small A Z project or I can fund and hope to seek reimbursement from A Z.

if there are a few more “small” bits like that we can maybe pool them together as a single A-Z proposal.

-Covert public key for signing: 200znn
-Code discourse plugin for Syrius integration: 200znn

for example - even if a dev hasn’t been identified yet to deliver it - as long as it gets approved then we can find someone

1 Like

How is this done on THORChain? Is it some centralized service that relays the signed messages to Discord or is it directly integrated into a wallet or something? What options does the user have when posting to Discord via the relayer?

I’m not sure how you can turn the public key into a wallet address without the private key or if it’s even possible but maybe @georgezgeorgez has looked more into this.
A workaround for this would be to query the address’s last account block and get its public key from there. The caveat is that this would only work for addresses that have created at least one transaction - of course all pillars, sentinels and delegators meet this requirement.

Right now you could sign your entire message and provide the signature and public key in your post and anyone could use syrius to prove you wrote the message and then use the public key to query the node to verify you own the pillar’s address. This could be streamlined and made more user friendly by doing some updates to syrius.

1 Like

I believe they have a centralized relayer that is hosted by 9 Relms

George indicated it is possible. The account is hashed and “truncated” in the public key. He said his last code review discussed addresses Telegram: Contact @zenon_wiki_code_review_club

I think this is the part that is missing. How do we go from public key to address? I’m cool with this being manual initially. We need to give people badges in the forum. If we can manually confirm pillar owners we can give them badges. Once they have badges we can put them in a Pillar group. Eventually this needs to be included in the wallet so pillars can communicate authentically with delegators. etc…

1 Like

Okay George was right. I took another look at it and indeed the address can be derived from the public key. I updated the test endpoint I have running that can now be used to validate ownership of an address.

If you want to use it to manually validate a pillar owner you can use it here (input the data in the “Content” tab and press send):


Awesome. I’m testing this now

This works perfectly!! @romeo we can use this to verify pillar owners and assign badges? I should not verify myself. I can see how something like this could get integrated into a bunch of stuff.

@vilkris let me know if you want me to pay you for this or we should add to the A Z proposal we are making for the forum.

  "message": "",
  "address": "z1qrztagl9rukq3ltdflnvg4zrvpfp84mydfejk9",
  "publickey": "88c0ebc7de1aa0b6e1958b4ead1f43df15f2e92f3f876c564005ee38da9a77f0",
  "signature": "24b719f5209bbf653d27445e8c298a4cd4f4f5a1c384e079de9945516d4b999a5acc57dca49a6778110176f409144db645243fc7f88550e0f42b93bb17ed190e"

No need. Everything was already set up and some better solution will have to be made down the line anyway.


let me play around with this today! awesome


@vilkris we are starting to use this tool now. Our goal is to create a Pillar group in the forum so we can communicate with all pillars. I’m wondering if you can add one more step in your script. Can you automatically check the “address”: “” against the list of pillar address? If the signed message came from the provided address AND the address is a registered pillar, then return TRUE. If address fails or know pillar address fails, then return FALSE.

Can we open source this too so Pillars can see the code? Thanks so much!

1 Like

The endpoint has now been updated and will check if the address is a pillar or sentinel.
It will respond with the following:

{"is_valid_signature": true, "is_pillar": true, "pillar_name": "", "is_sentinel": false}

If it is a pillar address the pillar’s name will also be returned for easier verification.

I’ll upload the source code to github tomorrow.

1 Like

Amazing!!! thank you so much.

@romeo Check this out. No more manual checking the getALL function. We should create a Sentinel Group too (with a label). What do you think?

The source code is now available here. The endpoint is just a wrapper for this program and the program can be run locally on your PC so you don’t necessarily need to trust the endpoint.


thank you so much for doing this. I will try locally.

I didn’t know you had written this when I worked on the same problem! :sweat_smile:
Thanks for sharing your solution!