mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 15:14:23 +01:00
bcli: Avoid tal_fmt when handling a raw hex block
We were using `tal_fmt` to truncate off the last byte of the response (newline), which required an allocation, a call to `vsnprintf` and a copy of the block contents. This being >2MB in size on mainnet was rather expensive. We now just signal the end of the string by overwriting the trailing newline, and stealing directly onto the result.
This commit is contained in:
@@ -618,9 +618,9 @@ static struct command_result *process_getrawblock(struct bitcoin_cli *bcli)
|
||||
struct json_stream *response;
|
||||
struct getrawblock_stash *stash = bcli->stash;
|
||||
|
||||
/* -1 to strip \n. */
|
||||
stash->block_hex = tal_fmt(stash, "%.*s",
|
||||
(int)bcli->output_bytes-1, bcli->output);
|
||||
/* -1 to strip \n and steal onto the stash. */
|
||||
bcli->output[bcli->output_bytes-1] = 0x00;
|
||||
stash->block_hex = tal_steal(stash, bcli->output);
|
||||
|
||||
response = jsonrpc_stream_success(bcli->cmd);
|
||||
json_add_string(response, "blockhash", stash->block_hash);
|
||||
|
||||
Reference in New Issue
Block a user