在近期Arc-20協議出現後又使銘文市場大火了一把,本文將從技術角度出髮深入兩個協議的細節以及優劣勢。
比特幣最初被設計爲一種安全、穩定且可靠的去中心化數字貨幣。然而,由於其技術架構和腳本語言相對不如以太坊靈活,因此比特幣併不適合直接運行智能合約。
盡管如此,開髮者的創新思想和大膽嘗試爲比特幣生態帶來了繁榮,其中一個典型例子就是Brc-20協議。該協議核心思想是實驗性的代幣形式,以meme爲中心。任何人都可以根據先到先得的原則,在比特幣鏈上直接鑄造這些代幣,而無需依賴智能合約。Brc-20代幣的關鍵特徵是其分散化性質,摒棄了私人髮售、預售以及解鎖或質押等機製。這確保了參與的真正去中心話。
在這一背景下,Arc-20協議再次引髮了對銘文的濃厚興趣。
Brc-20協議和Arc-20協議都基於Btc鏈,因此在正式介紹Arc-20協議和Brc-20協議之前,我們需要簡單的認識一下UTXO(unspent transaction output)
當我們談論比特幣時,UTXO(未花費的交易輸出)模型是一種重要的設計概念。它是比特幣使用的一種賬戶模型,與傳統的賬戶餘額模型(如銀行賬戶)有所不衕。
在UTXO模型中,每個比特幣交易都創建了一繫列未花費的輸出,每個輸出代錶了一定數量的比特幣。這些未花費的輸出實際上是未使用的數字貨幣單位,類似於紙幣或硬幣。當你收到比特幣時,實際上是有人創建了一個新的未花費的輸出,該輸出與你的比特幣地址相關聯。這個輸出就是UTXO。
讓我們用一個簡單的例子來解釋UTXO模型:
如果你有兩筆交易,一筆收到了0.7 BTC,另一筆收到了0.5 BTC,你將擁有兩個 UTXO,一個價值0.7 BTC,一個價值0.5 BTC。當你想要支付1 BTC 時,你不能簡單地使用一個 UTXO,而是需要將兩個 UTXO 合併爲一個新的 UTXO(總額爲1.2 BTC),然後將1 BTC 髮送給收款方,剩餘的0.2 BTC 作爲找零返回給你自己。但找零實際情況可能會低於0.2BTC,因爲用戶需要給礦工一筆手續費以確保交易的正常運行。
BRC-20是一個實驗性標準,演示了通過利用序數理論和銘文,在比特幣的第一層(layer 1)上創建可互換代幣的可能性。Ordinals協議(第一個按照該協議標準所鑄造的代幣)允許內容,包括文本、圖像或視頻,被銘記在比特幣最小單位 — — 聰(Satoshi)上,從而創造出獨特的數字資産。
序數理論是在BTC網絡上實現銘文的關鍵。
每個聰本質上是一樣的,Ordinals通過敘述理論製定了一套聰的排序協議,這個排序基於聰的挖出和他們交易輸入和輸出的順序
序數有幾種不衕的錶示方法:
度數錶達法中包含四個部分:A°B′C″D‴,併且A,B,C,D代錶著不衕的含義:
敘述理論通過度數錶達法來確定一個聰的順序,併且通過順序來給每個聰定義不衕的稀有程度,從而實現每個聰的獨一無二
舉例説明,比如現有一個度數錶達爲 1°1′0″0‴ ,其中
通過上麵的稀有度定義,這個聰被定義爲罕見的聰。
大緻的流程如下所緻:
py# 計算給定高度的塊的敘述(獎勵)
def subsidy(height):
return 50 * 100_000_000 >> height // 210_000
這個函數用於計算給定高度的比特幣塊的獎勵,其中 50 * 100_000_000 是比特幣的起始獎勵,>> 是右移位運算符,相當於除以 2 的整數除法。這個函數返回一個整數,錶示在給定高度的塊的獎勵數量。
def first_ordinal(height):
start = 0
for h in range(height):
start += subsidy(h)
return start
這個函數計算在給定高度的塊的第一個獎勵的序數。通過迭代高度併纍加每個塊的獎勵,計算從第一個塊到給定高度的總獎勵數量,從而得到第一個獎勵的序數。
def assign_ordinals(block):
first = first_ordinal(block.height)
last = first + subsidy(block.height)
coinbase_ordinals = list(range(first, last))
def assign_ordinals(block):
first = first_ordinal(block.height)
last = first + subsidy(block.height)
coinbase_ordinals = list(range(first, last))
for transaction in block.transactions[1:]:
ordinals = []
for input in transaction.inputs:
ordinals.extend(input.ordinals)
for output in transaction.outputs:
output.ordinals = ordinals[:output.value]
del ordinals[:output.value]
coinbase_ordinals.extend(ordinals)
for output in block.transactions[0].outputs:
output.ordinals = coinbase_ordinals[:output.value]
del coinbase_ordinals[:output.value]
這個函數用於爲給定的比特幣塊分配序數。它首先計算塊的第一個和最後一個獎勵的序數範圍。接下來,它迭代塊中的每個交易,爲每個輸出分配序數。最後,爲交易的輸出分配序數,以確保整個塊中的所有聰都有唯一的序數。
簡而言之,通過序數理論,oridinals將本質上每個相衕的聰(Satoshi) 通過加工變得獨一無二起來,併且通過規則爲每一個聰定義稀有熟悉, 實現收藏屬性或者適製定玩法的規則。
Atomicals 協議是一個簡單而靈活的協議,用於在未花費的交易輸出(UTXO)區塊鏈(如比特幣)上鑄造、轉移和更新數字對象(傳統上稱爲非衕質化代幣)。一個 Atomical(或稱爲 “atom”) 是一種管理數字對象的創建、轉移和更新的方式 — — 本質上是根據一些簡單規則定義的數字所有權鏈。
Arc-20採用了染色幣模型,也就是説一個Arc-20 token都必鬚有一個聰支持,而非像Brc-20通過排序進行區分。由於Arc-20 代幣完全基於聰,使得他可以像Btc一樣進行拆分和合併(也就是文章開頭提及的UTXO),併且可以直接通過比特幣網絡進行轉帳。
舉例説明,通過Atomicals 協議,我們將指定的100個聰定義爲100張“電影票”,用戶可以在支持Atomicals協議的電影院,拿這100個聰中的一個來支付,充當電影票的職能
但是礦工和比特幣網絡併不能知道哪個UTXO經過了”Atomicals”化,從而可能誤把Arc-20代幣當成礦工費用,爲了解決這一問題,Artomicals通過指令操作,將每一個Arc-20代幣都作爲交易的第一個輸出來避免代幣的誤銷毀。
接下來,我們將分析比較兩個協議的異衕。
協議大緻分爲三步
{
“p”: “brc-20”,
“op”: “deploy”,
“tick”: “ordi”,
“max”: “21000000”,
“lim”: “1000”
}
由於部署者在部署代幣時,代幣信息本身無法被BTC所識別,因此需要一個索引器(indexer)來穫取鏈上相關數據併通過該數據在鏈下創建一個賬本來記録相關歷史以及處理相關操作併進行數據更新。
鏈下索引器需要精準的捕穫每次一代幣操作併更新線下賬本。但衕區塊鏈一樣,隨著交易的增多,節點存儲的數據將會越來越大,如何保證賬本的完整性以及在龐大的數據量中找到需要更改的信息,將會成爲brc-20的挑戰
衕樣的,Arc-20協議在部署代幣時也需要在BTC鏈上根據格式記録相關信息
program.command(‘init-dft’)
.description(‘Initialize fungible token (FT) atomical in decentralized issuance mode’)
.argument(‘<ticker>’, ‘string’)
.argument(‘<mint_amount>’, ‘number’)
.argument(‘<max_mints>’, ‘number’)
.argument(‘<mint_height>’, ‘number’)
.argument(‘<file>’, ‘string’)
.option(‘—rbf’, ‘Whether to enable RBF for transactions.’)
.option(‘—funding <string>’, ‘Use wallet alias wif key to be used for funding and change’)
.option(‘—satsbyte <number>’, ‘Satoshis per byte in fees’, ‘15’)
.option(‘—mintbitworkc <string>’, ‘Whether to require any bitwork proof of work to mint. Applies to the commit transaction.’)
.option(‘—mintbitworkr <string>’, ‘Whether to require any bitwork proof of work to mint. Applies to the reveal transaction.’)
.option(‘—bitworkc <string>’, ‘Whether to put any bitwork proof of work into the token mint. Applies to the commit transaction.’)
.option(‘—bitworkr <string>’, ‘Whether to put any bitwork proof of work into the token mint. Applies to the reveal transaction.’)
.option(‘—parent <string>’, ‘Whether to require a parent atomical to be spent along with the mint.’)
.option(‘—parentowner <string>’, ‘Wallet owner of the parent to spend along with the mint.’)
.option(‘—disablechalk’, ‘Whether to disable the real-time chalked logging of each hash for Bitwork mining. Improvements mining performance to set this flag’)
.action(async (ticker, mintAmount, maxMints, mintHeight, file, options) => {
…..
}
在atomicals-js cli源碼中可以找到初始化一個代幣的相關指令,必鬚要在鏈上記録的參數有:
ticker: 代幣名稱
mint_amount: mint總量
max_mints: 單次mint數量
mint_height: 指定開始mint的區塊高度
file: 相關元數據
但與Brc20不衕的是, Arc20採用了染色幣模型,在代幣相關信息録入BTC鏈上後,該協議將會把代幣與Sats做錨定:1 token = 1 sat。
衕時,染色幣模型的使用使得用戶在進行交易時可以直接通過BTC網絡實現而非鏈下賬本,因爲代幣餘額與UTXO中的聰保持一緻,代幣的相關變化都可以在鏈上直觀的反映。索引器在Arc-20中隻是用來讀取代幣在鏈上的相關部署信息,併且驗證哪些是符合Arc-20協議的代幣。
Brc-20的設計結構更依賴與鏈下賬本,而Arc-20更符合Btc的相關特性,併且相較於Brc-20會更去中心化。但衕時,染色幣模型使得Arc-20無法完成meme幣的髮售,因爲meme幣往往有很高的代幣總數,而1 token = 1 sat這一特性使得在髮售meme幣時需要消耗大量Btc
在近期Arc-20協議出現後又使銘文市場大火了一把,本文將從技術角度出髮深入兩個協議的細節以及優劣勢。
比特幣最初被設計爲一種安全、穩定且可靠的去中心化數字貨幣。然而,由於其技術架構和腳本語言相對不如以太坊靈活,因此比特幣併不適合直接運行智能合約。
盡管如此,開髮者的創新思想和大膽嘗試爲比特幣生態帶來了繁榮,其中一個典型例子就是Brc-20協議。該協議核心思想是實驗性的代幣形式,以meme爲中心。任何人都可以根據先到先得的原則,在比特幣鏈上直接鑄造這些代幣,而無需依賴智能合約。Brc-20代幣的關鍵特徵是其分散化性質,摒棄了私人髮售、預售以及解鎖或質押等機製。這確保了參與的真正去中心話。
在這一背景下,Arc-20協議再次引髮了對銘文的濃厚興趣。
Brc-20協議和Arc-20協議都基於Btc鏈,因此在正式介紹Arc-20協議和Brc-20協議之前,我們需要簡單的認識一下UTXO(unspent transaction output)
當我們談論比特幣時,UTXO(未花費的交易輸出)模型是一種重要的設計概念。它是比特幣使用的一種賬戶模型,與傳統的賬戶餘額模型(如銀行賬戶)有所不衕。
在UTXO模型中,每個比特幣交易都創建了一繫列未花費的輸出,每個輸出代錶了一定數量的比特幣。這些未花費的輸出實際上是未使用的數字貨幣單位,類似於紙幣或硬幣。當你收到比特幣時,實際上是有人創建了一個新的未花費的輸出,該輸出與你的比特幣地址相關聯。這個輸出就是UTXO。
讓我們用一個簡單的例子來解釋UTXO模型:
如果你有兩筆交易,一筆收到了0.7 BTC,另一筆收到了0.5 BTC,你將擁有兩個 UTXO,一個價值0.7 BTC,一個價值0.5 BTC。當你想要支付1 BTC 時,你不能簡單地使用一個 UTXO,而是需要將兩個 UTXO 合併爲一個新的 UTXO(總額爲1.2 BTC),然後將1 BTC 髮送給收款方,剩餘的0.2 BTC 作爲找零返回給你自己。但找零實際情況可能會低於0.2BTC,因爲用戶需要給礦工一筆手續費以確保交易的正常運行。
BRC-20是一個實驗性標準,演示了通過利用序數理論和銘文,在比特幣的第一層(layer 1)上創建可互換代幣的可能性。Ordinals協議(第一個按照該協議標準所鑄造的代幣)允許內容,包括文本、圖像或視頻,被銘記在比特幣最小單位 — — 聰(Satoshi)上,從而創造出獨特的數字資産。
序數理論是在BTC網絡上實現銘文的關鍵。
每個聰本質上是一樣的,Ordinals通過敘述理論製定了一套聰的排序協議,這個排序基於聰的挖出和他們交易輸入和輸出的順序
序數有幾種不衕的錶示方法:
度數錶達法中包含四個部分:A°B′C″D‴,併且A,B,C,D代錶著不衕的含義:
敘述理論通過度數錶達法來確定一個聰的順序,併且通過順序來給每個聰定義不衕的稀有程度,從而實現每個聰的獨一無二
舉例説明,比如現有一個度數錶達爲 1°1′0″0‴ ,其中
通過上麵的稀有度定義,這個聰被定義爲罕見的聰。
大緻的流程如下所緻:
py# 計算給定高度的塊的敘述(獎勵)
def subsidy(height):
return 50 * 100_000_000 >> height // 210_000
這個函數用於計算給定高度的比特幣塊的獎勵,其中 50 * 100_000_000 是比特幣的起始獎勵,>> 是右移位運算符,相當於除以 2 的整數除法。這個函數返回一個整數,錶示在給定高度的塊的獎勵數量。
def first_ordinal(height):
start = 0
for h in range(height):
start += subsidy(h)
return start
這個函數計算在給定高度的塊的第一個獎勵的序數。通過迭代高度併纍加每個塊的獎勵,計算從第一個塊到給定高度的總獎勵數量,從而得到第一個獎勵的序數。
def assign_ordinals(block):
first = first_ordinal(block.height)
last = first + subsidy(block.height)
coinbase_ordinals = list(range(first, last))
def assign_ordinals(block):
first = first_ordinal(block.height)
last = first + subsidy(block.height)
coinbase_ordinals = list(range(first, last))
for transaction in block.transactions[1:]:
ordinals = []
for input in transaction.inputs:
ordinals.extend(input.ordinals)
for output in transaction.outputs:
output.ordinals = ordinals[:output.value]
del ordinals[:output.value]
coinbase_ordinals.extend(ordinals)
for output in block.transactions[0].outputs:
output.ordinals = coinbase_ordinals[:output.value]
del coinbase_ordinals[:output.value]
這個函數用於爲給定的比特幣塊分配序數。它首先計算塊的第一個和最後一個獎勵的序數範圍。接下來,它迭代塊中的每個交易,爲每個輸出分配序數。最後,爲交易的輸出分配序數,以確保整個塊中的所有聰都有唯一的序數。
簡而言之,通過序數理論,oridinals將本質上每個相衕的聰(Satoshi) 通過加工變得獨一無二起來,併且通過規則爲每一個聰定義稀有熟悉, 實現收藏屬性或者適製定玩法的規則。
Atomicals 協議是一個簡單而靈活的協議,用於在未花費的交易輸出(UTXO)區塊鏈(如比特幣)上鑄造、轉移和更新數字對象(傳統上稱爲非衕質化代幣)。一個 Atomical(或稱爲 “atom”) 是一種管理數字對象的創建、轉移和更新的方式 — — 本質上是根據一些簡單規則定義的數字所有權鏈。
Arc-20採用了染色幣模型,也就是説一個Arc-20 token都必鬚有一個聰支持,而非像Brc-20通過排序進行區分。由於Arc-20 代幣完全基於聰,使得他可以像Btc一樣進行拆分和合併(也就是文章開頭提及的UTXO),併且可以直接通過比特幣網絡進行轉帳。
舉例説明,通過Atomicals 協議,我們將指定的100個聰定義爲100張“電影票”,用戶可以在支持Atomicals協議的電影院,拿這100個聰中的一個來支付,充當電影票的職能
但是礦工和比特幣網絡併不能知道哪個UTXO經過了”Atomicals”化,從而可能誤把Arc-20代幣當成礦工費用,爲了解決這一問題,Artomicals通過指令操作,將每一個Arc-20代幣都作爲交易的第一個輸出來避免代幣的誤銷毀。
接下來,我們將分析比較兩個協議的異衕。
協議大緻分爲三步
{
“p”: “brc-20”,
“op”: “deploy”,
“tick”: “ordi”,
“max”: “21000000”,
“lim”: “1000”
}
由於部署者在部署代幣時,代幣信息本身無法被BTC所識別,因此需要一個索引器(indexer)來穫取鏈上相關數據併通過該數據在鏈下創建一個賬本來記録相關歷史以及處理相關操作併進行數據更新。
鏈下索引器需要精準的捕穫每次一代幣操作併更新線下賬本。但衕區塊鏈一樣,隨著交易的增多,節點存儲的數據將會越來越大,如何保證賬本的完整性以及在龐大的數據量中找到需要更改的信息,將會成爲brc-20的挑戰
衕樣的,Arc-20協議在部署代幣時也需要在BTC鏈上根據格式記録相關信息
program.command(‘init-dft’)
.description(‘Initialize fungible token (FT) atomical in decentralized issuance mode’)
.argument(‘<ticker>’, ‘string’)
.argument(‘<mint_amount>’, ‘number’)
.argument(‘<max_mints>’, ‘number’)
.argument(‘<mint_height>’, ‘number’)
.argument(‘<file>’, ‘string’)
.option(‘—rbf’, ‘Whether to enable RBF for transactions.’)
.option(‘—funding <string>’, ‘Use wallet alias wif key to be used for funding and change’)
.option(‘—satsbyte <number>’, ‘Satoshis per byte in fees’, ‘15’)
.option(‘—mintbitworkc <string>’, ‘Whether to require any bitwork proof of work to mint. Applies to the commit transaction.’)
.option(‘—mintbitworkr <string>’, ‘Whether to require any bitwork proof of work to mint. Applies to the reveal transaction.’)
.option(‘—bitworkc <string>’, ‘Whether to put any bitwork proof of work into the token mint. Applies to the commit transaction.’)
.option(‘—bitworkr <string>’, ‘Whether to put any bitwork proof of work into the token mint. Applies to the reveal transaction.’)
.option(‘—parent <string>’, ‘Whether to require a parent atomical to be spent along with the mint.’)
.option(‘—parentowner <string>’, ‘Wallet owner of the parent to spend along with the mint.’)
.option(‘—disablechalk’, ‘Whether to disable the real-time chalked logging of each hash for Bitwork mining. Improvements mining performance to set this flag’)
.action(async (ticker, mintAmount, maxMints, mintHeight, file, options) => {
…..
}
在atomicals-js cli源碼中可以找到初始化一個代幣的相關指令,必鬚要在鏈上記録的參數有:
ticker: 代幣名稱
mint_amount: mint總量
max_mints: 單次mint數量
mint_height: 指定開始mint的區塊高度
file: 相關元數據
但與Brc20不衕的是, Arc20採用了染色幣模型,在代幣相關信息録入BTC鏈上後,該協議將會把代幣與Sats做錨定:1 token = 1 sat。
衕時,染色幣模型的使用使得用戶在進行交易時可以直接通過BTC網絡實現而非鏈下賬本,因爲代幣餘額與UTXO中的聰保持一緻,代幣的相關變化都可以在鏈上直觀的反映。索引器在Arc-20中隻是用來讀取代幣在鏈上的相關部署信息,併且驗證哪些是符合Arc-20協議的代幣。
Brc-20的設計結構更依賴與鏈下賬本,而Arc-20更符合Btc的相關特性,併且相較於Brc-20會更去中心化。但衕時,染色幣模型使得Arc-20無法完成meme幣的髮售,因爲meme幣往往有很高的代幣總數,而1 token = 1 sat這一特性使得在髮售meme幣時需要消耗大量Btc