在PolygonzkEVM的第一篇文章里,我們總結了PolygonzkEVM的整體框架以及交易執行流程,同時也分析了PolygonzkEVM是如何實現計算擴容的同時繼承了L1的安全性的;在這篇文章里,我們將依托上篇文章建立的框架,深入PolygonzkEVM關于Sequencer和Bridge更多的技術細節,同時也探討未來潛在的去中心化Sequencer架構的不同特點。
一、深入解析zkEVMBridge
在上一篇文章里,我們介紹PloygonzkEVM的過程中,實際上缺失了很重要的一個部分,就是PolygonzkEVM的原生橋。
1.跨鏈數據狀態管理
PolygonzkEVM在L1和L2分別維護了一棵ExitTree,名字分別為L1ExitMerkletree和L2ExitMerkletree。但是為了更好的管理這兩棵樹,PolygonzkEVM很聰明的將這兩棵樹結合在了一起,如下圖:
也就是用分別把L1ExitTreeRoot作為GlobalExitTree的左葉子節點,把L2ExitTreeRoot作為GlobalExitTree的右葉子節點。不過需要注意這里L1TreeRoot和L2TreeRoot是SparseMerkleTree(SMT),而GlobalExitTree是BinaryMerkleTree。
L1/L2ExitTree葉子節點的基本信息如下:
2.跨鏈流程
在PolygonzkEVM的合約設計中,還是盡可能的將Bridge和Consensus合約盡可能的解耦。目前其在L1部署的合約主要分為3個,如下圖所示:
需要注意的是他們之間不是繼承關系,都是獨立的合約,PolygonZkEVMBridge和PolygonZkEVM都會調用PolygonZkEVMGlobalExitRoot來更新或驗證GlobalExitTreeRoot。
1)?L1→L2的跨鏈流程
L1→L2的跨鏈流程對應上圖的橙色標識的三個步驟:
對應以下代碼中的BatchData的結構體中的globalExitRoot:
PolygonZkEVMBridge在L2的合約
https://testnet-zkevm.polygonscan.com/tx/0x2a742f2f8a7b8635a76cc70b4574bebb1a81b2c0c1a618188773a1f8f2283bb8https://testnet-zkevm.polygonscan.com/address/0x39e780d8800f7396e8b7530a8925b14025aedc77#code
Ordinals Market和Bitcoin Miladys聯合推出NFT遷移新標準BRC-721E:5月30日消息,比特幣NFT市場Ordinals Market和Bitcoin Miladys聯合發布了BRC-721E標準,允許將不可變的、可驗證的ERC-721 NFT遷移至Ordinals,而無需事先嵌入整個NFT系列。
在橋接NFT時,BRC-721E將數據直接編碼到一個銷毀交易中,銷毀交易會指定一個比特幣地址來接收銘文。之前Teleburn要求在銷毀ETH NFT之前知道銘文ID,但BRC-721E允許在刻錄之前進行銷毀,這也意味著銷毀交易同時充當了鏈上銘文請求,用戶也可以使用這個接收空投。
此外,該標準運行原理是索引器從兩條鏈收集數據,以極低的成本在比特幣上提供豐富的動態元數據。該標準還具備未來升級和附加鏈上數據的能力。[2023/5/30 11:47:56]
2)L2→L1的跨鏈流程
用戶調用部署在L2的Bridge合約(PolygonZkEVMBridge.sol)中的Bridge()函數發送一筆L2-Bridge-Tx,這會更新添加一個新節點在L2ExitTree中,然后依次更新L2ExitTreeRoot和GlobalExitTreeRoot。
接下來當Sequencer會把這筆L2-Bridge-Tx放到某一個Batch中發送到L1的共識和DA合約(PolygonZkEVM.sol)中。
然后在之后Aggregator調用trustedVerifyBatches()往L1提交validityproof的時候,實際上也會把L2ExitRoot也一并作為Input進行上傳,也就是以下函數的中的NewLocalExitRoot,它代表了L2有新的BridgeToL1的交易,但是這些交易目前在L1還不能提款,需要等待這個新的NewLocalExitRoot被驗證成功。
接下來這個傳入的NewLocalExitRoot也會作為驗證電路的一部分,輸入這個驗證邏輯是我在L2發生的這些新的BridgeToL1的交易是不是導致L2ExitTreeRoot變成當前這個提交的NewLocalExitRoot。
如果這個這個ValidityProof驗證通過,那么L1的GlobalExitRootManager會更新L2ExittrreRoot和GlobalExitTreeRoot:
globalExitRootManager.updateExitRoot(newLocalExitRoot);
這個時候,用戶就可以調用部署在L1的Bridge合約(PolygonZkEVMBridge.sol)的ClaimAsset()函數并給出相應的MerklePath進行提款,跨鏈交易的也就完美結束。
二、PolygonzkEVM如何抗審查
在上篇文章,我們介紹了TrustedSequencer,由官方運行的SingleSequencer,基本上L2網絡的交易都會提交給這個TrustedSequencer,并且可以獲得一個及時SequencerFinality。
Lookonchain:Binance過去24小時在Tron網絡鑄造6.57億枚TUSD:3月12日消息,據Lookonchain監測顯示,在過去24小時內,Binance在Tron網絡上鑄造了6.57億枚TUSD。[2023/3/12 12:58:29]
而實際上用戶還可以通過另一種方式直接提交交易到L1的合約中,而不需要通過TrustedSequencer,從而保證了整個網絡仍然具備一定的抗審查的特性。
1.執行流程
1)用戶調用L1合約中的ForceBatch函數,通過這個函數可以用戶可以把自己想要執行的L2交易直接送到L1的合約中的。
2)合約中會將這些Transactions打包成一個Batch,并且記錄在合約中一個ForceBatches的Mapping中。
3)TrustedSequence監聽到ForceBatches中有新的ForceBatch的時候,會將其同步到本地的節點中,然后會在下次往L1提交Batches的時候包含這個ForceBatch。
4)不過這里還存在一種特殊情況,如果TrustedSequence如果宕機了,或者故意不提交某個用戶提交的ForceBatch,那么在五天之后用戶可以自己調用L1合約中的SequenceForceBatches()函數,讓這筆ForceBatch進入到L1合約中的SequencedBatches,也就意味著這筆ForceBatch在Rollup中的交易順序被L1合約最終確定,即便是TrustedSequence也無法再更改這個ForceBatch的交易順序。(實際上所有Rollup都會有這樣的特性來提供抗審查特性比如Arbitrum的SequenceInbox和Inbox)。
不過這里推薦大家盡可能不要通過ForceBatch的方式提交Rollup的交易,因為通過這種方式,你在調用ForceBatch往L1提交自己的交易的時候會暴露你的交易內容,而這個時候交易順序還沒被確認(需要等待Sequence同步ForceBatch并通過SequenceBatch()再一次提交到L1的時候交易順序才被真正確認)同時你已經沒辦法取消你的交易了,這個時候你有很大的可能被搶跑。
這似乎這并不能真正的抗審查,因為ForceBatch的方式存在被搶跑的風險,用戶真的會用這個功能嗎?
2.Sequencer的真正狀態
從上文我們可以得知,Sequence會從L1同步ForceBatch中的交易到本地節點進行執行,于是Sequence的真正狀態如下圖所示:
Bn表示用戶直接提交給Sequence的交易執行后得出的結果;FBn表示Sequence同步ForceBatch的交易進行執行后得出的結果。
https://zkevm.polygon.technology/
三、L2網絡存在的三種不同的Finality
PeckShield:Defrost_Finance被黑客利用,損失約173,000美元:金色財經報道,PeckShield監測,Defrost_Finance被利用,導致黑客獲得約173,000美元的收益。由于 flashloan()/deposit() 函數缺少可重入鎖,因此黑客攻擊成為可能,黑客使用該函數在不償還的情況下借出所有 USDC。[2022/12/23 22:03:53]
接下來我們回顧下Ploygon的整體架構,為接下來的去中心化Sequencer思考做好鋪墊。
我們需要關注到。對于Sequencer和Aggregator來說,他們的狀態都是通過Syschronizer從一層合約中進行同步的,他們之間并不是直接通信的。
1)三種Finality
因此我們可以認為目前整個網絡存在三種不同程度的Finality,我們給它命名成SequencerFinality,DAFinality和Verified?Finality。
a.第一種SequecerFinality,在有一些文章中也將這種Finality稱為SoftFinality,但是我覺得叫做SequenecerFinality更為合適,因為這個Finality其實是SingleSequencer給的狀態承諾。
Sequencer接受到用戶交易之后,執行后給出的狀態,這是最不安全的狀態;但是在目前官方SingleSequencer的場景下,卻可以在保證安全的同時帶來極致的用戶體驗。在目前單一Sequencer的Rollup網絡中,基本上都可以體驗到即時確認的快樂。不過,SingleSequencer最大的風險就是Sequencer宕機,這會導致整個L2網絡基本癱瘓,不過由于DA層是位于以太坊上的,依然可以在之后部分恢復L2網絡宕機前的狀態;不過那部分來不及發送到L1的L2交易將無法被恢復。
b.第二種DAFinality,代表這些交易已經被提交到L1的DA層合約上,此時交易順序也被確定了。
TrustedSequencer已經調用SequenceBatch將交易發送到L1上,在這種情況下,交易已經被DA層包含;在Polygon的設計中,由于單一TrustedSequencer的原因,所以可以確保上傳到L1合約上進行DA的交易都是有效交易。我們可以認為當一筆交易被TrustedSequencer上傳到L1合約中的時候,這個時候它已經被Rollup網絡承認了,并且在之后Aggregator會提供ValidityProof讓這筆交易真正無法被Revert(除非L1Reorg)。
c.第三種VerifiedFinality指的是這筆交易已經通過ValidityProof的驗證了,屬于真正的Finality;在一些文章中也把它叫做HardFinality。
當Aggregator為一批上傳到DA層的交易提供的ValidityProof被合約驗證通過的時候,這個時候我們認為這些交易已經無法被Revert了(除非L1Reorg)。我們在上一篇文章里提到過,目前提交到DA層的交易到驗證validityproof的通過的時間是30分鐘,同時Aggregator也可以通過提供ValidityProof從而獲得足夠的Matic報酬。
2)Aggregator同步狀態的取舍
假如我們這里假設提供ValidityProof是有利可圖的,那么對于Aggregator來說,最好的同步交易的方式,不是在L1的DA層合約中同步,而是直接跟TrustedSequencer建立rpc鏈接,直接從TrustedSequencer獲取最新的交易,這樣生成ValidityProof會更快,從而相比其他從DA合約中獲取交易的Aggregator更有競爭優勢,因為提供ValidityProof這件事情是先到先得,對于一批交易來說也僅僅需要一個聚合的validityproof,第一個提交ValidityProof的Aggregator可以拿走對應交易的Matic獎勵,其他Aggregator生成的ValidityProof也無法再獲得任何獎勵。
歐易OKX上線BNB:據官方消息,歐易OKX宣布上線BNB (BNB)。BNB充值將于12月20日21:00 (HKT)開放;BNB/USDT,BNB/USDC的開盤時間為12月21日11:00 (HKT);BNB提現將于12月22日11:00 (HKT)開放。[2022/12/21 21:57:10]
不過目前實際上Polygon跟TrustedSequencer角色一樣,也有一個TrustedAggregator,來處理生成和提交ValidityProof的工作。
https://zkevm.polygon.technology/
四、Sequencer的未來
接下來,我們繼續是關于去中心化Sequencer的思考。首先第一個問題是我們為什么需要去中心化的Sequencer?因為我們希望Rollup能在擴容以太坊的計算能力的同時,繼承以太坊的安全性和去中心化程度。而當前SingleSequencer的方案顯然達不到繼承以太坊的去中心化程度的目標。再繼續勾畫去中心化Sequencer的未來之前,我們先來回顧Sequencer的工作。以PolygonzkEVM為例,目前TrustedSequencer對交易的處理會遵循FCFS,先到的交易先進行處理,并行Mempool也是私有的,盡可能保護用戶的交易不被MEV。
當收集到一定量的交易之后,會把它們封裝成Batches上傳到L1合約中對應的DA的位置,并且在第一篇文章中我們也提到了這些了Sequencer上傳的Batch中實際上已經通過在后一個Batch包含前一個Batch的哈希的方式確定了交易的順序。因此我們認為Sequencer的工作類似L1Proposer的工作,提議了一批交易,并且確認了交易的順序。
因為我們是從PolygonzkEVM開始介紹去中心化Sequencer的,我們就先介紹PolygonzkEVM的去中心化Sequencer方案ProofOfEfficiency(效率證明)。
1.Proof-0f-Efficiency?
1)方案描述
在POE的設計中,允許任何人成為Sequencer并且向L1提交RollupBlock的,Rollup網絡的交易順序取決于交易被提交到L1的RollupDA合約的順序。
如下圖,用戶都可以自行選擇將交易發送給哪個Sequencer,甚至可以自己成為Sequencer,這些Sequencer在收到足夠的交易之后,會將這些交易打包成Batch,然后往L1上提交。
這些Sequencer需要考慮利潤問題:
Sequencer成本=L1gascost?+generatezkProoffeeSequencer收入=L2gasfee
所以Sequencer需要考量將至少多少筆交易打成一個Batch提交L1才是有利可圖的。但是Sequencer還需要考慮另外一個問題,時效性問題,如果一個Sequencer的提交交易速度過慢,那么它的用戶可能會流失到其他提供更快確認的Sequencer那里。
2)方案可行性
首先這個方案能運轉的核心原因是Polygon的DA部分沒有做任何狀態承諾,僅僅確定了交易順序;狀態承諾(Sequencer承諾交易執行后對應的新的世界狀態,但是這個狀態未被ValidityProof或者FraudProof驗證的狀態)是在提交ValidityProof的時候才會給出,這是這個方案能執行的核心原因。
上周比特幣基金凈流入1.259億美元,以太坊基金遭遇連續第九周資金外流:金色財經報道,據CoinShares報告顯示,在截至6月3日的一周內,專注于比特幣的投資基金凈流入 1.259 億美元,使年初以來的凈流入總額達到 5.06 億美元。總體而言,加密基金凈流入約 1 億美元,這意味著比特幣基金的流入額彌補了山寨幣基金的流出。
以太坊投資產品凈流出 3200 萬美元,已遭遇連續第九周的資金外流,今年至今已流出超 3.5 億美元。管理一種以上加密貨幣的多資產基金上周凈流入 430 萬美元,自今年年初以來總流入量高達 2.01 億美元,CoinShares研究主管 JamesButterfill表示,這種差異表現表明投資者正涌向比特幣的相對安全性。[2022/6/7 4:07:13]
實際上像Arbitrum在提交交易到DA合約中的時候也沒有做任何狀態承諾,但是Optimism在提交交易到DA層的時候是攜帶狀態承諾的,所以理論上Arbitrum也可以運用POE來實現去中心化Sequencer,但是Optimism則不行。
3)為什么攜帶狀態承諾就不能運用POE?
因為在多個Sequencer幾乎同時往L1提交Batch的時候,實際上沒有一個Sequencer可以保證最終在DA合約上L2的交易順序到底是怎樣,所以如果攜帶狀態承諾,大概率會導致整個Batch無法通過ValidityProof或者FraudProof的驗證。
4)如何處理無效交易?
無效交易指的是比如賬戶的Nonce過低,賬戶余額不足以支付Gas費用的交易,當這些交易在L1(Geth)是不會被放入到區塊的,因為如果一個區塊中包含一筆無效交易,都會導致整個區塊變成無效區塊,Validator不會給這種區塊投票,Propoer也不會提案這種區塊。
在當前SingleSequencer的情況下,L2網絡是有能力辨別這種無效區塊的,并且可以避免在L1DA合約中避免包含這種交易,這可以避免浪費L1的區塊空間。
但是采用POE之后,Sequencer實際上失去了辨別這種無效交易的能力,因此在L1的驗證交易帶來的狀態變更過程中,也需要將這種情況考慮進去,并且Sequencer提交無效交易是無法獲得用戶的手續費的。
5)PublicMempool(公共交易池)?
采用POE之后,如果這些去中心化的Sequencer之間會存在PublicMempool,那么會導致用戶一筆交易被不同的Sequencer提交多次,當然只有第一次提交的交易是有效交易,也只有這交易最終能獲得用戶的手續費。
6)Sequencer為何無法預測執行結果
在這種PermissonlessSequencer的模型下,一個Sequencer是無法給用戶提供及時的SequencerFinality,因為Sequencer預測的最終上鏈的的交易順序和實際的交易順序會有偏差,這個偏差是由于可能有多個Sequencer在幾乎同個時刻向L1的DA合約提交了交易Batch,在這種情況下很難保證這些交易Batch的實際順序是否跟預測順序相同。
因此Sequencer同步自身狀態的時候,也會從L1的DA合約上同步最新被提交的交易Batch并執行來獲得最新狀態,而不是其他Sequencer那里同步狀態。
7)?L2的MEV流失到L1
由于交易任何人都可以成為Sequencer提交Rollup網絡的交易,并且提交交易Batch的交易實際上跟L1的普通交易無異,因此它實際上還是會經過MEVBoost的整個流程,意味著L2網絡的MEV都會流失到MEVBoost模塊。
8)Aggregator的設計
在POE的設計上,Aggregator同樣也是Permissionless的,但是由于ValidityProof實際上只需要一個正確的交易,也就意味著只有第一個為交易提交正確的ValidityProof的Aggregator才能獲得獎勵。因此作為Aggregator,你需要權衡提交的ValidityProof的證明范圍,提交時間以及提交ValidityProof可以獲得的Matic獎勵之間的關系,最終找出一個最有競爭力的策略。
似乎,利用這種自由市場競爭策略,可以讓交易對應的ValidityProof的生成速度達到最快。
https://ethresear.ch/t/proof-of-efficiency-a-new-consensus-mechanism-for-zk-rollups/11988
8)總結
POE可以帶來完全PermissionLess的網絡,并且整個網絡可能也不會有宕機的風險,但是L1的DA合約中可能包含無效交易(比如相同Nonce的交易),MEV都被L1網絡獲取,并且只能提供DAFinality和VerifiedFinality。
2.BasedRollup
BasedRollup是期望將Rollup網絡的SingleSequencer的工作委托給以太坊的proposer去完成。它會要求每個Proposer提案L1的區塊需要包含一個有效的Rollup區塊。
因此L1網絡的BlockBuilder需要運行一個Rollup的全節點用來接受L2的交易,并且構建最大價值的RollupBlock。
這樣的方案的好處是可以最大程度的繼承了L1的安全性以及去中心化程度,但是也會導致只能提供SequencerFinality和VerifiedFinality,L2的MEV也會都流失到L1同時也需要對以太坊客戶端的代碼進行修改,這也可能會影響L1的安全性。
3.ShareSequencing
SharedRollup相比BasedRollup將構建和提交RollupBlock的工作交給以太坊的Propoer,則是將這個工作交給ShareSequencers中的委員會。
3.1.具體流程如下:
不同Rollup的用戶都可以直接向SharedSequencers所在的網絡直接發送Rollup的交易SharedSequencers會在內部運行一個BFT共識,在每一輪選出一個SequencerLeader來對交易進行排序并構建對應的RollupBlock.然后將這些RollupBlock提交到不同的Rollup網絡對應在L1上的DA合約不同的Rollup網絡再通過L1的DA合約同步網絡中的最新交易,然后進入到他們自身驗證ValidityProof或者FraudProof的流程。
3.2.SharedSequencer架構的潛在影響
1)多個Rollup網絡共用一個SharedSequencerCommittee
2)從單個Rollup的角度來看,只是把把官方運行的SingleSequencer委托給了這個SharedSequencerCommittee
3)在每一輪從SharedSequencerCommittee中會選出一個SequencerLeader,負責對接入這個SharedSequencers網絡的RollupBlock進行構建,并且依次將這些RollupBlock提交到對應Rollup在以太坊上的DA合約內。
a.比如A需要將Arbitrum上USDC跨鏈到Optimism上,那么正常流程是它會在Arbitrum上先進行Lock,等待Lock成功之后,再去Optimism上提交自己在Arbitrum的LockProof(e.g.MerkleTreePath+TreeRoot),然后在Optimism上Mint出來對應的USDC資產;
b.當用戶向SharedSequencers提交這樣一個交易的時候,每一輪的SeuqnecerLeader實際上可以將ArbitrumLock的操作+OptimismMint的操作放在同一時刻的RollupBlock進行執行,這樣可以帶來巨大的用戶體驗提升;
c.但是它依舊無法做到像同一個Rollup網絡的用戶體驗,比如Mint的時候你依然需要提供你的LockProof;
d.所以我們可以認為接入到這個SharedSequencers網絡中的Rollup們是一個接近于完全同步的系統;
e.接近完全同步的系統有什么作用呢?
f.可以提供原子跨鏈服務,因為每一輪選出的SequencerLeader擁有排序所有Rollup交易的權力,所以他有能力構建原子跨鏈的交易。
4)跨鏈MEV的角度
因為每一輪的LeaderSequencer擁有所有RollupBlock的排序權力,所以理論上可以捕獲所有的跨鏈MEV,感覺之后SharedSequencer也需要引入或者直接接入MEVBoost這種MEV架構,因為從目前看各個Rollup網絡的區塊間隔都會遠遠快于以太坊的區塊間隔,比如Optimism的2s每一塊,Arbitrum最快是0.25s出一塊。因此作為每一輪的SequencerLeader構造RollupBlock的計算量其實并不小,因此感覺生態成熟起來之后也會有相應的MEV架構來輔助構造最大價值的RollupBlock。
5)從Decentralization和Liveness的角度看SharedSequencers
因為SharedSequencerCommittee內部會用BFT共識來在每一輪選擇出一個SequencerLeader來提案所有的RollupBlock,所以Decentralization和Liveness都要比目前的SingleSequencer方案強大不少。
6)從生態的角度
a.對于不同的Rollup擁有了更好的共存的理由,因為用戶可以很方便的在各個Rollup的網絡中進行資產轉移,也可以更好的對實現以太坊生態的負載均衡。
b.對于不同的正在構造ShreadSequencer的項目而言,可能就是你死我活的競爭,因為從用戶角度和目前各個Rollup都是SignleSequencer的角度而言,似乎在SharedSequencer這條賽道會出現贏家通吃的問題。
7)Finality角度
因為本質上還是SingleSequencer,所以無論是SequencerFinality還是VerifiedFinality都跟原來是一樣的。
3.3.潛在風險
因為Rollup之間不一定是同構Rollup,比如Arbitrum和polygonzkEVM之間的跨鏈,那么意味著跨鏈交易對應在Arbitrum和polygonzkEVM之上交易的VerifiedFinality并不一致,比如我在PolygonzkEVM之上的mint交易已經獲得VerifiedFinality(提交了ValidityProof),但是此時我在Arbitrum上的Lock交易僅獲得了DAFinality(需要等待7天挑戰期),如果我在這個時候成功Revert了我在Arbiturm的交易,那么也就意味著:我實際上在PolygonzkEVM無成本鑄造了很多跨鏈資產。
3.4總結
優勢:
a.MEV可以被Rollup網絡獲取,并且還可以額外獲取更多的跨鏈MEV;
b.用戶跨Rollup體驗好,并且能讓Rollup之間由競爭關系轉為共生關系,每個Rollup都可以提供自己獨特的價值,然后與其他Rollup網絡組合成可以為用戶提供各種各樣定制化服務的網絡;
c.相比SignleSequencer,網絡的去中心化程度得到了大幅度增強,并且網絡的穩定性大大增強了,在某一個SequencerLeader不出塊的時候,會及時輪換一個新的SequencerLeader進行出塊;
d.網絡的三種Finality都跟原來SingleSequencer保持一致。
劣勢:
本質上還是SingleSequencer的模型,并且也引入了新的攻擊向量。
五、總結
在這篇文章我們詳細結構了PolygonzkEVM的bridge以及Sequencer更多的技術細節,在下篇文章也是最后一篇文章,會繼續解剖zkEVM的技術細節,敬請期待。
4月19日,新創建的某巨鯨錢包內的資產價值為88.5萬美元,而如今價值1340萬美元。該巨鯨如何在16天內增值15倍的? 如何找到這個錢包的? 利用Token?Analyzooor打開DuneA.
1900/1/1 0:00:00最近Brc20生態上的土狗雖然熱度下來了,但是還有很多人想入場。或者說還有狠人沒有搞懂brc20的玩法,那我們就來看看即使你不懂代碼,怎么在Brc20平臺上發幣、買幣、轉幣.
1900/1/1 0:00:00當EIP-1559于2021年8月在以太坊上實施時,這標志著網絡開始銷毀ETH。該升級將用戶以前支付給區塊驗證者(稱為基礎費用)的部分費用重新定向銷毀.
1900/1/1 0:00:00最近,DeepDAO進行的一項研究,發現至少有幾十個快照空間主要對缺乏任何嚴肅性或操作性的提案進行投票.
1900/1/1 0:00:00自Ordinals問世以來,比特幣inscription市場一直都很小眾,但BRC20標準的出現改變了這一局面。當ordi萬倍神話還在耳邊傳揚時,比特幣NFT小圖片市場也順勢打破了冷寂.
1900/1/1 0:00:00大家好,我是向丹Christina。2018年7月12日,是我在滴滴2周年的日子,也是這一天,我正式告別桔廠allin到Bibox,一家致力于成為“百年老店”的區塊鏈企業.
1900/1/1 0:00:00