Tool to validate and sign Validators Lists.
This tool allows you to load
and sign
VL's and encode
and decode
manifests.
The tool supports both version 1
and 2
of the VL format.
Version 2 was released in rippled 1.7.0
and it adds a future effective date so that nodes in the peer-to-peer network can switch to a new UNLs simultaneously. It also supports publishing multiple UNLs in one file, allowing future UNLs to be included alongside a current UNL.
For more information about v2, follow this link.
The command allows for either a url or a file path:
Usage: xrpl_vl_tool load <URL_OR_FILE>
Arguments:
<URL_OR_FILE> The URL or file path of the Validation List. You can pass either
Options:
-h, --help Print help
And loads the given VL performing some validations.
Example request:
./xrpl_vl_tool load https://vl.xrplf.org
or ./xrpl_vl_tool load /dev/vl.json
Example response:
There are 1 UNL's in this Validators List | Version 2 | Manifest Signature: ✓
Publisher Master Public Key: ED2677ABFFD1B33AC6FBC3062B71F1E8397C1505E1C42C64D11AD1B28FF73F4734
There are 35 validators in this VL. Sequence is: 80 | Blob Signature: x | Manifest Signature: ✓ | Expires: 2025-10-31 00:00:00 | Version: 1
Validator: ED13AAFCB6A87BCB5D093C2EF37F04431C291126D674293305152D9776C6ABA4D6 (nHBWa56Vr7csoFcCnEPzCCKVvnDQw3L28mATgHYQMGtbEfUjuYyB) | Master: ✓, Signing: ✓ | xrp.vet
Validator: ED4246AA3AE9D29863944800CCA91829E4447498A20CD9C3973A6B59346C75AB95 (nHBidG3pZK11zQD6kpNDoAhDxH6WLGui6ZxSbUx7LSqLHsgzMPec) | Master: ✓, Signing: ✓ |
Validator: ED5784A43AA84B5BDAFD0AFEF64ADA5583A3129182C6A7464950FD6BF2D9FAE5B0 (nHUryiyDqEtyWVtFG24AAhaYjMf9FRLietbGzviF3piJsMm9qyDR) | Master: ✓, Signing: ✓ |
Validator: ED583ECD06C3B7369980E65C78C440A529300F557ED81256283F7DD5AA3513A334 (nHUpJSKQTZdB1TDkbCREMuf8vEqFkk84BcvZDhsQsDufFDQVajam) | Master: ✓, Signing: ✓ |
Validator: ED65142881189CA8FE8D246A8EACE7637A8CA7CE78656638C6D87FAD369F8A5C81 (nHUfxETNHsA9reyYCVYwNztEbifMg6U9YUdcgVvzMwGNpphKSSf6) | Master: ✓, Signing: ✓ | xrpkuwait.com
Validator: ED7098772471769E82A5466329967DC8BF51C941190164E88D7CC9C393AD407C52 (nHUDpRzvY8fSRfQkmJMqjmVSaFmMEVxBNn2tNQy5VAhFJ6is6GFk) | Master: ✓, Signing: ✓ | ekiserrepe.es
Validator: ED8252C2F91523126EEF9A21964C7E487A10D6D63D459139700DBC70D9F7BAD542 (nHULqGBkJtWeNFjhTzYeAsHA3qKKS7HoBh8CV3BAGTGMZuepEhWC) | Master: ✓, Signing: ✓ |
Validator: EDA4074FD039407BD2464F14C378440D5B02CA8FBA661B286D1C82A3D59E8E6EC0 (nHUbgDd63HiuP68VRWazKwZRzS61N37K3NbfQaZLhSQ24LGGmjtn) | Master: ✓, Signing: ✓ |
Validator: EDFE65FB385B6BB16951153D2A0F32BD6D8CC4532C87BB3E1900913A7BE34F5EF7 (nHDH7bQJpVfDhVSqdui3Z8GPvKEBQpo6AKHcnXe21zoD4nABA6xj) | Master: ✓, Signing: ✓ |
Validator: EDC1897CE83B6DCF58858574EC9FE027D4B1538A0F20823800A5529E121E87A93B (nHUFCyRCrUjvtZmKiLeF8ReopzKuUoKeDeXo3wEUBVSaawzcSBpW) | Master: ✓, Signing: ✓ |
Validator: EDC2A138B3771C208965596D4D372331C17A5476BD2CE2BC7A6D3CD273DF330D99 (nHUq9tJvSyoXQKhRytuWeydpPjvTz3M9GfUpEqfsg9xsewM7KkkK) | Master: ✓, Signing: ✓ |
Validator: ED38B0288EA240B4CDEC18A1A6289EB49007E4EBC0DE944803EB7EF141C5664073 (nHB8QMKGt9VB4Vg71VszjBVQnDW3v3QudM4DwFaJfy96bj4Pv9fA) | Master: ✓, Signing: ✓ | bithomp.com
Validator: ED135050AE848C37B894EFC67BBEC54A5B4CBAA2281C9DB2D7754A3DF6195DA65E (nHBVACxZaNbUjZZkBfj7gRxF3xgG2vbcP4m48KzVwntdTogi5Tfs) | Master: ✓, Signing: ✓ | onxrp.com
Validator: ED2C5C95F6B67357282B7F1675AFBBAACFB61DF06DEEDF986166E7ADD3D7D33462 (nHBgyVGAEhgU6GoEqoriKmkNBjzhy6WJhX9Z7cZ71yJbv28dzvVN) | Master: ✓, Signing: ✓ | v2.xrpl-commons.org
Validator: ED571031CEB567106CD4E128D46E4DD4087DA12DA9FAB78EEFF7A93971DCC59900 (nHUr8EhgKeTc9ESNt4nMYzWC2Pu7GgRHMRTsNEyGBTCfnHPxmXcm) | Master: ✓, Signing: ✓ | anodos.finance
Validator: ED6A54975A94EB9715E4F4E3FCD1661FCD40C065E6C22E461FEE87267DD73A2D6A (nHUwGQrfZfieeLFeGRdGnAmGpHBCZq9wvm5c59wTc2JhJMjoXmd8) | Master: ✓, Signing: ✓ | xrpgoat.com
Validator: ED95C5172B2AD7D39434EEBC436B65B3BB7E58D5C1CEFC820B6972ACAD776E286A (nHUVPzAmAmQ2QSc4oE1iLfsGi17qN2ado8PhxvgEkou76FLxAz7C) | Master: ✓, Signing: ✓ | ripple.ittc.ku.edu
Validator: ED9DA743B769045A91AC41CA5C56FBD090168CB771E9558DD9D1C4FE8B3F4C842E (nHUY14bKLLm72ukzo2t6AVnQiu4bCd1jkimwWyJk3txvLeGhvro5) | Master: ✓, Signing: ✓ | validator.gatehub.net
Validator: EDA1EFC81058EECB48DEB4FEB7FAFACEAEA42C3E00C0BFB31F85EC116F31A13DAD (nHU2k8Po4dgygiQUG8wAADMk9RqkrActeKwsaC9MdtJ9KBvcpVji) | Master: ✓, Signing: ✓ | verum.eminence.im
Validator: EDAF4CBCF4A9BEE306646549301E22770D5E62D8C03DD9FF42B65A83B2BE1C70F3 (nHUge3GFusbqmfYAJjxfKgm2j4JXGxrRsfYMcEViHrFSzQDdk5Hq) | Master: ✓, Signing: ✓ | katczynski.net
Validator: EDF10074F5FBBB975A8EA8E9C42306854E6A49C71B7D33B0293AB1830FECF2C400 (nHDB2PAPYqF86j9j3c6w1F1ZqwvQfiWcFShZ9Pokg9q4ohNDSkAz) | Master: ✓, Signing: ✓ | xrpscan.com
Validator: ED55BB5A2C8E040367DBA0BA563E924463C360C9C565EFE41701596BA2B828DE16 (nHUrUNXCy4DgPPNABX9C6mUctpoq7CwgLKAUxjw6zYtTfiqsj1ew) | Master: ✓, Signing: ✓ | xrp-validator.interledger.org
Validator: ED580C4282950CB3F7E0185F37F2CFB216882C5EDDD3BB1EE49C304A1AA3C5DB92 (nHUpDPFoCNysckDSHiUBEdDXRu2iYLUgYjTzrj3bde5iDRkNtY8f) | Master: ✓, Signing: ✓ | validator.poli.usp.br
Validator: ED8815A1E647DF83DE643289804F4610464D1ABCF6B38F40404EFA84B5D1A69D81 (nHUP4RcLQdPHh3kMtFm9NFGnjEYLGXiQAyyB7qFsjATHMw2YVxHi) | Master: ✓, Signing: ✓ | xpmarket.com
Validator: EDA8B1D8A071E85A6E36DCAC7999AB814E4CDC664668385173767C5B89554243C0 (nHUdjQgg33FRu88GQDtzLWRw95xKnBurUZcqPpe3qC9XVeBNrHeJ) | Master: ✓, Signing: ✓ | validator.xrpl.robertswarthout.com
Validator: EDCAD6E02AAFF5467465CBB9E62E021BF4B8E23F7484A6F0F67387549733865CCA (nHUtmbn4ALrdU6U8pmd8AMt4qKTdZTbYJ3u1LHyAzXga3Zuopv5Y) | Master: ✓, Signing: ✓ | bifrostwallet.com
Validator: ED63CF929BE85B266A66584B3FE2EB97FC248203F0271DC9C833563E60418E7818 (nHUfPizyJyhAJZzeq3duRVrZmsTZfcLn7yLF5s2adzHdcHMb9HmQ) | Master: ✓, Signing: ✓ | xrp.unic.ac.cy
Validator: EDCF08053DFF0F00AC6E78B61F7B7FD187AF74052DEB5074207506D3A2CDCD9E5C (nHUvcCcmoH1FJMMC6NtF9KKA4LpCWhjsxk2reCQidsp5AHQ7QY9H) | Master: ✓, Signing: ✓ | jon-nilsen.no
Validator: ED580AD4FA5DA989FA999535ECC20197A5B53A1A49A971F6652ED8D5D466CA605D (nHUpDEZX5Zy9auiu4yhDmhirNu6PyB1LvzQEL9Mxmqjr818w663q) | Master: ✓, Signing: ✓ | xspectar.com
Validator: ED6753539020782A777B8F4BF6931A7DB13F9D259486E337C639B99E0C57CD5FF2 (nHU3AenyRuJ4Yei4YHkh6frZg8y2RwXznkMAomUE1ptV5Spvqsih) | Master: ✓, Signing: ✓ | xrpl.aesthetes.art
Validator: EDFF91FA911FE9BF2CCCC2A1F750900C4A6056139FE0DD6872D2A577CA51B27200 (nHDHzXZKtmMHCkTVgdWY4dqdigDrESiseUF8JkzE93DUtfbt6s3W) | Master: ✓, Signing: ✓ | validator.aspired.nz
Validator: ED9AE4F5887BA029EB7C0884486D23CF281975F773F44BD213054219882C411CC7 (nHUXeusfwk61c4xJPneb9Lgy7Ga6DVaVLEyB29ftUdt9k2KxD6Hw) | Master: ✓, Signing: ✓ | validator.xrpl-labs.com
Validator: ED8651B672BCE2727BD93A62431592447D6637E5D0E768595ECC19E5E4AEACAF3B (nHU4bLE3EmSqNwfL4AP1UZeTNPrSPPP6FXLKXo2uqfHuvBQxDVKd) | Master: ✓, Signing: ✓ | ripple.com
Validator: ED75940EC09130F9C553D8AF0FE354A112CC27251472AF1A90917597489192135F (nHUED59jjpQ5QbNhesXMhqii9gA8UfbBmv3i5StgyxG98qjsT4yn) | Master: ✓, Signing: ✓ | arrington-xrp-capital.blockdaemon.com
Validator: EDA54C85F91219FD259134B6B126AD64AE7204B81DD4052510657E1A5697246AD2 (nHUcNC5ni7XjVYfCMe38Rm3KQaq27jw7wJpcUYdo4miWwpNePRTw) | Master: ✓, Signing: ✓ | cabbit.tech
Signs a new (or appends to an existing VL) UNL retrieving the secret from AWS.
Usage: xrpl_vl_tool sign [OPTIONS] --vl-version <VL_VERSION> --publisher-manifest <PUBLISHER_MANIFEST> --manifests-file <MANIFESTS_FILE> --sequence <SEQUENCE> --expiration <EXPIRATION_IN_DAYS> --secret-provider <SECRET_PROVIDER> --secret-name <SECRET_NAME>
Options:
-v, --vl-version <VL_VERSION>
The version of the Validation List (1 or 2)
-p, --publisher-manifest <PUBLISHER_MANIFEST>
The publisher manifest
-m, --manifests-file <MANIFESTS_FILE>
Path to the file that holds the list of manifests, one per line
-s, --sequence <SEQUENCE>
The sequence number of the Validation List
-e, --expiration <EXPIRATION_IN_DAYS>
The expiration in days of the Validation List
-x, --secret-provider <SECRET_PROVIDER>
The secret provider to use: aws, vault or local. For local secret, this value should be the path to the file that holds the secret
-n, --secret-name <SECRET_NAME>
The secret id to use. Not needed for `local`.
-d, --effective-date-day <EFFECTIVE_DATE_DAY>
The effective day (YYYY/MM/DD) for the Validation List (only for version 2)
-t, --effective-date-time <EFFECTIVE_DATE_TIME>
The effective time (HH:MM) for the Validation List (only for version 2)
-f, --v2-vl-file <V2_VL_FILE>
If specified, it will create a new entry in `blovs_v2` preserving the current entries. It will create a brand new file from scratch otherwise (only for version 2 - optional)
-h, --help
Print help
In order to retrieve the secret from AWS, the following environment variables need to be available:
AWS_REGION
AWS_ACCESS_KEY_ID
AWS_SESSION_TOKEN
AWS_SECRET_ACCESS
secret_name
example: test/vl/tool
.
For Vault secrets, the following environment variables are required:
VAULT_TOKEN
VAULT_ENDPOINT
The format for secret name is {mount}:{path}
.
secret_name
example: vl-tool/dev:keypair
.
For local secrets, make an environment variable with the name VL_PK
with the private key value:
export VL_PK={THE_PRIVATE_KEY}
Example request:
./xrpl_vl_tool sign \
--vl-version 1 \
--publisher-manifest JAAAAAFxIe0md6v/0bM6xvvDBitx8eg5fBUF4cQsZNEa0bKP9z9HNHMh7V0AnEi5D4odY9X2sx+cY8B3OHNjJvMhARRPtTHmWnAhdkDFcg53dAQS1WDMQDLIs2wwwHpScrUnjp1iZwwTXVXXsaRxLztycioto3JgImGdukXubbrjeqCNU02f7Y/+6w0BcBJA3M0EOU+39hmB8vwfgernXZIDQ1+o0dnuXjX73oDLgsacwXzLBVOdBpSAsJwYD+nW8YaSacOHEsWaPlof05EsAg== \
--manifests-file tests/data/manifests_list_1.txt \
--sequence 80 \
--expiration 365 \
--secret-provider vault \
--secret-name vl-tool/dev:keypair
./xrpl_vl_tool sign \
--vl-version 2 \
--publisher-manifest JAAAAAFxIe0md6v/0bM6xvvDBitx8eg5fBUF4cQsZNEa0bKP9z9HNHMh7V0AnEi5D4odY9X2sx+cY8B3OHNjJvMhARRPtTHmWnAhdkDFcg53dAQS1WDMQDLIs2wwwHpScrUnjp1iZwwTXVXXsaRxLztycioto3JgImGdukXubbrjeqCNU02f7Y/+6w0BcBJA3M0EOU+39hmB8vwfgernXZIDQ1+o0dnuXjX73oDLgsacwXzLBVOdBpSAsJwYD+nW8YaSacOHEsWaPlof05EsAg== \
--manifests-file tests/data/manifests_list_1.txt \
--sequence 80 \
--expiration 365 \
--secret-provider local \
--secret-name path/to/local_keys.json \
--effective-date-day 2026-12-31 \
--effective-date-time 09:00
Example response:
VL file generated ✓
(a timestamped json file saved to the current folder)
blob
: Base64-encoded JSON string containingsequence
,validators
andexpiration
fields.sequence
: Validator list sequence (incremental)expiration
: Ripple timestamp (seconds since January 1st, 2000 (00:00 UTC)) for when the list expires.validators
contains an array of objects with a hexvalidation_public_key
and a base64-encodedmanifest
manifest
: Base64-encoded serialization of a manifest containing the publisher's master and signing public keys.signature
: Hex-encoded signature of the blob using the publisher's signing key.version
: The version of the validator list protocol this object uses. The current version is 1. A higher version number indicates backwards-incompatible changes with a previous version of the validator list protocol.public_key
: The public key used to verify this validator list data, in hexadecimal. This is a 32-byte Ed25519 public key prefixed with the byte 0xED. The value is equal to themaster_public_key
in the publisher's manifest.
blobs-v2
: Base64-encoded JSON string containingsequence
,validators
andexpiration
fields.manifest
: OPTIONAL string representing the base-64 or hex-encoded manifest containing the publisher's master and signing public keys.signature
: string representing the hex-encoded signature of the blob using the publisher's signing key.blob
string representing the base64-encoded json representation of the blob.effective
: Unsigned integer representing the ripple time point when the list will become valid.sequence
: Validator list sequence (incremental)expiration
: Ripple timestamp (seconds since January 1st, 2000 (00:00 UTC)) for when the list expires.validators
contains an array of objects with a hexvalidation_public_key
and a base64-encodedmanifest
manifest
: Base64-encoded serialization of a manifest containing the publisher's master and signing public keys.version
: The version of the validator list protocol this object uses. The current version is 1. A higher version number indicates backwards-incompatible changes with a previous version of the validator list protocol.public_key
: The public key used to verify this validator list data, in hexadecimal. This is a 32-byte Ed25519 public key prefixed with the byte 0xED. The value is equal to themaster_public_key
in the publisher's manifest.
The manifest
is a data structure that defines a Validator. Manifest are serialized and contain the followig fields:
sequence
: Manifest sequence number.master_public_key
: The master public key (base58 encoded)signature
: The signature (can be verified with thesigning_public_key
)signing_public_key
: The signing public key (base58 encoded)master_signature
: The signature (can be verified with themaster_public_key
)domain
: Validator domain (optional).
Example:
{
"sequence": 1,
"master_public_key": "nHBtBkHGfL4NpB54H1AwBaaSJkSJLUSPvnUNAcuNpuffYB51VjH6",
"signature": "109c8f7ea54617b24305d44af548fade9bdccc10ec43c76e1a4bef3c588817a6c95757244f7a1170b674d36fe2f0531ef2517a07de1df5424aeebb64591bbd0d",
"signing_public_key": "nHBYNPHW6LJGzHF8AynFg4TdVD9M9wo5YSf7ybgf8Gobu42GHxbd",
"master_signature": "cb7a643ebf6386ac8fbc1ed3e0dcfc8ff32311a35af6884c2f3b689f1000643a5c07ecd7f1056f43819488078f2c2285fdfa9329f8549127e86e8ccf3a2fdb09",
"domain": "xrpl.org"
}
Encodes a manifest.
Usage: xrpl_vl_tool encode-manifest [OPTIONS] --sequence <SEQUENCE> --master-public-key <MASTER_PUBLIC_KEY> --signing-public-key <SIGNING_PUBLIC_KEY> --signature <SIGNATURE> --master-signature <MASTER_SIGNATURE>
Options:
-s, --sequence <SEQUENCE> Manifest sequence number
-m, --master-public-key <MASTER_PUBLIC_KEY> Master Public Key in Base58 format
-p, --signing-public-key <SIGNING_PUBLIC_KEY> Signing Public Key in Base58 format
-x, --signature <SIGNATURE> Signature in Hex format
-y, --master-signature <MASTER_SIGNATURE> Master Signature in Hex format
-d, --domain <DOMAIN> Domain (optional)
-h, --help Print help
Example:
./xrpl_vl_tool encode-manifest \
--sequence 1 \
--master-public-key nHBe4vqSAzjpPRLKwSFzRFtmvzXaf5wPPmuVrQCAoJoS1zskgDA4 \
--signing-public-key nHUhPxhvYHHDsNrdnDEqJnkFHm1XcddQYH4RjLTNaVQJZSXXeNhU \
--signature C5720E77740412D560CC4032C8B36C30C07A5272B5278E9D62670C135D55D7B1A4712F3B72722A2DA3726022619DBA45EE6DBAE37AA08D534D9FED8FFEEB0D01 \
--master-signature DCCD04394FB7F61981F2FC1F81EAE75D9203435FA8D1D9EE5E35FBDE80CB82C69CC17CCB05539D069480B09C180FE9D6F1869269C38712C59A3E5A1FD3912C02
Decodes a manifest.
Usage: xrpl_vl_tool decode-manifest <MANIFEST>
Arguments:
<MANIFEST> The manifest to decode
Options:
-h, --help Print help
Example:
./xrpl_vl_tool decode-manifest JAAAAAFxIe1NWZrNQGcv7hqdO+VutSUy4n1LnLA2MODJJBrxrz0fcHMhAkWhek9PSMZhFik8M+Xjp78yUA4CBG588XjqEgjUGN3idkYwRAIgevLigsRwT6Gswj9gaX06eDwwS4xBfrfnftxKqutvG4oCIBQi95V6KIjKpdaXUn+SPsDpGRU2YNUQgTjqgh39qJPpcBJAr78avNH5e3BoYgFP7Xx7PqFNf/I3jFfoMMqCnKZJUyPxk4xeQkRy3el03CqUzjWzfzkxv6jxi5G/Gz7wu7RDCQ==
cargo test
cargo build
Example:
cargo run decode-manifest JAAAAAFxIe1NWZrNQGcv7hqdO+VutSUy4n1LnLA2MODJJBrxrz0fcHMhAkWhek9PSMZhFik8M+Xjp78yUA4CBG588XjqEgjUGN3idkYwRAIgevLigsRwT6Gswj9gaX06eDwwS4xBfrfnftxKqutvG4oCIBQi95V6KIjKpdaXUn+SPsDpGRU2YNUQgTjqgh39qJPpcBJAr78avNH5e3BoYgFP7Xx7PqFNf/I3jFfoMMqCnKZJUyPxk4xeQkRy3el03CqUzjWzfzkxv6jxi5G/Gz7wu7RDCQ==