比特幣交易中的變化如何運作?
似乎當您發送比特幣交易時,發送地址中的所有硬幣都在該交易中花費,分為您打算發送的金額和“找零”,這會回到您身上,但在另一個(新創建的) 收貨地址。
這使得在區塊瀏覽器上跟踪您的餘額有點困難(特別是因為新的接收地址似乎沒有顯示在任何地方的比特幣客戶端中)。
它是否必須像這樣工作,或者這是客戶端軟體的特定實現細節?
另外,您是否必須等待確認更改才能再次使用?
首先,讓我們澄清一下帳戶和地址之間的區別。
“賬戶”用於方便人們追踪他們的資金。這主要用於跟踪資金來源。由於這只是為了您的跟踪,您只需將數字從一列移動到另一列,就可以將比特幣從一個賬戶轉移到另一個賬戶。不需要交易。(這就像你知道你欠兒子 25 美元的零用錢,而你有 200 美元的雜貨預算。)
“地址”用於在交易中接收比特幣。硬幣被發送到一個地址。客戶將每個地址與一個帳戶相關聯,並將收到的資金添加到該帳戶。這樣做只是為了方便人們間接跟踪資金被發送到的地址。但是您可以將任意數量的地址與同一個帳戶關聯。
變化來自比特幣的使用方式。要花費一定數量的比特幣,您必須將比特幣從交易輸出中提取到您控制的賬戶中。請注意,在支出部分,這是什麼地址或該地址與哪個帳戶相關聯都沒有關係。當您從特定帳戶花費比特幣時,這僅意味著您從該帳戶中扣除您發送的金額。這並不意味著資金來自與該帳戶關聯的地址。請記住,地址和帳戶之間的關聯僅用於接收,而不用於發送。(就像你在雜貨上花錢一樣,你沒有具體的雜貨賬單。你只是有一個預算金額。)
因此,當您提取交易輸出時,您會形成一堆足夠大的比特幣,足以容納您嘗試發送的數字。通常,它並不准確,因為您必須聲明整個輸出。所以多餘的就形成了“變化”。
由於沒有與發送比特幣相關的地址,因此沒有應將更改發送到的特定地址。因此,為了保持匿名性,客戶端創建一個新的,只是為了接收來自此交易的更改。由於此地址與帳戶並沒有真正關聯,並且不應該用於接收任何更多的比特幣(因為這會毫無意義地告訴人們同一個收件人得到了硬幣,因為得到了這個更改)客戶端不會顯示它。
因為客戶端以特定方式管理硬幣,所以嘗試使用任何類型的瀏覽器查看它正在管理的硬幣是沒有意義的。它特別試圖掩蓋所有硬幣都相關的事實。這些服務旨在監控收到的資金,而不是管理資金。
大衛回答中的資訊是正確的,但它可能無法回答實際問題——目前尚不清楚問題是關於一般變化,還是專門將變化發送到新地址。
如果是後者,則無需添加任何內容。但是,如果問題是關於一般變革的實踐,那麼是的,這是必要的。
這樣做的原因是輸出,當用作輸入時,必須全部使用。假設有人給你發了 10 BTC,那 10 BTC 是一個單一的輸出。你不能花掉那枚硬幣的一部分,就像你不能切掉一部分實物硬幣並讓它保持其價值一樣。
這樣做的原因是輸出實際上是一個腳本,並且要花費一個輸出,您只需將解決方案廣播到該腳本。該輸出作為一個整體成為輸入——如果不包括變化,輸入和輸出之間的差額將全部用於交易費用。
特定於客戶端的是如何處理此更改:Satoshi 客戶端將其發送到新地址,而其他客戶端可能只是將更改發送回輸出地址之一。
更改是與其他任何一樣的輸出,這意味著您確實需要等待確認 - 但您仍然可以使用該更改立即發送另一筆交易,您只需要等待第一筆交易在第二筆交易之前確認一罐。