(1)創(chuàng)立交易。交易雙方經(jīng)過(guò)協(xié)商達(dá)成協(xié)議,買(mǎi)方使用存儲(chǔ)在“錢(qián)包”中的地址和私鑰進(jìn)行數(shù)字簽名,證明自己對(duì)數(shù)字貨幣的所有權(quán)并且不能被其他人更改。
(2)鏈內(nèi)廣播。由買(mǎi)賣(mài)的某一方在區(qū)塊鏈上發(fā)出申請(qǐng),并通過(guò)P2P網(wǎng)絡(luò)的泛洪(flooding)路由協(xié)議等廣播通知鏈上所有節(jié)點(diǎn)的參與方。如果后續(xù)被任一節(jié)點(diǎn)驗(yàn)證無(wú)效,則停止在區(qū)塊鏈上的廣播。
(3)檢查確認(rèn)。各個(gè)節(jié)點(diǎn)在區(qū)塊鏈的本地副本上分析數(shù)字簽名、驗(yàn)證買(mǎi)方身份合法性,以及是否有足夠多的貨幣余額,即區(qū)塊鏈上所有指向該節(jié)點(diǎn)的未完成交易輸出(UTXO)。所有節(jié)點(diǎn)驗(yàn)證通過(guò)后,交易信息被記入各節(jié)點(diǎn)副本中。
(4)封裝區(qū)塊。在10分鐘內(nèi)產(chǎn)生的所有交易通過(guò)各節(jié)點(diǎn)驗(yàn)證后,被分別集中打包構(gòu)成一個(gè)候用區(qū)塊。每個(gè)參與者都可以對(duì)未記入?yún)^(qū)塊鏈的交易內(nèi)容進(jìn)行記錄。為了避免多節(jié)點(diǎn)同時(shí)記賬帶來(lái)的信息混亂,每次只有一個(gè)參與者能夠?qū)⒆约河涗浀膬?nèi)容寫(xiě)入?yún)^(qū)塊鏈,并獲得相應(yīng)的收益。以比特幣為例,2009年1月創(chuàng)立之初每個(gè)區(qū)塊獎(jiǎng)勵(lì)獲勝節(jié)點(diǎn)50個(gè)比特幣,此后每4年減少一半,直到大約2140年約2100萬(wàn)個(gè)比特幣全部發(fā)行完畢。此外,交易方還要支付給記賬節(jié)點(diǎn)一定的交易費(fèi)用。
(5)競(jìng)爭(zhēng)記賬權(quán)。區(qū)塊鏈會(huì)根據(jù)某種資源占有率來(lái)決定記賬權(quán)歸屬,經(jīng)各節(jié)點(diǎn)普遍認(rèn)可的決定機(jī)制稱(chēng)為分布式共識(shí)(distributed consensus)。其中,最常用的工作量證明(proof of work,PoW)依據(jù)的資源是計(jì)算能力。其他的共識(shí)機(jī)制中,權(quán)益證明(proof of stake, PoS)依據(jù)各節(jié)點(diǎn)持有的加密貨幣數(shù)量,委托權(quán)益證明(delegated proof of stake, DPoS)則是指用戶(hù)將自己持有的加密貨幣換成股票,從而競(jìng)爭(zhēng)記賬并獲得獎(jiǎng)勵(lì)的權(quán)利。
其中,PoW的具體過(guò)程如下:①生成用于給記賬權(quán)節(jié)點(diǎn)發(fā)放獎(jiǎng)勵(lì)和手續(xù)費(fèi)的交易創(chuàng)幣(coinbase)交易,并與其他所有將要寫(xiě)入?yún)^(qū)塊的交易組成列表,通過(guò)梅克爾樹(shù)算法生成梅克爾樹(shù)根哈希值,②將其和區(qū)塊版本、父區(qū)塊哈希值、時(shí)間戳、難度目標(biāo)和Nonce值等字段打包組裝成80字節(jié)的區(qū)塊頭,采用SHA256等運(yùn)算求出區(qū)塊頭的哈希值。③其中,難度值決定產(chǎn)生一個(gè)合法區(qū)塊所需要的哈希運(yùn)算次數(shù)。例如,比特幣系統(tǒng)為了保證平均10分鐘產(chǎn)生一個(gè)區(qū)塊,每產(chǎn)生2016個(gè)區(qū)塊(2周時(shí)間)會(huì)根據(jù)全網(wǎng)算力的變化所有節(jié)點(diǎn)自動(dòng)統(tǒng)一調(diào)整難度值。調(diào)整公式:新難度值=舊難度值×(過(guò)去2016個(gè)區(qū)塊花費(fèi)時(shí)長(zhǎng)/20160分鐘)。難度目標(biāo)值是最大目標(biāo)值與當(dāng)前難度值的比率,其中最大目標(biāo)值為恒定值。④參與競(jìng)爭(zhēng)的節(jié)點(diǎn)不斷修改區(qū)塊頭中的Nonce字段值(通常是遞增1),對(duì)每次變更后的的區(qū)塊頭做雙重SHA256運(yùn)算。當(dāng)結(jié)果值小于當(dāng)前網(wǎng)絡(luò)的目標(biāo)值時(shí)則解題成功,工作量證明完成。競(jìng)爭(zhēng)記賬權(quán)的行為和參與者又分別稱(chēng)為“挖礦”和“礦工”。
(6)記賬上傳。首先完成工作量證明的參與者在鏈上廣播解題答案。經(jīng)多數(shù)節(jié)點(diǎn)驗(yàn)證后得到記賬權(quán),把新區(qū)塊記入已存在的區(qū)塊鏈中,每個(gè)節(jié)點(diǎn)都更新本地副本。
(7)交割轉(zhuǎn)賬。數(shù)字貨幣從買(mǎi)方轉(zhuǎn)移到買(mǎi)方的“錢(qián)包”,記賬的“礦工”賬戶(hù)轉(zhuǎn)入相應(yīng)收益,以補(bǔ)償其“挖礦”所進(jìn)行的高強(qiáng)度運(yùn)算和設(shè)備、電力等資源付出。