Kakoyla 534 Posted October 11, 2019 Share Posted October 11, 2019 I am having a hell of a time staying on top of the validators, who they are and what keys they are using and I am hoping someone has a tip for an easy way to deal with this. I get the UNL from here: https://vl.ripple.com then decode using the code JR posted here, which references https://data.ripple.com/v2/network/validators/${validator} to pull the domain. As of today I get this list: 1 nHUzum747yqip3HWSgzSNHNMjmLUqhroNVWidSRTREswEVhKNQEM => validator.ripple.com 2 nHDDasc9BHNB99PW8KUduS8Phqg8NPUmjufzMU6HGGDMUH2xNpPh => validator.ripple.com 3 nHUKp8XUkaFN6GzQ3o4qTE1w9aAD5uFjZ8vDt6pwjBsTFRq5FWEb => validator.ripple.com 4 nHUUrjuEMtvzzTsiW2xKinUt7Jd83QFqYgfy3Feb7Hq1EJyoxoSz => validator.ripple.com 5 nHBtDzdRDykxiuv7uSMPTcGexNm879RUUz5GW4h1qgjbtyvWZ1LE => validator.ripple.com 6 nHUon2tpyJEHHYGmxqeGu37cvPYHzrMtUNQFVdCgGNvEkjmCpTqK => validator.ripple.com 7 nHU2Y1mLGDvTbc2dpvpkQ16qdeTKv2aJwGJHFySSB9U3jkTmj4CA => validator.ripple.com 8 nHUkp7WhouVMobBUKGrV5FNqjsdD9zKP5jpGnnLLnYxUQSGAwrZ6 => validator1.worldlink-us.com 9 nHU95JxeaHJoSdpE7R49Mxp4611Yk5yL9SGEc12UDJLr4oEUN4NT => flagshipsolutionsgroup.com 10 nHUFzgC9fDw2MEDaiv9JMdBFhtJ6DMKoUCpS8gPGi6tkfbqmTyis => www.bahnhof.se 11 nHUCCckfXVBdoounaU7JVnfdPdMXEeetwH8VdCBXD996BaVZ8WdJ => ripple.telinduscloud.lu 12 nHUcNC5ni7XjVYfCMe38Rm3KQaq27jw7wJpcUYdo4miWwpNePRTw => rabbitkick.club 13 nHBgiH2aih5JoaL3wbiiqSQfhrC21vJjxXoCoD2fuqcNbriXsfLm => www.attokyo.com 14 nHUpJSKQTZdB1TDkbCREMuf8vEqFkk84BcvZDhsQsDufFDQVajam => data443.com 15 nHDwHQGjKTz6R6pFigSSrNBrhNYyUGFPHA75HiTccTCQzuu9d7Za => coil.com 16 nHB8QMKGt9VB4Vg71VszjBVQnDW3v3QudM4DwFaJfy96bj4Pv9fA => bithomp.com 17 nHUd8g4DWm6HgjGTjKKSfYiRyf8qCvEN1PXR7YDJ5QTFyAnZHkbW => brex.io 18 nHBidG3pZK11zQD6kpNDoAhDxH6WLGui6ZxSbUx7LSqLHsgzMPec => bitso.com 19 nHUVPzAmAmQ2QSc4oE1iLfsGi17qN2ado8PhxvgEkou76FLxAz7C => ripple.ittc.ku.edu 20 nHULqGBkJtWeNFjhTzYeAsHA3qKKS7HoBh8CV3BAGTGMZuepEhWC => shadow.haas.berkeley.edu 21 nHUT6Xa588zawXVdP2xyYXc87LQFm8uV38CxsVzq2RoQJP8LXpJF => blockchain.korea.ac.kr 22 nHB5kpvUaEpvCtwu31fMf6dTuuCNnWRctWrV3UEZ9rbtPdpvbUvJ => ripple.ntt.com 23 nHBSUZJnqK5BRu3bWAmebfkETNeEFmU7sm3DXzCuEYzRkAEdxuTy => validator.xrpchat.com 24 nHUFCyRCrUjvtZmKiLeF8ReopzKuUoKeDeXo3wEUBVSaawzcSBpW => ripple.kenan-flagler.unc.edu 25 nHUfPizyJyhAJZzeq3duRVrZmsTZfcLn7yLF5s2adzHdcHMb9HmQ => xrp.unic.ac.cy 26 nHDH7bQJpVfDhVSqdui3Z8GPvKEBQpo6AKHcnXe21zoD4nABA6xj => ripplevalidator.uwaterloo.ca 27 nHUFE9prPXPrHcG3SkwP1UzAQbSphqyQkQK9ATXLZsfkezhhda3p => alloy.ee 28 nHDB2PAPYqF86j9j3c6w1F1ZqwvQfiWcFShZ9Pokg9q4ohNDSkAz => aloha.xrpscan.com 29 nHUpcmNsxAw47yt2ADDoNoQrzLyTJPgnyq16u6Qx2kRPA17oUNHz => isrdc.in 30 nHDDE4Y3z5EE2VDDYrzheYQ4xC3F29SJsKT4dqhX4iyTLhuWgZnp => xrp.coinfield.com 31 nHUED59jjpQ5QbNhesXMhqii9gA8UfbBmv3i5StgyxG98qjsT4yn => crcm-xrp.blockdaemon.com 32 nHUryiyDqEtyWVtFG24AAhaYjMf9FRLietbGzviF3piJsMm9qyDR => www.bitrue.com 33 nHUXeusfwk61c4xJPneb9Lgy7Ga6DVaVLEyB29ftUdt9k2KxD6Hw => validator.xrptipbot.com 34 nHUnhRJK3csknycNK5SXRFi8jvDp3sKoWvS9wKWLq1ATBBGgPBjp => peerisland.com I am watching the Validations stream, which shows info by signing key/ephemeral public key, so n9 instead of nH, the above list doesn't do me any good. I have been pulling the ephemeral_public_key from ripple data v2 off the validator manifests, but a few times that provides bad info or doesn't have the manifest. My next option is to run the rippled validators command, but since the validators command is admin only its also not my first choice. it includes the following info today: "signing_keys" : { "nHB5kpvUaEpvCtwu31fMf6dTuuCNnWRctWrV3UEZ9rbtPdpvbUvJ" : "n9MtAgMDVFxEgzYsmZKNBYS4vTx76xSSD78tFdZFcL27aeXeeECQ", "nHB8QMKGt9VB4Vg71VszjBVQnDW3v3QudM4DwFaJfy96bj4Pv9fA" : "n9J2hKPRZ9bUmsBD6d1j16G2P1arMxfASgSKYpoK9dRpJEuD3Joz", "nHBSUZJnqK5BRu3bWAmebfkETNeEFmU7sm3DXzCuEYzRkAEdxuTy" : "n9MUYTDQbd5BqxRiU8JuYoDAD9Trjzvd9VWfVYadgwqmxREjvRe5", "nHBgiH2aih5JoaL3wbiiqSQfhrC21vJjxXoCoD2fuqcNbriXsfLm" : "n9KhsMP6jKFQPpjJ9VwqyZSwrL4shdX9YknRwmsAVL1RNVrx4jLm", "nHBidG3pZK11zQD6kpNDoAhDxH6WLGui6ZxSbUx7LSqLHsgzMPec" : "n9KaxgJv69FucW5kkiaMhCqS6sAR1wUVxpZaZmLGVXxAcAse9YhR", "nHBtDzdRDykxiuv7uSMPTcGexNm879RUUz5GW4h1qgjbtyvWZ1LE" : "n9LCf7NtwcyXVc5fYB6UVByRoQZqJDhrMUoKnr3GQB6mFqpcmMzg", "nHDB2PAPYqF86j9j3c6w1F1ZqwvQfiWcFShZ9Pokg9q4ohNDSkAz" : "n94RJmUKMJHTmuXhNYsFUwje9a9hD3Rw3dESntBDeonJLCjAEbMZ", "nHDDE4Y3z5EE2VDDYrzheYQ4xC3F29SJsKT4dqhX4iyTLhuWgZnp" : "n9KXj6AkXsMiPKgTs6axKn93CVKDmLsPch8QFZNA9xsGkQo3w5bk", "nHDDasc9BHNB99PW8KUduS8Phqg8NPUmjufzMU6HGGDMUH2xNpPh" : "n9L2y9THhdubapafmt7b2TRuhRUfPf1anchmiFyFSKBiaK3BEAwY", "nHDH7bQJpVfDhVSqdui3Z8GPvKEBQpo6AKHcnXe21zoD4nABA6xj" : "n9MSTcx1fmfyKpaDTtpXucugcqM7yxpaggmwRxcyA3Nr4pE1pN3x", "nHDwHQGjKTz6R6pFigSSrNBrhNYyUGFPHA75HiTccTCQzuu9d7Za" : "n9KKQUgUwXAAh7LKKjQos85vr19EvWghM13oBXurpvmRgEPZJ7XE", "nHU2Y1mLGDvTbc2dpvpkQ16qdeTKv2aJwGJHFySSB9U3jkTmj4CA" : "n9K2FpCqZftM1xXXaWXFPVbEimLX6MEjrmQywfSutkdK1PRvqDb2", "nHU95JxeaHJoSdpE7R49Mxp4611Yk5yL9SGEc12UDJLr4oEUN4NT" : "n9JtY9MqUcwKWenHp8WoRobFRmB2mmBEJd1ruJmhKGKAwtFQkQjb", "nHUCCckfXVBdoounaU7JVnfdPdMXEeetwH8VdCBXD996BaVZ8WdJ" : "n9KiJP9wcJheTs6187LB8SP6Pw1UghKUQLgq4RmMKheTzvVhmesM", "nHUED59jjpQ5QbNhesXMhqii9gA8UfbBmv3i5StgyxG98qjsT4yn" : "n9KcVtcHZThHainPdHC7CkQKZMEVjAcRujV2CMKdKHk65Ewsawsu", "nHUFCyRCrUjvtZmKiLeF8ReopzKuUoKeDeXo3wEUBVSaawzcSBpW" : "n9Lqr4YZxk7WYRDTBZjjmoAraikLCjAgAswaPaZ6LaGW6Q4Y2eoo", "nHUFE9prPXPrHcG3SkwP1UzAQbSphqyQkQK9ATXLZsfkezhhda3p" : "n9J67zk4B7GpbQV5jRQntbgdKf7TW6894QuG7qq1rE5gvjCu6snA", "nHUFzgC9fDw2MEDaiv9JMdBFhtJ6DMKoUCpS8gPGi6tkfbqmTyis" : "n94RChC3yKSHyXUerLYE1sjm13eP7hucSNpoZZTVgq4UtAiZAcgP", "nHUKp8XUkaFN6GzQ3o4qTE1w9aAD5uFjZ8vDt6pwjBsTFRq5FWEb" : "n9M6V1wyi9qwU3CESTmta3ANQehmdqFFf8osuR1jkKQ7GBcV7746", "nHULqGBkJtWeNFjhTzYeAsHA3qKKS7HoBh8CV3BAGTGMZuepEhWC" : "n9MZ7EVGKypqdyNguP31xSqhFqDBF4V5FESLMmLiGrBJ3khP2AzQ", "nHUT6Xa588zawXVdP2xyYXc87LQFm8uV38CxsVzq2RoQJP8LXpJF" : "n9Lq9bekeVhCsW8dwqzfvKsqUiu9Qxvwk9YmF2hxkBJjNrGNL5Fw", "nHUUrjuEMtvzzTsiW2xKinUt7Jd83QFqYgfy3Feb7Hq1EJyoxoSz" : "n9LLqqH1cVFPjEnQYFQ6DooxuhHPQxwXgMjDGrpJ6pb1WGDoi76Q", "nHUVPzAmAmQ2QSc4oE1iLfsGi17qN2ado8PhxvgEkou76FLxAz7C" : "n9J1GJHtua77TBEzir3FvsgWX68xBFeC8os3s5TkCg97E1cwxKfH", "nHUXeusfwk61c4xJPneb9Lgy7Ga6DVaVLEyB29ftUdt9k2KxD6Hw" : "n9KHXifDfimGs2CREvbRrAfjnoWcwjMCC8u8KLRTtrRAYk1ktSxX", "nHUcNC5ni7XjVYfCMe38Rm3KQaq27jw7wJpcUYdo4miWwpNePRTw" : "n9LEDYRJMx23ikoZS6YefTPuvLzNh56nXqpsavakWi2FivUEAkaq", "nHUd8g4DWm6HgjGTjKKSfYiRyf8qCvEN1PXR7YDJ5QTFyAnZHkbW" : "n9KSXAVPy6ac8aX88fRsJN6eSrJ2gEfGrfskUVJJ7XkopGsKNg9X", "nHUfPizyJyhAJZzeq3duRVrZmsTZfcLn7yLF5s2adzHdcHMb9HmQ" : "n9M2anhK2HzFFiJZRoGKhyLpkh55ZdeWw8YyGgvkzY7AkBvz5Vyj", "nHUkp7WhouVMobBUKGrV5FNqjsdD9zKP5jpGnnLLnYxUQSGAwrZ6" : "n9MzwWa4dwdZkRzj6XmihBG4ymGtMPd12cLjfhKwx5Hoqeu6WEgy", "nHUnhRJK3csknycNK5SXRFi8jvDp3sKoWvS9wKWLq1ATBBGgPBjp" : "n9LbDLg9F7ExZCeMw1QZqsd1Ejs9uYpwd8bPUStF5hBJdd6B5aWj", "nHUon2tpyJEHHYGmxqeGu37cvPYHzrMtUNQFVdCgGNvEkjmCpTqK" : "n9JebyUXwBa5GoYJQ6AbupoMKyE2zaiR3FTfDTMkxpMMv1KPmQEn", "nHUpJSKQTZdB1TDkbCREMuf8vEqFkk84BcvZDhsQsDufFDQVajam" : "n9LFSE8fQ6Ljnc97ToHVtv1sYZ3GpzrXKpT94eFDk8jtdbfoBe7N", "nHUpcmNsxAw47yt2ADDoNoQrzLyTJPgnyq16u6Qx2kRPA17oUNHz" : "n94D6X6oFGyuvWpSjGwv3rmGSPSi5gNEVCDwnEc8arLC6HnqfEhn", "nHUryiyDqEtyWVtFG24AAhaYjMf9FRLietbGzviF3piJsMm9qyDR" : "n9KAE7DUEB62ZQ3yWzygKWWqsj7ZqchW5rXg63puZA46k7WzGfQu", "nHUzum747yqip3HWSgzSNHNMjmLUqhroNVWidSRTREswEVhKNQEM" : "n9KQRiTw9LnSsVN2tv4guAqQ2KKUYmxnhT48QU2bbx8KmFGaUxTd" }, My problem is I am getting signing keys in my validations stream that aren't showing up in ripple data v2 query and you can't search by signing key- that I know of, so I check via the validators command and they might be there or not. If they are there and I look back at the ripple data v2 using the newly found public key, sometimes the signing key on v2 is different from the rippled validators command results. For reference, these were issues for me today: 1. n9Lq9bekeVhCsW8dwqzfvKsqUiu9Qxvwk9YmF2hxkBJjNrGNL5Fw ..I was able to find the public key via validators command nHUT6Xa588zawXVdP2xyYXc87LQFm8uV38CxsVzq2RoQJP8LXpJF, it has no manifest on ripple data (https://data.ripple.com/v2/network/validators/nHUT6Xa588zawXVdP2xyYXc87LQFm8uV38CxsVzq2RoQJP8LXpJF/manifests) 2. n9LrAWWnL8QYJym4PsnjHeun5CsKJ4ZoBfqD5FrESuH5DwzRaZYH I don't see this at all in my validators command results.. I walked thru the unl list manually to see what i could be missing, and I see that shadow.haas.berkeley.edu is missing, so I assume that this is for Berkeley but its just an assumption. If its not, then I don't know why this is showing up if its not in my validator list. Does anyone have a tip to easily identifying validators by signing key or ephemeral public key? pucksterpete 1 Link to post Share on other sites
pucksterpete 1,681 Posted October 11, 2019 Share Posted October 11, 2019 ask https://twitter.com/WietseWind Link to post Share on other sites
xrpscan 100 Posted October 16, 2019 Share Posted October 16, 2019 On 10/11/2019 at 10:08 PM, Kakoyla said: I don't see this at all in my validators command results.. I walked thru the unl list manually to see what i could be missing, and I see that shadow.haas.berkeley.edu is missing, so I assume that this is for Berkeley but its just an assumption. If its not, then I don't know why this is showing up if its not in my validator list. Berkeley validator had an outage last week. Its back online now, but this could be the cause of the dangling validator key. Kakoyla 1 Link to post Share on other sites
Sukrim 1,889 Posted October 16, 2019 Share Posted October 16, 2019 https://github.com/ripple/rippled/issues/3005 should have its fix merged now, try with a 1.4.0-b6 node. xrpscan and Kakoyla 2 Link to post Share on other sites
xrpholder 689 Posted October 17, 2019 Share Posted October 17, 2019 as a non coder, would it be possible for someone to build / sell a device that you would just need to plug in to run a validator? or even buy a SD card pre loaded with everything so i just put it into a raspberry pi and then can start to run one? Link to post Share on other sites
Sukrim 1,889 Posted October 17, 2019 Share Posted October 17, 2019 3 hours ago, xrpholder said: as a non coder, would it be possible for someone to build / sell a device that you would just need to plug in to run a validator? or even buy a SD card pre loaded with everything so i just put it into a raspberry pi and then can start to run one? As a validator operator, there's no way I would trust such a validator. It is your job as an operator to make choices (e.g. to vote for/against amendments and fees, choose a good UNL...) and you should be competent in managing your node beyond plugging in an appliance. Also a RaspberryPi is definitely too small to run a node reliably, think more like 32 GB RAM, a quad-core processor, an SSD and a datacenter-grade power supply + internet connection. xrpholder 1 Link to post Share on other sites
jn_r 785 Posted October 19, 2019 Share Posted October 19, 2019 On 10/11/2019 at 6:38 PM, Kakoyla said: Does anyone have a tip to easily identifying validators by signing key or ephemeral public key? So I thought why not try to decode this mystical manifest from the unl and finally, succes at last The code below contains a function that will translate the manifest and the ephemeral public key: const binaryCodec = require('ripple-binary-codec') const addressCodec = require('ripple-address-codec') const request = require('request-promise') const validatorListUrl = process.argv[2] || 'https://vl.ripple.com' console.log(`UNL at ${validatorListUrl}:\n`) function getEphemeralPublicKey (manifest) { const buf = Buffer.from(manifest, 'base64').toString('hex').toUpperCase() const hexPubKey = binaryCodec.decode(buf).SigningPubKey return addressCodec.encodeNodePublic(Buffer.from(hexPubKey, 'hex')) } ;(async () => { const encodedData = await request.get({ url: validatorListUrl, json: true }) const buff = Buffer.from(encodedData.blob, 'base64') const unlList = JSON.parse(buff.toString('ascii')).validators const validators = (await request.get({ url: `https://data.ripple.com/v2/network/validators`, json: true })).validators for (let nr in unlList) { const pubKey = addressCodec.encodeNodePublic(Buffer.from(unlList[nr].validation_public_key, 'hex')) const ephemeralPublicKey = getEphemeralPublicKey(unlList[nr].manifest) const validator = validators.find(validator => validator.validation_public_key === pubKey) console.log(`${('0' + ++nr).slice(-2)} - ${pubKey} => ${ephemeralPublicKey} => ${validator ? validator.domain : '-'}`) } console.log('') })().catch(err => { console.error(err.message) }) Kakoyla 1 Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now