區塊鏈問與答
來源
大致在網路上整理了區塊鏈常見問答題,有需要可以參考學習下。
問答來源:
單選:
1、中本聰是哪裡人?D
A.中國人 B.美國人 C.日本人 D.不確定
2、下面哪種共識機制效率最低?A
A.PoW B.PoS C.DPoS D.PBFT
3、如果同時收到兩份合法的賬本如何處理?A
A.以當前最長分支作為主賬本,但是保留其它分支
B.只保留當前最長分支作為主賬本
C.以保留交易時間最早的分支作為主賬本,但是保留其它分支
D.只保留本次挖礦手續最多的交易分支作為主賬本
4、拜占庭將軍問題解決了哪個問題?C
A.分散式通訊 B.內容加密 C.共識機制 D.投票機制
5、在保障你區塊鏈公鏈如比特幣上賬戶的隱私,哪種說法是正確的?B
A.比特幣本身是匿名地址,已經可以保護隱私
B.要真正保護隱私,只使用一次的比特幣地址
C.除非點對點交易,不對外公開比特幣地址
D.採用冷錢包儲存
6、關於數字貨幣礦工及其挖礦程式的說法哪種是正確的?B
A.都是由原生數字貨幣開發者配套提供
B.一般是定製開發的
C.一般統一由礦池提供標準的挖礦程式
D.假如同一筆UTXO構造了兩筆分別付給A和B的交易,礦工不可以自主任意選擇這兩筆交易裡的一筆
是非判斷:
1、 區塊鏈上的資料預設加密的 N
2、 區塊鏈上的記錄都是真實的 N
3、 區塊鏈記錄所有事件是不可篡改的 Y
4、 區塊鏈沒有拒絕服務攻擊(DDOS)的問題 N
5、 加密數字貨幣都是使用區塊鏈技術 N
6、 比特幣的每個節點同步的賬本都是全賬本 Y
7、 當最後一個比特幣挖出來後,比特幣不需要繼續挖礦了 N
8、 區塊鏈的簽名加密技術一般採用對稱加密技術 N
9、 所有區塊鏈技術的每一個節點都沒有差別、都是平等的 N
10、 區塊鏈等同於分散式賬本 N
多選:
1、下面哪些對於區塊鏈的描述是正確的?ABD
A.去中心 B.弱中心 C.單中心 D.多中心
2、比特幣是?BC
A. 一堆加密程式碼 B. 全球同步賬本 C.加密數字貨幣 D.區塊
3、下面哪些屬於當前區塊鏈技術的應用場景?ABCE
A.物聯網 B.預測 C.股票交易 D.支付寶 E.供應鏈管理
4、一般來說,聯盟鏈相對於公鏈的優勢在哪裡?BCD
A.不存在51%攻擊 B.低能耗 C.高擴充套件性 D.高效能 E.信任問題更好解決
5、對於基於區塊鏈的數字貨幣資產的擁有者來說,最重要是保護好自己的?B
A.公鑰 B.私鑰 C.賬號密碼 D.數字簽名 E.錢包
6、比特幣在區塊鏈中記錄的是?CD
A.賬戶資訊 B.賬戶餘額 C.交易記錄 D.未花費的輸出
7、下面哪些是比特幣和以太坊1.0兩種區塊鏈技術的區別?BCDE
A.共識機制 B.挖礦演算法 C.智慧合約 D.開發中心化 E.通脹通縮
問答:
1.問:你認為區塊鏈技術中的區塊意味著什麼?
區塊鏈由所有金融交易的資訊組成。一個塊只不過是一個記錄列表。當這些列表相互結合時,它們被稱為區塊鏈。例如,一個組織有100個分類賬簿,其中的組合被稱為區塊鏈,單個分類賬將被視為一個區塊。
2.問:為什麼區塊鏈是一種值得信賴的方法
有很多原因,區塊鏈可以被信任。第一個原因是它與其他商業應用程式有良好的相容性,因為它是開源的。其次是它的安全性,因為它是為了線上交易而開發的,所以開發人員在保證安全性的同時也特別關注它的資料同步。由於其擁有的業務型別無關,所以在選擇的時候區別鏈很容易地被考慮。
3.問:區塊鏈中是否有可能從網路中刪除一個或多個區塊?
當然可以,如果只考慮該線上分類帳的特定部分的時候。藉助預設選項和過濾器,可以輕鬆完成此任務,而不需要付出太多。
4.問:你對區塊鏈瞭解多少?
這是一種實際上為比特幣設計的技術,後來因為監控和記錄網路上所有金融交易而帶來的多種好處而獲得了大量的推廣。這是一種值得信賴的方法,目前情況下有很多組織正在使用它。由於一切都是十分安全的,並且它是一種開源方式,所以從長遠來看,它可以輕鬆獲得大家的信任。
5.問:區塊鏈方法如何識別區塊?
線上分類帳中的每個塊基本上都包含一個雜湊指標,該指標指向它之前的塊並形成連結,塊中包含交易資料和時間戳。
6.問:你認為一個區塊的安全性究竟是什麼?
網路上的所有使用者都不能修改塊。因此它提供了極好的安全級別。除此之外,每個區塊都使用加密技術進行保護,這是另一項措施。因此,不需要擔心塊中存在的資料的安全性和安全性。
7.問:在組織中使用區塊鏈技術是否有網路特定的條件?
使用它沒有特定的條件。但是,網路必須是有關協議下的對等網路。它實際上很簡單地驗證了新塊,並幫助組織在不投資第三方應用程式的情況下保持同步。
8.問:什麼是加密?它在區塊鏈中的作用是什麼?
資料安全始終很重要。加密基本上是一種幫助組織保持資料安全的方法。在這種技術中,資料在被髮送者傳送到網路之前被編碼或者在一定程度上被改變。唯一的接收器可以理解如何對其進行解碼。在區塊鏈中,這種方法很有用,因為它增加了區塊的整體安全性和真實性,並有助於保護區塊的安全。
9.問:一旦寫入資料塊後,是否可以修改資料?
不,這是不可能的。如果需要進行任何修改,組織只需刪除所有其他塊的資訊。這是因為沒有其他方法,資料在使用這種方法時必須非常謹慎。
10.問:區塊鏈中可以儲存哪些型別的記錄?有什麼限制嗎?
區塊鏈方法中沒有任何型別記錄的限制。目前,世界各地的許多組織正在使用這種方法,事實是醫療交易記錄,與組織相關的事件,管理活動,交易處理,身份管理以及檔案記錄都是常見的可以使用區塊鏈的記錄型別。而且記錄儲存並不僅限於這些應用程式。
11.問:什麼是雙重支出?
這是與數字貨幣有關的主要問題之一。 事實上,這是一個數字通證被多次使用的條件,因為通證通常由易於克隆的數字檔案組成。它只會導致通貨膨脹,組織不得不承受巨大的損失。 區塊鏈技術的主要目標之一是儘可能地消除這種方法。
12.問:解釋盲簽名的重要性以及它如何有用?
它實際上是一種數字簽名形式,密碼學的一個重要組成部分,其中所有資訊在實際考慮或簽署之前都是盲目的。 這是經過驗證的方法,通常在作者和簽署方都不同的隱私相關協議中考慮。 數字貨幣設計是最常見的例子之一。
13.問:什麼是金鑰分享?區塊鏈技術有什麼好處嗎?
眾所周知的事實是,數字交易中的安全問題非常重要。金鑰分享是一種類似的方法。在區塊鏈技術中,這是一種將金鑰密或個人資訊劃分為不同單元並將其傳送給網路上的使用者的方法。原始資訊只能在分配了金鑰的參與者同意將他們與其他人結合在一起時才能結合使用。它可以在區塊鏈技術中提供多種與安全相關的好處。
14.問:超級賬本是什麼?區塊鏈支援嗎?
超級賬本只不過是一種特殊的賬本,為給人們提供服務的企業而設計。沒有嚴格的服務上限,企業可以通過超級賬本進行管理。區塊鏈擁有專門用於處理超級賬本的演算法。事實上,它減少了許多與此相關的問題。
15.問:命名區塊鏈專案實施中涉及的步驟?
這個過程共涉及六個步驟,它們是:
1.需求識別
2.篩選並確認需求
3.區塊鏈專案開發
4.安全性的可行性研究
5.實施
6.控制和監測專案
16.問:你所知道區塊鏈的好處是什麼?
它鼓勵安全的線上交易,這是它最大的好處之一。基本上,作為一個密切關注所有交易記錄的分散式分散賬本,它不會讓記錄被任何人改變,這增強了安全性。除此之外,參與者和企業主可以始終確保最終的成本審計。區塊鏈始終可以保證的一件事是每個區塊或單元只能傳輸一次,這樣可以消除雙重支出問題。
17.問:將區塊鏈資料庫中存在的兩種記錄命名為?
這些記錄是塊記錄和交易記錄。這兩個記錄都可以輕鬆訪問,最好的方式是可以將它們彼此整合,而無需遵循複雜的演算法。
18.問:你瞭解的資訊威脅有哪些?
目前情況下資訊面臨很多威脅。由於網際網路線上交易的增加,許多黑客已經變得活躍,正在採用新方法來破解包含財務資訊的資料和伺服器。主要的威脅是軟體攻擊,身份盜竊,資訊勒索以及破壞。除此之外,特洛伊木馬,蠕蟲和病毒也是麻煩的創造者。
19.問:資訊洩漏對組織可能造成什麼挑戰?
資訊洩露可以極大地降低組織的聲譽。除此之外,這可能是組織承受巨大損失的原因。許多未能實施安全協議來保證其資料安全的組織已經失去了客戶的信任,並且正在努力爭取再次獲得相同的聲譽。如果不關注線上交易安全,任何組織的總體利潤可降低80%。
20.問:有那些可以使用區塊鏈技術的組織?
可以考慮這種方法的商業類別沒有嚴格的上限。事實上,幾乎所有的企業都在進行線上或財務交易,而這些交易需要他們順利的執行完整的流程。大型公司,金融機構,私營企業,政府部門乃至國防組織都可以非常輕鬆地信任這項技術。
21.問:什麼是資訊處理?與此相關的關鍵挑戰是什麼?
這些資訊通常在網路上共享。在通過網路實際傳送之前,需要將其改變為適合頻道標準的格式(頻道是傳送者和接收者之間的連結)。在傳送端和接收端進行資訊轉換所做的工作通常被認為是資訊處理。資訊處理所面臨的最大挑戰就是在這段時間保護它。另一個挑戰是處理批量資訊會對效能造成限制。
22.問:BIP代表什麼?
這意味著比特幣改善建議。
23.問:區塊鏈中的哪些關鍵原則有助於消除需要遵循的安全威脅?
是的,在時間方面需要遵循一些原則。他們是:
1.審計
2.保護應用程式
3.確保測試和類似的方法
4.資料庫安全
5.連續性計劃
6.數字勞動力培訓
所有這些原則都是基本的,並且易於實施。它們有助於使交易記錄有用。
24.問:區塊鏈技術的基礎是什麼?
它使資訊能夠在使用者之間分發而不被複制。
25.問:區塊鏈是不可破壞的分類賬嗎?
根據開發商的說法,區塊鏈分類帳不能損壞。
26.問:什麼是安全策略?
安全策略定義了系統上確切需要確保的內容。它根據一些核心協議繫結網路使用者,他們都必須同意並遵循以提高整體安全性。當涉及到組織的資訊或財務記錄時,多個安全策略的實施不止一個。
27.問:在確保交易記錄時,您將如何處理風險管理?
它基本上是一個查詢組織的財務記錄的威脅和所有漏洞的過程。對付這種做法最好的辦法是立即採取正確的對策。另一種方法是注意備份計劃。根據資訊的價值,可以簡單地考慮購買新風險管理軟體等更多方法。資訊的主要風險來自黑帽黑客。
28.問:請列出區塊鏈中使用者可以考慮的普通型別的分類帳?
這些是:
1.集中式分類賬
2.分散式分類帳
3.分散式分類帳
29.問:區塊鏈分類賬與普通分類賬的區別?
第一個,其實最主要的區別是區塊鏈是一個可以非常容易分散的數字分類帳。這種方法出錯的機率遠遠低於普通分類賬中的錯誤率。普通賬本就是用手或人工努力準備的,而區塊鏈自動執行所有任務。你只需要以適當的方式配置它,並遵循所有的指導原則。
30.問:分散式數字分類帳用於在BlockChain中記錄交易。系統依賴於什麼?
它依賴於網路節點。
31.問:陷門函式的功能是什麼,為什麼它是區塊鏈所需要的?
一個陷門函式是在一個方向上容易計算但難以在相反方向的計算,除非你有特殊的資訊。陷門函式是必不可少的公共金鑰加密,所以他們常用在blockchain發展代表思想的地址和私有金鑰。
32.問:比特幣實現中的交易和塊是如何加密的?
比特幣塊不以任何方式加密:每個塊都是公開的。阻止修改和保證資料完整性的是一個稱為塊雜湊的值。塊的內容是使用在比特幣的一種特殊Hash函式來處理,它的實現和得到的值包含在區塊鏈中。
33.問 :解釋為什麼區塊鏈需要通證。
代幣/通證用於實現狀態之間的變化。當有人做交易時,這是一種狀態的改變,代幣從一個地址移到另一個地址。除此之外,交易可以包含額外的資料和狀態的變化來改變資料,來做這一個不變的定義區塊鏈的唯一途徑。從技術上講,區塊鏈不需要代幣為其主要業務,但沒有他們,其他方式需要引進管理鏈狀態和驗證交易。
34.問:對等網路(P2P)網路中對等體是如何工作的?
當一個新的節點啟動時,它對網路一無所知,因為沒有中央伺服器。通常開發人員提供可信節點的列表,這些節點直接寫入可用於初始對等點發現的程式碼中。
35.問:如何驗證檢查一個塊是有效的?
網路上的每個完整節點都進行塊驗證。當一個新的塊被宣佈時,接收它的每個節點都會執行一個檢查列表。兩個最重要的檢查是工作證明(如果一個塊提供足夠的工作要包含在鏈中)和所有事務的有效性(每個事務必須是有效的)。
36.問:一個ScriptPubKey是什麼?解釋如何使用P2SH地址就可以了。
一個是所謂的鎖定ScriptPubKey指令碼。它出現目的是阻止交易的輸出,在輸出過程中必須滿足。
P2SH是一種特殊型別的地址,代替複雜的鎖定指令碼的hash值。當一個試圖花費輸出的交易稍後顯示時,除了解鎖指令碼之外,它還必須包含與雜湊匹配的指令碼。
37.問:使用指令碼,編寫一個redeem script指令碼,允許使用者僅在使用者知道魔術數字1234567時才使用輸出。
OP_EQUALVERIFY
scriptPubKey: 1234567 OP_EQUALVERIFY
scriptSig: 1234567
38.問:使用指令碼,編寫一個redeem script指令碼,允許任何人在一次老化後最少花費30天的時間。
scriptPubKey: "30d" OP_CHECKSEQUENCEVERIFY OP_VERIFY
scriptSig: empty
39.問:什麼是挖礦?
挖礦是在區塊鏈網路達成共識的過程。挖礦有兩個目的。首先,它在生成的塊中建立新的代幣。其次,它通過向網路提供工作證明,包括分散式計費中的交易;也就是說,證明所生成的塊是有效的。
40.問:什麼是軟分叉?
在分類帳中的塊包括以建立最長鏈的方式,即具有最大累積難度的鏈。分叉是有兩個候選塊競爭形成最長的區塊鏈,兩個礦工發現工作問題的證明方法在很短的時間內沒有同步對方的情況。造成網路分割,因為某些節點得到塊從礦工#1和而另外一些得到礦工#2。
分叉通常在一個塊中得到解決,因為這種情況再次發生的概率變得非常低,因為下一個塊出現,所以很快有一個新的最長鏈,將被認為是主要的。
(注:這種叉不同於硬叉,這是一些開發商決定建立一個不向後相容的改變到區塊鏈協議,導致兩個永遠不同區塊鏈。)
41.問:在以太坊中,Wei和Ether(以太幣)有什麼區別?
答:Wei是以太幣的最小面值,就好比說人民幣的最小面值是分,英鎊的最小面值是便士。 其換算關係為1以太幣 =10^18Wei。
42.問:以太坊的平均區塊間隔時間是多少?
答:平均區塊間隔時間為14秒,當然了這只是理論值,你可以在Etherscan
中查到每日的平均區塊時間間隔。
43.問:以太坊的平均區塊大小是多少?
答:區塊大小視情況而定,大約是2KB。不同於比特幣使用區塊大小來規定區塊的交易量上限,以太坊使用燃料(gas)限制。燃料限制決定了每個區塊中處理的交易量、儲存/頻寬的上限,因為交易和智慧合約中函式的執行都要根據指令的複雜度多少來付出相應的燃料,所以使用燃料限制來約束區塊大小是可行的。
燃料限制會隨網路的波動和礦工的意願變化,每個礦工都可以選擇自己願意接受的燃料價格。燃料價格就像是比特幣中的交易費,只是這裡的價格是最小單位燃料的價格,而不是每筆交易的價格。
想要算出一個區塊中可以容納多少筆交易,你不需要清楚地知道燃料的價格,只需知道平均每筆交易使用多少燃料並用整個燃料限制除以它即可。
去年以太貓的發行造成了以太坊網路的大擁堵,整個網路中充斥著大量未被處理的交易。在這種情況下礦工有兩種選擇。他們可以投票提高燃料限制來處理更多交易,也可以開始提高自己的燃料價格標準並拒絕處理燃料費用過低的交易。
與比特幣一樣,即使燃料價格很低的交易也可能會被處理加入區塊鏈中,但礦工肯定會先處理完燃料價格高的交易再處理它。如果你的交易並沒有那麼緊急,設定一個很低的燃料價格也不是不可以,就像我們現實生活中的“花時間來節省金錢”。
如果有惡意使用者持續地發起海量交易堵塞網路,全網的交易成本就會越來越高,直到這個惡意使用者用完資金或者礦工賺足了交易費並決定擴大網路容量。
44.問:以太幣是如何產生的?
答:2014年以太坊專案以眾籌的形式建立並預售了6000萬個以太幣,除此之外,礦工挖礦也會生成新的以太幣。
45.問:以太坊中的節點是什麼?
答:從本質上來說,節點是一臺連線到區塊鏈、可以處理交易的計算機。
46.問:以太坊都有哪些網路?
答:以太坊共有三種類型的網路:以太坊主鏈(就是我們平時用的以太坊)、以太坊測試網路(如Ropsten和Rinkeby,供開發人員的學習和測試)和以太坊私有鏈(也叫以太坊私有網路,任何人都能用以太坊的程式碼部署自己的私有鏈)。
47.問:與以太坊網路互動都哪些方法?
答:你可以使用電子錢包或DApp。
48.問:你是否能在以太坊中“隱藏”一筆交易?
答:不能。以太坊區塊鏈中所有的交易都是公開可見的。
49.問:以太坊的交易記錄存放在哪裡?
答:在公共可見的賬本中,這個帳本通常被稱為區塊鏈。
50.問:以太坊主鏈已經很強大了,為什麼還要使用以太坊私有鏈?
答:原因有很多,主要是因為資料涉及隱私,將資料庫去中心化,許可權控制和測試。
51.問:如何檢視一筆交易或一個區塊的詳細資訊?
答:你可以使用區塊鏈瀏覽器,如etherscan.io或live.ether.camp。
52.問:如何檢視私有鏈中一筆交易或一個區塊的詳細資訊?
答:一些開源的區塊鏈瀏覽器滿足這種需求,如etherparty推出的區塊鏈瀏覽器
53.問:區塊鏈的共識過程是什麼?
答:共識是按照特定的協議(如以太坊的協議)驗證交易,將交易打包進區塊並加入區塊鏈的過程。
54.問:以太坊挖礦操作的工作原理是什麼呢?
答:從原理上說,以太坊中的挖礦操作幾乎與比特幣相同。簡單地說,就是對於每個包含交易的區塊,礦工使用計算機反覆且非常快速地試驗謎題的答案,直到有一個礦工猜對謎題。
更具體地說,礦工將當前區塊唯一的區塊頭元資料(包括時間戳和軟體版本)和一個隨機數(nonce value)作為雜湊函式的輸入,函式將返回一個固定長度、看起來像是由數字和字母隨機組成的亂碼,叫做雜湊值。雜湊函式的特性是不同輸入對應不同的雜湊值,因此礦工僅需改變隨機數的值,就會得到一個完全不同的雜湊值。
如果算出來的雜湊值小於當前的目標值(挖礦難度),則這個礦工就挖出了一個區塊,他會獲得一些以太幣獎勵,然後通過向全網路廣播該區塊,其他節點可以驗證該區塊中的交易,驗證通過後將該區塊加入到本地區塊鏈的副本中。也就是說,如果礦工B算出了一個雜湊值,礦工A將立刻停止當前區塊的雜湊值計算,把B挖出的區塊加入區塊鏈中並開始新一輪的雜湊值計算。
礦工們很難在這場算力競爭中作弊。為了得到迷題的答案,除了一個個試沒有更好的辦法,也沒有偽造這些計算工作的可能,這就是該解謎方法被稱為“工作量證明”的原因。
從另一方面來說,使用者不需要來驗證雜湊值是否正確,因為每個節點都已驗證過。
一般來說,每12到15秒就會有一個礦工挖出一個新區塊。如果礦工解謎的時間開始出現更快或更慢的傾向,演算法會自動調整問題的難度,以使礦工解謎的時間穩定在14秒左右。
礦工有一定機率能挖到新區塊賺取以太幣獎勵,他們的賺錢能力取決於運氣和他們投入的計算能力。
以太坊使用的工作量證明演算法被稱為“ethash”,它被設計的需要更多記憶體,從而增大了使用昂貴的ASIC礦機挖礦的難度,因為ASIC礦機的出現嚴重壓榨了使用其他裝置礦工的收益,以至於在比特幣中唯一能盈利的挖礦形式就是使用這種定製化的晶片。
從某種意義上來說,ethash可能已經成功實現了這一目標,因為專用的ASIC礦機不能用於挖掘以太坊(至少目前還沒有)。
此外,由於以太坊將要從工作量證明挖礦逐步過渡到權益證明挖礦,因而購買ASIC礦機可能不是一個明智的選擇,因為一旦以太坊轉向權益證明它必將被淘汰。
55.問:區塊鏈中最常用的兩種共識協議是什麼?
答:工作量證明(PoW)和權益證明(PoS),業界也在不斷湧現新的共識協議,比如說活動證明(Proof-of-Activity,PoA)。
56.問:請簡述權益證明的工作原理。
答:權益證明就是根據持有貨幣的數量和時間隨機選擇區塊的建立者,它不是計算密集型的挖礦形式。
57.問:以太坊使用哪種共識協議呢?
答:截至2018年初,以太坊使用工作量證明建立共識,但在未來它將轉向權益證明。
活動證明在比特幣的工作量證明中引入了一種新形式的激勵結構,這種混合結構結合了工作量證明和權益證明。為避免系統出現惡性通貨膨脹,應該停發新的加密貨幣,也就是說礦工的挖礦行為不再能拿到挖礦獎勵。
這樣系統中的加密貨幣數量就恆定了。在活動證明中,礦工使用工作量證明產生區塊,加密貨幣的持有者通過權益證明簽署區塊,交易費將按比例分給礦工和簽署該塊的驗證人。
58.問:簽署一筆交易需要用到什麼工具?
答:使用者的私鑰。
59.問:在私鑰丟失後,使用者是否還可以恢復以太坊帳戶?
答:是的,使用者可以使用12字助記詞恢復。
60.問:用什麼方法可以連線到以太坊節點?
答:IPC-RPC,JSON-RPC和WS-RPC(RPC指Remote Procedure Call,遠端過程呼叫)。
61.問:以太坊中異常火爆的Geth是什麼呢?
答:Geth是以太坊的一個命令列客戶端。
62.問:連線到Geth客戶端的預設方式是什麼?
答:預設情況下使用IPC-RPC,禁用其他所有的RPC。
63.問:Geth客戶端中都有哪些API(Application Programming Interface,應用程式程式設計介面)?
答:Admin(管理員)、 eth(以太幣)、web3、miner(礦工)、net(網路)、personal(個人)、shh、debug(除錯)和 txpool(工具)。
64.問:你可以使用哪些RPC通過網路連線到Geth客戶端?
答:你可以使用JSON-RPC或WS-RPC通過網路連線到Geth客戶端。 IPC-RPC只能用來連線本地部署的Geth客戶端。
65.問:如果你輸入命令“--rpc”,啟用的是哪一個RPC?
答:JSON-RPC。
66.問:預設情況下哪些RPC API是啟用的?
答:eth(以太幣)、 web3和net(網路)。
67.問:如何為JSON-RPC啟用admin api?
答:輸入命令“--rpcapi”。
68.問:命令“--datadir”有什麼功能?
答:它指定了區塊鏈的儲存位置。
69.問:Geth的“快速”同步是什麼,為什麼它更快速呢?
答: “快速”同步僅下載收款交易所在的區塊,並拉取(pull)整個最近狀態資料庫,而不是像普通同步一樣,下載整個區塊鏈的資料並重放所有發生的交易。
70.問:命令“--testnet”有什麼功能?
答:它將客戶端連線到以太坊Ropsten測試網路。
71.問:啟動Geth客戶端會在螢幕上列印大量的輸出資訊,如果不想被這些繁雜資訊干擾該怎麼辦?
答:使用“--verbosity”命令調低輸出資訊複雜度的值(預設值為3)。
72.問:如何使用IPC-RPC連線兩個Geth客戶端?
答:首先啟動一個Geth客戶端,複製其管道位置(pipe location),然後使用相同的資料文件儲存目錄(datadir)啟動另一個Geth客戶端,並使用”--attach”命令傳遞複製的管道位置。
73.問:如何將自定義javascript檔案載入到Geth控制檯?
答:輸入”--preload”命令和檔案的路徑即可。
74.問:Geth客戶端中帳戶儲存在哪裡?
答:儲存在金鑰庫(keystore)目錄中。
75.問:如何使用給定的賬戶發起一筆交易?
答:首先你要在“--unlock”命令中傳入帳戶地址或索引來解鎖賬戶。然後你需要使用“--password”命令指定一個此賬戶的密碼檔案。
76.問:我們剛才說到了有關索引的內容。賬戶的索引取決於什麼?
答:取決於你新增帳戶的順序。
77.問:Geth客戶端是否能用來挖礦?
答:是的,輸入“--mine”命令即可。
78.問:挖礦選項中的“etherbase”是什麼?
答:這是接受挖礦獎勵的帳戶地址,該帳戶的索引為0。
79.問:ABI是什麼?
答:簡單來說,“ABI”就是低級別的“API”。
ABI(Application Binary Interface)應用程式二進位制介面,從本質上講就是你呼叫智慧合約中的函式並獲取它返回值的方式。
ABI中定義瞭如何呼叫智慧合約中的函式以及應該選用哪種二進位制格式將資訊從一個程式元件傳遞到下一個程式元件的詳細資訊。
以太坊智慧合約以位元組碼的形式部署在以太坊區塊鏈上,一個智慧合約中可能會有多個函式。所以說,有了ABI你才可以指定呼叫智慧合約中的哪個函式,才能保證函式的返回值是你期望的格式。
80.問:智慧合約是什麼?
答:從本質上說,智慧合約就是用多種語言編寫的計算機程式碼。智慧合約存在於區塊鏈網路上,它們按照自身嵌入的規則執行相關操作,可以看做是參與者之間的契約。
81.問:智慧合約可以用哪種語言編寫?
答:最常用的語言是Solidity,除此之外還有一些小眾的語言,比如說Serpent和類Lisp語言。
82.問:智慧合約都有什麼樣的使用場景呢?
答:舉一個簡單的商品買賣場景,買方在以太坊中部署一個智慧合約並向其中存入資金,賣方看到存入的資金後傳送商品,買方收到商品後通過智慧合約支付貨款。這裡的智慧合約可以看作是一個保障淘寶交易的去中心化的支付寶。
83.問:什麼是MetaMask?
答:Metamask是一款外掛型別的以太坊錢包,可以幫助使用者在瀏覽器中與以太坊網路進行互動。
84.問:Metamask使用什麼節點?
答:它使用infura.io。
85.問:相比於傳統以太坊錢包,有哪些功能是Metamask不支援的?
答:它不支援採礦和部署智慧合約。
86.問:智慧合約的執行是免費的嗎?
答:不,只能通過執行交易來呼叫智慧合約,而交易需要燃料費用。
87.問:檢視智慧合約的狀態是免費的嗎?
答:是的,查詢狀態不需要執行交易。
88.問:誰來執行智慧合約?
答:礦工。
89.問:為什麼呼叫智慧合約中的函式需要花錢?
答:除了一些不會改變智慧合約狀態,除了返回值之外沒有其他邏輯的函式之外,呼叫智慧合約中的函式都是需要花錢的。
這筆花費中,除了向智慧合約中轉入以太幣執行呼叫之外,呼叫改變智慧合約狀態的函式需要花費燃料來執行。
90.問:為什麼以太坊中要引入燃料費用呢?
答:因為礦工使用自己的計算機(礦機)執行智慧合約程式碼,礦工如果能收回購買機器的成本並獲得盈利才能保證整個系統生態的安全性,所以以太坊設計使得礦工可以通過執行呼叫者請求的程式碼來賺取燃料費用,從而維持一個健康的生態。
91.問:燃料價格是否能決定交易被處理的時間?
答:是的,也不全是。一般來說,你支付的燃料價格越高,交易越有可能被加入區塊鏈。儘管如此,燃料價格並不能保證交易更快地被處理。
92.問:交易中的燃料使用量取決於什麼?
答:燃料使用量取決於儲存的用量,指令(操作碼)的型別和數量。每一條以太坊虛擬機器的操作碼都明確規定了所需燃料的數量。
93.問:交易費該如何計算?
答:交易費 = 使用的燃料數量 * 燃料價格(燃料價格由交易者指定)。
94.問:如果執行智慧合約的花費少於交易者支付的燃料費用,他是否會獲得退款?
答:是的。
95.問:如果執行智慧合約的花費超過了交易者支付的燃料費用,這時會發生什麼?
答:使用者不會獲得退款,並且一旦所有燃料耗盡執行就會停止,智慧合約的狀態就不會改變。
96.問:誰來支付呼叫智慧合約的費用?
答:呼叫智慧合約的使用者。
97.問:節點在哪裡執行智慧合約的程式碼呢?
答:節點在以太坊虛擬機器(EVM)中執行智慧合約的程式碼。以太坊虛擬機器規範是以太坊協議的一部分。以太坊虛擬機器只是節點執行的一個程序。
98.問:以太坊虛擬機器需要什麼工具來執行智慧合約?
答:它需要智慧合約的位元組碼,它由高級別語言(如Solidity)編譯生成。
99.問:以太坊虛擬機器都包含哪些部分?
答:記憶體區域,堆疊和執行引擎。
100.問:Remix是什麼?
答:Remix是一個用於開發,測試和部署智慧合約的線上工具。它非常適合快速構建和測試輕量級的智慧合約,但不適用於複雜的智慧合約。
101.問:在Remix中,你可以連線哪些節點?
答:你可以使用Metamask錢包連線到公共節點,使用Geth錢包連線到本地節點以及使用Javascript虛擬機器連線到記憶體中模擬的節點。
102.問:什麼是DApp,它與普通App有什麼不同?
答:應用程式通常包含一個與某些中心化資源(由組織擁有)互動的客戶端,通常有一個與中心化資料層相連的中間層。如果中心化資料層中的資料丟失,則無法(輕鬆)恢復。
DApp表示去中心化的應用程式。DApp通過智慧合約與區塊鏈網路互動,它們使用的資料駐留在智慧合約的例項中,與中心化的資料相比,去中心化的資料安全性更高。
103.問:Solidity是靜態型別語言(型別的檢查是在執行前做的,如編譯階段)還是動態型別語言(型別的檢查是在執行時做的)?
答:Solidity是靜態型別語言,這意味著型別在編譯階段是已知的。
104.問:Solidity中的什麼結構與Java中的類(Class)相對應?
答:智慧合約。
105.問:智慧合約的例項是什麼?
答:智慧合約的例項就是在區塊鏈上部署的一個智慧合約。
106.問:Java和Solidity之間存在哪些差異。
答:相比於Java,Solidity支援多繼承(multiple inheritance),但不支援方法過載(Overloading)。
107.問:在Solidity檔案中需要指定的第一個引數是什麼?
答:第一個引數是Solidity編譯器的版本,需要指定為^ 0.4.8。不要小看了這一步,因為它可以避免出現在使用其他版本編譯器進行編譯時引入的不相容錯誤。
108.問:一個智慧合約包含什麼?
答:智慧合約主要由儲存變數,函式和事件組成。
109.問:智慧合約中都有哪些型別的函式?
答:有建構函式(constructor),回退函式(fallback function),常量函式(constant functions)和修改智慧合約狀態的函式。
110.問:如果我將多個智慧合約定義放入單個Solidity檔案中,會出現什麼樣的錯誤?
答:將多個智慧合約定義放入單個Solidity檔案中是完全可行的。
111.問:兩個智慧合約可以通過哪些方式進行互動?
答:一個智慧合約可以呼叫、建立和繼承另一個智慧合約。
112.問:當你嘗試部署具有多個智慧合約的檔案時會發生什麼?
答:編譯器只會部署該檔案中的最後一個智慧合約,也就是說,其他所有智慧合約都被忽略了。
113.問:如果我有一個龐大的專案,我是否需要將所有相關的智慧合約儲存在一個檔案中?
答:不需要,你可以使用import語句匯入檔案。
114.問:我是否只能匯入本地檔案?
答:不,你也可以使用HTTP匯入檔案(甚至是Github上的檔案)
115.問:以太坊虛擬機器的記憶體都有哪些部分?
答:儲存(Storage)、記憶體(Memory)和Calldata。
116.問:請解釋一下儲存(Storage)。
答:可以把儲存想象成一個數據庫。每個智慧合約都管理自己的儲存變數,從而得到一個鍵值對資料庫(256位的鍵和值)。儲存與普通資料庫的唯一區別就是,由於存在燃料費用的問題它讀取和寫入操作的成本更高。
117.問:請解釋一下記憶體(Memory)。
答:記憶體是一個臨時性的儲存。當函式呼叫執行完畢後,記憶體中的資料將會被釋放。你可以在記憶體中分配各種複雜的資料型別,如陣列和結構體。
118.問:請解釋一下Calldata。
答:Calldata可以理解為一個函式呼叫堆疊(Callstack)。它是臨時的,不可修改的,它儲存著以太坊虛擬機器的執行資料。
119.問:儲存區和記憶體區分別儲存了哪些變數?
答:狀態變數和區域性變數(通常區域性變數都是對狀態變數的引用)位於儲存區中,而函式的引數位於記憶體區中。
120.問:EVM呼叫和非EVM呼叫之間有什麼區別呢?
答:
EVM呼叫是智慧合約中的函式呼叫,它觸發函式執行並需要燃料。
非EVM呼叫讀取公開可見的資料,不需要燃料。
121.問:如何在智慧合約帳戶中設定msg.val的值?
答:msg.val => msg.value =
隨訊息傳送的wei的個數。
122.問:DApp是什麼?
答:去中心化應用程式(DApp)是在點對點網路的計算機上而不是單臺計算機上執行的應用程式。去中心化應用程式自點對點網路出現以來就已經存在,它是一種旨在以不受任何實體控制的方式存在於Internet上的軟體工具。
去中心化應用程式不一定需要在區塊鏈網路上執行。 BitTorrent(去中心化下載軟體)、Popcorn Time(去中心化視訊軟體)、BitMessage(去中心化通訊協議)、Tor(洋蔥路由)都是在點對點網路上執行的傳統去中心化應用程式,它們都沒有在區塊鏈上執行(區塊鏈是一種特殊的點對點網路)。
與簡單的智慧合約相反,在比特幣的經典使用場景,即使用者A向用戶B匯款,去中心化應用程式的參與者可以是市場中的任意一個人。
123.問:DApp與智慧合約有何不同?
答:去中心化應用程式是一個基於區塊鏈的網站,其中智慧合約允許它連線到區塊鏈中。說起來有點繞,為了更好地理解去中心化應用程式和智慧合約,讓我們先來了解傳統網站的工作方式。
傳統的Web(網路)應用程式在前端使用HTML,CSS和Javascript來呈現頁面,在後端它需要利用API從資料庫中獲取一些詳細資訊,比如使用者的使用者名稱和頭像。當你進入網頁版的新浪微博時,該頁面將呼叫API來獲取你的個人資料並將其顯示在頁面上。也就是說,傳統網站的工作方式為:前端→API→資料庫。
去中心化應用程式類似於傳統的Web應用程式。它在前端使用完全相同的技術來呈現頁面。一個關鍵的區別是,去中心化應用程式不使用API來連線到資料庫,而是使用智慧合約連線到區塊鏈。所以說,基於去中心化應用程式的網站的工作方式為:前端→智慧合約→區塊鏈。
在傳統的中心化應用程式中,後端程式碼在中心化的伺服器上執行。而去中心化應用程式與之相反,它的後端程式碼在去中心化的點對點網路上執行。去中心化應用程式包括從後端到前端的整個軟體包,智慧合約只是去中心化應用程式的一部分。
也就是說,DApp包括:
前端(你能看到的頁面),和
後端(應用程式後臺的邏輯)。
另一方面,智慧合約僅包含後端,通常只是整個DApp的一小部分。這意味著如果你想在智慧合約系統上建立去中心化的應用程式,你必須與多個智慧合約相結合並依賴第三方系統作為前端。
124.問:前端使用什麼工具連線到後端的智慧合約?
答:Web3 API程式庫。
125.問:請列幾個你所知道的DApp。
答:Golem(單詞含義:傀儡),Golem專案旨在建立業界首個閒置計算機算力的全球市場;Augur(單詞含義:預兆),Augur專案旨在將預測市場與去中心化網路相結合,建立一個預測工具,以獲得潛在的收益;Aragon Network,它旨在充當一個方便使用者的數字化管理組織。
126.問:你需要什麼工具與DApp的智慧合約進行互動?
答:需要智慧合約的ABI和位元組碼。
127.問:ABI的作用是什麼?
答:ABI是智慧合約公共介面的描述,DApp用這個公共介面來呼叫智慧合約。
128.問:位元組碼的作用是什麼?
答:每個節點上的以太坊虛擬機器都需要智慧合約的位元組碼來執行智慧合約。
129.問:為什麼要使用大數運算程式庫(BigNumber library)?
答:因為Javascript無法正確處理大數字。
130.問:為什麼要始終檢查DApp程式碼的開頭是否設定了web3提供程式(provider)?
答:因為如果不這樣,Metamask會用自己的web3提供程式覆蓋掉它。
131.問:為什麼使用web3 js的1.x版本而不是0.2x.x版本?
答:主要是因為1.x版本的非同步呼叫使用promise物件(承諾將來會執行,比回撥物件更合理和更強大)而不是回撥物件,promise物件也是javascript中的首選。
132.問:在web3 1.x版本中如何列出所有帳戶?
答:使用命令:“web3.eth.getAccounts”
133.問:“.call”和“.send”有什麼區別?
答:“.send”發起交易並且產生費用,而“.call”僅查詢智慧合約的狀態不產生費用。
134.問:是否可以通過這樣的命令“.send({value:1})”傳送一個以太幣?
答:不可以,實際上這樣你只送了1wei(1以太幣 =10^18Wei)。交易中的單位是wei,而不是以太幣。
135.問:那是否意味著,為了傳送一個以太幣,我需要將值設定為10^18?
答:不用,這樣太麻煩。你可以使用util方法,即:
web3.utils.toWei(1,'ether')。
136.問:呼叫“.send()”時我需要指定什麼?
答:你必須指定其中的發件人地址“from”。其他一切都是可選的。
137.問:將以太幣傳送到特定地址的函式是否只有
web3.eth.sendTransaction()一個?
答:不,你還可以呼叫智慧合約中的函式。
138.問:以太坊的可擴充套件性問題有什麼解決方案?
答:解決可拓展性問題的思路是使用鏈下交易機制。具體的解決方案有狀態通道(state channels)和plasma。
關於磨鏈
磨鏈mochain:區塊鏈技術社群。
公眾號:磨鏈mochain社群