區(qū)塊鏈學(xué)習(xí)總結(jié)

2021-3-30    前端達(dá)人

區(qū)塊鏈學(xué)習(xí)總結(jié)

區(qū)塊鏈
區(qū)塊鏈(Blockchain)是指通過去中心化和去信任的方式集體維護(hù)一個(gè)可靠數(shù)據(jù)庫(kù)的技術(shù)方案。該技術(shù)方案讓參與系統(tǒng)中的任意多個(gè)節(jié)點(diǎn),把一段時(shí)間系統(tǒng)內(nèi)全部事務(wù)通過密碼學(xué)算法計(jì)算并記錄到一個(gè)數(shù)據(jù)塊(block),生成該數(shù)據(jù)塊的hash用于鏈接下個(gè)數(shù)據(jù)塊,系統(tǒng)所有參與節(jié)點(diǎn)來共同檢驗(yàn)記錄是否為真,并且每個(gè)區(qū)塊的內(nèi)容都由后續(xù)子鏈上的區(qū)塊來保證其內(nèi)容不可被篡改。 各個(gè)參與節(jié)點(diǎn)可以在新區(qū)塊產(chǎn)生確認(rèn)及獎(jiǎng)勵(lì)分配上達(dá)成共識(shí),從而逐漸形成的一個(gè)龐大、去中心化的公開賬本。

01 對(duì)比特幣的認(rèn)識(shí)
2008年,中本聰(Satoshi Nakamoto)發(fā)表了一篇題為“比特幣:一種點(diǎn)對(duì)點(diǎn)的電子現(xiàn)金系統(tǒng)”的論文描述了比特幣的模式。
新區(qū)塊的創(chuàng)造過程是一個(gè)區(qū)塊創(chuàng)造權(quán)的競(jìng)爭(zhēng)的過程,即通過工作量證明來選定新區(qū)塊的創(chuàng)造者。在任何一個(gè)特定的時(shí)間點(diǎn)上,整個(gè)區(qū)塊鏈系統(tǒng)范圍內(nèi)的,所有競(jìng)爭(zhēng)者在同時(shí)開始,共同針對(duì)同一特定新候選區(qū)塊進(jìn)行哈希運(yùn)算比賽。獲勝的條件是最先算出符合該特定新候選區(qū)塊要求的哈希值。獲勝的(只能有一個(gè)獲勝者)獎(jiǎng)勵(lì)是伴隨該新區(qū)塊一起發(fā)行的全部新比特幣。當(dāng)一個(gè)新區(qū)塊被創(chuàng)造出來了,所有的競(jìng)爭(zhēng)者馬上重新開始進(jìn)行對(duì)下一個(gè)區(qū)塊創(chuàng)造權(quán)的競(jìng)爭(zhēng)。
新區(qū)塊的創(chuàng)造速度大概是10分鐘一塊。
比特幣的存儲(chǔ)依靠的就是分布式賬本技術(shù)。比特幣就是一串?dāng)?shù)據(jù)代碼。所有的比特幣就是記錄于區(qū)塊鏈中各自對(duì)應(yīng)的區(qū)塊內(nèi),然后分布式存放于比特幣系統(tǒng)的各個(gè)節(jié)點(diǎn)上。比特幣區(qū)塊鏈就像是一個(gè)由比特幣系統(tǒng)所有的節(jié)點(diǎn)共享的統(tǒng)一電子賬本。
比特幣的使用就是比特幣的交易,也就是比特幣所有權(quán)的轉(zhuǎn)換。比特幣的使用主要是通過加密技術(shù)來實(shí)現(xiàn)的
02 對(duì)以太坊的認(rèn)識(shí)
以太坊是一個(gè)具有智能合約功能的開放區(qū)塊鏈平臺(tái),使開發(fā)人員能夠建立和發(fā)布各種分布式應(yīng)用。通過在以太坊上編程建立各種分布式應(yīng)用可以解決諸如:投票、域名、金融交易、眾籌、公司管理、合約、知識(shí)產(chǎn)權(quán)、硬件集成的智能資產(chǎn)等等各方面問題。
以太坊,與比特幣區(qū)塊鏈技術(shù)一樣,使用激勵(lì)驅(qū)動(dòng)的安全模式。共識(shí)達(dá)成基于選擇具有最高總難度的區(qū)塊。礦工創(chuàng)建區(qū)塊,其他人檢測(cè)有效性。
以太幣是于2015年7月30日開始發(fā)行的。類似于比特幣,以太幣的發(fā)行方式也是采用工作量證明機(jī)制(POW)。通過工作量證明機(jī)制,以太坊每年發(fā)行15,626,576枚以太幣。以太坊計(jì)劃于2017年末將以太幣的發(fā)行方式改為權(quán)益證明機(jī)制(POS)。屆時(shí),每年的新發(fā)行的以太幣數(shù)量為1000萬枚。以太幣的總發(fā)行量是沒有上限的。

以太坊是通過在比特幣區(qū)塊鏈系統(tǒng)基礎(chǔ)上進(jìn)行修改和創(chuàng)新而產(chǎn)生的。以太坊本質(zhì)上就是:區(qū)塊鏈+智能合約
(1) 什么是以太坊虛擬機(jī)
同比特幣區(qū)塊鏈系統(tǒng)不同,以太坊設(shè)計(jì)了以太坊虛擬機(jī)(EVM)專門用來運(yùn)行智能合約。太坊虛擬機(jī)是一個(gè)同網(wǎng)絡(luò),文件系統(tǒng)或者其他操作過程隔絕開來的封裝起來的計(jì)算機(jī)代碼運(yùn)行環(huán)境.

