A. 浠ュお鍧婄熆鏈虹畻鍔涙庝箞鏍
浠ュお鍧婄熆鏈虹畻鍔涙庝箞綆
浠ュお鍧婃槸涓縐嶅熀浜庡尯鍧楅摼鐨勫姞瀵嗚揣甯侊紝鍏剁熆鏈虹畻鍔涙槸鎸囩敤浜庤В鍐沖尯鍧楅摼涓鐨勫瘑鐮佸﹂毦棰樼殑璁$畻鑳藉姏銆備互澶鍧婇噰鐢ㄤ簡涓縐嶅悕涓衡滃伐浣滈噺璇佹槑鈥濈殑鍏辮瘑鏈哄埗錛屽畠瑕佹眰鐭垮伐蹇呴』閫氳繃璁$畻鏌愪釜澶嶆潅鐨勬暟瀛﹂棶棰樻潵楠岃瘉浜ゆ槗騫跺壋寤烘柊鍖哄潡銆
浠ヤ笅鏄璁$畻浠ュお鍧婄熆鏈虹畻鍔涚殑涓浜涙ラわ細
紜瀹氱熆鏈哄瀷鍙鳳細涓嶅悓鍨嬪彿鐨勭熆鏈哄叿鏈変笉鍚岀殑綆楀姏錛屽洜姝ら栧厛闇瑕佺『瀹氫嬌鐢ㄧ殑鐭挎満鍨嬪彿銆
鏌ユ壘鐭挎満鐨勭畻鍔涘弬鏁幫細姣忎釜鐭挎満閮芥湁涓嶅悓鐨勭畻鍔涘弬鏁幫紝榪欎簺鍙傛暟閫氬父鍙浠ュ湪鐭挎満鍒墮犲晢鐨勭綉絝欐垨鐭挎満璁劇疆涓鎵懼埌銆
璁$畻鐭挎満鐨勬瘡縐掔畻鍔涳細鐭挎満鐨勭畻鍔涢氬父鐢ㄥ搱甯岀巼錛坔ashrate錛夋潵琛¢噺錛屽畠琛ㄧず鐭挎満姣忕掕兘澶熷勭悊澶氬皯嬈″搱甯岃繍綆椼備互澶鍧婄殑鍝堝笇綆楁硶鏄鍩轟簬浠ュお鍧婅櫄鎷熸満錛圗VM錛夌殑錛屽叾鍝堝笇鐜囬氬父浠MH/s錛堢櫨涓囧搱甯岀巼姣忕掞級涓哄崟浣嶃
鑰冭檻鐢佃垂鎴愭湰錛氬湪璁$畻鐭挎満綆楀姏鏃訛紝榪橀渶瑕佽冭檻鐭挎満鐨勭數璐規垚鏈銆傜熆鏈虹殑綆楀姏瓚婇珮錛岄氬父闇瑕佹秷鑰楁洿澶氱殑鐢靛姏錛屽洜姝ら渶瑕佽$畻姣忓皬鏃舵垨姣忓ぉ鐨勭數璐規垚鏈銆
鑰冭檻鐭挎睜璐圭敤錛氬傛灉浣跨敤鐭挎睜榪涜屾寲鐭匡紝鍒欓渶瑕佽冭檻鐭挎睜鐨勮垂鐢ㄣ傜熆奼犻氬父浼氭敹鍙栦竴瀹氭瘮渚嬬殑鎸栫熆濂栧姳浣滀負璐圭敤錛屽洜姝ら渶瑕佸皢榪欎簺璐圭敤鑰冭檻鍦ㄥ唴銆
緇煎悎鑰冭檻浠ヤ笂鍥犵礌錛屽彲浠ヨ$畻鍑轟互澶鍧婄熆鏈虹殑綆楀姏銆傞渶瑕佹敞鎰忕殑鏄錛岀熆鏈虹畻鍔涚殑璁$畻浠呬粎鏄涓涓鍙傝冿紝瀹為檯鐨勬寲鐭挎敹鐩婅繕鍙楀埌甯傚満琛屾儏絳夊洜緔犵殑褰卞搷銆
B. 【以太坊易錯概念】nonce, 公私鑰和地址,BASE64/BASE58,
以太坊里的nonce有兩種意思,一個是proof of work nonce,一個是account nonce。
在智能合約里,nonce的值代表的是該合約創建的合約數量。只有當一個合約創建另一個合約的時候才會增加nonce的值。但是當一個合約調用另一個合約中的method時 nonce的值是不變的。
在以太坊中nonce的值可以這樣來獲取(其實也就是屬於一個賬戶的交易數量):
但是這個方法只能獲取交易once的值。目前是沒有內置方法來訪問contract中的nonce值的
通過橢圓曲線演算法生成鑰匙對(公鑰和私鑰),以太坊採用的是secp256k1曲線,
公鑰採用uncompressed模式,生成的私鑰為長度32位元組的16進制字串,公鑰為長度64的公鑰字串。公鑰04開頭。
把公鑰去掉04,剩下的進行keccak-256的哈希,得到長度64位元組的16進制字串,丟掉前面24個,拿後40個,再加上"0x",即為以太坊地址。
整個過程可以歸納為:
2)有些網關或系統只能使用ASCII字元。Base64就是用來將非ASCII字元的數據轉換成ASCII字元的一種方法,而且base64特別適合在http,mime協議下快速傳輸數據。Base64使用【字母azAZ數字09和+/】這64個字元編碼。原理是將3個位元組轉換成4個位元組(3 X 8) = 24 = (4 X 6)
當剩下的字元數量不足3個位元組時,則應使用0進行填充,相應的,輸出字元則使用'='佔位,因此編碼後輸出的文本末尾可能會出現1至2個'='。
1)Base58是用於Bitcoin中使用的一種獨特的編碼方式,主要用於產生Bitcoin的錢包地址。相比Base64,Base58不使用數字"0",字母大寫"O",字母大寫"I",和字母小寫"l",以及"+"和"/"符號。
Base58Check是一種常用在比特幣中的Base58編碼格式,增加了錯誤校驗碼來檢查數據在轉錄中出現的錯誤。 校驗碼長4個位元組,添加到需要編碼的數據之後。校驗碼是從需要編碼的數據的哈希值中得到的,所以可以用來檢測並避免轉錄和輸入中產生的錯誤。使用 Base58check編碼格式時,編碼軟體會計算原始數據的校驗碼並和結果數據中自帶的校驗碼進行對比。二者不匹配則表明有錯誤產生,那麼這個 Base58Check格式的數據就是無效的。例如,一個錯誤比特幣地址就不會被錢包認為是有效的地址,否則這種錯誤會造成資金的丟失。
為了使用Base58Check編碼格式對數據(數字)進行編碼,首先我們要對數據添加一個稱作「版本位元組」的前綴,這個前綴用來明確需要編碼的數 據的類型。例如,比特幣地址的前綴是0(十六進制是0x00),而對私鑰編碼時前綴是128(十六進制是0x80)。 表4-1會列出一些常見版本的前綴。
接下來,我們計算「雙哈希」校驗碼,意味著要對之前的結果(前綴和數據)運行兩次SHA256哈希演算法:
checksum = SHA256(SHA256(prefix+data))
在產生的長32個位元組的哈希值(兩次哈希運算)中,我們只取前4個位元組。這4個位元組就作為校驗碼。校驗碼會添加到數據之後。
結果由三部分組成:前綴、數據和校驗碼。這個結果採用之前描述的Base58字母表編碼。下圖描述了Base58Check編碼的過程。
相同:
1) 哈希演算法、Merkle樹、公鑰密碼演算法
https://blog.csdn.net/s_lisheng/article/details/77937202?from=singlemessage
2)全新的 SHA-3 加密標准 —— Keccak
https://blog.csdn.net/renq_654321/article/details/79797428
3)在線加密演算法
http://tools.jb51.net/password/hash_md5_sha
4)比特幣地址生成演算法詳解
https://www.cnblogs.com/zhaoweiwei/p/address.html
5)Base58Check編碼實現示例
https://blog.csdn.net/QQ604666459/article/details/82419527
6) 比特幣交易中的簽名與驗證
https://www.jianshu.com/p/a21b7d72532f
C. 浠ュお鍧婄畻鍔157鎬庝箞鏍
浠ュお鍧婄畻鍔157鎬庝箞鏍
浠ュお鍧婄畻鍔157鏄鎸囦互澶鍧婄綉緇滀笂鐨勪竴縐嶈$畻鑳藉姏錛岄氬父鏄鐢ㄦ潵鎸栫熆鑾峰彇浠ュお甯併備互澶鍧婄畻鍔157閫氬父鐢ㄥ搱甯岀巼錛坔ashrate錛夋潵琛¢噺錛屽畠琛ㄧず姣忕掗挓鍙浠ヨ$畻澶氬皯嬈″搱甯岀畻娉曘傚搱甯岀巼瓚婇珮錛屾剰鍛崇潃璁$畻鑳藉姏瓚婂己錛屽洜姝ゆ寲鍒版柊鐨勫尯鍧楃殑姒傜巼涔熷氨瓚婂ぇ銆
浠ュお鍧婄畻鍔157瀵逛簬涓浜烘寲鐭胯岃█錛屽凡緇忓睘浜庣浉瀵硅緝楂樼殑綆楀姏浜嗐傚傛灉浣犳嫢鏈夎繖鏍風殑綆楀姏錛岄偅涔堝湪浠ュお鍧婄綉緇滀笂鎸栫熆鍙浠ヨ幏寰楁瘮杈冨彲瑙傜殑鏀剁泭銆備絾鏄闇瑕佹敞鎰忕殑鏄錛屼互澶鍧婄畻鍔157騫朵笉鏄瓚婇珮瓚婂ソ錛屽洜涓鴻繖涔熸剰鍛崇潃浣犻渶瑕佹姇鍏ユ洿澶氱殑鎴愭湰鍘葷淮鎶ゅ拰鍗囩駭浣犵殑鎸栫熆璁懼囥傛ゅ栵紝闅忕潃浠ュお鍧婄綉緇滅殑絝炰簤瓚婃潵瓚婃縺鐑堬紝鎸栫熆鐨勯毦搴︿篃浼氳秺鏉ヨ秺澶э紝鍥犳や互澶鍧婄畻鍔157鐨勬敹鐩婁篃浼氶愭笎鍑忓皯銆
鎬諱箣錛屼互澶鍧婄畻鍔157鏄涓涓鐩稿硅緝楂樼殑綆楀姏姘村鉤錛屽湪浠ュお鍧婄綉緇滀笂鎸栫熆鍙浠ヨ幏寰椾笉閿欑殑鏀剁泭銆備絾鏄闇瑕佹敞鎰忔垚鏈鍜岄庨櫓錛屼互鍙婇殢鐫鏃墮棿鎺ㄧЩ綆楀姏鐨勫彉鍖栥
D. 12個NFT重點熱詞詳解
12個NFT重點熱詞解析
NFT定義:即非同質化代幣,NFT是映射笑褲特定資產的非同質化通證,本質上是基於以太坊的智能合約。
特點:
標記特定資產的所有權
真實性與唯一性
錨定非同質化資產價值
FT定義:即同質化代幣。
特點:
能夠替換
統一性
可接近無窮拆分
區塊鏈定義:是一種由多方共同維護,使用密碼學保證傳輸和訪問安全,能夠實現數據一致存儲、防篡改、防抵賴的技術體系。
特點:
去中心化
開放性、安全性
獨立性、匿名性
智能合約定義:指以信息化方式傳播、驗證或執行合同的計算機協議。
特點:
沒有第三方可以進行可信交易
交易可追蹤且不可逆轉
目的:
提供優於傳統合約的安全方法
減少合約相關交易成本
哈希演算法:哈希演算法可以將一個數據轉換為一個標志,這個標志和判升祥源數據的每一個位元組都有十分緊密的關系。
ETH:即以太幣,被視為比特幣2.0版,採用與比特幣不同的區塊鏈技術以太坊。
元宇宙:元宇宙是一套吸納了信息革命、互聯網革命、人工智慧革命,以及 VR、AR、MR,特別是游戲引警在內的虛擬現實技術革命的成果,向人掘搏類展現出構建與傳統物理世界平行的全息數字世界的全新理念與體系。
DeFi:即去中心化金融,是指在可編程的公有區塊鏈網路上搭建的,以加密貨幣價值錯定、借貸、互換等類金融活動為功能目標,由一系列智能合約和應用程序,共同構成的區塊鏈應用項目。
DApp:即分布式應用或去中心化,應用指底層區塊鏈平台衍生的各種分布式應用程序,一般是開源和去中心化。
Flow鏈
定義:是一個快速,去中心化且對開,發人員友好的區塊鏈。
目的:為下一代應用程序、游戲以及數字資產提供動力。
Gas費:Gas是用於測量在以太坊區塊鏈上執行特定操作所需工作量的單位,Gas費是以太坊首創的一個概念。說白了就是過路費,發起一筆交易,執行一段程序,就需要掏錢。
IPFS
定義:IPFS是一個分布式的web,點到點超媒體協議。
目的:打造一個更加開放、快速、安全的互聯網。
E. 浠ュお鍧婃寲鐭跨殑綆楁硶鏄浠涔
浠ュお鍧婃寲鐭跨殑綆楁硶鏄浠涔堬紵
浠ュお鍧婃寲鐭跨殑綆楁硶鏄浠涔堬紵
浠ュお鍧婃槸涓縐嶅尯鍧楅摼鎶鏈錛屽彲鐢ㄤ簬鍒涘緩鍒嗗竷寮忓簲鐢ㄧ▼搴忥紙DApps錛夈傛寲鎺樹互澶鍧婄殑榪囩▼娑夊強閫氳繃璁$畻瑙e喅鏁板﹂棶棰樻潵娣誨姞鏂板潡錛岃繖琚璁や負鏄鈥滃伐浣滆瘉鏄庘濈畻娉曪紝浠ヤ繚鎸佸尯鍧楅摼鐨勫畨鍏ㄦу拰瀹屾暣鎬с傝繖涓綆楁硶鍚嶄負鈥淓thash鈥濓紝騫跺湪2015騫村彂甯冧簡浠ュお鍧婄殑絎涓鐗堛
Ethash綆楁硶鏄涓縐嶆暎鍒楀嚱鏁扮畻娉曪紝瀹冨熀浜庡搱甯岀巼錛圚ashrate錛夊拰綆楃姸鎬佹牴錛圫tateRoot錛変駭鐢熸棤瑙勫緥涓斿滻瀹氶毦搴︾殑闂棰樸傝繖涓綆楁硶鐨勭嫭鐗逛箣澶勫湪浜庡畠闇瑕佸ぇ閲忕殑鍐呭瓨錛屼笉鍒╀簬ASIC錛堜笓鐢ㄩ泦鎴愮數璺錛夌殑瀹炵幇鎸栨帢錛岄槻姝涓浜轟互鍙婂皯鏁扮熆宸ヨ幏寰楁洿楂樼殑絝炰簤鍔涳紝浠庤屽炲姞浜嗗幓涓蹇冨寲鐨勭綉緇滃畨鍏ㄦс
鎸栨帢浠ュお鍧婇渶瑕佺殑紜浠朵篃鏈変竴浜涚壒孌婅佹眰銆傞櫎浜咷PU錛堝浘褰㈠勭悊鍣錛夎兘澶熸樉鐫鎻愰珮鎬ц兘澶栵紝鍐呭瓨閲忎篃闇瑕佽凍澶熷ぇ浠ュ圭撼寮閲囪繃紼嬩腑浣跨敤鐨勬暟鎹鍧椼傛ゅ栵紝浠ュお鍧婅繕瑕佹眰浣跨敤楂橀熶簰鑱旂綉榪炴帴銆
鍦ㄦ寲鎺樹互澶鍧婃椂錛岀熆宸ュ繀欏繪壘鍒頒竴涓鈥渘once鈥濓紙涓涓鐢ㄤ簬璁$畻鏁e垪鍑芥暟鐨勪換鎰忔暟瀛楋級錛屼嬌寰楀潡澶寸殑鍝堝笇鍊兼弧瓚崇綉緇滅殑闅懼害瑕佹眰銆傝繖縐嶉毦搴︽槸鍔ㄦ佺殑錛屽彇鍐充簬鐭垮伐鐨勬諱綋綆楀姏鍜岀綉緇滀笂鐨勮妭鐐規暟閲忋傚洜姝わ紝鎸栨帢浠ュお鍧婇渶瑕佸ぇ閲忕殑璁$畻鑳藉姏鍜岀數鍔涳紝浠ュ強蹇閫熺殑浜掕仈緗戣繛鎺ワ紝浠ヤ究涓庣綉緇滆繘琛屽悓姝ャ
鎬葷粨涓涓嬶紝浠ュお鍧婄殑鎸栫熆綆楁硶Ethash鏄涓縐嶆暎鍒楀嚱鏁扮畻娉曪紝闇瑕佸ぇ閲忕殑鍐呭瓨鏉ラ槻姝ASIC鎸栨帢錛屼粠鑰屽炲姞浜嗗幓涓蹇冨寲鐨勭綉緇滃畨鍏ㄦс傛寲鎺樹互澶鍧婇渶瑕佸ぇ閲忕殑璁$畻鑳藉姏銆佸唴瀛樺拰緗戠粶榪炴帴銆
F. 小白如何秒懂區塊鏈中的哈希計算
小白如何秒懂區塊鏈中的哈希計算
當我在區塊鏈的學習過程中,發現有一個詞像幽靈一樣反復出現,「哈希」,英文寫作「HASH」。
那位說「拉稀」同學你給我出去!!
這個「哈希」據說是來源於密碼學的一個函數,嘗試搜一搜,論文出來一堆一堆的,不是橫式就是豎式,不是表格就是圖片,還有一堆看不懂得xyzabc。大哥,我就是想了解一下區塊鏈的基礎知識,給我弄那麼難幹啥呀?!我最長的密碼就是123456,復雜一點的就是654321,最復雜的時候在最後加個a,你給我寫的那麼復雜明顯感覺腦力被榨乾,僅有的腦細胞成批成批的死亡!為了讓和我一樣的小白同學了解這點,我就勉為其難,努力用傻瓜式的語言講解一下哈希計算,不求最准確但求最簡單最易懂。下面我們開始:
# 一、什麼是哈希演算法
## 1、定義:哈希演算法是將任意長度的字元串變換為固定長度的字元串。
從這里可以看出,可以理解為給**「哈希運算」輸入一串數字,它會輸出一串數字**。
如果我們自己定義 「增一演算法」,那麼輸入1,就輸出2;輸入100就輸出101。
如果我我們自己定義「變大寫演算法」,那麼輸入「abc」輸出「ABC」。
呵呵,先別打我啊!這確實就只是一個函數的概念。
## 2、特點:
這個哈希演算法和我的「增一演算法」和「變大寫演算法」相比有什麼特點呢?
1)**確定性,算得快**:咋算結果都一樣,算起來效率高。
2)**不可逆**:就是知道輸出推不出輸入的值。
3)**結果不可測**:就是輸入變一點,結果天翻地覆毫無規律。
總之,這個哈希運算就是個黑箱,是加密的好幫手!你說「11111」,它給你加密成「」,你說「11112」它給你弄成「」。反正輸入和輸出一個天上一個地下,即使輸入相關但兩個輸出毫不相關。
# 二、哈希運算在區塊鏈中的使用
## 1、數據加密
**交易數據是通過哈希運算進行加密,並把相應的哈希值寫入區塊頭**。如下圖所示,一個區塊頭包含了上一個區塊的hash值,還包含下一個區塊的hash值。
1)、**識別區塊數據是否被篡改**:區塊鏈的哈希值能夠唯一而精準地標識一個區塊,區塊鏈中任意節點通過簡單的哈希計算都可以獲得這個區塊的哈希值,計算出的哈希值沒有變化也就意味著區塊鏈中的信息沒有被篡改。
2)、**把各個區塊串聯成區塊鏈**:每個區塊都包含上一個區塊的哈希值和下一個區塊的值,就相當於通過上一個區塊的哈希值掛鉤到上一個區塊尾,通過下一個區塊的哈希值掛鉤到下一個區塊鏈的頭,就自然而然形成一個鏈式結構的區塊鏈。
## 2、加密交易地址及哈希
在上圖的區塊頭中,有一個Merkle root(默克爾根)的哈希值,它是用來做什麼的呢?
首先了解啥叫Merkle root? 它就是個二叉樹結構的根。啥叫二叉樹?啥叫根?看看下面的圖就知道了。一分二,二分四,四分八可以一直分下去就叫二叉樹。根就是最上面的節點就叫 根。
這個根的數據是怎麼來的呢?是把一個區塊中的每筆交易的哈希值得出後,再兩兩哈希值再哈希,再哈希,再哈希,直到最頂層的數值。
這么哈希了半天,搞什麼事情?有啥作用呢?
1)、**快速定位每筆交易**:由於交易在存儲上是線性存儲,定位到某筆交易會需要遍歷,效率低時間慢,通過這樣的二叉樹可以快速定位到想要找的交易。
舉個不恰當的例子:怎麼找到0-100之間的一個任意整數?(假設答案是88)那比較好的一個方法就是問:1、比50大還是小?2、比75大還是小?3、比88大還是小? 僅僅通過幾個問題就可以快速定位到答案。
2)、**核實交易數據是否被篡改**:從交易到每個二叉樹的哈希值,有任何一個數字有變化都會導致Merkle root值的變化。同時,如果有錯誤發生的情況,也可以快速定位錯誤的地方。
## 3、挖礦
在我們的區塊頭中有個參數叫**隨機數Nonce,尋找這個隨機數的過程就叫做「挖礦」**!網路上任何一台機器只要找到一個合適的數字填到自己的這個區塊的Nonce位置,使得區塊頭這6個欄位(80個位元組)的數據的哈希值的哈希值以18個以上的0開頭,誰就找到了「挖到了那個金子」!既然我們沒有辦法事先寫好一個滿足18個0的數字然後反推Nounce,唯一的做法就是從0開始一個一個的嘗試,看結果是不是滿足要求,不滿足就再試下一個,直到找到。
找這個數字是弄啥呢?做這個有什麼作用呢?
1)、**公平的找到計算能力最強的計算機**:這個有點像我這里有個沙子,再告訴你它也那一個沙灘的中的一粒相同,你把相同的那粒找出來一樣。那可行的辦法就是把每一粒都拿起來都比較一下!那麼比較速度最快的那個人是最有可能先早到那個沙子。這就是所謂的「工作量證明pow」,你先找到這個沙子,我就認為你比較的次數最多,乾的工作最多。
2)、**動態調整難度**:比特幣為了保證10分鍾出一個區塊,就會每2016個塊(2周)的時間計算一下找到這個nonce數字的難度,如果這2016個塊平均時間低於10分鍾則調高難度,如高於十分鍾則調低難度。這樣,不管全網的挖礦算力是怎麼變化,都可以保證10分鍾的算出這個隨機數nonce。
# 三、哈希運算有哪些?
說了這么多哈希運算,好像哈希運算就是一種似的,其實不是!作為密碼學中的哈希運算在不斷的發展中衍生出很多流派。我看了」滿頭包」還是覺得內在機理也太復雜了,暫時羅列如下,小白們有印象知道是怎麼回事就好。
從下表中也可以看得出,哈希運算也在不斷的發展中,有著各種各樣的演算法,各種不同的應用也在靈活應用著單個或者多個演算法。比特幣系統中,哈希運算基本都是使用的SHA256演算法,而萊特幣是使用SCRYPT演算法,誇克幣(Quark)達世幣(DASH)是把很多演算法一層層串聯上使用,Heavycoin(HAV)卻又是把一下演算法並聯起來,各取部分混起來使用。以太坊的POW階段使用ETHASH演算法,ZCASH使用EQUIHASH。
需要說明的是,哈希運算的各種演算法都是在不斷升級完善中,而各種幣種使用的演算法也並非一成不變,也在不斷地優化中。
**總結**:哈希運算在區塊鏈的各個項目中都有著廣泛的應用,我們以比特幣為例就能看到在**數據加密、交易數據定位、挖礦等等各個方面都有著極其重要的作用**。而哈希運算作為加密學的一門方向不斷的發展和延伸,身為普通小白的我們,想理解區塊鏈的一些基礎概念,了解到這個層面也已經足夠。