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