permute_tx: don't save permutation map.

We no longer need it anywhere.  This simplifies things to the point where
we might as well just not include dust outputs as we go, rather than
explicitly removing them, which gets rid of remove_dust.c as well.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell
2016-08-18 14:23:46 +09:30
parent dca6c8efc1
commit 23f9c7c209
10 changed files with 44 additions and 135 deletions

View File

@@ -2,32 +2,6 @@
#include <stdbool.h>
#include <string.h>
static void init_map(int *map, size_t len)
{
size_t i;
if (!map)
return;
for (i = 0; i < len; i++)
map[i] = i;
}
/* This map says where things ended up, eg. 0 might be in slot 3. we
* want to change it so map[0] = 3. */
static void invert_map(int *map, size_t len)
{
if (map) {
int i, newmap[len];
memset(newmap, 0, sizeof(newmap));
for (i = 0; i < len; i++) {
newmap[map[i]] = i;
}
memcpy(map, newmap, sizeof(newmap));
}
}
static bool input_better(const struct bitcoin_tx_input *a,
const struct bitcoin_tx_input *b)
{
@@ -59,56 +33,35 @@ static size_t find_best_in(struct bitcoin_tx_input *inputs, size_t num)
return best;
}
static void swap_inputs(struct bitcoin_tx_input *inputs, int *map,
size_t i1, size_t i2)
static void swap_inputs(struct bitcoin_tx_input *inputs, size_t i1, size_t i2)
{
struct bitcoin_tx_input tmpinput;
size_t tmpidx;
tmpinput = inputs[i1];
inputs[i1] = inputs[i2];
inputs[i2] = tmpinput;
if (map) {
tmpidx = map[i1];
map[i1] = map[i2];
map[i2] = tmpidx;
}
}
void permute_inputs(struct bitcoin_tx_input *inputs,
size_t num_inputs,
int *map)
void permute_inputs(struct bitcoin_tx_input *inputs, size_t num_inputs)
{
size_t i;
init_map(map, num_inputs);
/* Now do a dumb sort (num_inputs is small). */
for (i = 0; i < num_inputs; i++) {
/* Swap best into first place. */
swap_inputs(inputs, map,
swap_inputs(inputs,
i, i + find_best_in(inputs + i, num_inputs - i));
}
invert_map(map, num_inputs);
}
static void swap_outputs(struct bitcoin_tx_output *outputs, int *map,
static void swap_outputs(struct bitcoin_tx_output *outputs,
size_t i1, size_t i2)
{
struct bitcoin_tx_output tmpoutput;
size_t tmpidx;
tmpoutput = outputs[i1];
outputs[i1] = outputs[i2];
outputs[i2] = tmpoutput;
if (map) {
tmpidx = map[i1];
map[i1] = map[i2];
map[i2] = tmpidx;
}
}
static bool output_better(const struct bitcoin_tx_output *a,
@@ -144,20 +97,14 @@ static size_t find_best_out(struct bitcoin_tx_output *outputs, size_t num)
return best;
}
void permute_outputs(struct bitcoin_tx_output *outputs,
size_t num_outputs,
int *map)
void permute_outputs(struct bitcoin_tx_output *outputs, size_t num_outputs)
{
size_t i;
init_map(map, num_outputs);
/* Now do a dumb sort (num_outputs is small). */
for (i = 0; i < num_outputs; i++) {
/* Swap best into first place. */
swap_outputs(outputs, map,
swap_outputs(outputs,
i, i + find_best_out(outputs + i, num_outputs - i));
}
invert_map(map, num_outputs);
}