Fehlerbehebung bei der Signierung/Verifizierung von pybitcointools-Transaktionen

Ich habe mehrere Probleme damit, Tests erfolgreich unter meinem Fork (oder vbuterins pybitcointools ) auszuführen , und ich hoffe, dass jemand mit kombinierten Python-/Bitcoin-Kenntnissen einen Einblick geben kann.

Hier ist die Fehlermeldung (wie an #145 übermittelt ):

======================================================================
FAIL: test_all (__main__.TestTransaction)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/private/var/mobile/Containers/Shared/AppGroup/AA78F2EC-3EE8-40F4-A318-8A9AB1BCB5FF/Pythonista3/Documents/pybitcointools-vbuterin/test.py", line 179, in test_all
    self.assertTrue(verify_tx_input(tx1, 0, mscript, sig1, pubs[1]), "Verification Error")
AssertionError: Verification Error

======================================================================
FAIL: test_all (__main__.TestTransactionSignVerify)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/private/var/mobile/Containers/Shared/AppGroup/AA78F2EC-3EE8-40F4-A318-8A9AB1BCB5FF/Pythonista3/Documents/pybitcointools-vbuterin/test.py", line 133, in test_all
    "Verification error"
AssertionError: Verification error

----------------------------------------------------------------------
Ran 18 tests in 6.944s

FAILED (failures=2, errors=2)

Ich habe eine Vermutung, dass dies mit der Einführung von low_s(dh s = N-s if s>N//2 else s) für die ECDSA-Signierung zu tun hat, kann mir aber nicht sicher sein.

Kann jemand darauf hinweisen, wo die Dinge in die Irre gehen?

Können Sie einen Unterschied zwischen Ihrem Zweig und dem von vbuterin posten?
@JimmySong git gehört nicht zu meinen Stärken (und verwende derzeit iOS für Python), also ist es machbar, aber können Sie sich daran erinnern, wie ich einen Unterschied zwischen meinem HEAD und dem Master von vbuterin mache?
git remote add vbuterin git@github.com:vbuterin/pybitcointools. Dann git fetch vbuterin. Dann git diff vbuterin/master.

Antworten (1)

Okay, ich habe es herausgefunden.

Es gab ein Problem mit dem Wert von vin vrs( vdas Versionsbyte und r/ sdie DER-Werte). Da ves nicht durch DER-Signaturen codiert ist, schlug die Überprüfung 27 <= v <= 34fehl, da die Nichtkenntnis des vWerts manchmal den Wert , oder verfordern würde .None01