lemooljiang avatar

UTXO模型 / go实现简易区块链 #4

lemooljiang

Published: 19 Aug 2022 › Updated: 19 Aug 2022UTXO模型 / go实现简易区块链 #4

UTXO模型 / go实现简易区块链 #4

除了工作量证明,UTXO也是比特币最为鲜明的特征。它不像我们常用的帐户一样(虽然它在钱包的设计上和常用的帐户一样)是由一个个帐户构成,它是由UTXO来构成的帐本。UTXO(unspent transaction outputs,有结余交易的output)集合。

utxo.jpg

utxo2.jpg

UTXO模型

上图中可以清楚地看到UTXO集合的特点,更多的可以参看比特币白皮书。一个交易集中有若干的输入和输出,对其遍历后得到余额。

交易output

type TXOutput struct {
    Value        int
    ScriptPubKey string
}

事实上,output保存了“币”(上面的Value)。保存的意思是使用一串无法破解的方式(谜,puzzle)锁住这些币。

还有一个重要的事情是output是不能分割的,所以你不能只引用它的一部分。如果一个output在一个交易中被关联,那么它就会全部消费掉。而如果该output的值是大于交易所需的,那么会有一笔“change”产生并返回发送者(消费者)。这和现实生活中的交易是差不多的,比如花5美元的纸币去买值1美元的东西,那你会收到4美元的找零。

交易input

type TXInput struct {
    Txid      []byte
    Vout      int
    ScriptSig string
}

input引用了前面的output。Txid存储了交易的id,而Vout则保存该交易的中一个output索引。ScriptSig就是负责提供在与output的ScriptPubKey中对比的数据,如果数据正确,那么这个被引用的output就可以被解锁,而它里面的值可以产生新的output。如果不正确,这个output就不能被这个input引用。这个机制就避免了有人会去消费别人的比特币。

总之,output就是“币”存的位置。每一个output都来自一个解锁了的script,每一个新的交易都必须有一个input和output。而input关联的前面的交易中的output,并且提供数据(ScriptSig字段)去解锁output和它里面的币而后用这些币去创建新的output。

Leave UTXO模型 / go实现简易区块链 #4 to:

Written by

Designer , Poet , Technology enthusiasts

Read more #cn posts


Best Posts From lemooljiang

We have not curated any of lemooljiang's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From lemooljiang