※ 引述《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,手续费便宜多了,也不会塞车。