以太坊持久化存儲
Ⅰ 各區塊鏈架構的橫向比較
各區塊鏈架構的橫向比較
時常聽人們談起區塊鏈,從 2009 年比特幣誕生至今,各式各樣的區塊鏈系統或基於區塊鏈的應用不斷被開發出來,並被應用到大量的場景中,而區塊鏈技術本身也在不停地變化和改進。
區塊鏈又被稱為分布式賬本,與之對應的則是中心化賬本,比如銀行。與中心化賬本不同的是,分布式賬本依靠的是將賬本數據冗餘存儲在所有參與節點中,來保證賬本的安全性。簡單地說,區塊鏈會用到三種底層技術:點對點網路技術、密碼學技術和分布式一致性演算法。而通常,區塊鏈系統還會「免費附贈」一種被稱為智能合約的功能。智能合約雖然不是區塊鏈系統的必要組成部分,但由於區塊鏈天生所具備的去中心化特點,使它可以很好地為智能合約提供可信的計算環境。
為了適應不同場景的需求,區塊鏈系統在實際應用的過程中往往會需要進行各種改造,以滿足特定業務的要求,比如身份認證、共識機制、密鑰管理、交易頻次、響應時間、隱私保護、監管要求等。而實際應用區塊鏈系統的公司往往沒有進行這種改造的能力,於是市場上慢慢出現了一些用於定製專用區塊鏈系統的框架,採用這些框架就可以很方便地定製出適用於企業自身業務的區塊鏈系統。
本文將對目前市場上幾個典型的區塊鏈框架進行橫向對比,看看它們都有哪些特點,以及它們之間到底有哪些區別。為了保持對比的公正性,本文將只針對開源的區塊鏈框架進行討論。
各區塊鏈架構的簡單介紹
1、比特幣
比特幣(bitcoin)源自一名叫做中本聰(Satoshi Nakamoto)的人在 2008 年發表的一篇名為《比特幣:一種點對點的電子現金系統》(Bitcoin: A Peer-to-PeerElectronic Cash System)的論文,文中描述了一種被他稱為「比特幣」的電子貨幣及其演算法。在之後的幾年裡,比特幣不斷成長和成熟,而它的底層技術也逐漸被人們認識並抽象出來,這就是區塊鏈技術。比特幣作為區塊鏈的鼻祖,在區塊鏈的大家族中具有舉足輕重的地位,基於比特幣技術開發出的山寨幣(altcoins)的數量有如天上繁星,數不勝數。
從論文中可以得知,中本聰設計比特幣的目的,就是希望能夠實現一種完全基於點對點網路的電子現金系統,使得在線支付能夠直接由一方發起並支付給另外一方,中間不需要通過任何的中介機構。總結來說,他希望比特幣的設計能夠實現以下這些目標:
● 不需要中央機構就可以發行貨幣
● 不需要中介機構就可以支付
● 保持使用者的匿名性
● 交易無法被撤銷
從電子現金系統的角度來看,以上這些目標在比特幣中基本都得到了實現,但是依然有一些技術問題有待解決,比如延展性攻擊、區塊容量限制、區塊分叉、擴展性等。
在應用場景方面,目前大量的數字貨幣項目都是基於比特幣架構來設計的,此外還有一些比較實際的應用案例,比如彩色幣、t? 等。
彩色幣(coloredcoin),通過仔細跟蹤一些特定比特幣的來龍去脈,可以將它們與其他的比特幣區分開來,這些特定的比特幣就叫作彩色幣。它們具有一些特殊的屬性,從而具有與比特幣面值無關的價值,利用彩色幣的這種特性,使得開發者可以在比特幣網路上創建其它的數字資產。彩色幣本身就是比特幣,存儲和轉移不需要第三方,可以利用已經存在的比特幣的基礎。
t? 是比特幣區塊鏈在金融領域的應用,是美國在線零售商 Overstock 推出的基於區塊鏈的私有和公有股權交易平台。
2、以太坊
以太坊(ethereum) 的目標是提供一個帶有圖靈完備語言的區塊鏈,用這種語言可以創建合約來編寫任意狀態轉換功能,用戶只要簡單地用幾行代碼來實現邏輯,就能夠創建一個基於區塊鏈的應用程序,並應用於貨幣以外的場景。
以太坊的設計思想是不直接「支持」任何應用,但圖靈完備的編程語言意味著理論上任意的合約邏輯和任何類型的應用都可以被創建出來。總結來說,以太坊在比特幣的設計目標之外,還需要實現以下幾個目標:
● 圖靈完備的合約語言
● 內置的持久化狀態存儲
目前基於以太坊的合約項目已達到數百個,比較有名的有 Augur、TheDAO、Digix、FirstBlood 等。
Augur 是一個去中心化的預測市場平台,基於以太坊區塊鏈技術。用戶可以用數字貨幣進行預測和下注,依靠群眾的智慧來預判事件的發展結果,可以有效地消除對手方風險和伺服器的中心化風險。
限於篇幅,基於以太坊智能合約平台的項目就不多介紹了。基於以太坊的代碼進行改造的區塊鏈項目也有不少,但幾乎都是閉源項目,只能依靠一些公開的特性來推斷,所以就不在本文展開討論了。
3、Fabric
Fabric 是由 IBM 和 DAH 主導開發的一個區塊鏈框架,是超級帳本的項目成員之一。它的功能與以太坊類似,也是一個分布式的智能合約平台。但與以太坊和比特幣不同的是,它從一開始就是一個框架,而不是一個公有鏈,也沒有內置的代幣(token)。
超級賬本(hyperledger)是 Linux 基金會於 2015 年發起的推進區塊鏈技術和標準的開源項目,加入成員包括:荷蘭銀行(ABN AMRO)、埃森哲(Accenture)等十幾個不同利益體,目標是讓成員共同合作,共建開放平台,滿足來自多個不同行業各種用戶案例,並簡化業務流程。
作為一個區塊鏈框架,Fabric 採用了松耦合的設計,將共識機制、身份驗證等組件模塊化,使之在應用過程中可以方便地替換成自定義的模塊。除此之外,Fabric 還採用了容器技術,將智能合約代碼(chaincode)放在 docker 中運行,從而使得智能合約可以用幾乎任意的高級語言來編寫。
以下是 Fabric 的一些設計目標:
● 模塊化設計,組件可替換
● 運行於 docker 的智能合約
目前已經有不少採用 Fabric 架構進行開發的概念驗證(POC)項目在實施過程中,其中不乏一些金融機構做出的嘗試,不過由於項目剛剛起步,還沒有比較成熟的落地應用。
4、DNA
DNA(Distributed Networks Architecture,分布式網路架構),是由總部位於上海的區塊鏈創業公司「分布科技」開發的區塊鏈架構,可以同時支持公有鏈、聯盟鏈、私有鏈等不同應用類型和場景,並快速與業務系統集成。
與以太坊、Fabric不同的是,DNA 在系統底層實現了對多種數字資產的支持,用戶可以直接在鏈上創建自己的資產類型,並用智能合約來控制它的發行邏輯。對於絕大部分的區塊鏈應用場景,數字資產是必不可少的,而為每一種數字資產都開發一套基於智能合約的轉賬、發行邏輯是非常浪費且低效的。因此,由區塊鏈底層提供直接的數字資產功能是十分必要的。而對於那些完全不需要數字資產的應用場景,同樣可以基於 DNA 提供的智能合約架構來編寫任意的自定義邏輯來實現。
DNA 的設計目標主要有以下幾點:
● 多種數字資產的底層支持
● 圖靈完備的智能合約和狀態持久化
● 跨鏈互操作性
● 交易的最終性
目前已有不少金融機構採用 DNA 架構來進行區塊鏈概念驗證產品的開發。除此之外,還有一些已經落地的區塊鏈項目,如小蟻區塊鏈、法鏈等。
小蟻(antshares)是一個定位於資產數字化的公有鏈,將實體世界的資產和權益進行數字化,通過點對點網路進行登記發行、轉讓交易、清算交割等金融業務的去中心化網路協議。它採用社區化開發的模式,在架構上與 DNA 保持一致,從而可以與任何基於DNA 的區塊鏈系統發生跨鏈互操作。
法鏈是全球第一個大規模商用的法律存證區塊鏈,一個底層基於 DNA區塊鏈技術,並由多個機構參與建立和運營的證據記錄和保存系統。該系統沒有中心控制點,且數據一旦錄入,單個機構或節點無法篡改,從而滿足司法存證的要求。
5、Corda
Corda 是由一家總部位於紐約的區塊鏈創業公司 R3CEV 開發的,由其發起的 R3區塊鏈聯盟,至今已吸引了數十家巨頭銀行的參與,其中包括富國銀行、美國銀行、紐約梅隆銀行、花旗銀行、德國商業銀行、德意志銀行、匯豐銀行、三菱 UFJ 金融集團、摩根士丹利、澳大利亞國民銀行、加拿大皇家銀行、瑞典北歐斯安銀行(SEB)、法國興業銀行等。
從 R3 成員的組成上也可以看出,Corda 是一款專門用於銀行與銀行間業務的區塊鏈架構。盡管 R3 自己聲稱 Corda 不是區塊鏈,但從各項特徵來看,它具備區塊鏈的一些特性。
技術對比
1、數字資產
接下來,將對前文中提到的這些區塊鏈框架進行一系列的技術對比,並從多個維度展開介紹它們的區別與相似之處。
區塊鏈的內置代幣通常是一種經濟激勵模型和防止垃圾交易的手段。比特幣天生就有且只有一種內置代幣,所以在比特幣系統中所有的「交易」本質上都是轉賬行為,除非通過外部的協議層來給比特幣增加額外的數字資產。
以太坊和 DNA 具有內置代幣,它們的作用除了以上提到的經濟激勵和防止垃圾交易之外,還具有為系統內置功能提供一個收費的渠道。比如以太坊的智能合約運行需要消耗 GAS,而 DNA 的數字資產創建也需要消耗一定的代幣。
以太坊和 Fabric 沒有內置的多種數字資產支持,而是通過智能合約來實現相應的功能。這種方式的好處在於,系統設計可以做到非常簡潔,而且資產的行為可以任意指定,自由度極高。然而這樣的設計也會帶來一系列的負面影響,比如所有的資產創建者不得不自己編寫重復的業務邏輯,而用戶也沒有辦法通過統一的方式去操作自己的資產。
相比之下,DNA 和 Corda 採用了在底層支持多種數字資產的方式,讓資產創建者可以方便地創建自己的資產類型,而用戶也可以在同一個客戶端中管理所有的資產。對於邏輯更加復雜一點的業務場景來說,他們同樣可以利用智能合約來強化資產的功能,或者創建一種與資產無關的業務邏輯。
2、賬戶系統
UTXO(Unspent Transaction Output)是這樣一種機制:每一枚數字貨幣都會被登記在一個賬戶的所有權之下,一枚數字貨幣有兩種狀態,即要麼還沒有被花費,要麼已經被花費。當需要使用一枚數字貨幣的時候,就將它的狀態標記為已經花費,並創造一枚新的與之等額的數字貨幣,將它的所有權登記到新的賬戶之下。在這個過程中,被標記為已花費的數字貨幣就被稱為交易的輸入,而創造出來的新的數字貨幣被稱為交易的輸出,在一筆交易中,可以包含多個輸入和多個輸出,但是輸入之和與輸出之和必須相等。要計算一個賬戶的余額時,只要將所有登記在該賬戶下的數字貨幣的面額相加即可得出。
比特幣和 Corda 就採用了 UTXO 這樣一種賬戶機制,而以太坊則採用了更加直觀的余額機制:每個賬戶有一個狀態,狀態中直接記錄了賬戶當前的余額,轉賬的邏輯就是從一個賬戶中減去一部分余額,並在另一個賬戶中加上相應的余額,減去的部分和加上的部分必須相等。DNA 在賬戶機制上同時兼容這兩種模式。
那麼 UTXO 模式和余額模式,究竟有什麼優缺點呢?UTXO 最大的好處就是,基於 UTXO 的交易可以並行驗證且任意排序,因為所有的 UTXO 之間都是沒有關聯的,這對區塊鏈未來的伸縮性是有很大幫助的,而基於余額的設計就沒有這個優勢了;反過來,余額設計的優點是設計思想非常簡潔和直覺化,便於程序實現,特別是在智能合約中,要處理 UTXO 的狀態是非常困難的。這也是為什麼以智能合約為主要功能的以太坊選擇余額設計的原因,而比特幣、OnchainDNA、Corda 這些以數字資產為核心的架構則更傾向於 UTXO 設計。
關於身份認證,比特幣和以太坊基本沒有身份認證的設計,原因很簡單,因為這兩者的設計思想都是強調隱私和匿名,而反對監管和中心化,而身份認證就勢必要引入一些中心或者弱化的中心機構。Fabric、DNA 和 Corda 不約而同地選擇了採用數字證書來對用戶身份進行認證,原因在於這三者都有應用於現有金融系統的設計目標,而金融系統必然要考慮合規化並接受監管,此外現有的金融系統已經大范圍地採用數字證書方案,這樣便可以和區塊鏈系統快速集成。
Ⅱ NFT常用縮寫詞彙匯編
本文匯編了NFT領域中常用到的一些縮寫詞彙,按英文字母排序,持續更新新增詞彙。
A - AB - ArtBlocks,一個知名生成藝術項目,包含策展、游樂場、工廠三個系列。
Alpha - 市場上未被廣泛知曉的利好消息,知曉者較少,接近資訊核心的人可能先得好處。
Ape in/Aped - 加密圈術語,指未深思熟慮即買入NFT,因BAYC項目成功,猿猴在NFT圈地位獨特,故此用法。
AFM - 遠離元宇宙,指回歸現實世界。
Airdrop - 無行動獲贈NFT或代幣,可能是持有特定NFT的獎勵,也可能是詐騙手段。
Allow List - 允許名單,為獲得鑄造NFT或購買代幣的優先購買資格。
Anon - 匿名的縮寫,代表未公開身份的人,匿名團隊發布項目常見。
B - Bags - 包的替代名詞,表示資產,例句:我的NFT包價值上漲。
Bag Holder - 包持有人,描述持續持有價值遞減NFT的持有者。
Burn address - 燒毀地址,用於把資產發送至無法找回的地址。
Burner wallet - 可棄式錢包,用於高風險或不確定性的合約交互,或鑄造風險高的NFT。
C - CT - 加密貨幣推特賬號的縮寫。
Cold wallet - 冷錢包,離線儲存數位資產的設備,安全性高於熱錢包。
CC0 - 公眾領域貢獻宣告,釋出著作至公眾領域,不受著作許可權制。
Cash Grab - 單純為了賺錢而發行的項目,項目團隊不提供後續照顧。
D - Degen - 用來形容購買NFT的人,可能不了解風險但仍然購買。
Diamond Hands - 鑽石手,指長期持有特定NFT,不考慮市場變化。
Delist - 取消在公開市場販售NFT,理解為下架。
DAO - 分散式自治組織,一群沒有中心化組織的人聚集,通過區塊鏈投票決策。
DYOR - 加密圈術語,做好自己的研究的縮寫。
dApps - 去中心化應用程式,運行在區塊鏈上的應用。
Discord - 一種通訊軟體,最初為游戲玩家使用,現成為區塊鏈項目社群溝通工具。
Derivatives - 衍生品,源自原生項目,不一定指官方衍生項目。
DeFi - 去中心化金融,透過智能合約技術去除第三方介入。
Dutch Auction (DA) - 荷蘭式拍賣,隨時間降低價格的拍賣方式。
Doxxing - 肉搜,透露某人真實信息的行為。
E - ERC20 - 以太坊區塊鏈智能合約協議標准,發行虛擬代幣。
ERC721 - 以太坊區塊鏈智能合約協議標准,發行NFT,每個獨一無二。
ERC721A - 改良版ERC721,有效降低批量鑄造NFT的交易手續費。
ERC1155 - 以太坊區塊鏈智能合約協議標准,發行虛擬代幣或NFT,可發行多個具有編號的個體。
ETH - 以太幣,以太鏈通用貨幣。
F - Fren - 加密圈術語,指朋友。
Flip - 短時間內買賣NFT賺取價差。
Flipper - 專門買賣NFT以短期賺取價差套利的人。
Fork - 區塊鏈分叉,通常用於更新協議或修復漏洞。
FUD - 恐懼、不確定、懷疑的縮寫。
FOMO - 錯失恐懼症,害怕錯過某個機會而急於參與。
FP - 地板價的縮寫,二級市場特定NFT系列的最低可購買價格。
Flying - 某個區塊鏈資產價值快速上漲。
Flex - 炫耀。
Floor is lava - 形容地板價快速上漲的過程。
G - GM - 加密圈術語,早安的縮寫。
GMAEN - 早安、午安、晚安的縮寫。
GN - 加密圈術語,晚安的縮寫。
GMI - 加密圈術語,會成功的縮寫。
Gas (Gwei) - 瓦斯費,以太鏈交易產生的手續費。
Gas war - 交易手續費暴漲的現象。
Generative Art - 由演算法隨機生成的藝術品。
GOAT - 有史以來最偉大,充滿尊敬的縮寫。
Grail - 聖杯,形容最喜歡的NFT或NFT項目。
H - Hot wallet - 熱錢包,儲存於網路上的虛擬錢包。
Hodl - 長線持有的投資策略。
Honey Pot - 騙局,使用有漏洞的合約吸引投資者。
I - IRL - 真實生活的縮寫。
IPFS - 星際檔案系統,實現檔案分散式儲存、共享和持久化的網路傳輸協定。
J - JPEGs - NFT的一種戲稱,外觀為JPG、GIF、PNG、影片或聲音檔案。
K - Kevin - 來自Pixelmon項目中的生物名字,因與預告片外觀差異大而成為NFT界的迷因。
L - LFG - Let's f***ing go的縮寫,鼓勵或鼓舞的場合使用。
LL - Larvalabs的縮寫,創造Punks、Autoglyphs和Meebits的團隊。
Looks rare - 稀有度在NFT領域的重要性,看起來稀有常被嘲諷為地板價。
Liquidity - 可自由支配購買NFT或虛擬貨幣的資金。
M - Mint - 鑄造,與智慧合約互動生成NFT的行為。
Mint List - 鑄造名單,獲得優先購買資格的名單。
Moon - 價格大幅度上漲,比喻資產價值快速上升。
Memecoin - 由於迷因而誕生的貨幣,通常僅具有炒作價值。
Metaverse - 元宇宙,聚焦社交連接的3D虛擬世界之網路。
Metadata - NFT存儲在區塊鏈上的實際內容,通常是一串代碼指向特定位置。
Maxi - 相信某事物最好的人。
N - NFT - 非同質化代幣,在區塊鏈上獨一無二。
NFA - 加密圈術語,不是財務建議的縮寫。
NGMI - 加密圈術語,不會成功的縮寫。
NFT Archeologist - 挖掘舊NFT項目歷史定位的人。
Nitro - Discord的月費服務,提供進階功能。
O - OS - OpenSea的縮寫,主流NFT二級市場。
OG - 原始gangster的縮寫,指在某個領域資深的人。
On-chain NFT - 所有資訊都存儲在區塊鏈上的NFT。
Off-chain NFT - 資訊存儲在中心化資料儲存中心或IPFS的NFT。
Noob - 菜鳥、小白,與OG相反。
P - PFP - 個人資料圖片的縮寫。
Paperhands - 短時間內賣出NFT的人,貶義,與鑽石手相反。
Probably nothing - 可能沒甚麽,暗示可能有事發生,或是事情可疑。
P2E - 邊玩邊賺的縮寫。
POAP - 出席證明協議的縮寫,活動參加者的NFT證明。
Pumping - 資產價值快速上漲。
Q - 暫時從缺
R - Rug / Rug pull - 地毯/抽地毯,形容項目開發團隊捲款跑路。
Rugged - 形容項目開發團隊已捲款跑路。
Raid - 社群媒體快閃宣傳活動,號召社群成員大量宣傳特定訊息或NFT項目。
Right Click Save - 點擊右鍵儲存,嘲笑購買NFT的人。
Roadmap - 項目未來的規劃與執行細節。
Rekt - 資產表現糟糕時的描述。
Reveal - 揭露,指NFT從盲盒階段到公開結果的過程。
S - Secondary market - 二級市場,買家與賣家進行交易的市場。
Sweep the floor - 大量購買地板價NFT的行為。
Snag - 購買價值被嚴重低估的NFT。
Smart money - 聰明錢,機構投資者、市場專家等資金。
Stealth mints - 私下上線,未做宣傳的鑄造。
Smart contract - 智慧型合約,區塊鏈內制定的特殊協定。
Shilling - 宣傳NFT並鼓勵購買的行為。
Ser - 尊敬地介紹某人或分享觀點的方式,"Sir"的簡寫。
Soft rug - 項目開發團隊逐步淡出或無作為。
Szn - 季節的縮寫,市場周期。
Seems legit - 看起來合法,項目看起來有潛力。
Snipe - 開盒階段以低價格買到高價值NFT的行為。
T - Thin Floor - 地板價低但實際數量少,賣出幾個後會大幅拉高。
Traits - NFT所帶有的特徵、屬性。
U - Up only - 資產價值只往上走。
V - 暫時從缺
W - WL - 白名單的縮寫,獲得優先購買NFT或代幣的資格。
更多NFT資訊,歡迎關注微信公眾號:老魔杖。
Ⅲ 什麼人在區塊鏈掙錢(區塊鏈需要什麼人才)
區塊鏈技術是怎麼賺錢的?求解答。區塊鏈技術的賺錢方式有下面四種:
1、硬體和基礎設施,典型的有礦機生產、經銷鏈條,在這你可以通過買礦機、挖礦賺幣掙錢。
2、區塊鏈底層平台和通用技術,如以太坊等公鏈、隱私協議Nucypher等,在這你可以通過投資其代幣、構建鏈上應用、為用戶提供服務賺錢。
3、各類垂直應用,如基於區塊鏈的供應鏈溯源及金融,版權確認及交易等,你可以使用這些應用或是投資其代幣賺錢。
4、服務設施,如數字資產交易所和錢包,媒體產品等,你可以自己做一個交易所賺錢。
(3)以太坊持久化存儲擴展閱讀:
區塊鏈的類型
1、公有區塊鏈
公有區塊鏈(PublicBlockChains)是指:世界上任何個體或者團體都可以發送交易,且交易能夠獲得該區塊鏈的有效確認,任何人都可以參與其共識過程。
公有區塊鏈是最早的區塊鏈,也是應用最廣泛的區塊鏈,各大bitcoins系列的虛擬數字貨幣均基於公有區塊鏈,世界上有且僅有一條該幣種對應的區塊鏈。
2、聯合(行業)區塊鏈
行業區塊鏈(ConsortiumBlockChains):由某個群體內部指定多個預選的節點為記賬人,每個塊的生成由所有的預選節點共同決定(預選節點參與共識過程),其他接入節點可以參與交易。
3、私有區塊鏈
私有區塊鏈(PrivateBlockChains):僅僅使用區塊鏈的總賬技術進行記賬,可以是一個公司,也可以是個人,獨享該區塊鏈的寫入許可權,本鏈與其他的分布式存儲方案沒有太大區別。
Ⅳ mpt樹實現概述
概述:MPT樹是一種基於trie的數據結構,用於高效地存儲和處理增量的key-value對,特別適用於需要頻繁增刪改操作的場景。它通過遞歸實現所有操作,並支持兩種主要操作:根據變動生成新樹並持久化更改,以及從節點構造整棵樹以同步數據。
數據結構設計中,shortnode和fullnode分別存儲值和16個可能的子節點,其中shortnode實現了路徑壓縮。valuenode直接存儲值,而hashnode作為節點間引用,嵌套在節點中。節點通過計算nodehash確保唯一性,並使用RLP編碼存儲,以減少節點數。
基本操作包括創建樹、讀寫刪除和提交。創建時,根據給定的hash定位樹並可能從資料庫載入根節點。讀寫刪除通過遞歸處理節點,更新後節點標記為已修改,產生新根節點。Commit操作分為兩步:計算新hash並提交更改,確保新舊節點的唯一標識。
高級操作如同步和裁剪,MPT樹在以太坊中應用時,為了提高效率和避免資料庫緩存失效,會採用特殊策略,如快速同步和快照恢復。但裁剪節點時,由於MPT樹的特性,依賴離線處理而非實時引用計數。
Ⅳ 【深度知識】以太坊數據序列化RLP編碼/解碼原理
RLP(Recursive Length Prefix),中文翻譯過來叫遞歸長度前綴編碼,它是以太坊序列化所採用的編碼方式。RLP主要用於以太坊中數據的網路傳輸和持久化存儲。
對象序列化方法有很多種,常見的像JSON編碼,但是JSON有個明顯的缺點:編碼結果比較大。例如有如下的結構:
變數s序列化的結果是{"name":"icattlecoder","sex":"male"},字元串長度35,實際有效數據是icattlecoder 和male,共計16個位元組,我們可以看到JSON的序列化時引入了太多的冗餘信息。假設以太坊採用JSON來序列化,那麼本來50GB的區塊鏈可能現在就要100GB,當然實際沒這么簡單。
所以,以太坊需要設計一種結果更小的編碼方法。
RLP編碼的定義只處理兩類數據:一類是字元串(例如位元組數組),一類是列表。字元串指的是一串二進制數據,列表是一個嵌套遞歸的結構,裡面可以包含字元串和列表,例如["cat",["puppy","cow"],"horse",[[]],"pig",[""],"sheep"]就是一個復雜的列表。其他類型的數據需要轉成以上的兩類,轉換的規則不是RLP編碼定義的,可以根據自己的規則轉換,例如struct可以轉成列表,int可以轉成二進制(屬於字元串一類),以太坊中整數都以大端形式存儲。
從RLP編碼的名字可以看出它的特點:一個是遞歸,被編碼的數據是遞歸的結構,編碼演算法也是遞歸進行處理的;二是長度前綴,也就是RLP編碼都帶有一個前綴,這個前綴是跟被編碼數據的長度相關的,從下面的編碼規則中可以看出這一點。
對於值在[0, 127]之間的單個位元組,其編碼是其本身。
例1:a的編碼是97。
如果byte數組長度l <= 55,編碼的結果是數組本身,再加上128+l作為前綴。
例2:空字元串編碼是128,即128 = 128 + 0。
例3:abc編碼結果是131 97 98 99,其中131=128+len("abc"),97 98 99依次是a b c。
如果數組長度大於55, 編碼結果第一個是183加數組長度的編碼的長度,然後是數組長度的本身的編碼,最後是byte數組的編碼。
請把上面的規則多讀幾篇,特別是數組長度的編碼的長度。
例4:編碼下面這段字元串:
The length of this sentence is more than 55 bytes, I know it because I pre-designed it
這段字元串共86個位元組,而86的編碼只需要一個位元組,那就是它自己,因此,編碼的結果如下:
184 86 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
其中前三個位元組的計算方式如下:
184 = 183 + 1,因為數組長度86編碼後僅佔用一個位元組。
86即數組長度86
84是T的編碼
例5:編碼一個重復1024次"a"的字元串,其結果為:185 4 0 97 97 97 97 97 97 ...。
1024按 big endian編碼為004 0,省略掉前面的零,長度為2,因此185 = 183 + 2。
規則1~3定義了byte數組的編碼方案,下面介紹列表的編碼規則。在此之前,我們先定義列表長度是指子列表編碼後的長度之和。
如果列表長度小於55,編碼結果第一位是192加列表長度的編碼的長度,然後依次連接各子列表的編碼。
注意規則4本身是遞歸定義的。
例6:["abc", "def"]的編碼結果是200 131 97 98 99 131 100 101 102。
其中abc的編碼為131 97 98 99,def的編碼為131 100 101 102。兩個子字元串的編碼後總長度是8,因此編碼結果第一位計算得出:192 + 8 = 200。
如果列表長度超過55,編碼結果第一位是247加列表長度的編碼長度,然後是列表長度本身的編碼,最後依次連接各子列表的編碼。
規則5本身也是遞歸定義的,和規則3相似。
例7:
["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]
的編碼結果是:
248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
其中前兩個位元組的計算方式如下:
248 = 247 +1
88 = 86 + 2,在規則3的示例中,長度為86,而在此例中,由於有兩個子字元串,每個子字元串本身的長度的編碼各佔1位元組,因此總共佔2位元組。
第3個位元組179依據規則2得出179 = 128 + 51
第55個位元組163同樣依據規則2得出163 = 128 + 35
例8:最後我們再來看個稍復雜點的例子以加深理解遞歸長度前綴,
["abc",["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]]
編碼結果是:
248 94 131 97 98 99 248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
列表第一項字元串abc根據規則2,編碼結果為131 97 98 99,長度為4。
列表第二項也是一個列表項:
["The length of this sentence is more than 55 bytes, ", "I know it because I pre-designed it"]
根據規則5,結果為
248 88 179 84 104 101 32 108 101 110 103 116 104 32 111 102 32 116 104 105 115 32 115 101 110 116 101 110 99 101 32 105 115 32 109 111 114 101 32 116 104 97 110 32 53 53 32 98 121 116 101 115 44 32 163 73 32 107 110 111 119 32 105 116 32 98 101 99 97 117 115 101 32 73 32 112 114 101 45 100 101 115 105 103 110 101 100 32 105 116
長度為90,因此,整個列表的編碼結果第二位是90 + 4 = 94, 佔用1個位元組,第一位247 + 1 = 248
以上5條就是RPL的全部編碼規則。
各語言在具體實現RLP編碼時,首先需要將對像映射成byte數組或列表兩種形式。以go語言編碼struct為例,會將其映射為列表,例如Student這個對象處理成列表["icattlecoder","male"]
如果編碼map類型,可以採用以下列表形式:
[["",""],["",""],["",""]]
解碼時,首先根據編碼結果第一個位元組f的大小,執行以下的規則判斷:
1.如果f∈ [0,128),那麼它是一個位元組本身。
2.如果f∈[128,184),那麼它是一個長度不超過55的byte數組,數組的長度為 l=f-128
3.如果f∈[184,192),那麼它是一個長度超過55的數組,長度本身的編碼長度ll=f-183,然後從第二個位元組開始讀取長度為ll的bytes,按照BigEndian編碼成整數l,l即為數組的長度。
4.如果f∈(192,247],那麼它是一個編碼後總長度不超過55的列表,列表長度為l=f-192。遞歸使用規則1~4進行解碼。
5.如果f∈(247,256],那麼它是編碼後長度大於55的列表,其長度本身的編碼長度ll=f-247,然後從第二個位元組讀取長度為ll的bytes,按BigEndian編碼成整數l,l即為子列表長度。然後遞歸根據解碼規則進行解碼。
以上解釋了什麼叫遞歸長度前綴編碼,這個名字本身很好的解釋了編碼規則。
(1) 以太坊源碼學習—RLP編碼( https://segmentfault.com/a/1190000011763339 )
(2)簡單分析RLP編碼原理
( https://blog.csdn.net/itchosen/article/details/78183991 )
Ⅵ 元宇宙的發展前景
「元宇宙」,即「Metaverse」,一個在Facebook創始人扎克伯格表示將Facebook的公司名稱更改為Meta之後被「引爆」的新興概念名詞。科技界因之轟動,資本界因之「瘋狂」,而文學藝術界的各位在了解了元宇宙概念後,或許會生出許多期待——小說中的世界或有望實現。
來自科技界的轟動:扎克伯格將其推上高峰
2021年三月被稱為「元宇宙第一股」的沙盒游戲公司Roblox上市首日股價上漲54.4%,市值超過400億,2021年7月以社交起家的Facebook創始人扎克伯格表示,要在五年內將Facebook打造為「元宇宙」公司。2021年10月,Facebook公司改名為「Meta」徹底將「元宇宙」概念推向頂峰。2021年11月,微軟在Ignite會議上宣布將推出新的Mesh for Microsoft Teams軟體,待該平台上線後,不同地理位置的人可獲得協作和共享全息體驗,實現加入虛擬會議、發送聊天、協作處理共享文檔等更多功能。
元宇宙淺談:科技創新是永恆發展之道
元宇宙世界由來已久,但彼時的元宇宙更多的被看做「科幻」的一種表現方式。在文學作品中,藝術家們通過合理想像,在文學作品中構建出了一個超脫現世的虛擬互聯世界,人們通過某一設備媒介(游戲方艙或虛擬現實頭盔等)進入一個被某家或某幾家大廠搭建的虛擬世界,在這個世界中人們的生活與現實生活一般無二。
隨著現代科技技術的發展,我們似乎與小說中構建的科幻世界距離變近,全息投影、AR/VR技術創新、雲端生態搭建等等令人眼花繚亂的創新科技使得小說中的虛擬現實世界似乎近在咫尺,於是「元宇宙」的提出似乎也變得順理成章。
與此同時,現階段「元宇宙」搭建仍然存在眾多技術困難,其未來發展也可能會帶來的一系列社會問題和法律法規層面的規范性問題。從現階段技術發展來看,我們僅僅解決了通往元宇宙媒介的部分,如何真正意義上搭建一個虛擬世界才是真正困難的地方,因此概念炒作需要慎重,科技創新才是永恆的生存發展之道。我們的征途是星辰大海,但通往星辰大海的道路應當立足於不斷堅持科技創新的現在!
—— 以上數據參考前瞻產業研究院《中國虛擬現實(VR)行業市場需求與投資規劃分析報告》
Ⅶ 區塊鏈的項目編碼是什麼(區塊鏈代碼查詢)
區塊鏈一般概念摘要雖然是個前端開發,但是阻擋不了我八卦各種熱門的心。下面簡單匯總下一些學習到的概念性東西。
1、區塊鏈技術隨比特幣誕生,因此先了解比特幣概念
2、比特幣是什麼
(1)、基於分布式網路的數字貨幣
3、比特系統運行原理
(1)、所有節點都會保存完整賬本
(2)、賬本保持一致性
4、區塊鏈記賬原理
hash函數在區塊鏈技術中有廣泛的運用
(1)、哈希函數hash:任何信息hash後會得到一個簡短的摘要信息
(2)、hash特點:簡化信息、標識信息、隱匿信息、驗證信息
(3)、區塊鏈記賬會把時間節點的賬單信息hash,構成一個區塊
(4)、比特幣系統約10分鍾記賬一次,即每個區塊生成的時間間隔大約10分鍾
(5)、記錄下一個賬單時,會把上一個區塊的hash值和當前賬單的信息一起作為原始信息進行hash
(6)、每個區塊都包含了之前區塊的信息,這些區塊組合成了區塊鏈
5、比特幣的所有權-非對稱加密應用
比特幣系統使用了橢圓曲線簽名演算法,演算法的私鑰由32個位元組隨機數組成,通過私鑰可以計算出公鑰,公鑰經過一序列哈希演算法和編碼演算法得到比特幣地址,地址也可以理解為公鑰的摘要。
(1)、轉賬是把比特幣從一個地址轉移到另一個地址
(2)、地址私鑰是非對稱的關系,私鑰經過一系列的運算(其中包含兩次hash),就可以得到地址,但是從地址無法得到私鑰
(3)、轉賬成功後廣播其他節點,其他節點驗證成功後再轉發到相鄰的節點,廣播的信息包含了原始的信息和簽名信息
(4)、驗證,其他節點驗證簽名信息是不是付款方用私鑰對交易原始信息簽名產生的,如果是才記錄(再驗證有足夠余額)
6、比特幣如何挖礦
(1)、完成記賬的節點可以獲得系統給予的一定數量比特幣獎勵(這個獎勵過程也就是比特幣的發行過程,因此大家把記賬稱為挖礦)
(2)、一段時間內只有一人可以記賬成功,因此需要收集沒有被收集的原始交易信息,檢查有沒有餘額、正確簽名
(3)、為了提高記賬難度,十分鍾左右只有一人可以記賬,hash結果需要若干0開頭,並且進行hash時引入隨機數變數
(4)、隨著更多礦工的加入,游戲難度越來越大,計算難度加大,電力損耗等加大,國內電力成本低,中國算力占整個網路的一半以上
(5)、網路中只有最快解密的區塊,才會添加到賬本中,其他的節點復制,保證賬本的唯一性。如果有節點作弊,導致整個網路不通過,則會被丟棄再也不會記錄到總賬本中。因此所有節點都會遵守比特幣系統的共同協議。
【關於區塊鏈會延伸到那些領域的思考】:
由以上的概念可以總結出,區塊鏈技術存在這安全性、唯一性、去中心化。
原則上是可以避免部分信息泄露,讓確認方既可以確認你的身份,又無需暴露自己的真是用戶信息等。
目前區塊鏈技術集中被運用再比特幣,我覺得後續更大的意義應該在需要數據私密性、安全性的領域。
【關於區塊鏈目前發展的瓶頸和局限性思考】:
由於每個節點都參與了整個賬本記錄活動,難免造成資源的浪費和損耗。以及加大了每個節點的計算難度,後續的發展和普及需要每個節點的硬體提升。
區塊鏈編號是什麼意思?——區塊鏈編號,即區塊鏈咨詢服務名稱及備案編號。區塊鏈沒有通用協議,多是獨立運作,對區塊鏈進行備案編號,是建立通用協議配套制度的工作之一。
區塊編號作用是什麼用作是一個分類賬本,任何擁有許可權的人都可以分享並對其進行確認。
國家互聯網信息辦公室官網發布公告,披露第一批共197個境內區塊鏈信息服務名稱及備案編號。值得注意的是,「備案編號」並不能看做是給區塊鏈披上合法的「黃馬甲」,應正確認識「備案編號」的作用。
證券日報在文中指出,不可過度解讀「備案編號」的作用。網信辦表示,備案僅是對主體區塊鏈信息服務相關情況的登記,不代表對其機構、產品和服務的認可,並強調,任何機構和個人不得用於任何商業目的。
acm明星幣現在價格,有名氣嗎一.項目簡介:
Actinium(ACM)是一種基於區塊鏈技術的去中心化貨幣,旨在將密碼帶入每個客戶的口袋,每個商店,非常安全且易於使用。Actinium是一種閃電網路支持的加密貨幣,即時交易的手續費近乎為零。同時,具備原子交換功能以及許多其他的第二層解決方案。
二.項目信息(截止2019年9月6日)
·項目編碼:ACM
·總量:84,000,000
·流通量:13,516,241
·演算法:Lyra2z
·區塊時間:2.5分鍾
·區塊獎勵:50ACM
,交易所:CITEX.IO
三.點評
·Zerocash協議使得ACM能夠建立專門的ACM匿名交易,用以混淆每一個交易數據,包括交易金額、接發方識別信息等;
·ACM為了實現支付的便捷性,使用先進的閃電技術。
區塊鏈備案號碼是什麼
備案號是網站是否合法注冊經營的標志,可隨時到國家工業和信息化部網站備案系統上查詢該ICP備案的相關詳細信息。
根據《管理規定》要求,區塊鏈信息服務提供者應當在其對外提供服務的互聯網站、應用程序等顯著位置標明其備案編號。
備案僅是對主體區塊鏈信息服務相關情況的登記,不代表對其機構、產品和服務的認可,任何機構和個人不得用於任何商業目的。網信部門後續將會同各有關部門,依據《管理規定》對備案主體進行監督檢查,並督促未備案主體盡快履行備案義務。請尚未履行備案手續的相關機構和個人盡快申請備案。
第四批備案企業地區分布情況:
據備案清單顯示,第四批境內區塊鏈信息服務備案項目所在企業,有76家屬於北京企業,其餘的大部分企業集中在廣東、浙江、上海。
梳理發現,第四批名單中共有來自22個省直轄市自治區的企業。其中,北京、廣東、上海三家備案企業最多,分別為76家、57家、32家;上海緊隨其後為31家,江蘇以9家位列第五。
【深度知識】以太坊數據序列化RLP編碼/解碼原理RLP(RecursiveLengthPrefix),中文翻譯過來叫遞歸長度前綴編碼,它是以太坊序列化所採用的編碼方式。RLP主要用於以太坊中數據的網路傳輸和持久化存儲。
對象序列化方法有很多種,常見的像JSON編碼,但是JSON有個明顯的缺點:編碼結果比較大。例如有如下的結構:
變數s序列化的結果是{"name":"icattlecoder","sex":"male"},字元串長度35,實際有效數據是icattlecoder和male,共計16個位元組,我們可以看到JSON的序列化時引入了太多的冗餘信息。假設以太坊採用JSON來序列化,那麼本來50GB的區塊鏈可能現在就要100GB,當然實際沒這么簡單。
所以,以太坊需要設計一種結果更小的編碼方法。
RLP編碼的定義只處理兩類數據:一類是字元串(例如位元組數組),一類是列表。字元串指的是一串二進制數據,列表是一個嵌套遞歸的結構,裡面可以包含字元串和列表,例如["cat",["puppy","cow"],"horse",[[]],"pig",[""],"sheep"]就是一個復雜的列表。其他類型的數據需要轉成以上的兩類,轉換的規則不是RLP編碼定義的,可以根據自己的規則轉換,例如struct可以轉成列表,int可以轉成二進制(屬於字元串一類),以太坊中整數都以大端形式存儲。
從RLP編碼的名字可以看出它的特點:一個是遞歸,被編碼的數據是遞歸的結構,編碼演算法也是遞歸進行處理的;二是長度前綴,也就是RLP編碼都帶有一個前綴,這個前綴是跟被編碼數據的長度相關的,從下面的編碼規則中可以看出這一點。
對於值在[0,127]之間的單個位元組,其編碼是其本身。
例1:a的編碼是97。
如果byte數組長度l=55,編碼的結果是數組本身,再加上128+l作為前綴。
例2:空字元串編碼是128,即128=128+0。
例3:abc編碼結果是131979899,其中131=128+len("abc"),979899依次是abc。
如果數組長度大於55,編碼結果第一個是183加數組長度的編碼的長度,然後是數組長度的本身的編碼,最後是byte數組的編碼。
請把上面的規則多讀幾篇,特別是數組長度的編碼的長度。
例4:編碼下面這段字元串:
,IknowitbecauseIpre-designedit
這段字元串共86個位元組,而86的編碼只需要一個位元組,那就是它自己,因此,編碼的結果如下:
510510311010110032105116
其中前三個位元組的計算方式如下:
184=183+1,因為數組長度86編碼後僅佔用一個位元組。
86即數組長度86
84是T的編碼
例5:編碼一個重復1024次"a"的字元串,其結果為:18540979797979797...。
1024按bigendian編碼為0040,省略掉前面的零,長度為2,因此185=183+2。
規則1~3定義了byte數組的編碼方案,下面介紹列表的編碼規則。在此之前,我們先定義列表長度是指子列表編碼後的長度之和。
如果列表長度小於55,編碼結果第一位是192加列表長度的編碼的長度,然後依次連接各子列表的編碼。
注意規則4本身是遞歸定義的。
例6:["abc","def"]的編碼結果是200131979899131100101102。
其中abc的編碼為131979899,def的編碼為131100101102。兩個子字元串的編碼後總長度是8,因此編碼結果第一位計算得出:192+8=200。
如果列表長度超過55,編碼結果第一位是247加列表長度的編碼長度,然後是列表長度本身的編碼,最後依次連接各子列表的編碼。
規則5本身也是遞歸定義的,和規則3相似。
例7:
[",","IknowitbecauseIpre-designedit"]
的編碼結果是:
其中前兩個位元組的計算方式如下:
248=247+1
88=86+2,在規則3的示例中,長度為86,而在此例中,由於有兩個子字元串,每個子字元串本身的長度的編碼各佔1位元組,因此總共佔2位元組。
第3個位元組179依據規則2得出179=128+51
第55個位元組163同樣依據規則2得出163=128+35
例8:最後我們再來看個稍復雜點的例子以加深理解遞歸長度前綴,
["abc",[",","IknowitbecauseIpre-designedit"]]
編碼結果是:
24894131979899
列表第一項字元串abc根據規則2,編碼結果為131979899,長度為4。
列表第二項也是一個列表項:
[",","IknowitbecauseIpre-designedit"]
根據規則5,結果為
長度為90,因此,整個列表的編碼結果第二位是90+4=94,佔用1個位元組,第一位247+1=248
以上5條就是RPL的全部編碼規則。
各語言在具體實現RLP編碼時,首先需要將對像映射成byte數組或列表兩種形式。以go語言編碼struct為例,會將其映射為列表,例如Student這個對象處理成列表["icattlecoder","male"]
如果編碼map類型,可以採用以下列表形式:
[["",""],["",""],["",""]]
解碼時,首先根據編碼結果第一個位元組f的大小,執行以下的規則判斷:
1.如果f∈[0,128),那麼它是一個位元組本身。
2.如果f∈[128,184),那麼它是一個長度不超過55的byte數組,數組的長度為l=f-128
3.如果f∈[184,192),那麼它是一個長度超過55的數組,長度本身的編碼長度ll=f-183,然後從第二個位元組開始讀取長度為ll的bytes,按照BigEndian編碼成整數l,l即為數組的長度。
4.如果f∈(192,247],那麼它是一個編碼後總長度不超過55的列表,列表長度為l=f-192。遞歸使用規則1~4進行解碼。
5.如果f∈(247,256],那麼它是編碼後長度大於55的列表,其長度本身的編碼長度ll=f-247,然後從第二個位元組讀取長度為ll的bytes,按BigEndian編碼成整數l,l即為子列表長度。然後遞歸根據解碼規則進行解碼。
以上解釋了什麼叫遞歸長度前綴編碼,這個名字本身很好的解釋了編碼規則。
(1)以太坊源碼學習—RLP編碼()
(2)簡單分析RLP編碼原理
()