(2)以太坊的賬戶
以太坊的基礎(chǔ)單元是賬戶. 這些賬戶可以通過消息傳遞來發(fā)生互動(dòng)變化。每個(gè)賬戶都有一個(gè)與之關(guān)聯(lián)的狀態(tài)和一個(gè)20字節(jié)的地址。所有價(jià)值和信息的轉(zhuǎn)移都體現(xiàn)為賬戶狀況的變化.以太坊區(qū)塊鏈通過控制所有賬戶的變化實(shí)現(xiàn)其各種功能.
以太坊有兩類賬戶: 外部賬戶和合約賬戶,他們被存放于同一地址空間上.外部賬戶是由人類用戶通過對(duì)應(yīng)的公私鑰來掌控。而合約賬戶則是由被存儲(chǔ)在其內(nèi)部的代碼掌控。智能合約指的是合約賬戶中的那些對(duì)被發(fā)送來的交易進(jìn)行自動(dòng)處理的程序代碼。用戶可以通過在區(qū)塊鏈中存儲(chǔ)程序代碼來創(chuàng)建新的智能合約。
以太坊賬戶狀態(tài)的變化就是指以太坊賬戶組成成分發(fā)生的變化。以太坊賬戶含有四個(gè)組成部分:
(1) 序號(hào)(nonce):如果賬戶是一個(gè)外部擁有賬戶,nonce代表從此賬戶地址發(fā)送的交易序號(hào)。如果賬戶是一個(gè)合約賬戶,nonce代表此賬戶創(chuàng)建的合約序號(hào)。
(2) 余額(balance): 此地址擁有Wei的數(shù)量。
(3) Merkle 樹根的哈希值: Merkle樹會(huì)將此賬戶存儲(chǔ)內(nèi)容的哈希值進(jìn)行編碼,默認(rèn)值是空值。
(4) 代碼哈希值:此賬戶太坊虛擬機(jī)內(nèi)的代碼的哈希值。對(duì)于合約賬戶,就是被哈希的代碼并作為代碼哈希值保存起來。對(duì)于外部賬戶,代碼哈希值是一個(gè)空字符串的哈希值。
(3)以太坊的交易和交易費(fèi)用
太坊區(qū)塊鏈系統(tǒng)只有兩種類型的交易:合約創(chuàng)建和消息通信。
以太坊所有的交易都是在外部賬戶觸動(dòng)下發(fā)生的.合約賬戶不會(huì)自發(fā)地產(chǎn)生任何行動(dòng). 只有當(dāng)外部賬戶發(fā)出交易時(shí),合約賬戶才會(huì)執(zhí)行相應(yīng)的操作。以太坊通過規(guī)定節(jié)點(diǎn)必須與運(yùn)算結(jié)果保持一致,從而保證智能合約嚴(yán)格確定執(zhí)行。
在以太坊中一個(gè)重要的概念就是費(fèi)用(fees). 發(fā)生在以太坊區(qū)塊鏈系統(tǒng)內(nèi)的交易而產(chǎn)生的每一次計(jì)算都會(huì)要求相應(yīng)的費(fèi)用。這個(gè)費(fèi)用是以”gas”的來支付。gas就是用來衡量在一個(gè)具體計(jì)算中要求的費(fèi)用單位。gas 價(jià)格(gas price)就是你愿意在每個(gè)gas花費(fèi)ETH的數(shù)量,以“gwei”進(jìn)行衡量?!癢ei”是ETH的最小單位,1ETH表示10^18Wei. 1gwei是1,000,000,000 Wei。
發(fā)生交易時(shí),交易發(fā)送者先設(shè)置gas limit和gas price。gas limit和gas price就代表著發(fā)送者愿意為執(zhí)行交易支付的Wei的最大值。以太坊用戶必須向以太坊區(qū)塊鏈系統(tǒng)支付少量交易費(fèi)用。交易的發(fā)送者必須在激活的合約賬戶的每一步為所有的運(yùn)算和數(shù)據(jù)存儲(chǔ)付費(fèi)。如果在他們的賬戶余額中有足夠的Ether來支付這個(gè)最大值費(fèi)用,那么就沒問題。在交易結(jié)束時(shí)任何未使用的gas都會(huì)被返回給發(fā)送者,以原始費(fèi)率兌換。費(fèi)用通過以太坊Gas結(jié)算,以太幣的形式支付的。這樣可以幫助太坊區(qū)塊鏈系統(tǒng)避免被濫用或被惡意攻擊.
交易費(fèi)用由節(jié)點(diǎn)收集,節(jié)點(diǎn)在以太坊網(wǎng)絡(luò)中完成收集、傳播、確認(rèn)和執(zhí)行交易的工作。礦工們將交易活動(dòng)分組:交易記錄(以太坊區(qū)塊鏈中賬戶狀態(tài)的更新)被分組存放在區(qū)塊中;節(jié)點(diǎn)通過互相競(jìng)爭(zhēng)決定添加權(quán);獲得添加權(quán)的節(jié)點(diǎn)將新的區(qū)塊添加到區(qū)塊鏈的上。獲得添加權(quán)的節(jié)點(diǎn)會(huì)得到以太幣獎(jiǎng)勵(lì),通過這些獎(jiǎng)勵(lì)激勵(lì)節(jié)點(diǎn)為以太坊區(qū)塊鏈系統(tǒng)貢獻(xiàn)硬件和電力。
(4)以太坊的狀態(tài)變化機(jī)制
第一步,檢查交易的格式是否正確(即有正確數(shù)值)、簽名是否有效和隨機(jī)數(shù)是否與發(fā)送者賬戶的隨機(jī)數(shù)匹配。如否,返回錯(cuò)誤。
第二步,計(jì)算交易費(fèi)用,并從簽名中確定發(fā)送者的地址。從發(fā)送者的賬戶中減去交易費(fèi)用和增加發(fā)送者的隨機(jī)數(shù)。如果賬戶余額不足,返回錯(cuò)誤。
第三步,設(shè)定初值GAS = STARTGAS,并根據(jù)交易中的字節(jié)數(shù)減去一定量的Gas值。
第四步,從發(fā)送者的賬戶轉(zhuǎn)移價(jià)值到接收者賬戶。如果接收賬戶還不存在,創(chuàng)建此賬戶。如果接收賬戶是一個(gè)合約,運(yùn)行合約的代碼,直到代碼運(yùn)行結(jié)束或者燃料用完。
第五步,如果因?yàn)榘l(fā)送者賬戶沒有足夠的錢或者代碼執(zhí)行耗盡燃料導(dǎo)致價(jià)值轉(zhuǎn)移失敗,恢復(fù)原來的狀態(tài),但是還需要支付交易費(fèi)用,交易費(fèi)用加至礦工賬戶。
第六步,否則,將所有剩余的燃料歸還給發(fā)送者,消耗掉的燃料作為交易費(fèi)用發(fā)送給礦工。

