我正在使用Blockcypher API接受和发送以太(https://dev.blockcypher.com/eth/#creating-transactions)。我已经完成了创建事务的所有步骤,我也对它进行了签名,但当我尝试推送事务时,我得到了这个错误:-
Could not compute an address from provided signature: invalid v, r, s values这是我的代码:
$s = '{"tx": {"block_height": -1,
"block_index": 0,
"hash": "9e1d35246329f2ac42f3d61ea7daa03f7f8d38cd249a232af631453e8faa0ccf",
"addresses": [
"0x4bEF3c9f14B1A0633B2224Bfcf24C8Ec079214e1",
"aad8962fade8687241091bcdb090565f28bd637b"
],
"total": 4200000000000,
"fees": 861000000000000,
"size": 43,
"gas_limit": 21000,
"gas_price": 41000000000,
"received": "2016-08-16T15:36:54.568989809Z",
"ver": 0,
"double_spend": false,
"vin_sz": 1,
"vout_sz": 1,
"inputs": [
{
"sequence": 1,
"addresses": [
"0x4bEF3c9f14B1A0633B2224Bfcf24C8Ec079214e1"
]
}
],
"outputs": [
{
"value": 4200000000000,
"addresses": [
"aad8962fade8687241091bcdb090565f28bd637b"
]
}
]}, "tosign": [ "a83f5bea598e0d217a03a2646d6c49edb2e99daf4537b2c09b008df76b77acec" ], "signatures": [ "3045022100d0b005bc83bf8a234cd7326725b26a2fdfdc456dd830c59c18cd2ae849d6d4c60220344efd54daad17c6062bca347ea2bb47a5819b6b162bf69d81bd4a7c4be0e6d2" ]}';
$ch = curl_init('https://api.blockcypher.com/v1/eth/main/txs/send?token=4751b92ba5c94aecb287b635a0589b6e');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $s);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($s))
);
$result = curl_exec($ch);
curl_close($ch);
var_dump($result);发布于 2016-09-01 05:13:27
完整披露:BlockCypher的开发者倡导者在这里。老实说,很难说出哪里出了问题;在看不到私钥的情况下,加密签名可能是一个不透明的过程(您能分享它吗?或者尝试使用单独的密钥对进行复制?)。我可以说的是,您正在正确地设置事务框架;基于这里概述的两步过程:https://dev.blockcypher.com/eth/#creating-transactions
使用以太坊,您可以通过从签名/消息派生的公钥生成Keccack Hash来生成接收地址/帐户;您可以通过检查生成的公钥的以下代码来了解这是如何工作的:https://github.com/ethereum/go-ethereum/blob/master/crypto/secp256k1/secp256.go#L197
我猜签名是无效的,这导致我们的API无法生成适当的输出地址。虽然我不能确切地知道在没有私钥的情况下发生了什么问题,但你可能想要仔细检查你的私钥和/或签名是否被你的签名工具/库正确地解析了,特别是如果你必须重新编码成你正在使用的工具/库的数据格式。
此外,您可能希望仅使用cURL命令,使用从我们的API (https://dev.blockcypher.com/eth/#generate-address-endpoint)生成的地址来创建/签名测试事务。它不适用于大笔金额,但是从这个端点生成的密钥已经是我们的签名者工具易于使用的十六进制编码格式:https://github.com/blockcypher/btcutils/tree/master/signer。
发布于 2016-12-02 12:19:46
使用签名工具对"toSend“值进行签名。然后,您就可以传输事务
https://stackoverflow.com/questions/38979318
复制相似问题