# RPIP-31 - RPL Withdrawal Address

**URL:** <https://dao.rocketpool.net/t/rpip-31-rpl-withdrawal-address/2251>\
**Category:** Node Operator Experience\
**Created:** [4 October 2023 22:08 UTC](https://dao.rocketpool.net/t/rpip-31-rpl-withdrawal-address/2251 "2023-10-04T22:08:41Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![kane](https://dao.rocketpool.net/user_avatar/dao.rocketpool.net/kane/32/131_2.png) [@kane](https://dao.rocketpool.net/u/kane)\
**Post date:** [4 October 2023 22:08 UTC](https://dao.rocketpool.net/t/rpip-31-rpl-withdrawal-address/2251/1 "2023-10-04T22:08:41Z")

</div>

This is a discussion thread for RPIP-31.

A proposal to add an additional withdrawal address that is the target for RPL bond withdrawals and RPL reward claims. Essentially there will be two withdrawal addresses: one for ETH; and one for RPL. The RPL withdrawal address will default to the ETH withdrawal address.

> <https://github.com/rocket-pool/RPIPs/blob/main/RPIPs/RPIP-31.md>

---

<div class="post-metadata">

**Author:** ![Wander](https://dao.rocketpool.net/user_avatar/dao.rocketpool.net/wander/32/833_2.png) [@Wander](https://dao.rocketpool.net/u/Wander)\
**Post date:** [4 October 2023 23:12 UTC](https://dao.rocketpool.net/t/rpip-31-rpl-withdrawal-address/2251/2 "2023-10-04T23:12:36Z")

</div>

Great stuff, thanks @kane!

> As a node operator, I MUST be able to confirm the RPL withdrawal address from the new target address before it takes effect, to ensure it is the correct address

Could this be an optional feature? Otherwise it adds an extra transaction for automated workflows like Constellation:

tx 1) Deploy node  
tx 2) Set RPL withdrawal address to external contract  
tx 3) Call external contract to request verification

Would be nice to remove step 3 via e.g. a parameter `skipConfirm` as true in step 2.

This is also the case for setting the current “primary” withdrawal address and it would be a nice little optimization to add in there, too. I don’t think this is really a security issue since the user would explicitly be requesting to skip confirmation. Another option for the sake of extra safety might be to just allow skipping confirmation on nodes with no minipools.

---

<div class="post-metadata">

**Author:** ![kane](https://dao.rocketpool.net/user_avatar/dao.rocketpool.net/kane/32/131_2.png) [@kane](https://dao.rocketpool.net/u/kane)\
**Post date:** [4 October 2023 23:18 UTC](https://dao.rocketpool.net/t/rpip-31-rpl-withdrawal-address/2251/3 "2023-10-04T23:18:54Z")

</div>

Yep, the intent was that it will be optional just like it currently is with the standard withdrawal address with the `confirm` argument.

The wording is “I MUST be able to confirm” not “I MUST confirm”. If you think that’s ambiguous, we can update the wording.

---

<div class="post-metadata">

**Author:** ![Wander](https://dao.rocketpool.net/user_avatar/dao.rocketpool.net/wander/32/833_2.png) [@Wander](https://dao.rocketpool.net/u/Wander)\
**Post date:** [4 October 2023 23:20 UTC](https://dao.rocketpool.net/t/rpip-31-rpl-withdrawal-address/2251/4 "2023-10-04T23:20:45Z")

</div>

Makes sense! Thanks for clarifying. I was reading fast and didn’t notice those two little words that make all the difference 🙂

---

<div class="post-metadata">

**Author:** ![mryamz](https://dao.rocketpool.net/letter_avatar_proxy/v4/letter/m/47e85d/32.png) [@mryamz](https://dao.rocketpool.net/u/mryamz)\
**Post date:** [12 October 2023 00:37 UTC](https://dao.rocketpool.net/t/rpip-31-rpl-withdrawal-address/2251/5 "2023-10-12T00:37:44Z")

</div>

Any chance this code will work for the update? [[Feature] Enable Node's Withdrawal Address to Withdraw RPL by mryamz · Pull Request #282 · rocket-pool/rocketpool · GitHub](https://github.com/rocket-pool/rocketpool/pull/282/files)

It currently passes all existing tests and works within our own integration with RocketPool

---

<div class="post-metadata">

**Author:** ![kane](https://dao.rocketpool.net/user_avatar/dao.rocketpool.net/kane/32/131_2.png) [@kane](https://dao.rocketpool.net/u/kane)\
**Post date:** [18 October 2023 02:34 UTC](https://dao.rocketpool.net/t/rpip-31-rpl-withdrawal-address/2251/6 "2023-10-18T02:34:17Z")

</div>

I believe this is covered under these points or am I mistaken and there is something else you’re requesting?

- As the controller of the RPL withdrawn from a node, I MUST be able to call `RocketNodeStaking.withdrawRPL()` to withdraw excess RPL
  - If a node’s RPL withdrawal address is unset, the call MUST come from one of: the node’s primary withdrawal address, or the node’s address
  - If a node’s RPL withdrawal address is set, the call MUST come from the current RPL withdrawal address

---

<div class="post-metadata">

**Author:** ![ramana](https://dao.rocketpool.net/user_avatar/dao.rocketpool.net/ramana/32/100_2.png) [@ramana](https://dao.rocketpool.net/u/ramana)\
**Post date:** [29 October 2023 08:34 UTC](https://dao.rocketpool.net/t/rpip-31-rpl-withdrawal-address/2251/7 "2023-10-29T08:34:38Z")

</div>

RPIP LGTM. I note that this by the way solves an existing problem with the contracts, even if the new RPL withdrawal address is not used. Namely, after this change, if the RPL withdrawal address is unset, then the primary withdrawal address can withdraw RPL (not just the node account address). (Also any workflows depending on the node account’s ability to withdraw RPL will be thwarted once an RPL withdrawal address is set.)

---

<div class="post-metadata">

**Author:** ![langers](https://dao.rocketpool.net/user_avatar/dao.rocketpool.net/langers/32/92_2.png) [@langers](https://dao.rocketpool.net/u/langers)\
**Post date:** [18 November 2023 00:58 UTC](https://dao.rocketpool.net/t/rpip-31-rpl-withdrawal-address/2251/8 "2023-11-18T00:58:59Z")

</div>

Moving this to sentiment poll.

> **[RPIP-31: RPL Withdrawal Address](https://rpips.rocketpool.net/RPIPs/RPIP-31)**
>
> Adds an additional withdrawal address that facilitates splitting ETH bond and rewards from RPL bond and rewards

_Poll ([view on site](https://dao.rocketpool.net/t/rpip-31-rpl-withdrawal-address/2251/8))_

---

<div class="post-metadata">

**Author:** ![langers](https://dao.rocketpool.net/user_avatar/dao.rocketpool.net/langers/32/92_2.png) [@langers](https://dao.rocketpool.net/u/langers)\
**Post date:** [30 November 2023 02:48 UTC](https://dao.rocketpool.net/t/rpip-31-rpl-withdrawal-address/2251/9 "2023-11-30T02:48:46Z")

</div>

This RPIP has been moved to **Review** in preparation for finalisation.

Please provide any last community feedback here.

> **[RPIP-31: RPL Withdrawal Address](https://rpips.rocketpool.net/RPIPs/RPIP-31)**
>
> Adds an additional withdrawal address that facilitates splitting ETH bond and rewards from RPL bond and rewards

---

<div class="post-metadata">

**Author:** ![Valdorff](https://dao.rocketpool.net/user_avatar/dao.rocketpool.net/valdorff/32/319_2.png) [@Valdorff](https://dao.rocketpool.net/u/Valdorff)\
**Post date:** [1 December 2023 02:16 UTC](https://dao.rocketpool.net/t/rpip-31-rpl-withdrawal-address/2251/10 "2023-12-01T02:16:30Z")

</div>

Reviewed. Minor oddity to me was that, when RPL address is unset, modifying the allowlist for RPL staking has to come from the node address (and can’t come from the primary withdrawal address). Not a big enough deal that I’m pushing for an edit here.

---

<div class="post-metadata">

**Author:** ![langers](https://dao.rocketpool.net/user_avatar/dao.rocketpool.net/langers/32/92_2.png) [@langers](https://dao.rocketpool.net/u/langers)\
**Post date:** [1 December 2023 06:41 UTC](https://dao.rocketpool.net/t/rpip-31-rpl-withdrawal-address/2251/11 "2023-12-01T06:41:31Z")

</div>

> [@Valdorff](#):
>
> Minor oddity to me was that, when RPL address is unset, modifying the allowlist for RPL staking has to come from the node address (and can’t come from the primary withdrawal address).

We have just matched the current behaviour in this case. I do agree that it might be useful to be able to set it from the withdrawal address, but also like that it is locked down to the node.

As we haven’t had any strong feedback, in the time the feature has been live, that people want that I would like to leave it as it is.

---

<div class="post-metadata">

**Author:** ![Patches](https://dao.rocketpool.net/user_avatar/dao.rocketpool.net/patches/32/121_2.png) [@Patches](https://dao.rocketpool.net/u/Patches)\
**Post date:** [11 December 2023 22:28 UTC](https://dao.rocketpool.net/t/rpip-31-rpl-withdrawal-address/2251/12 "2023-12-11T22:28:14Z")

</div>

I’m voting in favor.

An optional separate withdrawal address improves the protocol’s composability without complicating anything for existing users.