03 **對(duì)Hyperledger的認(rèn)識(shí)
04 了解其他那些區(qū)塊鏈項(xiàng)目 Corda EOS
05 公鏈、聯(lián)盟鏈、私鏈的區(qū)別
中本聰巧妙地將以下幾個(gè)成熟的技術(shù)和理論組合的一起,并以此為基礎(chǔ)構(gòu)建區(qū)塊鏈技術(shù):
基于去中心化的分布式算法而建立起點(diǎn)對(duì)點(diǎn)對(duì)等(P2P)網(wǎng)絡(luò)。
基于非對(duì)稱加密算法。
基于分布式一致性算法,解決了分布式場(chǎng)景下的拜占庭將軍問題。
基于博弈論而精心設(shè)計(jì)的獎(jiǎng)勵(lì)機(jī)制,實(shí)現(xiàn)了納什均衡,確保整個(gè)系統(tǒng)的安全和穩(wěn)定運(yùn)行。
如果同時(shí)具有上述四點(diǎn)要素,可以認(rèn)為這是一種公共區(qū)塊鏈技術(shù),簡(jiǎn)稱公有鏈。如果只具有前三點(diǎn)要素,將其稱為私有區(qū)塊鏈技術(shù),簡(jiǎn)稱私有鏈。而聯(lián)盟鏈則介于兩者之間,可視為聯(lián)盟成員內(nèi)的一種私有鏈。這里主要介紹公有鏈和私有鏈。

公鏈?zhǔn)侵溉澜缛魏稳硕伎勺x取的、任何人都能發(fā)送事務(wù)且能獲得有效確認(rèn)的、任何人都能參與共識(shí)過程的區(qū)塊鏈。共識(shí)過程決定哪個(gè)區(qū)塊可被添加到區(qū)塊鏈中和明確當(dāng)前狀態(tài)。作為中心化或者準(zhǔn)中心化信任的替代物,公有鏈的安全由加密數(shù)字經(jīng)濟(jì)維護(hù)。加密數(shù)字經(jīng)濟(jì)采取工作量證明機(jī)制或權(quán)益證明機(jī)制等方式,將經(jīng)濟(jì)獎(jiǎng)勵(lì)和加密數(shù)字驗(yàn)證結(jié)合了起來,并遵循著一般原則:每個(gè)人從中可獲得的經(jīng)濟(jì)獎(jiǎng)勵(lì),與對(duì)共識(shí)過程作出的貢獻(xiàn)成正比。這些區(qū)塊鏈通常被認(rèn)為是完全去中心化的。
私有鏈?zhǔn)侵钙鋵懭霗?quán)限僅在一個(gè)組織手里的區(qū)塊鏈。讀取權(quán)限或者對(duì)外開放,或者被限制。相關(guān)的應(yīng)用囊括數(shù)據(jù)庫(kù)管理、審計(jì)、甚至一個(gè)公司,盡管在有些情況下希望它能有公共的可審計(jì)性,但在很多的情形下,公共的可讀性并非是必須的。

私有鏈相比于公有鏈的優(yōu)點(diǎn):

事務(wù)的效率更高:比特幣區(qū)塊鏈目前每秒可完成7筆事務(wù),而私有鏈目前最高可以到每秒10萬筆,并且還有提高的空間。顯然后者更適應(yīng)現(xiàn)實(shí)世界金融事務(wù)的需求。
事務(wù)可以回滾:這點(diǎn)對(duì)于中心化機(jī)構(gòu)也很重要,在某些情況下,某些事務(wù)會(huì)因?yàn)殄e(cuò)誤或法律的問題而被要求修改、撤銷。
事務(wù)費(fèi)用更低:目前公有鏈的事務(wù)費(fèi)用是每筆0.10美元,而且隨著時(shí)間流逝幣值趨于增長(zhǎng),導(dǎo)致事務(wù)費(fèi)用也在增長(zhǎng)。而私有鏈的事務(wù)費(fèi)用將會(huì)降低一到兩個(gè)數(shù)量級(jí)。
仍然是基于分布式網(wǎng)絡(luò),保留了分布式記賬系統(tǒng)的優(yōu)點(diǎn)。
提供了更好的隱私保護(hù):公有區(qū)塊鏈因?yàn)槠渫该鞴蚕砜傎~本的設(shè)計(jì),本身不提供隱私保護(hù)功能。而私有鏈可以對(duì)讀取權(quán)限進(jìn)行限制,從而提供更好的隱私保護(hù)。
驗(yàn)證者是公開透明的,不存在一些礦工出于共謀原因而致的51%攻擊風(fēng)險(xiǎn)。
節(jié)點(diǎn)可以很好地連接:節(jié)點(diǎn)互相可以很好地連接,故障可以迅速通過人工干預(yù)來修復(fù),并允許使用共識(shí)算法減少區(qū)塊時(shí)間,從而更快完成事務(wù)。

