Transactions

bitcoind 如何處理鏈下交易?

  • December 23, 2016

我試圖弄清楚比特幣實際上是如何處理交易的。

我正在查看RPC 方法的完整列表,並且缺少一些最有趣的方法的文件。

移動

我知道有兩種方法可以通過直接 p2p 交易或通過所謂的鏈下交易在地址之間移動比特幣。如果我相信正確的話,bitcoind 的內置錢包允許我們通過move方法發送鏈下交易。可悲的是,它沒有很好的記錄,但我想確切地知道它是如何工作的。

這是它的文件:

move <fromaccount> <toaccount> <amount> [minconf=1] [comment]

Move from one account in your wallet to another
  1. 因此,如果賬戶 A 有 1 個 BTC,賬戶 B 有 0。如果我首先使用鏈下交易1 個 BTC 從 A 轉移到 B,然後直接從 B 向 C 發出 1 個 BTC 交易,會發生什麼?
  2. 另外,minconf參數是乾什麼用的?據我了解,鏈下交易不需要確認。

發件人

這是sendfrom方法的文件:

sendfrom <fromaccount> <tobitcoinaddress> <amount> [minconf=1] [comment] [comment-to]

<amount> is a real and is rounded to 8 decimal places. Will send the given amount to the given address, ensuring the account has a valid balance using [minconf] confirmations. Returns the transaction ID if successful (not in JSON object).

它需要一個帳戶來發送比特幣。

  1. 如果我有指定賬戶的多個地址/交易怎麼辦?bitcoind 使用什麼策略來確定從哪些地址進行交易以及從每個地址使用多少比特幣?
  2. minconf參數是乾什麼用的?

發送到地址

sendtoaddress <bitcoinaddress> <amount> [comment] [comment-to]

<amount> is a real and is rounded to 8 decimal places. Returns the transaction ID <txid> if successful.
  1. 未為此呼叫指定帳戶。bitcoind 將使用什麼帳戶?預設的?
  2. 為什麼這個沒有minconf參數?

首先,鏈下交易的種類很多。任何不直接對應於區塊鏈交易的 BTC 價值變動都可以歸為一類。這包括:

  1. 給某人一台裝有 BTC 錢包的電腦/電話
  2. 給某人一個私鑰/物理比特幣。
  3. 授予某人訪問共享網路錢包帳戶的權限
  4. 在同一服務中從一個帳戶向另一個帳戶匯款(這只是減少一個人的餘額並增加另一個人的餘額)
  5. 支付渠道,包括閃電網路,它協商少量交易,這些交易對應於更多價值轉移的淨效應。

bitcoind 中的move命令不會導致鏈下交易;它只是增加一個內部計數器並減少另一個。它肯定是脫鏈的,但很難稱其為交易。你所做的只是改變了你計算你已經控制的錢的方式。

一項服務(如上面的#4)可能會使用 bitcoind 的 move 命令來實現一個(簡單的)鏈下交易系統。但這至少需要設置一個多人在您的系統上擁有帳戶的設置,並且他們將您視為他們資金的保管人。

至於你問的問題:

  1. 賬戶是一個完全獨立於地址的概念。從 bitcoind 的角度來看,不存在地址餘額之類的東西。有錢包餘額(錢包總共可以控制多少硬幣)和賬戶餘額(只是內部 bean 計數器,與區塊鏈上的任何東西都沒有關係)。當新的交易向地址 A 發送 M 錢,並且地址 A 與賬戶 C 相關聯時,錢包餘額增加 M,而 C 的賬戶餘額增加。當您使用 sendfrom 匯款時,會從指定帳戶中扣除。但是創建的實際鏈上交易總是使用錢包可以控制的*任何硬幣。*同樣:鏈上硬幣(交易輸出)和賬戶餘額之間沒有關係。
  2. 移動命令用於對要藉記的帳戶進行餘額檢查,如果它沒有足夠的計數僅具有至少minconf確認的交易,則會失敗。這個功能很久以前就被刪除了,現在忽略了 minconf 參數。
  3. Bitcoind 將整個錢包視為擁有硬幣,它將使用任何可用於其創建的交易的硬幣。硬幣和賬戶之間沒有關係。sendfrom僅允許您指定要減少的帳戶餘額。
  4. sendfrom對借記賬戶進行餘額檢查,如果它會使賬戶餘額為負數,則將失敗,僅計算至少minconf確認的貸記交易。此功能不是很可靠,因為儘管之前進行了余額檢查,但費用可能會使帳戶變為負數。
  5. sendtoaddress總是藉記“”賬戶,並且不對其進行餘額檢查,因此“”賬戶餘額可以為負數(只要錢包餘額 - 賬戶餘額的總和 - 為正數)。再說一遍:它絕不會限制使用哪些硬幣來建構交易。
  6. 因為sendtoaddress不進行餘額檢查,所以minconf參數不會產生影響。通常,所有具有 1 次確認(如果它們來自其他錢包)或 0 次確認(如果它們來自您自己)的硬幣都是可消費的,儘管例如spendzeroconfchange設置修改了這一點)。

如前所述,不推薦使用帳戶餘額系統和移動命令,因為它們很難理解和正確使用。如果您需要會計,請自行實施。

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