mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-18 22:54:25 +01:00
lightningd: only allow closing to native segwit
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Changelog-Removed: JSON-RPC: `close` `destination` no longer allows p2pkh or p2sh addresses (deprecated v0.11.0)
This commit is contained in:
@@ -48,9 +48,9 @@ static bool is_valid_witnessprog(const u8 *scriptpubkey)
|
|||||||
|
|
||||||
bool valid_shutdown_scriptpubkey(const u8 *scriptpubkey,
|
bool valid_shutdown_scriptpubkey(const u8 *scriptpubkey,
|
||||||
bool anysegwit,
|
bool anysegwit,
|
||||||
bool anchors)
|
bool allow_oldstyle)
|
||||||
{
|
{
|
||||||
if (!anchors) {
|
if (allow_oldstyle) {
|
||||||
if (is_p2pkh(scriptpubkey, NULL)
|
if (is_p2pkh(scriptpubkey, NULL)
|
||||||
|| is_p2sh(scriptpubkey, NULL))
|
|| is_p2sh(scriptpubkey, NULL))
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -16,8 +16,11 @@
|
|||||||
* - if the `scriptpubkey` is not in one of the above forms:
|
* - if the `scriptpubkey` is not in one of the above forms:
|
||||||
* - SHOULD send a `warning`
|
* - SHOULD send a `warning`
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* We still allow them to specify an old-style P2PKH or P2SH (though we
|
||||||
|
* never will send such a thing!) if they're not using anchors. */
|
||||||
bool valid_shutdown_scriptpubkey(const u8 *scriptpubkey,
|
bool valid_shutdown_scriptpubkey(const u8 *scriptpubkey,
|
||||||
bool anysegwit,
|
bool anysegwit,
|
||||||
bool anchors);
|
bool allow_oldstyle);
|
||||||
|
|
||||||
#endif /* LIGHTNING_COMMON_SHUTDOWN_SCRIPTPUBKEY_H */
|
#endif /* LIGHTNING_COMMON_SHUTDOWN_SCRIPTPUBKEY_H */
|
||||||
|
|||||||
@@ -315,7 +315,7 @@ static void peer_got_shutdown(struct channel *channel, const u8 *msg)
|
|||||||
* - if the `scriptpubkey` is not in one of the above forms:
|
* - if the `scriptpubkey` is not in one of the above forms:
|
||||||
* - SHOULD send a `warning`.
|
* - SHOULD send a `warning`.
|
||||||
*/
|
*/
|
||||||
if (!valid_shutdown_scriptpubkey(scriptpubkey, anysegwit, anchors)) {
|
if (!valid_shutdown_scriptpubkey(scriptpubkey, anysegwit, !anchors)) {
|
||||||
u8 *warning = towire_warningfmt(NULL,
|
u8 *warning = towire_warningfmt(NULL,
|
||||||
&channel->cid,
|
&channel->cid,
|
||||||
"Bad shutdown scriptpubkey %s",
|
"Bad shutdown scriptpubkey %s",
|
||||||
|
|||||||
@@ -724,11 +724,11 @@ static struct command_result *json_close(struct command *cmd,
|
|||||||
channel->peer->their_features,
|
channel->peer->their_features,
|
||||||
OPT_SHUTDOWN_ANYSEGWIT);
|
OPT_SHUTDOWN_ANYSEGWIT);
|
||||||
if (!valid_shutdown_scriptpubkey(channel->shutdown_scriptpubkey[LOCAL],
|
if (!valid_shutdown_scriptpubkey(channel->shutdown_scriptpubkey[LOCAL],
|
||||||
anysegwit, !deprecated_apis)) {
|
anysegwit, false)) {
|
||||||
/* Explicit check for future segwits. */
|
/* Explicit check for future segwits. */
|
||||||
if (!anysegwit &&
|
if (!anysegwit &&
|
||||||
valid_shutdown_scriptpubkey(channel->shutdown_scriptpubkey
|
valid_shutdown_scriptpubkey(channel->shutdown_scriptpubkey
|
||||||
[LOCAL], true, !deprecated_apis)) {
|
[LOCAL], true, false)) {
|
||||||
return command_fail(cmd, JSONRPC2_INVALID_PARAMS,
|
return command_fail(cmd, JSONRPC2_INVALID_PARAMS,
|
||||||
"Peer does not allow v1+ shutdown addresses");
|
"Peer does not allow v1+ shutdown addresses");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1364,7 +1364,7 @@ static void handle_peer_wants_to_close(struct subd *dualopend,
|
|||||||
* - if the `scriptpubkey` is not in one of the above forms:
|
* - if the `scriptpubkey` is not in one of the above forms:
|
||||||
* - SHOULD send a `warning`
|
* - SHOULD send a `warning`
|
||||||
*/
|
*/
|
||||||
if (!valid_shutdown_scriptpubkey(scriptpubkey, anysegwit, anchors)) {
|
if (!valid_shutdown_scriptpubkey(scriptpubkey, anysegwit, !anchors)) {
|
||||||
u8 *warning = towire_warningfmt(NULL,
|
u8 *warning = towire_warningfmt(NULL,
|
||||||
&channel->cid,
|
&channel->cid,
|
||||||
"Bad shutdown scriptpubkey %s",
|
"Bad shutdown scriptpubkey %s",
|
||||||
|
|||||||
@@ -311,7 +311,7 @@ static void set_remote_upfront_shutdown(struct state *state,
|
|||||||
= tal_steal(state, shutdown_scriptpubkey);
|
= tal_steal(state, shutdown_scriptpubkey);
|
||||||
|
|
||||||
if (shutdown_scriptpubkey
|
if (shutdown_scriptpubkey
|
||||||
&& !valid_shutdown_scriptpubkey(shutdown_scriptpubkey, anysegwit, anchors))
|
&& !valid_shutdown_scriptpubkey(shutdown_scriptpubkey, anysegwit, !anchors))
|
||||||
peer_failed_err(state->pps,
|
peer_failed_err(state->pps,
|
||||||
&state->channel_id,
|
&state->channel_id,
|
||||||
"Unacceptable upfront_shutdown_script %s",
|
"Unacceptable upfront_shutdown_script %s",
|
||||||
|
|||||||
Reference in New Issue
Block a user