私有鏈的缺點(diǎn):

違背了區(qū)塊鏈去中心化的本質(zhì),重新引入了若干“信任節(jié)點(diǎn)”;

其參與者需要經(jīng)過審核和驗(yàn)證,從而嚴(yán)格限制了其規(guī)模,其安全性容易受到威脅。因此,私有區(qū)塊鏈更適合為傳統(tǒng)機(jī)構(gòu)所用。

公有鏈的優(yōu)點(diǎn):

保護(hù)用戶:免受開發(fā)者的影響——在公共區(qū)塊鏈中的用戶更多、更廣泛,程序開發(fā)者無權(quán)干涉
用戶的使用方式。反過來說,區(qū)塊鏈可以保護(hù)使用這些程序的用戶。
網(wǎng)絡(luò)規(guī)模效應(yīng)——公共區(qū)塊鏈?zhǔn)情_放的,因此有可能被許多外界用戶使用和產(chǎn)生一定的網(wǎng)絡(luò)效應(yīng)。而在公有鏈上運(yùn)行的應(yīng)用越多,節(jié)點(diǎn)越多,那么該區(qū)塊鏈條也會(huì)越可信。
因此使用公有鏈,還是私有鏈,完全根據(jù)需求而定。

06 了解哪些共識(shí)算法
07 說說最熟悉的共識(shí)算法
08 看過哪些書
09 以太坊智能合約
10 拜占庭問題
在互聯(lián)網(wǎng)大背景下,當(dāng)需要與不熟悉的對(duì)方進(jìn)行價(jià)值交換活動(dòng)時(shí),人們?nèi)绾尾拍芊乐共粫?huì)被其中的惡意破壞者欺騙、迷惑從而作出錯(cuò)誤的決策。進(jìn)一步將“拜占庭將軍問題”延伸到技術(shù)領(lǐng)域中來,其內(nèi)涵可概括為:在缺少可信任的中央節(jié)點(diǎn)和可信任的通道的情況下,分布在網(wǎng)絡(luò)中的各個(gè)節(jié)點(diǎn)應(yīng)如何達(dá)成共識(shí)
11 51%算力攻擊
在比特幣網(wǎng)絡(luò)中,采用PoW共識(shí)機(jī)制來解決如何獲得記賬權(quán)的問題,采用“最長(zhǎng)鏈共識(shí)”解決如何記賬的問題。
所謂51%的攻擊,就是利用比特幣網(wǎng)絡(luò)采用PoW競(jìng)爭(zhēng)記賬權(quán)和“最長(zhǎng)鏈共識(shí)”的特點(diǎn),使用算力優(yōu)勢(shì)生成一條更長(zhǎng)的鏈“回滾”已經(jīng)發(fā)生的“交易行為”。
51%是指算力占全網(wǎng)算力的51%,比特幣網(wǎng)絡(luò)需要通過哈希碰撞來匹配隨機(jī)數(shù)從而獲得記賬權(quán),算力衡量的是一臺(tái)計(jì)算機(jī)每秒鐘能進(jìn)行哈希碰撞的次數(shù)。
算力越高,意味著每秒鐘能進(jìn)行越多次的哈希碰撞,即獲得記賬權(quán)的幾率越高。
在理論上,如果掌握了50%以上的算力,就擁有了獲得記賬權(quán)的絕對(duì)優(yōu)勢(shì),可以更快地生成區(qū)塊,也擁有了篡改區(qū)塊鏈數(shù)據(jù)的權(quán)利。
實(shí)際上,當(dāng)惡意攻擊者持有比特幣全網(wǎng)占比比較高的算力時(shí),即使尚未達(dá)到51%的比例,也可以制造相應(yīng)的攻擊,比較典型的就是雙花問題。
12 Sybil攻擊
在對(duì)等網(wǎng)絡(luò)中,但節(jié)點(diǎn)通常具有多個(gè)身份標(biāo)識(shí),通過控制系統(tǒng)的大部分節(jié)點(diǎn)來消弱冗余備份的作用
13 Eclipse攻擊
Eclipse攻擊是一種網(wǎng)絡(luò)級(jí)的攻擊,攻擊者模仿所有其他節(jié)點(diǎn)的入流量和出流量,達(dá)到將受害者與網(wǎng)絡(luò)上的其他節(jié)點(diǎn)隔離的目的。這種攻擊意味著通過讓最新的區(qū)塊信息不能到達(dá)節(jié)點(diǎn)來達(dá)到隔離節(jié)點(diǎn)的目的。事實(shí)上,比特幣網(wǎng)絡(luò)也易受到eclipse攻擊。但在以太坊網(wǎng)絡(luò)上,兩個(gè)節(jié)點(diǎn)就足以發(fā)起eclipse攻擊。
14 DDoS攻擊
是指處于不同位置的多個(gè)攻擊者同時(shí)向一個(gè)或數(shù)個(gè)目標(biāo)發(fā)動(dòng)攻擊,或者一個(gè)攻擊者控制了位于不同位置的多臺(tái)機(jī)器并利用這些機(jī)器對(duì)受害者同時(shí)實(shí)施攻擊。由于攻擊的發(fā)出點(diǎn)是分布在不同地方的,這類攻擊稱為分布式拒絕服務(wù)攻擊,其中的攻擊者可以有多個(gè)。
15 Merkle Tree數(shù)據(jù)結(jié)構(gòu)
A、Merkle樹結(jié)構(gòu)
由一個(gè)根節(jié)點(diǎn)(root)、一組中間節(jié)點(diǎn)和一組葉節(jié)點(diǎn)(leaf)組成。葉節(jié)點(diǎn)(leaf)包含存儲(chǔ)數(shù)據(jù)或其哈希值,中間節(jié)點(diǎn)是它的兩個(gè)孩子節(jié)點(diǎn)內(nèi)容的哈希值,根節(jié)點(diǎn)也是由它的兩個(gè)子節(jié)點(diǎn)內(nèi)容的哈希值組成。所以Merkle樹也稱哈希樹。
B、哈希樹的特點(diǎn)
葉節(jié)點(diǎn)存儲(chǔ)的是數(shù)據(jù)文件,而非葉節(jié)點(diǎn)存儲(chǔ)的是其子節(jié)點(diǎn)的哈希值(Hash,通過SHA1、SHA256等哈希算法計(jì)算而來),這些非葉子節(jié)點(diǎn)的Hash被稱作路徑哈希值(可以據(jù)其確定某個(gè)葉節(jié)點(diǎn)到根節(jié)點(diǎn)的路徑),
葉節(jié)點(diǎn)的Hash值是真實(shí)數(shù)據(jù)的Hash值。因?yàn)槭褂昧藰湫谓Y(jié)構(gòu), 其查詢的時(shí)間復(fù)雜度為 O(logn),n是節(jié)點(diǎn)數(shù)量。
在這里插入圖片描述

