Re: [Coin] 幣的交易驗證順序

作者: DarkerDuck (達克鴨)   2019-02-27 03:08:55
※ 引述《waakye (明天的太陽)》之銘言:
: 剛入比特幣不久,一開始自己轉來轉去交了不少手續費(學費)
: 後來發現一個問題,如果我轉錢給兩個不同的錢包
: 後轉的會要前面先確認過才能確認嗎?
: 還是各自不影響?
: 剛才稍微爬文不過不知道關鍵字怎麼下沒找到
加密貨幣主要就兩種交易系統,一種像是BTC, BCH, LTC, DOGE這類的
他們是UTXO系統,一筆交易可以有多個input,多個output。
https://i.imgur.com/FrHTSM5.png
另外一個是account交易系統,智能合約平台幾乎都這樣設計,方便VM實作。
譬如ETH, ETC, EOS
交易就只會有一個source address和一個destination address。
除非用專用智能合約地址,才有可能多個私鑰共同發出一筆交易。
先講account制系統,因為比較簡易,大家比較容易懂。
它的操作幾乎就跟銀行帳戶一樣直觀。一個錢包基本上就一個私鑰、一個接收地址。
所有操作都會重複利用本來的"account"的私鑰和地址
所有發出的交易基本上是EVM的操作,藉由nonce值讓網路能確認操作的順序。
所以不會發生後面的交易先被確認,但前面的交易還沒被確認。
在EVM的架構下,要在同一個區塊內確認是可行的,
只要區塊內的交易是按照順序排列,沒有nonce被跳過
比如說你短時間依序發出了三筆交易,A, B, C。
那是可以達到A, B, C在同一個區塊內被確認。(感謝Ayukawayen說明)
而且ETH 15秒產生一個區塊,所以一般使用上並不會有太大的延遲感覺。
但假如你交易A的gas price給的太低,就有可能造成後面的交易B和C卡住pending。
因為ETH平台被設計成是一個圖靈完備的虛擬機,有相依性指令一定要循序執行。
同時也避免了雙花情形的發生。
https://kb.myetherwallet.com/transactions/what-is-nonce.html
再來回到中本聰設計UTXO交易模型。
講實在的,我覺得中本聰設計的UTXO模型就是金流區塊鏈最棒的模型了。
無論在隱私、擴容上都有顧到。
首先一筆交易會由一個以上的input和output組成。
input就是某一個私鑰擁有操控權未花出比特幣。
output則是要送給某一個接收者的比特幣輸出。
https://i.imgur.com/OrAX3PE.png
所以比特幣是可以達成一筆交易,從多個地址進來的比特幣,再轉給多個比特幣接收者。
這對於一些需要大量同時交易的應用非常方便 (Core: No no no 比特幣是黃金.....)
同時也方便於混幣,提升隱私性。
因為從input和output就已經構成了交易的順序,所以也不需要額外的nonce去確認。
而比特幣也沒有什麼相依性智能合約要執行,
所以UTXO類型的比特幣也可以達成同時確認多筆的未確認交易,
譬如你短時間依序發出了三筆交易,A, B, C
A的input → A的output接收者a

B的input → B的output接收者b

