Tags: 

  • andrewcrouse
    Participant
    Post count: 0

    <br> The thing that’s most appealing to me about bitcoin script as it stands (beyond “it works”) is that it’s really pretty simple in an engineering sense: it’s just a “forth” like system, where you put byte strings on a stack and have a few operators to manipulate them. You could also allow things to be pushed onto the stack that (recursively) can push things onto the stack — the language “Joy” takes this approach. Both those essentially give you a lisp-like language — lisp is obviously all about lists, and a binary tree is just made of things or pairs of things, and pairs of things are just another way of saying “car” and “cdr”. 0) 1 (if (l sigs) (if (checksig (f sigs) (f keys)) (checkmultisig (r sigs) (r keys) (- k 1)) (checkmultisig sigs (r keys) k) ) 0 ) ) Here each “sig” is a pair of a 64B bip340 signature and a 1B sighash; instead of a 65B string combining both, and sigs, keys are lists, and k is the number of successful signature checks you’re requiring for success. 100kB of serialized clvm code from a random block gzips to 60kB; optimising the serialization for small lists, and perhaps also for small literal numbers might be a feasible improvement; though it’s not clear to me how frequently serialization size would be the limiting factor for cost versus execution time or memory usage.<br>
    <br> And while I’ve never really coded in lisp at all, my understanding is that its biggest problems are all about doing things efficiently at large scales — but script’s problem space is for very small scale things, so there’s at least reason to hope that any problems lisp might have won’t actually show up for this use case. Granted, I’ve only really been looking at chia lisp for a bit over a week, but it really seems to me like a case where it might be worth putting that philosophy into practice. Seems worth looking into, at least. For example, rather than the streaming-sha256 approach in Elements, where you could write: “a” SHA256INITIALIZE “b” SHA256UPDATE “c” SHA256UPDATE “d” SHA256FINALIZE to get the sha256 of “abcd” without having to CAT them first (important if they’d potentially overflow the 520B stack item limit), in chia lisp you write: (sha256 “a” “b” “c” “d”) which still has the benefit of streaming the inputs into the function, but only adds a single opcode, doesn’t involve representing the internal sha256 midstate on the stack, and generally seems easier to understand, at least to me. To level-up from that, http://www.youtube.com instead of putting byte strings on a stack, you could have some other data structure than a stack — eg one that allows nesting.<br>
    <br> A particular advantage of lisp-like approaches is that they treat code and data exactly the same — so if we’re trying to leave the option open for a transaction to supply some unexpected code on the witness stack, then lisp handles that really naturally: you were going to include data on the stack anyway, and code and data are the same, so you don’t have to do anything special at all. One of the things people sometimes claim about bitcoin as an asset, is that it’s got both the advantage of having been first to market, but also that if some altcoin comes along with great new ideas, then those ideas can just be incorporated into bitcoin too, so bitcoin can preserve it’s lead even from innovators. Our script comes with the latest trading modules and robust security features. Determining an advanced blockchain network and listing multiple advanced features will cost you time and also reflects an increase in your investment value.<br>
    <br> However, whether you do or don’t support that softfork, as far as the rest of the script is concerned, the expression will either fail entirely or evaluate as zero; so anyone who doesn’t support the softfork can just replace it with zero and continue on, treating it as if it had costed “cost” units. The other is to use the “softfork” opcode — chia defines it as: (softfork cost code) though I think it would probably be better if it were (softfork cost version code) where the idea is that “code” will use the “x” opcode if there’s a problem, and anyone supporting the “version” softfork can verify that there aren’t any problems at a cost of “cost”. One approach is to just define a new version of the language via the tapleaf version, defining new opcodes however we like. Check out the latest stable Bitcoin Source Version. Oops, out of order footnotes. As you selected Market, your order should complete within a few seconds!<br>

You must be logged in to reply to this topic.