使用python django的比特币google协议缓冲区错误?缺少序列化的\u付款\u详细信息
这是我的问题伙计们 我初始化协议文件,如bitcoin for developers wiki所示,如下所示:使用python django的比特币google协议缓冲区错误?缺少序列化的\u付款\u详细信息,python,django,serialization,protocol-buffers,bitcoin,Python,Django,Serialization,Protocol Buffers,Bitcoin,这是我的问题伙计们 我初始化协议文件,如bitcoin for developers wiki所示,如下所示: package payments; option java_package = "org.bitcoin.protocols.payments"; option java_outer_classname = "Protos"; message Output { optional uint64 amount = 1 [default = 0]; requ
package payments;
option java_package = "org.bitcoin.protocols.payments";
option java_outer_classname = "Protos";
message Output {
optional uint64 amount = 1 [default = 0];
required bytes script = 2;
}
message PaymentDetails {
optional string network = 1 [default = "test"];
repeated Output outputs = 2;
required uint64 time = 3;
optional uint64 expires = 4;
optional string memo = 5;
optional string payment_url = 6;
optional bytes merchant_data = 7;
}
message PaymentRequest {
optional uint32 payment_details_version = 1 [default = 1];
optional string pki_type = 2 [default = "none"];
optional bytes pki_data = 3;
required bytes serialized_payment_details = 4;
optional bytes signature = 5;
}
message X509Certificates {
repeated bytes certificate = 1;
}
message Payment {
optional bytes merchant_data = 1;
repeated bytes transactions = 2;
repeated Output refund_to = 3;
optional string memo = 4;
}
message PaymentACK {
required Payment payment = 1;
optional string memo = 2;
}
将此视图放入django,django将获取与新创建的地址关联的公钥,将其散列为脚本的正确格式,序列化“serialized_payment_details”字段并返回响应对象
def paymentobject(request):
def addr_160(pub):
h3 = hashlib.sha256(unhexlify(pub))
return hashlib.new('ripemd160', h3.digest())
x = payments_pb2
btc_address = bc.getnewaddress()
pubkey_hash = bc.validateaddress(btc_address).pubkey
pubkey_hash160 = addr_160(pubkey_hash).hexdigest()
hex_script = "76" + "a9" + "14" + pubkey_hash160 + "88" + "ac"
serialized_script = hex_script.decode("hex")
xpd = x.PaymentDetails()
xpd.time = int(time())
xpd.outputs.add(amount = 0, script = serialized_script)
xpr = x.PaymentRequest()
xpr.serialized_payment_details = xpd.SerializeToString()
return HttpResponse(xpr.SerializeToString(), content_type="application/octet-stream")
当我将比特币v0.9客户端指向URI时
bitcoin:?r=http://127.0.0.1:8000/paymentobject
我遇到了一个错误
[libprotobuf ERROR google/protobuf/message_lite.cc:123] Can't parse message of type "payments.PaymentRequest" because it is missing required fields: serialized_payment_details
但它没有遗漏细节字段,是吗
非常感谢您的任何帮助:)答案是(在撰写本文时)您不能指定零作为输出。amount
。比特币qt 0.9客户端认为它是灰尘,不允许交易继续进行
更多信息。感谢所有建议,这些建议已经被这个问题困扰了几天:(