首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在blockcypher上签名以太

在blockcypher上签名以太
EN

Stack Overflow用户
提问于 2016-08-16 23:50:34
回答 2查看 976关注 0票数 2

我正在使用Blockcypher API接受和发送以太(https://dev.blockcypher.com/eth/#creating-transactions)。我已经完成了创建事务的所有步骤,我也对它进行了签名,但当我尝试推送事务时,我得到了这个错误:-

代码语言:javascript
复制
Could not compute an address from provided signature: invalid v, r, s values

这是我的代码:

代码语言:javascript
复制
$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);
EN

回答 2

Stack Overflow用户

发布于 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

票数 0
EN

Stack Overflow用户

发布于 2016-12-02 12:19:46

使用签名工具对"toSend“值进行签名。然后,您就可以传输事务

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38979318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档