On Wed, Oct 23, 2013 at 08:08:22PM -0400, Peter Todd wrote: > On Thu, Oct 24, 2013 at 01:33:20AM +0200, GrazCoin wrote:
>
> You're problem is probably this transaction:
> ebc9fa1196a59e192352d76c0f6e73167046b9d37b8302b6bb6968dfd279b767
>
> It has scriptPubKey's that contain truncated PUSHDATA opcodes. Blocks
> with invalid scriptPubKeys *are* allowed as there is nothing in the
> reference client that checks the contents of a scriptPubKey until it is
> spent, with the one exception that sigops in scriptPubKeys are counted
> even though they aren't evaluated. (Satoshi made a mistake there IMO)
Oh, while we're at it, your count_non_push() and is_push_only()
functions are both wrong in a way that can lead to a fork. It might be a
learning experience for you guys to figure out why...
I'll say it again: full alt-implementations are bloody dangerous. The
right thing to do is take the reference implementation source code,
strip out everything that isn't directly related to the consensus
algorithm, and make it into a stand-alone library. Once you've done
that, you can make any change you want fairly safely, but we're all
better off if we leave the core consensus-critical code untouched.
FWIW, even *networking* isn't really consensus-critical, and would
benefit from more diverse implementations; there is a heck of a lot of
room to make an alt-implementation of everything but that tiny consensus
kernel.