默克爾樹的另一個(gè)特點(diǎn)是,底層數(shù)據(jù)的任何變動(dòng),都會(huì)傳遞到其父節(jié)點(diǎn),一直到樹根。
16 哈希算法
哈希算法(Hash)又稱摘要算法(Digest),它的作用是:對(duì)任意一組輸入數(shù)據(jù)進(jìn)行計(jì)算,得到一個(gè)固定長(zhǎng)度的輸出摘要。

哈希算法最重要的特點(diǎn)就是:

相同的輸入一定得到相同的輸出;
不同的輸入大概率得到不同的輸出。
哈希算法的目的就是為了驗(yàn)證原始數(shù)據(jù)是否被篡改。
17 看過那些白皮書 bitcoin ethereum EOS
18 未來你看好那些區(qū)塊鏈項(xiàng)目
19 區(qū)塊鏈的應(yīng)用場(chǎng)景
20 以太坊協(xié)議 ERC20 ERC721 ERC223 ERC875

21.什么是挖礦?
挖礦是在區(qū)塊鏈網(wǎng)絡(luò)達(dá)成共識(shí)的過程。挖礦有兩個(gè)目的。首先,它在生成的塊中創(chuàng)建新的代幣。其次,它通過向網(wǎng)絡(luò)提供工作證明,包括分布式計(jì)費(fèi)中的交易;也就是說,證明所生成的塊是有效的。
22.比特幣實(shí)現(xiàn)中的交易和塊是如何加密的?
比特幣塊不以任何方式加密:每個(gè)塊都是公開的。阻止修改和保證數(shù)據(jù)完整性的是一個(gè)稱為塊哈希的值。塊的內(nèi)容是使用在比特幣的一種特殊Hash函數(shù)來處理,它的實(shí)現(xiàn)和得到的值包含在區(qū)塊鏈中。
23.什么是軟分叉?
在分類帳中的塊包括以建立最長(zhǎng)鏈的方式,即具有最大累積難度的鏈。分叉是有兩個(gè)候選塊競(jìng)爭(zhēng)形成最長(zhǎng)的區(qū)塊鏈,兩個(gè)礦工發(fā)現(xiàn)工作問題的證明方法在很短的時(shí)間內(nèi)沒有同步對(duì)方的情況。造成網(wǎng)絡(luò)分割,因?yàn)槟承┕?jié)點(diǎn)得到塊從礦工#1和而另外一些得到礦工#2。 分叉通常在一個(gè)塊中得到解決,因?yàn)檫@種情況再次發(fā)生的概率變得非常低,因?yàn)橄乱粋€(gè)塊出現(xiàn),所以很快有一個(gè)新的最長(zhǎng)鏈,將被認(rèn)為是主要的。
**24.**什么是雙重支出?
這是與數(shù)字貨幣有關(guān)的主要問題之一。 事實(shí)上,這是一個(gè)數(shù)字通證被多次使用的條件,因?yàn)橥ㄗC通常由易于克隆的數(shù)字文件組成。它只會(huì)導(dǎo)致通貨膨脹,組織不得不承受巨大的損失。 區(qū)塊鏈技術(shù)的主要目標(biāo)之一是盡可能地消除這種方法。

------開發(fā)基礎(chǔ)篇--------
01 go語言問題
02 solidity語言語法問題
03 c/c++語言語法問題
04 java語言語法問題


以太坊

問:以太坊的有價(jià)通證叫什么?
答:以太(ETH:Ether)

問:Wei和以太有什么區(qū)別?
答:Wei是一個(gè)面額,像美分到美元或便士到磅。 1 ETH =10^18 Wei

問:以太坊的平均出塊時(shí)間是多少?
答:大約14秒

問:以太坊的平均塊大小是多少?
答:大約2KB,實(shí)際值取決于具體情況。

問:以太坊是否支持腳本? 如果是這樣,支持什么類型的腳本?
答:是的。 它支持智能合約

問:你如何得到以太?
答:有幾種方法:
1.成為一名礦工
2.用其他貨幣換取
3.使用以太Faucet,例如 https://faucet.metamask.io
4.接受別人的贈(zèng)送

問:以太從哪里來的?
答:在2014年預(yù)售中首次創(chuàng)建了6000萬個(gè)。另外,在挖出新塊時(shí)也會(huì)生成以太。

問:什么是節(jié)點(diǎn)?
答:一個(gè)節(jié)點(diǎn)本質(zhì)上是一臺(tái)連接到網(wǎng)絡(luò)的計(jì)算機(jī),它負(fù)責(zé)處理交易。

問:你熟悉多少種以太坊網(wǎng)絡(luò)?
答:有三種類型的網(wǎng)絡(luò) - 實(shí)時(shí)網(wǎng)絡(luò)(主),測(cè)試網(wǎng)絡(luò)(如Ropsten和Rinkeby)和私有網(wǎng)絡(luò)。

