10:24:54 what's the issue with upgrading curves? you just have old and new type keys running alongside each other 10:26:21 you could also just create a merkle witness proof using the current bulletproofs system 10:26:29 by engineering poseidon hash into a circuit 10:27:55 imagine if monero implements this, then the anonymity set is practically infinite, and there will be zero competition for monero 10:29:13 that way you wouldn't need to upgrade the curves (if that's a big issue) 14:52:44 narodnik: lol supporting two entirely separate crypto stacks, forever, would be an impossible mantinance burden 14:53:04 you'd also have to add special transaction types to handle conversions between the two curves 14:53:46 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 14:54:13 (maybe. but even answering this is a nontrivial crypto question) 14:55:37 I think the main problem would be doing cross-curve balance checks 14:55:51 everything else can be isolated 14:55:54 yeah, if you could use both curves within a single transaction 14:55:59 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 14:56:47 it's not too different from what seraphis would/will do 14:57:08 the address scheme would break anyway 14:58:12 not that breaking the address scheme a second time would be appealing at all.. 19:04:36 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 19:05:16 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 19:05:59 you can eventually phase out the old stack using checkpoints 19:06:47 but ok lets say you don't want to use a new curve 19:06:59 why not then introduce arithmetization using the current bulletproofs? 19:07:12 then code a membership proof using circuits 19:11:21 https://github.com/darkrenaissance/darkfi/blob/master/script/research/halo/halo2.sage 19:12:29 what would be the rough size and verification time for such a proof? 19:13:15 i can write a benchmark in rust with zcash halo2 API, where it does 32 poseidon hashes 19:13:43 i think they normally use sinsemilla though for merkle trees 19:15:24 it's mainly dependent on the number of rows, which is a power of 2 always due to 2-adicity of the group 19:21:59 i'd also be very curious about the benchmark numbers 19:22:22 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 19:23:28 my computer is lagging a huge amount so will restart one sec for the benchmark 19:31:12 cool! tho don't rush on my part, i almost never contribute to this project and don't have time to help anytime soon 20:14:14 proof verify [0.018967216 s] 20:14:19 here's the benchmark 20:14:57 code i hastily threw together just now 20:14:58 https://agorism.dev/uploads/zk.rs 20:15:10 https://agorism.dev/uploads/inclusion_proof.zk 20:15:19 https://agorism.dev/uploads/output.txt 20:16:13 this is using bulletproofs for inner product proof, so there's no trusted setup 20:16:54 it proves that $leaf has a pathway to $root without revealing the exact path 20:17:18 0.019 secs 20:18:47 narodnik: how does this compare to the current implementation? 20:29:56 idk but this tree has a size of 2^32, while current ring size is 128? 20:36:36 19 ms is not bad at all. What is the proof size? 20:48:49 let me check 20:52:01 6403 bytes 20:54:45 I think the seraphis membership proof is something like 800-ish bytes 21:27:27 so an 8x size increase for 33554432x increase in anonymity set 21:27:34 seems worth it 21:34:50 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 21:56:10 it's pretty much just defining a polynomial relation to prove the merkle tree inclusion, then committing to that using the bulletproofs scheme 21:56:51 given a and b are boolean ints, you can arithmetize them as so: 21:56:55 a AND b = ab 21:57:02 a OR b = a + b - ab 21:57:06 NOT a = 1 - a 21:58:02 then we convert our algo to that format, and we construct polynomials that interpolate those points, then commit and open it using bulletproofs 22:40:28 this is what a seraphis-compatible membership proof needs to do: 22:40:30 https://github.com/monero-project/research-lab/issues/100#issuecomment-1115448487