Api

如何從 Blockcypher API 創建具有多個輸入的交易?

  • July 4, 2020

例如,我有兩個地址,每個地址都收到了 1 個 BTC。現在,我想將 1.5 BTC 轉移到另一個地址。如何使用 Blockcypher 創建事務 API 來實現這一點?

Blockcypher API 僅展示瞭如何使用單個輸入組成交易的範例,因此,看起來地址數組可以完成這項工作,但不是。如果您通過將地址傳遞到一個輸入數組來做到這一點:

curl -d '{"inputs":[{"addresses":["addr1", "addr2"]}],"outputs":[{"addresses":["addr3"],"value":100000000}]}' https://api.blockcypher.com/v1/btc/test3/txs/new

您將只從輸入的地址數組中抓取零元素:

"tx": {
   "block_height": -1,
   "block_index": -1,
   "hash": "002407bd35a6d0026cf0f5a018bd27311702560c03f1f64478105a547c91d895",
   "addresses": [
     "addr1", (inputs.addresses[0])
     "addr3" (outputs.addresses[0])
   ] ...

(請注意,我沒有包含整個 tx 塊,只有包含地址的塊。)

API 會認為您只使用了一個輸入,如果該值大於輸入的錢包餘額,則可能會引發錯誤。

"Not enough funds in 1 inputs to pay for 1 outputs, missing -X"

要創建具有多個輸入的 tx,您必須分別傳遞地址數組:

curl -d '{"inputs":[{"addresses":["addr1"]}, {"addresses":["addr2"]}],"outputs":[{"addresses":["addr3"],"value":100000000}]}' https://api.blockcypher.com/v1/btc/test3/txs/new

這將為您提供正確的響應和正確的輸入量:

"tx": {
   "block_height": -1,
   "block_index": -1,
   "hash": "ebcc8132c33a672cdd695a8953db503954abefa18bfd4727ea44f67b92c5ab6c",
   "addresses": [
     "addr1",
     "addr2",
     "addr3"
   ] ...

總之,似乎 API 本身就是這樣設計的,至少在寫這個答案的時候是這樣。

免責聲明:我沒有嘗試過,我只是瀏覽了 API 文件。H/T to eirlis提供正確的語法。

正如創建交易的 API 文件所指定的,您在參數中提供了您收到資金的地址inputs。API 文件有這個使用 curl 的範例:

curl -d '{"inputs":[{"addresses": ["CEztKBAYNoUEEaPYbkyFeXC5v8Jz9RoZH9"]}],"outputs":[{"addresses": ["C1rGdt7QEPGiwPMFhNKNhHmyoWpa5X92pn"], "value": 1000000}]}' https://api.blockcypher.com/v1/bcy/test/txs/new

對於多個地址,您需要在單獨的對像中為每個地址提供addresses輸入對象的屬性:{"inputs":[{"addresses":"addr1"}, {"addresses":"addr2"}],"outputs":…}。根據文件,響應將是一個未簽名的交易,您必須使用相應的私鑰在本地簽名。BlockCypher 文件此時連結到他們的“簽名者工具”。

注意:在比特幣交易中未明確分配給接收者的所有價值都將用於交易費用。如果您使用兩個 1 BTC 輸入並向收件人發送 1.5 BTC,請確保添加第二個輸出以將您0.5 BTC – transaction fees的零錢分配給您自己的地址之一。否則,您將向確認您交易的礦工支付 0.5 BTC。在簽署之前,請務必驗證交易是否按照您的意圖進行。

我強烈建議您使用測試網硬幣建立一些交易來掌握它。

引用自:https://bitcoin.stackexchange.com/questions/95488