The PowPeg
Rootstock's two-way peg with Bitcoin, and the hardware that signs it. This page reconstructs the complete history of the peg's signing federations from the Bridge contract's own events — 17 federations across 16 handovers — and sets it beside what Rootstock publishes about the devices and their firmware.
Chain figures collected 8 Nov 2026 · how
What the PowPeg is
The PowPeg is the mechanism that moves bitcoin into Rootstock and back out again. It is a hybrid: peg-ins are verified by the network, and peg-outs are signed by hardware.
A peg-in sends BTC to the PowPeg's Bitcoin address. The Bridge — a native
contract at 0x0000000000000000000000000000000001000006 — verifies the
Bitcoin transaction by SPV proof and credits the equivalent RBTC on Rootstock. Peg-in
requires 100 Bitcoin confirmations (roughly 2,000 Rootstock blocks). Federation members
act as watchtowers and usually inform the Bridge on the user's behalf, but a user who is
missed can register the peg-in themselves.
A peg-out sends RBTC to the Bridge. After 4,000 Rootstock blocks the Bridge builds the Bitcoin transaction itself and selects the UTXOs, then asks the signing devices to sign it. The people who operate those devices — the pegnatories — do not hold the Bitcoin keys in any form they can extract or use at will. The keys live inside a PowHSM, a purpose-built firmware that will only sign what the Rootstock chain, proved to it by cumulative proof of work, says it should sign. That is where the "Pow" comes from.
Defense in depth
The PowPeg is not built on one clever mechanism. That is a deliberate choice, and Rootstock's chief scientist has written up the reasoning more than once. The argument against the single-mechanism approach is that it concentrates the risk in something almost nobody can check:
Other pegs rely on
a single all-encompassing cryptographic protocol that solves a multi-party custody problem in an intricate way— whichvery few entities can audit… thoroughly. Rootstock insteadrelies on multiple defenses, or layers, with each layer relatively simple to understand and test.
Three strategies are named as running concurrently: defense in depth, coordination transparency and public attestation. The first is defined more narrowly than the phrase usually implies — it is about separating responsibilities, not stacking redundant copies of the same control:
Defense-in-depth is realized by a careful separation of responsibilities so that compromising the system requires more than just compromising one element or one actor. The miners alone cannot steal the funds of the peg, neither can the pegnatories, nor the PowHSM manufacturer, nor the developers.
The goal state has a name — vetocracy: a system of governance whereby
no single entity can acquire enough power to make decisions and take effective charge
.
And the rule for maintaining it is that layers accrete rather than get swapped:
well-functioning security components should not be replaced
, so that
if one layer fails, it can be removed while having a safety net of the remaining layers
working
.
The layers, and what each is for
A layer is only meaningful against a specific attack, so they are listed here with the one they exist to stop.
| Layer | Defends against | How | Src |
|---|---|---|---|
| Merged-mining hash power | A dishonest majority of Rootstock block producers | Called "the largest and most crucial layer" of the approach. Peg-outs are only signed for a chain backed by real cumulative work. | ref |
| PowHSM key custody | A compromised pegnatory machine | The Bitcoin key is generated inside a tamper-proof device and never leaves it, so "even if the pegnatory is hacked the key in the PowHSM will be secured". | ref |
| Cumulative-PoW gate inside the device | Operators colluding to sign a forged chain | Each PowHSM runs a Rootstock node in SPV mode and will only sign what cumulative proof of work commands — checking block linkage, difficulty adjustments and best-chain selection itself. | ref |
| The Bridge builds the transaction | Signers choosing what to sign | The peg-out transaction is constructed by consensus. The devices are not offered a choice of contents, so "pegnatories cannot sign arbitrary transactions to falsify peg-outs". | ref |
| Coordination over the chain only | Hidden collusion, and reconnaissance | All messages between pegnatories go through the Rootstock blockchain and are public. A private channel would also leak their addresses for targeted attack. | ref |
| Firmware attestation | A device running something other than the audited firmware | Deterministic builds plus a device-signed attestation chaining to a manufacturer root key. | ref |
| Proof of work as a forced delay | A fast, quiet attack | The work a PowHSM demands is a rate limiter: an attack needs major pools colluding for days, visibly. "As in banking vault opening procedures, the PowHSM is actually enforcing a time-delay that lets humans enter the loop." | ref |
| Deep confirmation thresholds | Reorgs, and invalid-but-heaviest Bitcoin forks | 100 Bitcoin blocks in, 4,000 Rootstock blocks out. Deliberately slow; Flyover exists as the fast path precisely because the peg is not. | ref |
| Armadillo fork monitoring | A hidden or parallel Rootstock branch | Monitors reconstruct the branch graph from Bitcoin blocks and broadcast a proof-of-work-backed fork proof. PowPeg nodes listen, so signing can be halted "with objective evidence of an ongoing attack, and not by rumors". | ref |
| Consensus-enforced UTXO chaining | Selective censorship of a peg-out | The Bridge picks the UTXOs, including change, forming a chain. Refusing one transaction eventually halts the peg entirely — so censorship cannot be quiet or partial. | ref |
| Jurisdictional spread | Seizure by one government | Pegnatories sit in different jurisdictions, explicitly contrasted with custodial wrappers held under one. | ref |
| Time-locked emergency multisig | Every device failing at once | A separate script branch behind OP_CSV, usable only long after the PowPeg is demonstrably dead. The delay is itself the defence — it removes both extortion by signers and denial of service against them. | ref |
The doctrine, stated as doctrine
The clearest statement is not in an article but in a proposal — RSKIP198, which writes the peg's security assumption as a formula in order to attack its weakest term:
The current security of the Powpeg against invalid peg-outs relies on the assumption that: (the majority of the RSK hashrate is honest OR the majority of the Powpeg functionaries are honest) AND the PowHSM manufacturer is honest AND the PowHSM is tamper-proof. Assuming of the honesty of the HSM manufacturer and lack of vulnerabilities in the device is Powpeg's strongest assumption.
The defense-in-depth strategy adopted by the RSK community states that there should be no single point of failure. While the probability of the described attacks is very low, the defense-in-depth strategy demands that an additional protection layer exists. This new layer should keep the system secure even in case the HSM manufacturer is compromised.
That proposal — Minpeg, a second multisig weighted by mining power and ANDed into the peg script — is the answer it offers to its own question. It names four ways a manufacturer could fail: a key leaked through a covert channel in ECDSA signatures, a backdoor colluding with functionaries, code that quietly skips the proof-of-work check, and a power-glitch side channel. Enumerating those is the point: they are precisely what the hardware layer cannot defend against, which is why another layer is argued for.
Minpeg has not shipped. RSKIP198 is Deferred. So is RSKIP207, the emergency time-lock refresh. The layers in the table above are the ones in force; this one is a design that answers a known gap and has not been deployed. The distinction matters — a deferred proposal is not a defence.
Two things that are not layers
Worth stating, because both get cited as security properties and neither is:
- Watchtowers are a convenience, not a defence. The term is used only for
peg-ins, where pegnatories inform the Bridge on a user's behalf — and it is
explicitly optional, since
the user issuing the peg-in transaction can inform RSK if the Powpeg members fail to
. It protects liveness, not funds. - There is no peg-out size or rate cap. The only cap described is on peg-ins, and it is a refund condition rather than a theft defence. Peg-out batching (RSKIP271) is motivated by cost and UTXO efficiency, not by limiting value at risk.
Where the idea came from
The instinct predates the PowPeg by four years. Arguing in 2016 that merge-mined
sidechains and drivechains have near-identical security — a mining majority can defraud
either — the conclusion drawn was to stop relying on one:
what RSK did to improve drivechains to have the 'pure' sidechain-like security is to add a
second layer of security: the requirement that cross-chain transactions are also signed by a
set of notaries
. Everything above is that move, repeated.
Sergio Demian Lerner, "Drivechains vs Sidechains", bitslog, 7 October 2016
Sergio Demian Lerner, "Armadillo: More Consensus Security for RSK", bitslog, 1 August 2019
Sergio Demian Lerner, "Measuring RSK Security", 6 April 2022
The next bridge changes the assumption
Everything above defends an honest-majority assumption as thoroughly as it can be defended. The Union bridge takes the other route: built on BitVMX, it aims to need only one honest participant, because a single honest party can challenge a false withdrawal and win. It is not a replacement yet — what runs on testnet today does not have the fraud proofs that would make that true — but it is where the peg is heading.
Checking it against outside opinion
Everything above is the design as its authors describe it, which is a necessary source and an interested one. Three independent readings are worth setting beside it:
- The only published audit of the signing hardware — NCC Group's 2022 powHSM assessment, which reported five low-severity findings and one informational, all fixed.
- Two Bitcoin-side reviewers walking through the federation-to-PowPeg change without a stake in it: Bitcoin, Explained, December 2020.
- A risk review written for someone deciding whether to deploy capital — LlamaRisk, for Aave governance, 2025, which rates the PowPeg against the weaker token bridge beside it.
More in the reading list, including the 2017 Trail of Bits review of rskj and both peg-out incident post-mortems. Note what is not there: no public audit of the Bridge contract itself appears to exist.
The federation right now
Do not send bitcoin to this address from your own wallet. A peg-in is not an ordinary payment, and this address does not stay the same. Either mistake loses the funds permanently.
The transaction has to have the right shape. Only two kinds of
sending address can pay the federation directly: legacy P2PKH
(starting 1) and SegWit-compatible
P2SH-P2WPKH (starting 3). A native
SegWit bc1… wallet cannot — the peg-in needs an
OP_RETURN output identifying the destination, and an ordinary wallet will
not add one. There is also a minimum of 0.005 BTC on mainnet, and
the Bridge waits 100 Bitcoin confirmations before crediting anything.
The address changes, and this page is a snapshot. It has already
changed 16 times — that is what the table below is a record
of. A handover has a grace period, and after it Rootstock's documentation is blunt about
what happens to bitcoin sent to the previous address: it
will be lost
. A retired federation address is watched by nobody. The only key
material that can ever move such funds is the time-locked emergency multisig, which by
RSKIP201 does not become spendable until the outputs have sat
untouched for a year — and even then nothing in the protocol credits
the sender with rBTC. See the emergency multisig below.
Instead: peg in with the
PowPeg App, which builds the transaction correctly and supports
address types a direct send cannot — or, if you are doing it by hand, read
getFederationAddress() off the Bridge yourself at the moment you send, and
never from a page like this one.
Rootstock developer docs — mainnet conversion guide: minimum amount and confirmation counts
These four figures are read live from the Bridge on a Rootstock mainnet node
(getFederationSize, getFederationThreshold,
getFederationAddress) and cross-checked against the reconstruction below.
If they ever disagreed, the collector would fail rather than publish either.
There is no retiring federation at the moment:
getRetiringFederationSize() answers −1, so no migration of funds is in
flight.
Rootstock's documentation says the PowPeg is expanding to 20 members after the
Reed upgrade, with plans for up to 60 total
. Reed activated on mainnet on
30 September 2025. As of 8 Nov 2026 the Bridge still reports
9 members, so that expansion has not happened yet
— the consensus rules allow it, the membership has not changed.
Every federation, from genesis
This table is not transcribed from anywhere. It is rebuilt from the Bridge's
commit_federation event, which fires on every handover and carries the
outgoing key set, the incoming key set and the height the new federation activates at.
Because each event names the set it replaces, the whole chain of handovers can be
checked rather than trusted: every outgoing set must equal the previous
incoming set. All 16 of them do.
Every address in the table below but the last is retired. They are published here as a record of what the peg has been, not as somewhere to send money. Bitcoin paid to a retired federation address is lost for the reasons set out above.
| # | Active from | to | Members | Signatures | Date active | Duration | Bitcoin address | Committed at |
|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 667,425 | 15 | 8 | genesis | — | not in event | — |
| 1 | 667,426 | 833,736 | 15 | 8 | 16 Aug 2018 | 62 d | not in event | 648,926 |
| 2 | 833,737 | 2,151,545 | 15 | 8 | 17 Oct 2018 | 499 d | not in event | 815,237 |
| 3 | 2,151,546 | 2,444,977 | 9 | 5 | 28 Feb 2020 | 108 d | not in event | 2,133,046 |
| 4 | 2,444,978 | 2,474,379 | 15 | 8 | 15 Jun 2020 | 11 d | 3JYaMbjuKXkURNpLpDDDWMzUcNMt2GreNc | 2,426,478 |
| 5 | 2,474,380 | 2,840,805 | 9 | 5 | 26 Jun 2020 | 133 d | 35JUi1FxabGdhygLhnNUEFG4AgvpNMgxK1 | 2,455,880 |
| 6 | 2,840,806 | 3,155,666 | 8 | 5 | 6 Nov 2020 | 118 d | 36FMFLxnv3JaykDNcqikpX9Pe1XVZW8gEZ | 2,822,306 |
| 7 | 3,155,667 | 4,671,280 | 13 | 7 | 4 Mar 2021 | 572 d | 39qrdxFmkP3bC7Qe74wE4VXemQzXzNHr1h | 3,137,167 |
| 8 | 4,671,281 | 4,998,798 | 9 | 5 | 27 Sep 2022 | 120 d | 3DsneJha6CY6X9gU2M9uEc4nSdbYECB4Gh | 4,652,781 |
| 9 | 4,998,799 | 5,568,001 | 9 | 5 | 25 Jan 2023 | 206 d | 35iEoWHfDfEXRQ5ZWM5F6eMsY2Uxrc64YK | 4,980,299 |
| 10 | 5,568,002 | 6,065,800 | 9 | 5 | 19 Aug 2023 | 173 d | 32Bhwee9FzQbuaG29RcXpdrvYnvZeMk11M | 5,527,682 |
| 11 | 6,065,801 | 7,069,805 | 9 | 5 | 8 Feb 2024 | 324 d | 3LxPz39femVBL278mTiBvgzBNMVFqXssoH | 6,025,481 |
| 12 | 7,069,806 | 7,226,593 | 9 | 5 | 28 Dec 2024 | 43 d | 3JENeNaLcG5MsHp3SzGsmJdTr3DSu8A2kA | 7,029,486 |
| 13 | 7,226,594 | 7,781,197 | 9 | 5 | 10 Feb 2025 | 156 d | 32gaHzxWgf4kXUt21TgeUzfkL9u3jQLXc6 | 7,186,274 |
| 14 | 7,781,198 | 8,147,321 | 9 | 5 | 15 Jul 2025 | 105 d | 3GQ87zLKyTygsRMZ1hfCHZSdBxujzKoCCU | 7,740,878 |
| 15 | 8,147,322 | 8,558,280 | 9 | 5 | 28 Oct 2025 | 118 d | 3LD8dqqRaF9cM72fsGj4QpPqsJp2mXNsMy | 8,107,002 |
| 16 | 8,558,281 | current | 9 | 5 | 23 Feb 2026 | 258 d | 3GX89qzyQVaJqUJjq5noZbLJEHuYDvVrHq | 8,517,961 |
Reading the table:
- Federation 0 is the set that signed before any handover — it is the first event's outgoing set, which is how the table reaches genesis without a special case.
- Committed at is the block where the handover was voted in. Active from is the later block where it took effect; the gap is the consensus-enforced delay, currently 40,320 blocks (about two weeks) under RSKIP383.
- The three earliest federations have no Bitcoin address because the pre-Iris event encoding carried only a hash160. The address column fills in from federation 4 onward, when RSKIP146 changed the event to the ABI encoding.
Two things stand out. The federation ran at 15 members from genesis until 28 Feb 2020, when it dropped to 9 — then briefly returned to 15 for 29,402 blocks (about 11 days) on 15 Jun 2020 before settling back. And it has held steady at 9 since 27 Sep 2022: 11 of the 17 federations have had that size, and the handovers since have rotated keys rather than changed the count.
How the threshold is set
The number of signatures a peg-out needs is not chosen per federation. It follows from the size by consensus rule:
M = floor(N / 2) + 1
So the observed sizes map to: 8→5, 9→5, 13→7, 15→8. The live Bridge reports 5 of 9, which is what the rule gives, and the collector re-checks that every run.
The Signatures column above is derived from this rule, not read
from the chain per federation. The Bridge only exposes getFederationThreshold()
for the current federation, and the historical state a direct query would need has
been pruned. The rule is verified against the live federation on every collection run, so if
it ever stopped holding the run would fail — but for historical rows this is a rule applied,
not a value observed.
Functionary keys over time
45 distinct public keys have been part of a Rootstock federation. 39 of them appear in more than one federation; the rest appear exactly once. The keys below are the ones that persisted longest.
| Public key (compressed) | Federations | First | Last |
|---|---|---|---|
| 03250c11be0561b1d7ae168b1f59e39cbc1fd1ba3cf4d2140c1a365b2723a2bf93 | 16 | 667,426 | current |
| 03ae72827d25030818c4947a800187b1fbcc33ae751e248ae60094cc989fb880f6 | 9 | 667,426 | 5,568,001 |
| 027319afb15481dbeb3c426bcc37f9a30e7f51ceff586936d85548d9395bcc2344 | 8 | 0 | 4,671,280 |
| 0372cd46831f3b6afd4c044d160b7667e8ebf659d6cb51a825a3104df6ee0638c6 | 8 | 0 | 4,671,280 |
| 03b53899c390573471ba30e5054f78376c5f797fda26dde7a760789f02908cbad2 | 8 | 0 | 4,671,280 |
| 03ecd8af1e93c57a1b8c7f917bd9980af798adeb0205e9687865673353eb041e8d | 8 | 667,426 | 4,998,798 |
| 0294c817150f78607566e961b3c71df53a22022a80acbb982f83c0c8baac040adc | 7 | 0 | 4,671,280 |
| 020ace50bab1230f8002a0bfe619482af74b338cc9e4c956add228df47e6adae1c | 7 | 4,671,281 | 8,147,321 |
| 03b65cd7c22e70c0823882c6e71ac2c279ed31cbe29cb4a1c00572ce539c0c4573 | 6 | 667,426 | 3,155,666 |
| 025093f439fb8006fd29ab56605ffec9cdc840d16d2361004e1337a2f86d8bd2db | 5 | 4,671,281 | 7,226,593 |
| 0275d473555de2733c47125f9702b0f870df1d817379f5587f09b6c40ed2c6c949 | 5 | 4,998,799 | 7,781,197 |
| 0328f0386fe2b2840a424d3a5073be89a4cb643c434752b8c865e867611d004183 | 5 | 7,069,806 | current |
A public key is not a person. The chain records keys; it does not record who holds them, and Rootstock does not publish a key-to-member mapping. Nothing on this page claims to connect the two.
PowHSM firmware versions
The PowHSM firmware is developed in the open at
rsksmart/rsk-powhsm. (rsksmart/powhsm, the name most
people guess, does not exist.) It runs on two very different platforms, and a single
PowPeg may mix them: Ledger Nano S devices, and
Intel SGX enclaves on servers. SGX support arrives in
5.4.0; everything before that is Ledger only.
The latest release is 5.6.2 (22 Jul 2026), out of 26 versions on record.
| Version | Release tag | Changelog | Platform | What changed |
|---|---|---|---|---|
| 5.6.2 | 2026-07-22 | — | Ledger Nano S, Intel SGX | no changelog entry |
| 5.6.1 | 2026-02-13 | 2025-11-10 differs | Ledger Nano S, Intel SGX | Unit tested powHSM main APDU processor |
| 5.6.0 | — | 2025-10-09 | Ledger Nano S, Intel SGX | Improved performance on SGX powHSM's advance blockchain and update ancestor operations |
| 5.5.1 | — | 2025-06-02 | Ledger Nano S, Intel SGX | Fixed middleware docker image build |
| 5.5.0 | — | 2025-05-27 | Ledger Nano S, Intel SGX | Introduced SGX firmware upgrades |
| 5.4.1 | — | 2025-02-07 | Ledger Nano S, Intel SGX | Unified pin/password policy across platforms |
| 5.4.0 | — | 2025-01-27 | Ledger Nano S, Intel SGX | Enhanced Ledger attestation scheme with additional information |
| 5.2.6 | 2026-07-22 | — | Ledger Nano S | no changelog entry |
| 5.2.5 | 2026-07-22 | — | Ledger Nano S | no changelog entry |
| 5.2.4 | 2025-06-12 | — | Ledger Nano S | no changelog entry |
| 5.2.2 | — | 2025-01-20 | Ledger Nano S | Implemented OSSF scorecard on CI |
| 5.2.1 | 2024-11-19 | 2024-11-14 differs | Ledger Nano S | Removed compilation products from repository |
| 5.2.0 | 2024-10-28 | 2024-09-09 differs | Ledger Nano S | Added "screen saver" mode to signer app to extend display lifetime |
| 5.1.0 | 2024-09-11 | 2024-07-01 differs | Ledger Nano S | Decoupled business and hardware layers in preparation for multiple platforms |
| 5.0.0 | — | 2024-04-09 | Ledger Nano S | Implemented authorised segwit transaction signing |
| 4.0.2 | 2023-12-01 | 2023-12-01 | Ledger Nano S | New signer upgrades wallet (Alpha) |
| 4.0.1 | — | 2023-06-14 | Ledger Nano S | Using Nanos SDK fork version 2 |
| 4.0.0 | 2023-02-08 | 2023-05-30 differs | Ledger Nano S | New Signer and UI heartbeat operations |
| 3.0.3 | 2023-01-09 | — | Ledger Nano S | no changelog entry |
| 3.0.2 | 2022-09-30 | — | Ledger Nano S | no changelog entry |
| 3.0.1 | 2022-09-28 | 2022-08-11 differs | Ledger Nano S | Standard ledger Ethereum app support in signer authorization generator |
| 3.0.0 | — | 2022-06-04 | Ledger Nano S | Considering uncles difficulty in "advanceBlockchain" operation |
| 2.3.8 | 2023-11-02 | — | Ledger Nano S | no changelog entry |
| 2.3.7 | 2023-08-04 | — | Ledger Nano S | no changelog entry |
| 2.3.6 | 2023-08-01 | — | Ledger Nano S | no changelog entry |
| 2.3.5 | 2022-09-28 | — | Ledger Nano S | no changelog entry |
The two sources disagree about the date of 6 versions. The GitHub release tag and the project's own CHANGELOG give different days — sometimes months apart, as with 5.6.1 (tagged 13 Feb 2026, changelog says 10 Nov 2025). Both columns are shown rather than one being quietly chosen. The release tag is the git fact; the changelog is what the authors recorded.
Attestation
Attestation is how a PowHSM proves what it is and what it is running, to someone who does not have to trust its operator. It answers two questions, depending on platform:
- Ledger: that this is a genuine Ledger Nano S, endorsed by Ledger's
own issuer key, running specific UI and Signer versions. The device's attestation keypair
signs a message that begins with a header naming the version — for example
HSM:UI:5.6— and the Signer's message beginsPOWHSM:5.6::. - SGX: that this is a genuine Intel SGX enclave running a specific
codebase, proved by an ECDSA DCAP quote chaining to Intel's root of trust. The powHSM
message is carried in the quote's
custom_data.
Either way the signed message includes the hash of the authorised public keys, the Rootstock best block hash the device has advanced to, and the last BTC transaction hash it was authorised to sign. So an attestation is not just "this firmware is genuine" — it is "this firmware is genuine and here is the chain state it believes in".
The attestation file is JSON. Version 1 is the Ledger shape, with
targets: ["ui","signer"]; version 2 is the SGX shape, with
targets: ["quote"]. Verification is a command in the repository:
# Ledger
python adm_ledger.py verify_attestation -t attestation.json \
-r <Ledger issuer public key> -b public-keys.json
# SGX
python adm_sgx.py verify_attestation -t attestation.json \
-r https://certificates.trustedservices.intel.com/Intel_SGX_Provisioning_Certification_RootCA.pem \
-b public-keys.json
It prints the installed UI hash and Signer version, or for SGX the installed
MRENCLAVE and MRSIGNER.
What each pegnatory actually publishes
These are not descriptions of attestations. Each row below is read from the signed attestation file that pegnatory publishes, together with the build parameters naming the firmware its device is running. 8 of the 9 federation members publish one.
| Member | Bridge index | Device | Firmware | Attestation | Key matches Bridge | Page |
|---|---|---|---|---|---|---|
| Earn | 0 | Ledger | signer 5.2.6 · ui 5.2.4 | 4 signed elements · 281 B of signatures | verified | attestation |
| pNetwork | 1 | Ledger | signer 5.2.6 · ui 5.2.5 | 4 signed elements · 282 B of signatures | verified | attestation |
| Luxor | 2 | Ledger | signer 5.2.6 · ui 5.2.1 | 4 signed elements · 281 B of signatures | verified | attestation |
| Constata | 4 | Ledger | signer 5.2.6 · ui 5.2.1 | 4 signed elements · 282 B of signatures | verified | attestation |
| RootstockLabs | 5 | Intel SGX | enclave 5.6.2 | 4 signed elements · 143 B of signatures | verified | attestation |
| RootstockCollective | 6 | Ledger | signer 5.2.6 · ui 5.2.1 | 4 signed elements · 282 B of signatures | verified | attestation |
| BlockVenture | 7 | Ledger | signer 5.2.6 · ui 5.2.4 | 4 signed elements · 283 B of signatures | verified | attestation |
| Sovryn | 8 | Ledger | signer 5.2.6 · ui 5.2.1 | 4 signed elements · 282 B of signatures | verified | attestation |
Two things are worth drawing out of that table.
The devices are not all the same.
7 pegnatories run a Ledger PowHSM; RootstockLabs
runs an Intel SGX enclave instead, which is a different platform with a
different root of trust — Intel's DCAP chain rather than Ledger's issuer key — and a
different attestation format (version 2, a quote, against version 1's
ui and signer). The Ledger devices agree on the Signer
build and differ only in UI version.
Bridge index 3 publishes nothing. The published attestations cover indexes 0, 1, 2, 4, 5, 6, 7, 8 of a federation of 9. The only member Rootstock names without an attestation page is Xapo Bank, which makes it the likely occupant of that slot — though nothing published says so outright, and that last step is inference rather than fact.
The Bitcoin public key in each attestation was checked against the Bridge at the index that member claims: 8 matched, 0 did not. This is the step that turns a list of names into something the chain backs — the Bridge holds keys and no names, so a member asserting "I am index 0" is only worth something once the key it attests to is the key sitting at that index.
Every file behind the table is linked from each member's page, and the
attestations can be verified independently with the command above. What is not
published is any history: each page shows the device's current state, with no record of
previous firmware or when it changed. Rootstock's page says future versions
will include periodic on-chain proofs
; today the proof is a file on a web server,
and this site re-reads it rather than quoting it.
rootstock.io — PowPeg, section 08 "Public proofs"
Attestations collected 9 Nov 2026 · how
Who holds devices
The chain knows 9 public keys. It does not know any names. The list below
is what Rootstock publishes, and it is the only published list — the
developer documentation declines to name anyone, saying only that
public operators include independent entities across mining, custody, DeFi, and
infrastructure
.
| Member | Domain | Sector | Bridge index |
|---|---|---|---|
| Luxor | luxor.tech | Mining | 2 |
| Earn | earn.network | Infrastructure | 0 |
| Constata | constata.eu | Infrastructure | 4 |
| pNetwork | p.network | Infrastructure | 1 |
| Sovryn | sovryn.app | DeFi | 8 |
| Xapo Bank | xapo.com | Custody | — |
| BlockVenture | blockventure.com | Infrastructure | 7 |
| RootstockLabs | rootstocklabs.com | Core | 5 |
| RootstockCollective | rootstockcollective.xyz | Community | 6 |
The count matches — Rootstock names 9 members and the Bridge reports 9 keys — and 8 of the 9 do say which key is theirs: each attestation names a bridge index, and the device's Bitcoin public key can be compared against the Bridge at that index. So the name-to-key mapping that the chain cannot provide on its own does exist, for all but one member, and it is checkable rather than merely asserted. The attestation table has it.
What is still missing is time. The list is undated — there is no "as of" on it, no record of when any member joined or left, and the federation has changed hands 16 times without a published announcement naming who went in or out. The attestations describe the set as it is now, not how it got here.
dev.rootstock.io — PowPeg member updates
How a member actually changes
Composition changes run in three phases, per the developer documentation:
- Voting. Each existing pegnatory can accept or reject the change.
- Delay. A consensus-enforced wait — RSKIP383 sets it at 40,320 blocks, about two weeks.
- Migration. Funds move from the old multisig to the new one.
Both the vote and the activation are visible in the table above: committed at is the vote landing, active from is the delay expiring.
The emergency multisig
RSKIP201 adds a time-locked escape hatch, in case
the majority of PowHSMs fail simultaneously
. It is a second branch in the peg's
Bitcoin script, spendable only after an OP_CSV timelock expires — so it cannot
race the normal path, only outlive its failure.
It was activated as part of the Iris upgrade. RSKIP225 requires each signatory to publish an emergency xpub and to prove possession of it, not more often than once a year.
Two details in RSKIP201 do not agree with each other, and one does not agree with rootstock.io:
- The threshold. The prose says
a 3-out-of-4 multisig
; the script listing immediately below showsOP_2, three public keys andOP_3— 2-of-3. The RSKIP does not reconcile them. - The timelock. The text says the value is
TBD, but it should correspond to one year
. The actual deployed value is not stated in the RSKIP. - The signatories. RSKIP201 lists IOVlabs, MoneyOnChain, Jameson Lopp and Adrian Eidelman. rootstock.io lists RootstockLabs, MoneyOnChain, Jameson Lopp and Adrian Eidelman — the same four, with IOV Labs under its later name.