C的input→C的output接收者c
假如A的change output就是B的input,B的change output就是C的input
那麼這三筆交易仍然可以在被同一個區塊內確認。
不過也是有個上限值,我記得是一百筆用同一個input的串列交易可以被同一個區塊確認。
當然依照input和output相依順序,後面的交易無法先於前面的交易被確認。
所以交易A的手續費假如付太少,仍然會卡住後面B和C的交易。
但是假如這三筆交易沒有用到有相依性的input就有可能互相獨立。
A的inputs集合 → A的output接收者a
B的inputs集合 → B的output接收者b
C的inputs集合 → C的output接收者c
譬如說你的錢包都是收小額捐款,所以有非常多的小額input。
那就可能會有這樣的狀況發生:後發的交易C假如手續費較高可能還會先被確認。
在這種狀態下也不會有一百筆同時確認的限制值,可以同一個確認區塊塞到上限為止。
若要實驗的話可以用BCH,手續費便宜多了,也不會塞車。
作者: sismiku (Simiku)   2019-02-27 03:12:00
推優文
作者: d15388david (livermore)   2019-02-27 03:25:00
先推再看
作者: silverado (西門啦)   2019-02-27 05:49:00
作者: remia81   2019-02-27 06:11:00
先推
作者: ketao (ketao)   2019-02-27 07:59:00
作者: kidneyweakx   2019-02-27 08:22:00
作者: itsdelovely (It's De-Lovely)   2019-02-27 09:00:00
作者: dali17dali17   2019-02-27 09:35:00
優質文
作者: kugwa (kugwa)   2019-02-27 09:36:00
推不過我覺得UTXO模型下一樣可以有智能合約架構就讓每個合約有自己的UTXO(或說一UTXO可能是某個合約的)
作者: Fice (Fice)   2019-02-27 09:53:00
作者: ReanoX (ReanoX)   2019-02-27 10:03:00
認真推
作者: waakye (明天的太陽)   2019-02-27 10:42:00
謝謝回覆 我在多看看了解
作者: john801110 (SQUARE)   2019-02-27 11:54:00
原來!
作者: sweetalex (alex)   2019-02-27 11:56:00
推優文
作者: Ayukawayen (亞布里艾爾發芽>//<)   2019-02-27 12:07:00
ETH區塊内的Tx是有序的 同帳戶多筆Tx進同一區塊是可以的 只要在區塊內沒有違反順序就好(例:A,B都在區塊1000,且A在B前,這樣是可以的)參見: https://etherscan.io/txs?block=7272917
作者: DarkerDuck (達克鴨)   2019-02-27 12:14:00
感謝樓上補正,因為我有自己實際測試之前測試都會多一個區塊,可能是我發交易速度不夠快而且我還故意第一筆交易給很低的gas price來卡交易
作者: balancemask (平衡)   2019-02-27 12:42:00
作者: vvind (wind)   2019-02-27 13:10:00
作者: TomSoong (高飛)   2019-02-27 13:56:00
TRON的ACCOUNT系統好像不支持nonce保證前後順序
作者: DarkerDuck (達克鴨)   2019-02-27 17:02:00
我查了一下TRON好像是UTXO和account混和制待強者補充看起來TRON的基礎仍然使用UTXO機制
作者: john371911 (醬廖)   2019-02-27 17:37:00
解說推。雖然原理看不懂。
作者: Jkx (後現代鮭魚版本)   2019-02-27 19:49:00
作者: kugwa (kugwa)   2019-02-27 21:42:00
感謝板大回應~我之前研究過qtum白皮書,我說的作法就跟他的滿像的:Blockchain state除了有當前utxo set,也有現存的所有合約。一個合約可以擁有多個utxo,而一個utxo只能屬於一個合約,或是不屬於任何合約但像原本比特幣一樣可以被script解鎖。合約要轉錢出去的時候,vm會動用該合約的utxo(刪除花掉的utxo並根據轉錢目的地產生新的utxo)。合約的utxo只能被vm動到,使用者發的交易的input如果有引用到合約的utxo就會被拒絕。我猜所謂帳戶和utxo混用,應該跟這種作法是一樣意思:最底層是utxo,往上一層是帳戶;一個帳戶擁有多個utxo,而一個utxo可以屬於某個帳戶也可以獨立使用(用script解鎖)。這樣混用的優缺點就是同時繼承兩者的優缺點。優勢:直觀的帳戶體系(反正使用者只要知道每個帳戶有多少餘額,這些餘額如何由utxo組成不重要)以及UTXO的優勢(要隱私就不要特地開一個帳戶,照原本比特幣那樣用就好)
作者: DarkerDuck (達克鴨)   2019-02-27 21:50:00
看起來qtum和tron都是用同樣的方法實現智能合約平台這樣的確可以整合兩者優點,提高UX、隱私和擴容性
作者: kugwa (kugwa)   2019-02-27 21:52:00
劣勢:其中一個就是blockchain state變頗複雜,utxo set和account set都要維護,還要互相指來指去。
作者: DarkerDuck (達克鴨)   2019-02-27 22:00:00
感謝補充優缺點,可以來好好研究
作者: camellala (茸硬抬名器)   2019-02-28 00:07:00
快推,才不會被人發現我看不懂
作者: goldflower (金色小黃花)   2019-02-28 19:09:00
推個

Links booklink

Contact Us: admin [ a t ] ucptt.com