Replying to Avatar nick

But many addresses are a hash of the public key, so we cannot validate the public keys when transactions are paying money to them. For these addresses it is impossible to filter based on public key until it is revealed, at time of spending, which requires them to be real and not spam!

Though I haven't thought about this wrt P2TR, and was somewhat surprised to see point validity isn't enforced:

https://github.com/bitcoin/bitcoin/pull/24106

I think id rather the spammers use invalid secp points! A nice broom to have up the sleeve? Can easily patch into a node to sweep out all the invalid ones from the utxoset.

It is super easy to generate these "fake" secp256k1 points which are valid:

02b33fb33fb33fb33fb33fb33fb33fb33fb33fb33fb33fb33fb33fb33fb33fb33f

```rust

use rand::{RngCore, thread_rng};

use secp256kfun::{

Point, hex,

marker::{NonZero, Public},

};

fn main() {

let mut rng = thread_rng();

let hex_str = "b33fb33fb33fb33fb33fb33fb33fb33fb33fb33fb33fb33fb33fb33fb33f";

let hex_bytes = hex::decode(hex_str).expect("invalid hex string");

loop {

let mut random_bytes = [0u8; 64];

rng.fill_bytes(&mut random_bytes);

let my_point_bytes = {

let mut bytes = [0u8; 33];

bytes[0] = 0x02; // start with 02

let hex_len = hex_bytes.len().min(32);

bytes[1..1 + hex_len].copy_from_slice(&hex_bytes[0..hex_len]);

// fill the rest with random bytes

if hex_len < 32 {

bytes[1 + hex_len..33].copy_from_slice(&random_bytes[0..32 - hex_len]);

}

bytes

};

let point = Point::<_, Public, NonZero>::from_bytes(my_point_bytes);

match point {

Some(valid_point) => {

println!("Random valid point: {:?}", valid_point);

}

None => {

eprintln!("Invalid point from bytes: {}", hex::encode(&my_point_bytes));

}

}

}

}

```

Making the pubkey curve‑valid doesn’t bypass the fix, because once every key has to sit on secp256k1, spammers must brute‑force each payload byte, turning their zero‑cost UTXO bloat into an exponentially expensive grind

Reply to this note

Please Login to reply.

Discussion

No replies yet.