問:與以太坊網(wǎng)絡(luò)交互的方式有哪些?
答:可以使用電子錢包或DApp

問:你可以“隱藏”一個(gè)以太坊交易嗎?
答:不可以。所有交易對(duì)每個(gè)人都是可見的。

問:交易記錄在哪里?
答:在公共賬本上。

問:這些網(wǎng)絡(luò)的ID是什么?
答:Live(id = 1),Ropsten(id = 3),Rinkeby(id = 4),Private(由開發(fā)人員分配)

問:我可以在Rinkeby測(cè)試網(wǎng)絡(luò)中挖一些以太,然后轉(zhuǎn)移到Live網(wǎng)絡(luò)嗎?
答:不可以。不能在不同的以太坊網(wǎng)絡(luò)之間傳遞以太。

問:為什么需要私有網(wǎng)絡(luò)?
答:有很多原因,但主要是為了數(shù)據(jù)隱私、分布式數(shù)據(jù)庫(kù)、權(quán)限控制和測(cè)試。

問:你如何輕松查看有關(guān)交易和區(qū)塊的詳細(xì)信息?
答:使用區(qū)塊鏈瀏覽器,如etherscan.io或live.ether.camp

問:私有網(wǎng)絡(luò)的交易和區(qū)塊信息怎么查看呢?
答:可以使用開源瀏覽器客戶端,例如https://github.com/etherparty/explorer

問:區(qū)塊鏈的共識(shí)是什么?
答:遵循特定協(xié)議(如以太坊)驗(yàn)證交易(創(chuàng)建塊)的過程。

問:區(qū)塊鏈中兩種常用的共識(shí)模型是什么?
答:工作量證明(POW)和權(quán)益證明(POS)。

問:簡(jiǎn)單地解釋下工作量證明。
答:它實(shí)際上是礦工為了證明自己的工作量并驗(yàn)證交易而對(duì)一個(gè)計(jì)算密集型問題的求解。

問:以簡(jiǎn)單的方式解釋權(quán)益證明。
答:區(qū)塊的創(chuàng)建者是根據(jù)節(jié)點(diǎn)所持有的財(cái)富和股權(quán)隨機(jī)選擇的。 它不是計(jì)算密集型的。

問:以太坊使用什么共識(shí)模式?
答:截至2018年初,它使用工作量證明,但今后將切換到權(quán)益證明。

問:怎么挖以太幣?
答:使用錢包或geth客戶端。

問:用什么來對(duì)交易進(jìn)行簽名?
答:用戶的私鑰。

問:丟失私鑰后還能恢復(fù)以太坊賬戶嗎?
答:可以,可以使用助記詞組。


以太坊節(jié)點(diǎn)軟件(Geth)

問:有哪些方法可以連接到一個(gè)以太坊節(jié)點(diǎn)?
答:IPC-RPC、JSON-RPC和WS-RPC。

問:那么Geth是什么?
答:Geth是以太坊的客戶端。

問:連接到geth客戶端的默認(rèn)方式是什么?
答:默認(rèn)情況下啟用IPC-RPC,其他RPC都被禁用。

問:你知道geth的哪些API?
答:Admin、eth、web3、miner、net、personal、shh、debug和txpool。

問:你可以使用哪些RPC通過網(wǎng)絡(luò)連接到geth客戶端?
答:可以使用JSON-RPC和WS-RPC通過網(wǎng)絡(luò)連接到geth客戶端。 IPC-RPC只能連接到同一臺(tái)機(jī)器上的geth客戶端。

問:如果啟動(dòng)geth時(shí)使用了-rpc選項(xiàng),哪些RPC會(huì)被啟用?
答:JSON-RPC。

問:哪些RPC API是默認(rèn)啟用的?
答:eth、web3和net。

問:如何為JSON RPC啟用Admin API?
答:使用-rpcapi選項(xiàng)。

問:選項(xiàng)-datadir有什么作用?
答:它指定了區(qū)塊鏈的存儲(chǔ)位置。

問:什么是geth的“快速”同步,為什么它更快?
答:快速同步會(huì)將事務(wù)處理回執(zhí)與區(qū)塊一起下載并完整提取最新的狀態(tài)數(shù)據(jù)庫(kù),而不是重新執(zhí)行所有發(fā)生過的交易。

問:選項(xiàng)–testnet是做什么的?
答:它將客戶端連接到Ropsten網(wǎng)絡(luò)。

問:?jiǎn)?dòng)geth客戶端會(huì)在屏幕上輸出大量文字,應(yīng)該如何減少輸出信息?
答:可以將–verbosity設(shè)置為較低的數(shù)字(默認(rèn)值為3)

問:如何使用IPC-RPC將一個(gè)geth客戶端連接到另一個(gè)客戶端?
答:首先啟動(dòng)一個(gè)geth客戶端,復(fù)制它的管道位置,然后使用同一個(gè)datadir啟動(dòng)另一個(gè)geth客戶端并使用–attach選項(xiàng)傳入管道位置。

問:如何將自定義javascript文件加載到geth控制臺(tái)中?
答:通使用–preload選項(xiàng)傳入js文件的路徑。

問:geth客戶端的帳戶存儲(chǔ)在哪里?
答:在keystore目錄中。

問:為了進(jìn)行交易,需要對(duì)賬戶進(jìn)行什么操作?
答:必須先解鎖該賬戶 - 可以傳入賬戶地址或賬戶序號(hào)來解鎖。 也可以使用–password選項(xiàng)傳入一個(gè)密碼文件,其中包含每個(gè)賬戶的密碼。

問:你提到了一些有關(guān)賬戶序號(hào)的內(nèi)容。 什么因素決定賬戶的序號(hào)?
答:添加帳戶的先后順序。

