--- Log opened Thu Nov 14 00:00:08 2019 00:09 < jeremyrubin> aj: yeah the point is that you can later soft-fork in "constexpr" to mean a more generic thing, or even just soft-fork to make the constexpr requirement not checked at all. 00:36 < jeremyrubin> Interesting thought is that you can also make policy ignore the constexpr rule, while consensus only enforces if it is constexpr... This would present as being able to mess around with non-constexpr hashes at the mempool layer easily (and promote experimentation) . The reason this works is the constexpr rule only makes us reject more txs, never accept more... 00:37 < jeremyrubin> So would make it easy for experimentation to find use-cases where not having the constexpr rule lets you do something useful / demonstrate how it could introduce unintended behaviors (none that I'm aware) 01:01 -!- sipa [~pw@gateway/tor-sasl/sipa1024] has quit [Ping timeout: 260 seconds] 01:01 -!- sipa [~pw@gateway/tor-sasl/sipa1024] has joined #bitmetas 03:35 -!- andytoshi [~apoelstra@unaffiliated/andytoshi] has quit [Read error: Connection reset by peer] 04:51 -!- Netsplit *.net <-> *.split quits: jonatack 04:51 -!- Netsplit *.net <-> *.split quits: Madars, bsm117532 04:54 -!- Netsplit over, joins: jonatack, Madars, bsm117532 15:40 < aj> jeremyrubin: as coded, it's not even a soft-fork, it's just relaxing the standardness rules? 15:44 < jeremyrubin> hmm? 15:45 < jeremyrubin> aj: I must have miscommunicated something... it *is* a soft fork as coded right now, but it can be just a change to the standardness rules to make it more restrictive 15:48 < aj> jeremyrubin: in the CHECKTEMPLATEVERIFY code you linked, you've got two checks, one for top_of_stack_is_constexpr, one for size!=32, both predicated on DISCOURAGE_UPGRADABLE_NOPS; dropping the constexpr check would just be stdness changes and not allow anyone can spend stuff so no soft-fork needed? 15:48 < jeremyrubin> An example: we could reject the txn that has scriptSig: scriptPubKey: OP_CTV at the mempool as nonstandard, but accept it (unconditionally) in a block *if it shows up*. However, in order to make OP_CTV safe to rely on, we want to do a soft-fork such that <32 bytes> OP_CTV is rejected if invalid as consensus 15:50 < jeremyrubin> aj: incorrect, see above. If you just change it as standardness, then you can still have invalid stuff in ablock 15:50 < aj> oh, no, you've got a break in there that would need the soft fork to remove, right 15:50 < jeremyrubin> yes, correct 15:51 < jeremyrubin> It's a little confusing but I'm pretty sure it's correct 15:52 < jeremyrubin> essentially the opcode decays to a NOP if the arguments aren't passed correctly 15:52 < aj> https://twitter.com/Ethan_Heilman/status/1194624166093369345 15:53 < aj> ^-- if no one can come up with scary covenants for anyprevout/noinput and cat/checksigfromstack/elements-enabled-opcodes pretty sure it's impossible to come up with scary covenants for COSHV/STB/CTV/whatever 15:53 < jeremyrubin> yes I saw, the challenge actually originally came from a private chat with ethan (can I suggest adding Ethan and James Prestwich here btw) 15:53 < jeremyrubin> (summa and arwen both use a lot of advanced scripting techniques so they'd probably have good contributions) 15:54 < jeremyrubin> aj: I'd personally err on the side of "we can prove there is nothing scary about OP_CTV" than "we haven't found a scary use" 15:55 < jeremyrubin> but I like that as proposed, OP_CTV has a super easy path to lifting the restriction 15:55 < aj> btw, i thought there were a bunch of interesting taproot-merkle-tree constructs with COSHV, like you have one script path that pays lots of change to you and low fees, and another that lowers the change to increase the fees but adds a CSV/CLTV so it's only used if the low fee version doesn't confirm... did you have a clever way of preserving that with the OP_NOP approach? 15:55 < jeremyrubin> Yes 15:56 < aj> link/summary? 15:56 < jeremyrubin> OP_IF OP_CTV OP_ELSE

OP_CTV OP_ENDIF 15:56 < aj> oh, lame 15:56 < jeremyrubin> 3:) 15:57 < jeremyrubin> The "clever" way is that you can actually pick a merkle path by nesting the IFFs so the scripts aren't linear but log(n) 15:58 < jeremyrubin> OP_IF OP_CTV OP_ELSE

OP_CTV OP_ENDIF 15:58 < aj> yeah, sre 15:58 < aj> sure 15:58 < jeremyrubin> But it is a little unfortunate as it's easy to get into a stuck state if you roll to a bad branch 15:59 < jeremyrubin> But if we were to add OP_MERKLEPROVE or whatever it would be easier 15:59 < jeremyrubin> Fortunately, that can be soft-forked in as a OP_CTV version if really desired... but I think that OP_CTV + Taproot works well enough 16:00 < aj> yeah 16:01 < jeremyrubin> i think given that standardness rules can be less strict about constexpr rule, this kinda adresses roconnor's issues around this making parsing weird 16:02 < aj> yeah, i think tracking pushed data vs calculated data is much more straightforward personally 16:03 -!- meshcollider [meshcollid@quantumznc.com] has quit [Ping timeout: 268 seconds] 16:10 < jeremyrubin> The only loss is that if we wanted to treat OP_CTV different from OP_CTV, but thorough nack on that possibility from me :p 16:17 -!- andytoshi [~apoelstra@wpsoftware.net] has joined #bitmetas 16:17 -!- andytoshi [~apoelstra@wpsoftware.net] has quit [Changing host] 16:17 -!- andytoshi [~apoelstra@unaffiliated/andytoshi] has joined #bitmetas 16:36 < jeremyrubin> https://github.com/JeremyRubin/bitcoin/commit/ffb0634f398944c20ebe62f61d730c9034d23c0b 16:37 < jeremyrubin> This is what it looks like to have an additional strictness setting for standard scripts 16:38 < jeremyrubin> i also made some changes to make it a bit more clear what the code for versioning the element to check should look like 17:11 -!- jl2012 [sid133844@gateway/web/irccloud.com/x-uqtmhlsozrjrnlmh] has quit [Ping timeout: 252 seconds] 17:12 -!- jl2012 [sid133844@gateway/web/irccloud.com/x-fkfmnrjqfafofqbw] has joined #bitmetas 19:16 -!- andytoshi [~apoelstra@unaffiliated/andytoshi] has quit [Remote host closed the connection] 21:07 -!- meshcollider [meshcollid@quantumznc.com] has joined #bitmetas 22:34 -!- instagibbs_ [~instagibb@pool-71-178-191-230.washdc.fios.verizon.net] has joined #bitmetas 22:38 -!- Netsplit *.net <-> *.split quits: instagibbs --- Log closed Fri Nov 15 00:00:09 2019