如何從 Blockcypher API 創建具有多個輸入的交易?
例如,我有兩個地址,每個地址都收到了 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。在簽署之前,請務必驗證交易是否按照您的意圖進行。我強烈建議您使用測試網硬幣建立一些交易來掌握它。