問:是否可以使用geth進(jìn)行挖礦?
答:可以,使用–mine選項(xiàng)開啟。

問:什么是“etherbase”?
答:這是接收挖礦獎(jiǎng)勵(lì)的帳戶,它是序號(hào)為0的帳戶。

智能合約和Solidity

問:什么是智能合約?
答:這是用多種語言編寫的計(jì)算機(jī)代碼。 智能合約存在于以太坊網(wǎng)絡(luò)上,它們根據(jù)預(yù)定規(guī)則執(zhí)行動(dòng)作,規(guī)則是由參與者在這些合約中商定的。

問:智能合約可以使用哪些語言編寫?
答:Solidity,這是最常用的語言,也可以使用Serpent和LLL。

問:你能舉出一個(gè)智能合約的用例嗎?
答:賣方-買方應(yīng)用場(chǎng)景:買方在智能合約中存入款項(xiàng),賣方看到存款并發(fā)送貨物,買方收到貨物并放行付款。

問:什么是Metamask?
答:Metamask是一個(gè)可以幫助用戶在瀏覽器中與以太坊網(wǎng)絡(luò)進(jìn)行交互的工具

問:Metamask使用哪個(gè)以太坊節(jié)點(diǎn)?
答:它使用infura.io

問:Metamask不支持什么?
答:挖礦和合約部署。

問:執(zhí)行合約是否免費(fèi)?
答:不,調(diào)用合約方法是一個(gè)交易,因此需要支付費(fèi)用。

問:訪問智能合約的狀態(tài)是否免費(fèi)?
答:是的,查詢狀態(tài)不是交易。

問:誰執(zhí)行合同?
答:礦工。

問:為什么調(diào)用智能合約的方法需要付費(fèi)?
答:有些方法不會(huì)修改合約的狀態(tài),也沒有其他邏輯,只是返回一個(gè)值,這樣的方法是可以免費(fèi)調(diào)用的。 調(diào)用那些改變合約狀態(tài)的方法則需要付費(fèi),因?yàn)樗鼈冃枰猤as來執(zhí)行。

問:為什么需要gas?
答:由于礦工在他們的機(jī)器上執(zhí)行合約代碼,他們需要gas來覆蓋執(zhí)行合約代碼的成本。

問:是不是gas的價(jià)格決定了交易什么時(shí)候被處理?
答:即是,也不是。 gas價(jià)格越高,交易成功的可能性就越大。 盡管如此,gas價(jià)格并不能保證更快的交易處理。

問:交易中的gas使用量取決于什么?
答:這取決于合約所用的存儲(chǔ)量、指令(操作碼)的類型和數(shù)量。 每個(gè)EVM操作碼都對(duì)應(yīng)一個(gè)固定的gas用量。

問:交易費(fèi)是如何計(jì)算的?
答:gas用量*gas價(jià)格(由調(diào)用方指定gas價(jià)格)

問:如果智能合約的執(zhí)行成本低于調(diào)用方指定的gas用量,用戶是否得到退款?
答:是的

問:如果智能合約的執(zhí)行成本高于指定的gas用量,會(huì)發(fā)生什么情況?
答:用戶不會(huì)得到退款,并且一旦所有的gas用完,執(zhí)行就會(huì)停止,合約也不會(huì)改變。

問:誰支付智能合約的調(diào)用費(fèi)用?
答:調(diào)用合約的用戶。

問:節(jié)點(diǎn)在什么上面運(yùn)行智能合約代碼?
答:EVM - 以太坊虛擬機(jī)。 EVM遵循EVM規(guī)范,該規(guī)范是以太坊協(xié)議的組成部分。 EVM只是節(jié)點(diǎn)上的一個(gè)進(jìn)程。

問:為了運(yùn)行智能合同,EVM需要什么?
答:它需要合約的字節(jié)碼,是通過編譯Solidity等更高級(jí)別的語言編寫的合約來生成字節(jié)碼。

問:粗略的說,EVM有哪些組成部分?
答:內(nèi)存區(qū)域、堆棧和執(zhí)行引擎。

問:什么是Remix?
答:開發(fā),測(cè)試和部署合約的在線工具。 適合快速構(gòu)建和測(cè)試輕量級(jí)合約,但不適合更復(fù)雜的合約。

問:在Remix中,可以連接哪些節(jié)點(diǎn)?
答:可以使用Metamask連接到公共節(jié)點(diǎn)、也可以鏈接到使用Geth搭建的本地節(jié)點(diǎn),或者在Javascript VM中模擬的內(nèi)存節(jié)點(diǎn)。

問:什么是DApp,它與App有什么不同?有什么不同?
答:App通常包含一個(gè)客戶端,這個(gè)客戶端會(huì)與一些中心化的資源(由一個(gè)組織擁有)進(jìn)行通信,通??蛻舳送ㄟ^一個(gè)中間層連接到中心化的數(shù)據(jù)層,如果中心化的數(shù)據(jù)層中的信息丟失,不能很輕松地恢復(fù)。
DApp表示去中心化應(yīng)用程序。 DApps通過智能合約與區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行交互。 DApp使用的數(shù)據(jù)駐留在合約實(shí)例中。
中心化數(shù)據(jù)可能比去中心化數(shù)據(jù)更容易受到破壞。


DApps和web3

問:DApp的前端是否局限于某些技術(shù)或框架?
答:不受限制??梢允褂萌魏渭夹g(shù)來開發(fā)DApp的前端,比如HTML,CSS,JS,Java,Python…

問:前端用什么庫(kù)連接后端(智能合同)?
答:Web3.js庫(kù)。

問:在DApp的前端需要哪些東西才能與指定的智能合約進(jìn)行交互?
答:合約的ABI和字節(jié)碼。

