mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-02-22 22:45:27 +01:00
lightnind: dev-sign-last-tx RPC command for testing penalty txs.
We don't normally let daemons send invalid txs. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
cbe72b658e
commit
5957dd9303
1 changed files with 53 additions and 3 deletions
|
@ -94,7 +94,7 @@ static void peer_reconnect(struct peer *peer)
|
|||
try_reconnect, peer);
|
||||
}
|
||||
|
||||
static void drop_to_chain(struct peer *peer)
|
||||
static void sign_last_tx(struct peer *peer)
|
||||
{
|
||||
const tal_t *tmpctx = tal_tmpctx(peer);
|
||||
u8 *funding_wscript;
|
||||
|
@ -123,11 +123,16 @@ static void drop_to_chain(struct peer *peer)
|
|||
&peer->channel_info->remote_fundingkey,
|
||||
&local_funding_pubkey);
|
||||
|
||||
tal_free(tmpctx);
|
||||
}
|
||||
|
||||
static void drop_to_chain(struct peer *peer)
|
||||
{
|
||||
sign_last_tx(peer);
|
||||
|
||||
/* Keep broadcasting until we say stop (can fail due to dup,
|
||||
* if they beat us to the broadcast). */
|
||||
broadcast_tx(peer->ld->topology, peer, peer->last_tx, NULL);
|
||||
|
||||
tal_free(tmpctx);
|
||||
}
|
||||
|
||||
void peer_fail_permanent(struct peer *peer, const u8 *msg)
|
||||
|
@ -1627,6 +1632,51 @@ void peer_last_tx(struct peer *peer, struct bitcoin_tx *tx,
|
|||
peer->last_tx = tal_steal(peer, tx);
|
||||
}
|
||||
|
||||
static void json_sign_last_tx(struct command *cmd,
|
||||
const char *buffer, const jsmntok_t *params)
|
||||
{
|
||||
jsmntok_t *peertok;
|
||||
struct peer *peer;
|
||||
struct json_result *response = new_json_result(cmd);
|
||||
u8 *linear;
|
||||
|
||||
if (!json_get_params(buffer, params,
|
||||
"id", &peertok,
|
||||
NULL)) {
|
||||
command_fail(cmd, "Need id");
|
||||
return;
|
||||
}
|
||||
|
||||
peer = peer_from_json(cmd->ld, buffer, peertok);
|
||||
if (!peer) {
|
||||
command_fail(cmd, "Could not find peer with that id");
|
||||
return;
|
||||
}
|
||||
if (!peer->last_tx) {
|
||||
command_fail(cmd, "Peer has no final transaction");
|
||||
return;
|
||||
}
|
||||
|
||||
log_debug(peer->log, "dev-sign-last-tx: signing tx with %zu outputs",
|
||||
tal_count(peer->last_tx->output));
|
||||
sign_last_tx(peer);
|
||||
linear = linearize_tx(cmd, peer->last_tx);
|
||||
|
||||
json_object_start(response, NULL);
|
||||
json_add_hex(response, "tx", linear, tal_len(linear));
|
||||
json_object_end(response);
|
||||
command_success(cmd, response);
|
||||
}
|
||||
|
||||
static const struct json_command dev_sign_last_tx = {
|
||||
"dev-sign-last-tx",
|
||||
json_sign_last_tx,
|
||||
"Sign and return the last commitment transaction",
|
||||
"Sign last transaction with peer @id, return as @tx."
|
||||
" This should never be called outside testing!"
|
||||
};
|
||||
AUTODATA(json_command, &dev_sign_last_tx);
|
||||
|
||||
/* Is this better than the last tx we were holding? */
|
||||
static bool better_closing_fee(struct peer *peer, const struct bitcoin_tx *tx)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue