< Chris_Stewart_5> instagibbs: Do you think it could be used to implement some sort of waiting mechanism in a while loop eventually? I get that looping is currently disabled but if it is brought back an OP_NOP could be useful
< gmaxwell> no.
< gmaxwell> Chris_Stewart_5: nops were _never_ a 'waiting' mechenism, they were explicitly added for forward extensibility.
< Chris_Stewart_5> gmaxwell: Back to my original question then, why is OP_NOP treated differently than the other OP_NOPs, specifically why is allowed by the DISCOURAGE_UPGRADABLE_NOPS flag?
< gmaxwell> Chris_Stewart_5: because there were already people creating them in the network.
< Guest2012> d
< GitHub99> [bitcoin] rustyrussell opened pull request #7863: getblockchaininfo: make bip9_softforks an object, not an array. (master...bip9-status-as-object) https://github.com/bitcoin/bitcoin/pull/7863
< jonasschnelli> hmm...
< jonasschnelli> sync_mempool() in the RPC tests does actually check the order of the transaction in the mempool
< jonasschnelli> replacing with RBF seems to result in different orders in the mempools.
< jonasschnelli> And sync_mempool only proceeds if the mempool set is _identical_
< gmaxwell> A test for bitcoin core slavishly enforcing exact behavior? It couldn't be!
< jonasschnelli> gmaxwell is right (as always). My debugging is wrong (as always).
< sipa> those sync_* functions in the test could probably just be replaced with a ping RPC and then observing getpeerinfo until the pong returns
< * jonasschnelli> made a new personal sync record
< sipa> lmdb?
< jonasschnelli> Sync from random peers in 2h and 20'.
< jonasschnelli> Lmdb will follow now... this is just the basepoint to compare after
< sipa> ok
< sipa> sync from a random peer is very variable though
< jonasschnelli> 2h20' is standard --disable-debug
< jonasschnelli> sipa: Yes. I know,... i might connect to another node in the same net for performance benchmark...
< gmaxwell> hm. that sounds like something wrong.
< gmaxwell> since I have numbers substantially higher on very fast hosts with gbe between them. :)
< sipa> jonasschnelli: this test was not done over the daylight savings time switchover, right? :)
< jonasschnelli> no. Its just a brand new server.
< jonasschnelli> Intel(R) Xeon(R) CPU E3-1275 v5 @ 3.60GHz
< jonasschnelli> 64GB Ram and 1gb/s SSD
< jonasschnelli> though, RAID 1
< sipa> how high is dbcache?
< jonasschnelli> ./src/bitcoind --dbcache=8000 --maxmempoolsize=1000
< sipa> the disk won't matter in that case :)
< jonasschnelli> Yes. Thats true.. maybe the log writing. :)
< jonasschnelli> (because its so fast)
< jonasschnelli> And the server is totally quite ("nothing" runs on it besides bitcoind)
< sipa> quiet?
< jonasschnelli> quite in terms of running applications
< gmaxwell> ah 3.6GHz. okay then that translates to my best number assuming we're bottlenecked on a single core.
< sipa> we really need better parallellism for validation across blocks...
< gmaxwell> (I have a benchmark time with big dbcache on the 24-core 2.4GHz host of about 3.5hr as of two days ago)
< gmaxwell> no real difference in speed local vs network.
< sipa> gmaxwell: on a 24-core machine, have you benchmarked whether higher or lower -par works better?
< gmaxwell> doubt it matters much. I think when you wrote that code I was benchmarking it on 32 way host and found that it didn't improve after 8 or so, and you capped the code out at .. uh 16? With libsecp256k1 that effect it likely worse.
< GitHub165> [bitcoin] RyanKung opened pull request #7864: Qa: some code style reflected for pep8 (master...dev/rk) https://github.com/bitcoin/bitcoin/pull/7864
< ryankung> ...
< jonasschnelli> lmdb, 10% progress in 20mins. Will probably be a little bit slower...
< ryankung> I just reflected the python testcase code into pep8 code style.
< ryankung> some
< GitHub74> [bitcoin] jonasschnelli opened pull request #7865: [RPC] Add bumpfee command. (master...2016/04/rbf_combined) https://github.com/bitcoin/bitcoin/pull/7865
< GitHub182> [bitcoin] jonasschnelli closed pull request #7159: [RPC] Add RBF opt-in possibilities to rawtx functions (master...2015/12/rpc_rbf) https://github.com/bitcoin/bitcoin/pull/7159
< GitHub179> [bitcoin] jonasschnelli closed pull request #7824: Add uncontroversial RBF base features (master...2016/04/rbf_uncontroversial) https://github.com/bitcoin/bitcoin/pull/7824
< GitHub47> [bitcoin] RyanKung closed pull request #7864: Qa: some code style reflected for pep8 (master...dev/rk) https://github.com/bitcoin/bitcoin/pull/7864
< jonasschnelli> ryankung: thanks for the work! Once the python3 pr is merge, you should reopen you PR
< ryankung> ok :)
< electrumuser> Hi, quick confirmation, does the scriptSig contain the sigtype after the signature?, I mean, I have transactions being rejected because signature is too short, I've been comparing the raw tx from two wallets spending the same input, and I noticed that signatures get appended a 01 byte, I can't find documentation about it. But I suspect it might be SIGHASH_ALL, am I correct?
< sipa> that's corrrect
< sipa> -r
< electrumuser> Thank you very much sipa.
< cjcj_> '
< GitHub119> [bitcoin] sipa pushed 2 new commits to master: https://github.com/bitcoin/bitcoin/compare/934f2b5e7693...514993554c37
< GitHub119> bitcoin/master bf477bc Jorge Timón: Trivial: Globals: Explicitly pass const CChainParams& to ProcessMessage()
< GitHub119> bitcoin/master 5149935 Pieter Wuille: Merge #7828: Trivial: Globals: Explicitly pass const CChainParams& to ProcessMessage()...
< GitHub176> [bitcoin] sipa closed pull request #7828: Trivial: Globals: Explicitly pass const CChainParams& to ProcessMessage() (master...0.12.99-chainparams-trivial) https://github.com/bitcoin/bitcoin/pull/7828
< jonasschnelli> lmdb seems a lot slower (at least on the machine I'm benching)
< jonasschnelli> 6.5h for 76% IBD
< sipa> against random peers?
< sipa> or from local network
< sipa> with dbcache=8000 the database used should have nearly 0 effect
< jonasschnelli> sipa: random peers, dbcache=9000
< jonasschnelli> (I made it higher than the 8GB lmdb fix-size)
< jonasschnelli> Block download speed looks not after the bottleneck...
< jonasschnelli> CPU is running at 645.3%
< sipa> maybe it was earlier on
< sipa> if you're syncing from random peers, i'd at least want to see an average over a few dozen runs to draw conclusions
< sipa> you're including a totally uncontrollable variable into your test setuo by doing so
< jonasschnelli> sipa: Yes. Agreed. My idea was to do a reindex once its done to exclude the variable of download
< jonasschnelli> Also when I download from one of my other nodes,... the other node does also run stuff in background.. gitian, etc.
< sipa> reindex is a better benchmark yes, but with dbcache=8000, i doubt you'll see much difference :)
< jonasschnelli> sipa: I'll give you the prove...
< sipa> ok :)
< Chris_Stewart_5> Where does bitcoin core mark the script invalid if there are too many script opts in a OP_IF branch that is not executed
< Chris_Stewart_5> I'm looking at this right now, but I don't see how that would mark a script invalid if the ops are not executed
< Chris_Stewart_5> unless OP_IF operators are run through the interpreter even if the stack top is not true..
< sipa> why would they not?
< sipa> how would the interpreter even know what the operators are, without going through them
< sipa> like, how would it find the endif?
< Chris_Stewart_5> Most PLs don't execute code inside of OP_IF branches, isn't it simply discarded? Why would this be different?
< sipa> conceptually, sure
< sipa> but if you write and if branch in a program, it's still compiled
< sipa> the result is still part of the program
< Chris_Stewart_5> Why not delete all operators until OP_ELSE
< sipa> it's not gone
< sipa> how can you 'delete' them without going through them?
< Chris_Stewart_5> or OP_ENDIF if there is no OP_ELSE
< sipa> how will you find where the OP_ENDIF is?
< Chris_Stewart_5> Search the list for it?
< sipa> there is no more efficient way to do that than to just iterate through the operators :)
< Chris_Stewart_5> Am I confusing implementation of the language with the language itself?
< sipa> no, we're only talking about the implementation of the interpreter
< Chris_Stewart_5> what does vfExec stand for in english?
< sipa> vector of booleans named Exec
< Chris_Stewart_5> or what does it represent in the interpreter
< sipa> and there is one entry in that vector for each IF you're inside
< Chris_Stewart_5> sipa: Also what if the control structure of the program is encoded as a binary tree
< sipa> well it isn't
< sipa> it's a byte array
< Chris_Stewart_5> You can ignore the OP_IF branch by simply making the right branch (assumedly the OP_ELSE branch) the new root tree
< sipa> but the program is not represented as branches
< sipa> it's just a vector of bytes
< Chris_Stewart_5> is this one of those things that is too risky to change for fear of unintended consensus changes?
< sipa> hell yes
< Chris_Stewart_5> gotcha.
< Chris_Stewart_5> So if I'm understanding this correctly, vfExec is just a vector of bools indicating if an OP_IF has matched it's OP_ENDIF?
< sipa> no, it's a vector of booleans saying whether you're in the executed side of the branch
< Chris_Stewart_5> ok. Thanks
< sipa> fun fact: you can create an ifthen .... else .... else .... else .... endif branch in bitcoin script