問:ABI有什么作用?
答:ABI是合約的公開接口描述對(duì)象,被DApps用于調(diào)用合約的接口。

問:字節(jié)碼有什么作用?
答:節(jié)點(diǎn)上的EVM只能執(zhí)行合約的字節(jié)碼。

問:為什么要使用BigNumber庫(kù)?
答:因?yàn)镴avascript不能正確處理大數(shù)。

問:為什么需要檢查在Web DApp代碼的開始部分是否設(shè)置了web3提供器(Provider)?
答:因?yàn)镸etamask會(huì)注入一個(gè)web3對(duì)象,它覆蓋其他的web3設(shè)置。

問:為什么要使用web3.js版本1.x而不是0.2x.x?
答:主要是因?yàn)?.x的異步調(diào)用使用Promise而不是回調(diào),Promise目前在javascript世界中
是處理異步調(diào)用的首選方案。

問:如何在web3 1.x中列出賬戶?
答:web3.eth.getAccounts

問:.call和.send有什么區(qū)別?
答:.send發(fā)送交易并支付費(fèi)用,而.call查詢合約狀態(tài)。

問:這樣發(fā)送1個(gè)以太對(duì)嗎:.send({value:1})?
A:不對(duì),這樣發(fā)送的是1 wei。 交易中總是以wei為單位。

問:那么為了發(fā)送1個(gè)以太,我必須將這個(gè)值乘以10^18?
答:可以使用web3.utils.toWei(1,‘ether’)。

問:調(diào)用.send()時(shí)需要指定什么?
答:必須指定from字段,即發(fā)送賬戶地址。 其他一切都是可選的。

問:web3.eth.sendTransaction()的唯一功能是將以太發(fā)送到特定的地址,這個(gè)說法是否正確?
答:不對(duì),也可以用它調(diào)用合約方法。

問:你是否知道以太坊的可擴(kuò)展性解決方案?
答:2層協(xié)議??赡艿慕鉀Q方案是狀態(tài)通道(state channels)和Plasma。

Solidity
問:Solidity是靜態(tài)類型的還是動(dòng)態(tài)類型的語言?
答:它是靜態(tài)類型語言,這意味著類型在編譯時(shí)是已知的。

問:Solidity中與Java“Class”類似的是什么?
答:合約。

問:什么是合約實(shí)例?
答:合約實(shí)例是區(qū)塊鏈上已部署的合約。

問:請(qǐng)說出Java和Solidity之間的一些區(qū)別。
答:Solidity支持多重繼承,但不支持重載。

問:你必須在Solidity文件中指定的第一件事是什么?
答:Solidity編譯器的版本,比如指定為^ 0.4.8。 這是必要的,因?yàn)檫@樣可以防止在使用其他版本的編譯器時(shí)引入不兼容性錯(cuò)誤。

問:合約中包含什么?
答:主要由存儲(chǔ)變量、函數(shù)和事件組成。

問:合約中有哪些類型的函數(shù)?
答:有構(gòu)造函數(shù)、fallback函數(shù)、修改合約狀態(tài)的函數(shù)和只讀的constant函數(shù)。

問:如果我將多個(gè)合約定義放入單個(gè)Solidity文件中,我會(huì)得到什么錯(cuò)誤?
答:將多個(gè)合約定義放入單個(gè)Solidity文件是完全正確的。

問:兩個(gè)合約之間交互的方式有哪些?
答:一個(gè)合約可以調(diào)用另一個(gè)合約,也可以繼承其他合約。

問:當(dāng)你嘗試使用部署一個(gè)包含多個(gè)合約的文件時(shí)會(huì)發(fā)生什么?
答:編譯器只會(huì)部署該文件中的最后一個(gè)合約,而忽略所有其他合約。

問:如果我有一個(gè)大項(xiàng)目,我需要將所有相關(guān)的合約保存到一個(gè)文件中嗎?
答:不需要??梢允褂胕mport語句導(dǎo)入其他合約文件,例如import “./MyOtherContracts.sol”;。

問:我只能導(dǎo)入本地合約文件嗎?
答:還可以使用HTTP協(xié)議導(dǎo)入其他合約文件,例如從Github導(dǎo)入:import “http://github.com/owner/repo/path_to_file”;。

問:EVM的內(nèi)存分成了哪些部分?
答:它分為Storage、Memory和Calldata。

問:請(qǐng)解釋一下Storage。
答:可以把它想象成一個(gè)數(shù)據(jù)庫(kù)。 每個(gè)合約管理自己的Storage變量。 它是一個(gè)鍵-值數(shù)據(jù)庫(kù)(256位鍵值)。
就每次執(zhí)行使用的gas而言,在Storage上讀取和寫入的成本更高。

問:請(qǐng)解釋一下Memory。
答:這是一個(gè)臨時(shí)存儲(chǔ)區(qū)。 一旦執(zhí)行結(jié)束,數(shù)據(jù)就會(huì)丟失。 可以在Memory上分配像數(shù)組和結(jié)構(gòu)這樣復(fù)雜的數(shù)據(jù)類型。

問:請(qǐng)解釋一下Calldata 。
答:可以把calldata視為一個(gè)調(diào)用堆棧。 它是臨時(shí)的、不可修改的,用來存儲(chǔ)EVM的執(zhí)行數(shù)據(jù)。

問:哪些變量存儲(chǔ)在Storage,那些變量存儲(chǔ)在Memory?

答:狀態(tài)變量和局部變量(它們是對(duì)狀態(tài)變量的引用)存儲(chǔ)在Storage區(qū)域, 函數(shù)參數(shù)位于Memory區(qū)域。


轉(zhuǎn)自:csdn論壇 ,

藍(lán)藍(lán)設(shè)計(jì)www.bouu.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國(guó)內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)

分享本文至:

日歷

鏈接

個(gè)人資料

存檔