diff --git a/README.md b/README.md index 895e990..5071d85 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,62 @@ # validator-list XRP Ledger validator list generation tool + +## Table of contents + +* [Dependencies](#dependencies) + * [ripple-libpp submodule](#ripple-libpp-submodule) + * [Other dependencies](#other-dependencies) +* [Build and run](#build-and-run) +* [Guide](#guide) + +## Dependencies + +### ripple-libpp submodule + +This includes a git submodule to the ripple-libpp source code, which is not cloned by default. To get the ripple-libpp source, either clone this repository using +``` +$ git clone --recursive +``` +or after cloning, run the following commands +``` +$ git submodule update --init --recursive +``` + +### Other dependencies + +* C++14 or greater +* [Boost](http://www.boost.org/) +* [OpenSSL](https://www.openssl.org/) +* [cmake](https://cmake.org) + +## Build and run + +For linux and other unix-like OSes, run the following commands: + +``` +$ cd ${YOUR_VALIDATOR_KEYS_TOOL_DIRECTORY} +$ mkdir -p build/gcc.debug +$ cd build/gcc.debug +$ cmake ../.. +$ cmake --build . +$ ./validator-lists +``` + +For 64-bit Windows, open a MSBuild Command Prompt for Visual Studio +and run the following commands: + +``` +> cd %YOUR_VALIDATOR_KEYS_TOOL_DIRECTORY% +> mkdir build +> cd build +> cmake -G"Visual Studio 14 2015 Win64" .. +> cmake --build . +> .\Debug\validator-lsit.exe +``` + +32-bit Windows builds are not officially supported. + +## Guide + +[Validator List Guide](doc/validator-list-guide.md) diff --git a/doc/validator-list-guide.md b/doc/validator-list-guide.md new file mode 100644 index 0000000..1439fe4 --- /dev/null +++ b/doc/validator-list-guide.md @@ -0,0 +1,135 @@ +# Validator List Tool Guide + +This guide explains how to publish an XRP Ledger validator list. + +A validator list publisher uses a public/private key pair. The publisher is +identified by the public key. The private key should be tightly controlled. +It is used to: + +* sign manifests authorizing an ephemeral key to sign validator lists as the + publisher identified by this public key. +* sign revocations indicating that the private key has been compromised and + the publisher public key should no longer be trusted. + +Each new manifest invalidates all previous manifests for the publisher public +key. + +The current manifest needs to be present in the published validator list. + +Servers that trust the publisher will adapt automatically when the manifest +changes. + +## Validator List Publisher Keys + +When first setting up a validator list, use the `validator-list` tool to +generate the publisher key pair: + +``` + $ validator-list +``` + +1. Enter `1` for `Create validator list publisher keys` +2. Enter a name for the keys. + +Sample output: +``` + Select a name for this credential set: my-publisher-keys + + Publisher keys stored in privkeys.txt and pubkeys.txt + Ephemeral keys stored in my-publisher-keys/ +``` + +Keep the key files in a secure but recoverable location, such as an encrypted +USB flash drive. Do not modify its contents. + +Use ephkey1.txt key and manifest to generates validator lists. + +## Signing Validator Lists + +Use the `validator-list` tool to generate and sign validator lists + +``` + $ validator-list +``` + +1. Enter `2` for `Sign validator list`. +2. Enter the ephemeral private key from ephkey1.txt +3. Enter the list sequence number. This should exceed the sequence number of the +previous list. +4. Enter the numbers of days from today for the list to expire. +5. Enter the manifest of the validators to include on the validator list, one per +line. + +Best practice: + +* The set of validators in a published list should have at least 90% overlap + with other known published lists. +* The set of validators in each new published list should have at least 90% + overlap with the set in the previous list. +* A list should expire before the sequence+2 list is published. + +Failure to follow best practices could result in a ledger fork among rippleds +using your list. + +Sample output: +``` + Enter ephemeral private key: + **************************************************************** + + Sequence number: 1 + + Validity in days: 14 + + Enter validator manifests, ending with a blank line + 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 + + Adding the following validator public keys to the list: + nHUBGitjsiaiMJBWKYsJBHU2shmYt9m29hRqoh8AS5bSAjXoHmdd + nHB1FqfBpNg7UTpiqEUkKcAiWqC2PFuoGY7FPWtCcXAxSkhpqDkm + nHUpwrafS45zmi6eT72XS5ijpkW5JwfL5mLdPhEibrqUvtRcMAjU + nHUgoJvpqXZMZwxh8ZoFseFJEVF8ryup9r2mFYchX7ftMdNn3jLT + nHUXh1ELizQ5QLLqtNaVEbbbfMdq3wMkh14aJo5xi83xzzaatWWP + nHBtzeujejMTAWCymPjcaQUjLgxnfxDGTGoZnP3PvHRkR24hVgjw + nHBvriTnYGxP8ix3HfWo2GTFFo2zuxNXyRh3U8F9LvVZd718hhxF + nHULGMbQHyXe92wtnxA1X9TEp26qPiRfwfTv5MskD1yMro7bQ2df + nHUKp8XUkaFN6GzQ3o4qTE1w9aAD5uFjZ8vDt6pwjBsTFRq5FWEb + nHBtDzdRDykxiuv7uSMPTcGexNm879RUUz5GW4h1qgjbtyvWZ1LE + nHUzum747yqip3HWSgzSNHNMjmLUqhroNVWidSRTREswEVhKNQEM + nHUon2tpyJEHHYGmxqeGu37cvPYHzrMtUNQFVdCgGNvEkjmCpTqK + nHU2Y1mLGDvTbc2dpvpkQ16qdeTKv2aJwGJHFySSB9U3jkTmj4CA + nHDDasc9BHNB99PW8KUduS8Phqg8NPUmjufzMU6HGGDMUH2xNpPh + nHUUrjuEMtvzzTsiW2xKinUt7Jd83QFqYgfy3Feb7Hq1EJyoxoSz + nHB29c3ohq7KDtecLSLRrTV9k9Z3rLgmo1v8uuNmEEHxhTqfaQwo + + { + "blob" : "eyJzZXF1ZW5jZSI6MSwiZXhwaXJhdGlvbiI6NTgyOTQwODAwLCJ2YWxpZGF0b3JzIjpbeyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFRDZDOUU4NDU2RkRBNzAxNDRBNzNFNzA5RDUwOTY0NjNGMTU4NUY3MTU4ODgxRjNCREM1M0U4QjRGRjFBMUFCOUIiLCJtYW5pZmVzdCI6IkpBQUFBQVJ4SWUxc25vUlcvYWNCUktjK2NKMVFsa1kvRllYM0ZZaUI4NzNGUG90UDhhR3JtM01oQWplZjRIcnBOSm44RE9TUEFGbmNQV3ZNNUdOVFgzc1lLTlk5d21YcXQ1M0Rka1l3UkFJZ2ZsQ3c5SmxDVEFXd050QVB4SjJxTnA5K1pocWVEK0NxeHhkRlZhd3QyYmNDSUJ5VTFrQkN2M1F6dzFsM1hpMlluQUcvelM1TkxGNGc5bkR6dnRrY2JwSkpjQkpBT29NQzR6Njl6ZzhFYllHWGQ4TGxROVdjVFBMaEpNTmxpTkdhTWVXdmszRFhidWRGQUJBOVBvQjFZMC9iZ1hhVENsQXFLaW0rcHBjUkNyRGh3V3pZQXc9PSJ9LHsidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRUQ0NEZGRTJGNjI0OUMzNzMyMUEzNDlDMEE5ODNDNUQ1RDNFRTMzNDAxM0FFNEE1RDg5ODZFMTY3NDkyMDM1NEM5IiwibWFuaWZlc3QiOiJKQUFBQUFKeEllMUUvK0wySkp3M01obzBuQXFZUEYxZFB1TTBBVHJrcGRpWWJoWjBrZ05VeVhNaEE1NW9HQXdqWGVUbGFVODZwVmNxbzJuQUIzU0dXcXNwWUJ1SW1SVExjKzVkZGtjd1JRSWhBUFJEaXF0QXZ0RHRwdk5VYzQ0VWdlRTFWSVVqdElvVTE4SGlMTW1MZmYvVEFpQnhpNy91T2NFT0l5TW0rM2hGdHQvRVlnN1V4MXFEU1Izd0JRd2duU1pVOEhBU1FDL0s2RnI2M3pjM1I4MVlNeWFjQzlXZHptMUQ4Z29sRmMvNjZwVVNsNDdsRE1rZDB2WVZZSWVhUk15SitybHhaV2k1cU1hdll4WFN6NDNBenluUWlBRT0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVENTdFQTQzRDUxRUE0RDFDNzg5MjlCQjI0MDkwRUQzQzg5RjAzRTFFRDcyQkM1NjRFOTU3RDg3MjczMDA2NTQ0RiIsIm1hbmlmZXN0IjoiSkFBQUFBSnhJZTFYNmtQVkhxVFJ4NGtwdXlRSkR0UElud1BoN1hLOFZrNlZmWWNuTUFaVVQzTWhBdFN6c0pqc2VSaVdYMWNyRTNCNEVmK2Z0S1dNYmpScjgxWkRDckNIcG1qSmRrWXdSQUlnSWVIMFU2UTJVOUovK0lqRDlKYm9GNmowTVNlaitYR2xCbE0xcDhIYjBJb0NJSEpubTVTUXVNbVQydW5JcjdEUzBuVVpTQmFWOVRlay9aR2RxS3FZaHZ1dWNCSkFLaDd2OVQwS2lEZU5tdk52d0dZdTdQaTBPb1QvS1k1YmdpYTlvNjVLbjY0M1Z6OERweFBYVWl2dGpJTTdaekMxKy9RYmdrSWRoaUhXUjA2cXM5VmNDUT09In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFREFGQThDNjgxMjFBNUE3RENGOEJFNTVCRDY4RDU2REQzNDJCODM0Mjg5OTYxQ0EzOUJFNkYyRDA2QjlGMUU2MDUiLCJtYW5pZmVzdCI6IkpBQUFBQUp4SWUydnFNYUJJYVduM1BpK1ZiMW8xVzNUUXJnMEtKbGh5am0rYnkwR3VmSG1CWE1oQXBCNmk4RWNqNWJEd3JhUXlIQ3lJOGs0VXV5L2xMMVNDZ3Y1UnZUU0tEQVJka1l3UkFJZ0Noc0E3S21jSTRaVkV0M285T3Y5ZXczMEdQVTEycE1lcEljZCtlMTFwdjhDSUVpajNXbGdESkh3d1U3SHNoMXZNWS9BbzVuM1o4RkhCSk9GU0hzWHp2dE5jQkpBeE9GWTVYY2Y4bEhmK0Z5ZnE5ZU1SWHBZV0ZRR2REYkRpajhBdEd2Y0xnQkpTT0toMWlWNUcwNTliQ0c4OEJ1cVE3cnFWNHljU1laNXVqMDMyaTY2REE9PSJ9LHsidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRUQ5OThGRTY2OEIwNTQyOUE0NzkwNDEyQkVEMzc1QjIxOUYzQkJGNUFEQ0YyMTc2NTg3OTUxMUExNjU3MjIzNDU0IiwibWFuaWZlc3QiOiJKQUFBQUFKeEllMlpqK1pvc0ZRcHBIa0VFcjdUZGJJWjg3djFyYzhoZGxoNVVSb1dWeUkwVkhNaEFwN2lqa3dRelJ3OWlubU5zVGVtM0tVVWt4aDlZTjFCMTBYSVhrVDNTTlZSZGtZd1JBSWdLaDB6bjBvYkJQdi80T2dReE5mZVhhTkJFUkQrcEpWQzFwVzU2MGdMblFrQ0lGK1Q1WUUwa0tOQnhkRm5oVzhlMmpGK2xUbEZkcndIMUxrUnhtaG9VQXJkY0JKQTZ3Mk5CZmNwbDRlUnMrSHp0R0FvNHdCL296UXNTMzdPQTVsQm9BSHp3OVYzQ0I1WFFDRk1kMHpRdWpNREdUazd4K09pejk3UDRPTDVmLzF2T0IrV0F3PT0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVENDdBNzlGREI3MTIwNTYzNjZDMDg2MTczNTdBRjQxMzcwOENBMTE0OTlGRDQyNjM0RkRFRTQyQTcyMTM2MDM1NSIsIm1hbmlmZXN0IjoiSkFBQUFBRnhJZTFIcDUvYmNTQldObXdJWVhOWHIwRTNDTW9SU1ovVUpqVDk3a0tuSVRZRFZYTWhBMHNwYXBwRHFnREF4VHlacmYyVVllRlBLUE53Y3BzYjlKYzdWVGlwaEk1L2RrY3dSUUloQVBLOHlEYWtIZE9VS2MrekFGcU5HQWxjdzlWRDAvUDhFbHBxQmZVK0lBNXlBaUJyWGNJY3Z1RVFCWHhpZkZHSFNSalhGY2doWkxTVGFhUmNPNTRrOFBJU1VYQVNRSGpKZlByL01qLy9XaWhHS0puMnowMUxJNml6b1A4a3l1NFVhV2FUT2FVcU41bzZBR2NJeXN4NFEwMXZEVEJZWlk0dGozOXV3ekRwbGNqemY4ZGlmZzQ9In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFRDQ5RjhFQjgwNzFFMjZENEUwNjcyMzhENjJENjdDQTZFQkZCMjk4QjRBNzJEQ0ZBRDUzNkE3RUM4OTI1QzUxOUIiLCJtYW5pZmVzdCI6IkpBQUFBQUZ4SWUxSitPdUFjZUp0VGdaeU9OWXRaOHB1djdLWXRLY3R6NjFUYW43SWtseFJtM01oQW9nTW1RVFJBRksvK20vWFdRZkp2WFRlTWNhaXlGNmdraGdBc3NkTE9jaUlka1l3UkFJZ054WWF2SlB5SEFOdXhvZ1FZN1JOQlA5dFpvZ1pKeEYxd1pxem00YTM3R2dDSUJPdmJlUTgrUDQ2Q0NJY3k0WkNaQTVyWlorOTNIMGFLSlpRMytJQTBPT3VjQkpBQVNUcFFLdEVKa2Vxd0h6K2pLV052V2wwc0hSUVpTU0p1WWlNeXlVYTd5dHBzZXY2TkdvRm4xYk5wWVRndnNhUHhvejd2SHNrRGgyWjZnZWJTRENSQ0E9PSJ9LHsidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRUQ4MTA4RjdEOUVFNzc5REMxMDc1RUMzQ0Y4RUI5MDA0RERGODRDRDBBMEZGNTc3NUM5RTM3NUNDQUNEQUEzMDIyIiwibWFuaWZlc3QiOiJKQUFBQUFGeEllMkJDUGZaN25lZHdRZGV3OCtPdVFCTjM0VE5DZy8xZDF5ZU4xekt6YW93SW5NaEFsdlBKQU5RY1JVU05VUitObFp1bzRrR3BZRjhsOXBIUFAxWlJPT1VjTllSZGtZd1JBSWdSV1padUpMQWYzU05NR29GeWdVbHUrZUFENTFab0hGTWN5b2ljbjBXS3VjQ0lHdzRuOWNWRFBPQkdDOHdsSkR5OTI4Mng5UmRPd28xY28yZytOWmxjL0ROY0JKQUtKaEsvYW02TDdLRTQ1ME5WemhwVlZvTDhPRk1vMG1GeGs4QkRHNlFPMmNTTk1OM095d2Y0MEQrSWxlczlMWHh4dnZQQjZnV1NtUGx3RjdkTlI5R0FRPT0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVEN0UzQkFGRjkwMURFNTI1QjAwQjJDMUZFMTlBRjQ0OUEwODBCNUYzMTAwQzZFQzE4MkM4NjdBRjYxRjcxMEZGRCIsIm1hbmlmZXN0IjoiSkFBQUFBRnhJZTErTzYvNUFkNVNXd0N5d2Y0WnIwU2FDQXRmTVFERzdCZ3NobnIySDNFUC9YTWhBNStHREpoMkFwV0tDaDJONW9teDRGQU9GRXFYTWpxeTFISjVFN1dBM0ZyT2RrY3dSUUloQU1SZXp3alRBTDM1anBqajE1anFvSFV2Um03KzdpSHBVNDdhS0U2SEVDaFpBaUJTTUlaYU1XdjZxTkpIbmlZcHNZSHg0T1BQcEJvQ01NZE1WQUdmRmk5ZkszQVNRRTBUWWlJc0d2MC95bHBxR0VCaUxrazJYanJBOCsrQWt6cHI5dmNUdHJrSGlERG8wY0hLTzltUlVMQVhlc1JyT3lGYjVRY08wbDBWc3dldkQ1amxzd2s9In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFRDQ1RTgwQTA0RDc5Q0I5REYwMEFFQkQ4NkRDREMxNjg2RDY0MTlFQTlFNUUwRTcxRjFBODE3RTA4QjUwNzZBNTUiLCJtYW5pZmVzdCI6IkpBQUFBQUZ4SWUxRjZBb0UxNXk1M3dDdXZZYmMzQmFHMWtHZXFlWGc1eDhhZ1g0SXRRZHFWWE1oQXhabzE1N3BjQjlkZTZTbWs3aG9LM3dOQ0FyNGFGWnRmQVBpN0NFNG1OSmxka2N3UlFJaEFMbFZqWENmaXkvbXRYQldzTnQ3N3Q0aktjTkVCcFJWOHp2K1NwVTVsQ2gwQWlCYTh2bzh4eHB2aVlsZjR6ZEcrblFoQjJPZ2ZrUVpaUE1IT3Q3Q2FYelhnWEFTUUw4TzVwMDgzbWc0S0tMOHVaZk1hVXFkZ3p1SjBHdGExbHlVV1BjdFRQQ3hZMTM1WHdLK25KQWRGc0lVRk5KOU1Qam5wQ21TallWelZhNk01L25BY0FJPSJ9LHsidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRUREOEM4ODY0Mjc5NUNFNjlDNUI3ODBFMDE3MDJDMzcwRjk1MDdEMEI2NDQzM0YxN0VGRTcwRjI2MzdBNDBBREI3IiwibWFuaWZlc3QiOiJKQUFBQUFGeEllM1l5SVpDZVZ6bW5GdDREZ0Z3TERjUGxRZlF0a1F6OFg3K2NQSmpla0N0dDNNaEFuRmZyK3I5Qlhkc1hFL2NCbEpNeWQvWHNPMUE1WEVZQ2N0cnN2TEVYK0RtZGtjd1JRSWhBTlJjUk1nOVNBWG9hT3ZIRFoyYXY5UnpFYVphVkVOZlFpVmdzaStPeDNGMEFpQjJzblNJT202YzQvaW5idFUwVW1XTFFUenV3a09kVUZQSUI4QXg4ZG1HdUhBU1FNVUlmWE1qOTZrY0ZUU0puTUZDL21XL0FROGJLWGtGcnJrMENVVEZGS3dlRWpUcStTVHJGaTZxTEwyTVQ3bnZlR3hzWEJDZ3p0amMwcUdhczlLRldnTT0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVEQkRFQjkwMUY3Qzc1RDBFMjBDNkM0MkFGMDNCRTBEQTQwMzc3QUYxOTM5QTE4QjNDQjM2Nzk2NjFERDVGOUY3NCIsIm1hbmlmZXN0IjoiSkFBQUFBRnhJZTI5NjVBZmZIWFE0Z3hzUXE4RHZnMmtBM2V2R1RtaGl6eXpaNVpoM1YrZmRITWhBZzNjeUtOUE1QcUtnUjdrSWk3Yy84R0wvWWdkQnRnNG1TQVd2d21hZXZWR2RrWXdSQUlnV3pHOEdxWWczWXB3RHM4eFhhOVhxTEhzczc2S1QydUFIUmhVWEZWVXFDUUNJRzJFdmJGS254ZXpSZDljcFBIU3QzMkhYSytQNCthTDNwMit2cWxDeFJSOWNCSkFib1hUbVlUYXlvY0EzemY5ZFdFWHR5YWVPR0MxazVXZFlVUnpQbGVldnZhbFI0eFZvWHpzMzhpR1B4RnIvcEE5bkwrTTRkdXUwR0tDSGxWaXIrZkJBZz09In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFREExNzg3MUU3MkIwQzU3MEFDNDM0NUM2MENGMDJBRkJCQjc0MEE2MzFCN0FEMEUxRTU3MzIxNjU3NEQ5QUVBMDIiLCJtYW5pZmVzdCI6IkpBQUFBQUZ4SWUyaGVISG5Ld3hYQ3NRMFhHRFBBcSs3dDBDbU1iZXREaDVYTWhaWFRacnFBbk1oQW9qeXV6Z3RyZVFreFFqOHBySHhPc2JEY0Y1ZnU0WFhiMEt4RUwvUHE1SGhka2N3UlFJaEFOZlBETFpQNDdhQ1d3dDVrQm5wNzVCdXVDZ3A5YzRCZkpQZDY2U0ZDdzYxQWlBSnZlZ0J2dlBJcmVjK1hPU3pLUmZpNXV1WFd4dGw5RXlyMmFQQllYdmJSSEFTUU1VTFlFbzdiZVJmb1VDbmprMXNUWXlZOTF0TElHTGdubmFXWGhVbTgwK3pzNUlHZWdrOHFpaktBdEJPTXVCQzcxbEFCNEtoSmMrZEIycnBNT0ZjNWd3PSJ9LHsidmFsaWRhdGlvbl9wdWJsaWNfa2V5IjoiRURGNDZFRTI3QUQwRTFBNzE0QUZFQ0RBODE2RUFCNzExNDYxNEZDQjkyRDBDQjREOTdCNkE4OEVENDM0MzRBRkM5IiwibWFuaWZlc3QiOiJKQUFBQUFGeEllMzBidUo2ME9HbkZLL3Myb0Z1cTNFVVlVL0xrdERMVFplMnFJN1VORFN2eVhNaEF3MEFUV2pWVHQ0RmZlS083a3Y2ZkZnZC9nbzIrZDVCU3lVY1VSbVJXblR0ZGtjd1JRSWhBTXdPZ0RlYzdRWVlObmdzcGc5MHdFdlZic29oMnV4MTRSUFR3K0dIYVhObEFpQUxnZkVzeitBRjRleVgvWTVpNDRWckZqRkZJTVdVZk9aYVFKdHN4dGVNMVhBU1FMT2FGMHQyWnBxVktkOEpFU1FWWSt6VTU2N2lBQUcyYW1UUFp4OTU4NzVTOUE2UGwra0g1VEdITUFlV2pnV1NxZmgzbTJIQkpYN05JY1hiOTh2eTlBQT0ifSx7InZhbGlkYXRpb25fcHVibGljX2tleSI6IkVENkU0QzQxRTU5RkZCRUI1MTcyNkU1NDQ2ODUwMkZFNjQzNzIzOEZBNzhFQTUxNjM0RTdCRjBEMDkxNzFBRUU4RiIsIm1hbmlmZXN0IjoiSkFBQUFBRnhJZTF1VEVIbG4vdnJVWEp1VkVhRkF2NWtOeU9QcDQ2bEZqVG52dzBKRnhydWozTWhBdXp0R1diL09pMS9WNW01ZHVqV3I5SG1iS1J5SzRYWWsra211RlBTZ0FGcmRrWXdSQUlnZlErQmdYWDZRYmxaeTRIMDVvN0dQU0l3cVM3UVFSVVc3ZHFGNTRJQWlpTUNJSDRYZkx3OTU2aUVhb3haT2s3S2N0aW4yWDloTWZhTE43d3lzOXlBVUZvWmNCSkF1ZUVpODRYUjNMbDFHTEpXYW5XMWcxTWRVai8wUEF4SmJ3NkVFUVJ1RzN6ZG51UkhOWGxkNlVaQWJJa1ZjUDB6dGZxdWxCempiY3NMRE9LRkVpY1NCZz09In0seyJ2YWxpZGF0aW9uX3B1YmxpY19rZXkiOiJFRDFDREQwOTU0RTk1REU1RTM2QUI1RTk2NTc1MDMxN0UwNDMzMTIxMDZCMEU2RUVFRjFDMTlFQ0ZBNkI0MUNCRkIiLCJtYW5pZmVzdCI6IkpBQUFBQUZ4SWUwYzNRbFU2VjNsNDJxMTZXVjFBeGZnUXpFaEJyRG03dThjR2V6NmEwSEwrM01oQW1UaEZUMmJ2eU02Uy9TNVUyVVY0VmtyYjNnVGRkbmZjOFhiVGxrRTRMMm9ka2N3UlFJaEFOMFNBV3lXNTZlcmVSK1dSOHZSMlpXWjl5ZGhwR0RWRm51WDFlVWRKU1FqQWlBVXAxZFpDOU1ISkhKRTVkc09WNWwrT2J5a3pSblo5MkM0TGZDUzF6Y3BXbkFTUUlqSmY4T2VrWlFGczRNQWcrdDE4T2xUTmgzeURTblAvd0wvbGFsV0hVSkYrYS9VQ2d1cERGYjh1TVRTNTRDWGgvWDM4cWRBNGw4dEtrRUhZc1owRXdrPSAifV19", + "manifest" : "JAAAAAFxIe3O84babkQJIsShuQSSesg3zlYYTzffZn3HQDasAdIr4nMh7dwKxFnWQR/HrmpAUP/u6vmG9O7JY7HwVxajnj755ApvdkAvGmaDIcFyXtL1+kjX6AqNWSfLOsed9zcS2KNgvjBuLOJbW1g/TSYoDzvcTXdFQ0gWALPqTMHUoex5/NZYViwDcBJAUnf/+rB9CbG9m6mq2A1zx23Ul9BPt0x4x+w0WK7i0KTLNUy3eQntCs6tj2OJKFY/e7IuaCMoBfLFk6Fv7unyAg==", + "signature" : "C0B8BFECDF2E1D8E94AC911373B14F36325E9B6C3049A4366FC06A8692A8F66447C1AC5C6FFB6796F314FC192CFDFB4D07CDCBA7C2F4AB7508E21CE39BDDDC04", + "version" : 1 + } +``` + +Serve the outputted JSON at your published validator list site. + +## Using Your Validator List + +Rippled operators can add the following to their [validators.txt](https://github.com/ripple/rippled/blob/develop/cfg/validators-example.txt) +file to configure their rippled to use your published validator list: + +* Add the hex-encoded public key from your [pubkeys.txt file](#validator-list-publisher-keys) to `[validator_list_keys]` +* Add the URI serving your published validator list to `[validator_list_sites]`