def test_nulldata3() -> None: err_msg = "invalid nulldata payload length: " with pytest.raises(BTClibValueError, match=err_msg): payload = "00" * 81 ScriptPubKey.nulldata(payload) # wrong data length: 32 in 35-bytes nulldata script; # it should have been 33 script_pub_key = serialize(["OP_RETURN", b"\x00" * 33]) script_pub_key = script_pub_key[:1] + b"\x20" + script_pub_key[2:] assert not is_nulldata(script_pub_key) # wrong data length: 32 in 83-bytes nulldata script; # it should have been 80 script_pub_key = serialize(["OP_RETURN", b"\x00" * 80]) script_pub_key = script_pub_key[:2] + b"\x20" + script_pub_key[3:] assert not is_nulldata(script_pub_key) # missing OP_PUSHDATA1 (0x4c) in 83-bytes nulldata script, # got 0x20 instead script_pub_key = serialize(["OP_RETURN", b"\x00" * 80]) script_pub_key = script_pub_key[:1] + b"\x20" + script_pub_key[2:] assert not is_nulldata(script_pub_key) assert len(serialize(["OP_RETURN", b"\x00" * 75])) == 77 assert len(serialize(["OP_RETURN", b"\x00" * 76])) == 79 script_pub_key = serialize(["OP_RETURN", b"\x00" * 76])[:-1] assert not is_nulldata(script_pub_key)
def test_nulldata() -> None: OP_RETURN = b"\x6a" # pylint: disable=invalid-name # self-consistency string = "time-stamped data" payload = string.encode() script_pub_key = serialize(["OP_RETURN", payload]) assert script_pub_key == ScriptPubKey.nulldata(string).script # back from the script_pub_key to the payload assert ("nulldata", payload) == type_and_payload(script_pub_key) # data -> payload in this case is invertible (no hash functions) assert payload.decode("ascii") == string assert address(script_pub_key) == "" # documented test cases: https://learnmeabitcoin.com/guide/nulldata string = "hello world" payload = string.encode() assert payload.hex() == "68656c6c6f20776f726c64" # pylint: disable=no-member script_pub_key = OP_RETURN + var_bytes.serialize(payload) assert script_pub_key == ScriptPubKey.nulldata(string).script assert ("nulldata", payload) == type_and_payload(script_pub_key) # documented test cases: https://learnmeabitcoin.com/guide/nulldata string = "charley loves heidi" payload = string.encode() assert (payload.hex() # pylint: disable=no-member == "636861726c6579206c6f766573206865696469") script_pub_key = OP_RETURN + var_bytes.serialize(payload) assert script_pub_key == ScriptPubKey.nulldata(string).script assert ("nulldata", payload) == type_and_payload(script_pub_key) # documented test cases: https://learnmeabitcoin.com/guide/nulldata string = "家族も友達もみんなが笑顔の毎日がほしい" payload = string.encode() assert ( payload.hex() # pylint: disable=no-member == "e5aeb6e6978fe38282e58f8be98194e38282e381bfe38293e381aae3818ce7ac91e9a194e381aee6af8ee697a5e3818ce381bbe38197e38184" ) script_pub_key = OP_RETURN + var_bytes.serialize(payload) assert script_pub_key == ScriptPubKey.nulldata(string).script assert ("nulldata", payload) == type_and_payload(script_pub_key)