在blockcypher上签署以太坊

时间:2016-08-16 15:50:34

标签: php json

我正在使用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);

2 个答案:

答案 0 :(得分:0)

完全披露:BlockCypher的开发者倡导者在这里。老实说很难说出了什么问题;加密签名可以是一个不透明的过程,而不会看到私钥(你能分享它吗?或尝试使用单独的密钥对重现?)。我能说的是你正确设置了交易骨架;基于我们在此概述的两步流程:https://dev.blockcypher.com/eth/#creating-transactions

使用以太坊,您可以通过从签名/消息派生的公钥生成Keccack哈希来生成接收地址/帐户;您可以通过检查此代码获取生成的公钥来查看其工作原理: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

答案 1 :(得分:0)

签署"发送"使用签名者工具的价值。然后你可以传输交易