Skip to content

Commit 91cc88c

Browse files
authored
Merge pull request #551 from rsksmart/rskip551
RSKIP551 - Disable RSKIP459
2 parents 0c37091 + 48653c1 commit 91cc88c

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

IPs/RSKIP551.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
---
2+
rskip: 551
3+
title: Deprecate RSKIP459
4+
created: 18-MAR-26
5+
author: MI
6+
purpose: Usa
7+
layer: Core
8+
complexity: 1
9+
status: Draft
10+
description:
11+
---
12+
13+
|RSKIP |551 |
14+
| :------------ |:-------------|
15+
|**Title** |Deprecate RSKIP459 |
16+
|**Created** |18-MAR-26 |
17+
|**Author** |MI |
18+
|**Purpose** |Usa |
19+
|**Layer** |Core |
20+
|**Complexity** |1 |
21+
|**Status** |Draft |
22+
23+
## Abstract
24+
25+
This RSKIP deprecates RSKIP459 [[1]](#references). The Bridge will mark a peg-in transaction as processed only when a fund transfer has been completed: either RBTC is transferred to the receiver (accepted peg-in) or BTC is refunded to the sender (rejected but refundable). Rejected, unrefundable peg-ins will not be marked as processed.
26+
27+
## Motivation
28+
29+
Under RSKIP459 [[1]](#references), the Bridge marks rejected, unrefundable peg-ins as processed so that rejection events are emitted only once. That approach requires the Bridge to store and track these transactions even though no fund transfer occurs—neither RBTC minted nor BTC refunded. This adds unnecessary entries to Bridge storage for transactions that will never result in any fund movement.
30+
31+
A more efficient design is for the Powpeg node to filter which transactions it informs the Bridge about. The Powpeg node can determine before contacting the Bridge whether a peg-in would be accepted, rejected but refundable, or rejected and unrefundable. By not informing the Bridge about transactions that are known to be non-processable (e.g. unrefundable rejected peg-ins), the Bridge avoids storing them and only holds state for transactions where a fund transfer has been or will be completed. The Bridge then marks as processed only those peg-ins where funds are actually transferred: RBTC to the receiver (accepted) or BTC refunded to the sender (rejected but refundable). Rejected, unrefundable peg-ins are not marked as processed and, under normal operation, are not submitted to the Bridge by the Powpeg node; re-emission of unrefundable events would only occur if a user manually attempts to register such a transaction.
32+
33+
## Specification
34+
35+
The behaviour specified in RSKIP459 [[1]](#references) is deprecated. The following rules apply instead.
36+
37+
When a peg-in is **rejected and unrefundable**, the Bridge must **not** mark the transaction as processed after emitting the `rejected_pegin` and `unrefundable_pegin` events. The transaction may therefore be re-registered and the events re-emitted on later processing attempts.
38+
39+
When a peg-in is **accepted**, the transaction is marked as processed (unchanged). When a peg-in is **rejected but refundable**, the transaction is marked as processed after the refund (unchanged).
40+
41+
In summary:
42+
43+
| Outcome | Fund transfer | Mark as processed |
44+
|--------|----------------|-------------------|
45+
| Accepted peg-in | RBTC transferred to receiver | Yes |
46+
| Rejected, refundable | BTC refunded to sender | Yes |
47+
| Rejected, unrefundable | None | No |
48+
49+
### Powpeg node behaviour
50+
51+
The Powpeg node should be updated so that it does **not** inform the Bridge about transactions that are known to be non-processable (e.g. peg-ins that would be rejected and unrefundable). Under normal operation, the Bridge would therefore only receive such transactions if a user manually attempts to register them. As a result, the emission of unrefundable events and any duplication would in practice occur only in that manual-registration scenario.
52+
53+
## Rationale
54+
55+
### Semantic consistency
56+
57+
"Processed" is defined as "the Bridge has completed a fund transfer for this transaction." Unrefundable rejections involve no such transfer, so they should not be marked processed. This keeps one clear meaning and avoids overloading the flag for downstream systems that interpret "processed" as "funds have been moved."
58+
59+
## Backwards Compatibility
60+
61+
This change is a hard fork and therefore all full nodes must be updated.
62+
63+
## References
64+
65+
[1] [RSKIP459](https://github.com/rsksmart/RSKIPs/blob/master/IPs/RSKIP459.md): Mark rejected peg-ins as processed
66+
67+
[2] [RSKIP181](https://github.com/rsksmart/RSKIPs/blob/master/IPs/RSKIP181.md): Peg-in rejection events
68+
69+
### Copyright
70+
71+
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ You can find an easily browseable version of this information [here](https://ips
252252
| 540 |[Bridge method `getEstimatedFeesForNextPegOutEvent` improvements and new parameterized method](IPs/RSKIP540.md)| 04-DEC-2025 | MI | Usa | Core | 1 | Draft |
253253
| 543 |[Implement EIP-2718 Typed Transactions in Rootstock](IPs/RSKIP543.md)| 05-JAN-2026 | PDG, SM | Sca, Usa | Core | 2 | Draft |
254254
| 544 |[Reject new contract code starting with the `0xEF` byte](IPs/RSKIP544.md)| 05-JAN-2026 | PDG, SM | Usa | Core | 1 | Draft |
255+
| 551 |[Deprecate RSKIP459](IPs/RSKIP551.md)| 18-MAR-26 | MI | Usa | Core | 1 | Draft |
255256

256257
# Author Index
257258

0 commit comments

Comments
 (0)