Ich fand heraus, es war wegen einer Präzision Fehler in unserem code. Die Menge, die verwendet wird, um die Eingabe segwit Transaktion ist falsch, führt zu diesem Fehler. ich bin nur ein Benutzer von ubuntu, die ich nicht bekannt, etwas über informatik daher in diesem Stadium kann ich dir nicht helfen, irgendwie.. hoffe, Sie finden jemanden, der Ihnen helfen kann, zu Ihrem Projekt Viele dieser Ansätze funktionieren besser, wenn die Schokolade kalt ist; es ist härter, aber spröder dann. Sie können kombiniert werden: Meißel gegenüber einem groove, und wenn das nicht funktioniert, setzen Sie es über eine Kante und snap. @Robert - ich kann nicht sehen, die Haare auf dem Rücken, dass man aus dem Garten entweder - scheint auch zu haben, nach oben gebogen oder fehlenden Beinen an der front. Deins sieht fetter, die möglicherweise zeigen Sie auf chafer eher als japanische Käfer, sicher nicht. Meine Bemerkung über die "dirt" war keine Kritik, übrigens - weil die meisten Menschen nicht sagen, wo Sie sind, keine Ahnung, in den text Ihrer Frage ist nützlich!

(disclaimer: ich arbeite auf Bitcoin Core)

Wie Luca schon erwähnt, man muss unterscheiden wallet-Implementierungen und die voll überprüfen der Knoten im Netzwerk.

Weil, wie Satoshi schrieb seinen code (ein Knoten und eine Geldbörse im gleichen Programm), die beiden werden oft verwechselt, aber dies wird als eine schlechte Idee jetzt. Sie können vollkommen unabhängig voneinander funktionieren können. Der Referenz-client ' s Portemonnaie ist nur einer von mehreren Brieftaschen jetzt, und sicherlich nicht die am häufigsten verwendeten oder in eine privilegierte position.

Wenn wir reden über die Validierung auf das Netzwerk, die Dinge sind komplexer. Bitcoin ist eine Konsens-system, wo alle Knoten im Netzwerk müssen in der Lage sein, selbstständig zu beurteilen, die Gültigkeit von Blöcken, und kommen zu dem exakt gleichen Schluss wie jeder andere auch. Wenn zwei Knoten sich uneinig über die Gültigkeit von Blöcken, ignorieren Sie die anderen (unter Berücksichtigung der jeweils anderen Blöcke als Angriffe). Wenn zwei Gruppen von Knoten mit unterschiedlichen Regeln, haben beide mining-power, eine Gabel, wo beide Gruppen glauben, Sie sind die einzigen, die rund um. Das ist eine Katastrophe, da es bedeutet, dass jede Münze, die existierten, bevor die Gabel kann ausgegeben werden, sobald auf jeder Seite.

So, die Regeln des Netzes sind diejenigen, die voller Knoten implementieren. Wir können versuchen, tun, beschreiben Sie das Verhalten, aber nicht verschreiben. Wenn die Regeln geschrieben würde, unten in einige eindeutige formale Dokument, und einen Unterschied gefunden werden zwischen den Regeln und der Umsetzung, könnten wir sagen, die Umsetzung hat ein bug... aber neue Knoten im Netzwerk kopieren müsste, dass der Fehler dennoch.

Leider reimplementing dieser Regeln ist nicht trivial. Viele Menschen, die versucht haben, haben dabei tatsächlich entdeckt weirdnesses in was wird als gültig angesehen, durch die Referenz-client, und waren zuvor nicht bekannt. Zum Beispiel, Bitcoin setzt auf OpenSSL für die Signatur-Verifizierung, und die frühen Versionen nur weitergegeben, was gefunden wurde in Transaktionen zu OpenSSL. Stellt sich heraus, dass OpenSSL akzeptiert tatsächlich falsch codierte Signaturen zu einem gewissen Grad. Ohne es zu wissen, mehrere wallet-Umsetzung erschienen im Laufe der Zeit, dass solcher Signaturen (Sie sind akzeptiert, Sie muss gültig sein, richtig?). Dies bedeutet, dass alle neuen voll Validierung Knoten-Anwendung müssen entweder Sie nutzen OpenSSL-auch, oder imitieren Sie genau durch die Annahme der exakt gleichen Menge der ungültigen Kodierungen. Es wurden Fortschritte in Richtung macht diese Unterschriften ungültig (seit 0.8, Sie sind nicht mehr weitergeleitet), aber eigentlich ungültig, Bedarf es einer koordinierten soft-Gabel der Konsens-Regeln (EDIT: dies geschah am 4. Juli 2015 mit BIP66 aktiviert wird).

Beispiele wie das macht mich sehr unsicher, ob exakte Nachbau ist möglich mit dem aktuellen Stand der Technik. Das ist sicherlich zum Teil aufgrund der Umsetzung details, die in der Referenz-client, sondern auch wegen des harten Konsens-Systeme sind. Es gibt unit-tests für mehrere Teile der Logik-und Netzwerk-Interaktions-test simuliert, dass mehrere seltsame Sonderfälle, um zu sehen, wie ein Knoten antwortet, aber Sie sind bei weitem nicht vollständig (vor allem, weil vielleicht nicht alle Grenzfälle sind auch perfekt verstanden). Unterschiede sind kaum Sachen gefunden, die durch stichprobenartige Tests.

Meiner Meinung nach, sollten wir das Ziel auf die Modularisierung der Referenz-client-code, und die Abstraktion der Konsens-Kritischer Teil in eine Bibliothek, so dass es wiederverwendet werden kann von mehreren clients ohne diese Risiken. Das wird zwangsläufig lange dauern, obwohl.