-
narodnik
what's the issue with upgrading curves? you just have old and new type keys running alongside each other
-
narodnik
you could also just create a merkle witness proof using the current bulletproofs system
-
narodnik
by engineering poseidon hash into a circuit
-
narodnik
imagine if monero implements this, then the anonymity set is practically infinite, and there will be zero competition for monero
-
narodnik
that way you wouldn't need to upgrade the curves (if that's a big issue)
-
andytoshi
narodnik: lol supporting two entirely separate crypto stacks, forever, would be an impossible mantinance burden
-
andytoshi
you'd also have to add special transaction types to handle conversions between the two curves
-
andytoshi
and you'd need the ability to do membership proofs over sets containing points on both curves, which may negate the benefits of the new curve
-
andytoshi
(maybe. but even answering this is a nontrivial crypto question)
-
UkoeHB
I think the main problem would be doing cross-curve balance checks
-
UkoeHB
everything else can be isolated
-
andytoshi
yeah, if you could use both curves within a single transaction
-
andytoshi
maaybe in monero land you could get away with a hf that basically said "we're using the new curve, the only thing you're allowed to do with your old/existing coins is convert them" but that would be really invasive
-
UkoeHB
it's not too different from what seraphis would/will do
-
UkoeHB
the address scheme would break anyway
-
UkoeHB
not that breaking the address scheme a second time would be appealing at all..
-
narodnik
andytoshi: people can upgrade from old coins to new ones, it's not a big deal but would be a much welcome change that puts monero on firm competitive ground
-
narodnik
literally the main critique of monero is anon set size. imagine if that is solved. then monero would solve the biggest issue, and might become finally a large mcap project if it could pull this off
-
narodnik
you can eventually phase out the old stack using checkpoints
-
narodnik
but ok lets say you don't want to use a new curve
-
narodnik
why not then introduce arithmetization using the current bulletproofs?
-
narodnik
then code a membership proof using circuits
-
narodnik
-
tevador
what would be the rough size and verification time for such a proof?
-
narodnik
i can write a benchmark in rust with zcash halo2 API, where it does 32 poseidon hashes
-
narodnik
i think they normally use sinsemilla though for merkle trees
-
narodnik
it's mainly dependent on the number of rows, which is a power of 2 always due to 2-adicity of the group
-
andytoshi
i'd also be very curious about the benchmark numbers
-
andytoshi
i agree with you that if monero could get an "effectively infinite" anon set without a trusted setup or weird crypto assumptions, that'd be a game changer
-
narodnik
my computer is lagging a huge amount so will restart one sec for the benchmark
-
andytoshi
cool! tho don't rush on my part, i almost never contribute to this project and don't have time to help anytime soon
-
narodnik
proof verify [0.018967216 s]
-
narodnik
here's the benchmark
-
narodnik
code i hastily threw together just now
-
narodnik
-
narodnik
-
narodnik
-
narodnik
this is using bulletproofs for inner product proof, so there's no trusted setup
-
narodnik
it proves that $leaf has a pathway to $root without revealing the exact path
-
narodnik
0.019 secs
-
xmrack[m]
narodnik: how does this compare to the current implementation?
-
narodnik
idk but this tree has a size of 2^32, while current ring size is 128?
-
tevador
19 ms is not bad at all. What is the proof size?
-
narodnik
let me check
-
narodnik
6403 bytes
-
tevador
I think the seraphis membership proof is something like 800-ish bytes
-
narodnik
so an 8x size increase for 33554432x increase in anonymity set
-
narodnik
seems worth it
-
tevador
definitely worth looking into, would be nice if the proof was compatible with the seraphis masked key, then it'd be pretty much plug and play
-
narodnik
it's pretty much just defining a polynomial relation to prove the merkle tree inclusion, then committing to that using the bulletproofs scheme
-
narodnik
given a and b are boolean ints, you can arithmetize them as so:
-
narodnik
a AND b = ab
-
narodnik
a OR b = a + b - ab
-
narodnik
NOT a = 1 - a
-
narodnik
then we convert our algo to that format, and we construct polynomials that interpolate those points, then commit and open it using bulletproofs
-
UkoeHB
this is what a seraphis-compatible membership proof needs to do:
-
UkoeHB