2021-3-30 前端達人
區塊鏈
區塊鏈(Blockchain)是指通過去中心化和去信任的方式集體維護一個可靠數據庫的技術方案。該技術方案讓參與系統中的任意多個節點,把一段時間系統內全部事務通過密碼學算法計算并記錄到一個數據塊(block),生成該數據塊的hash用于鏈接下個數據塊,系統所有參與節點來共同檢驗記錄是否為真,并且每個區塊的內容都由后續子鏈上的區塊來保證其內容不可被篡改。 各個參與節點可以在新區塊產生確認及獎勵分配上達成共識,從而逐漸形成的一個龐大、去中心化的公開賬本。
01 對比特幣的認識
2008年,中本聰(Satoshi Nakamoto)發表了一篇題為“比特幣:一種點對點的電子現金系統”的論文描述了比特幣的模式。
新區塊的創造過程是一個區塊創造權的競爭的過程,即通過工作量證明來選定新區塊的創造者。在任何一個特定的時間點上,整個區塊鏈系統范圍內的,所有競爭者在同時開始,共同針對同一特定新候選區塊進行哈希運算比賽。獲勝的條件是最先算出符合該特定新候選區塊要求的哈希值。獲勝的(只能有一個獲勝者)獎勵是伴隨該新區塊一起發行的全部新比特幣。當一個新區塊被創造出來了,所有的競爭者馬上重新開始進行對下一個區塊創造權的競爭。
新區塊的創造速度大概是10分鐘一塊。
比特幣的存儲依靠的就是分布式賬本技術。比特幣就是一串數據代碼。所有的比特幣就是記錄于區塊鏈中各自對應的區塊內,然后分布式存放于比特幣系統的各個節點上。比特幣區塊鏈就像是一個由比特幣系統所有的節點共享的統一電子賬本。
比特幣的使用就是比特幣的交易,也就是比特幣所有權的轉換。比特幣的使用主要是通過加密技術來實現的
02 對以太坊的認識
以太坊是一個具有智能合約功能的開放區塊鏈平臺,使開發人員能夠建立和發布各種分布式應用。通過在以太坊上編程建立各種分布式應用可以解決諸如:投票、域名、金融交易、眾籌、公司管理、合約、知識產權、硬件集成的智能資產等等各方面問題。
以太坊,與比特幣區塊鏈技術一樣,使用激勵驅動的安全模式。共識達成基于選擇具有最高總難度的區塊。礦工創建區塊,其他人檢測有效性。
以太幣是于2015年7月30日開始發行的。類似于比特幣,以太幣的發行方式也是采用工作量證明機制(POW)。通過工作量證明機制,以太坊每年發行15,626,576枚以太幣。以太坊計劃于2017年末將以太幣的發行方式改為權益證明機制(POS)。屆時,每年的新發行的以太幣數量為1000萬枚。以太幣的總發行量是沒有上限的。
以太坊是通過在比特幣區塊鏈系統基礎上進行修改和創新而產生的。以太坊本質上就是:區塊鏈+智能合約
(1) 什么是以太坊虛擬機
同比特幣區塊鏈系統不同,以太坊設計了以太坊虛擬機(EVM)專門用來運行智能合約。太坊虛擬機是一個同網絡,文件系統或者其他操作過程隔絕開來的封裝起來的計算機代碼運行環境.
(2)以太坊的賬戶
以太坊的基礎單元是賬戶. 這些賬戶可以通過消息傳遞來發生互動變化。每個賬戶都有一個與之關聯的狀態和一個20字節的地址。所有價值和信息的轉移都體現為賬戶狀況的變化.以太坊區塊鏈通過控制所有賬戶的變化實現其各種功能.
以太坊有兩類賬戶: 外部賬戶和合約賬戶,他們被存放于同一地址空間上.外部賬戶是由人類用戶通過對應的公私鑰來掌控。而合約賬戶則是由被存儲在其內部的代碼掌控。智能合約指的是合約賬戶中的那些對被發送來的交易進行自動處理的程序代碼。用戶可以通過在區塊鏈中存儲程序代碼來創建新的智能合約。
以太坊賬戶狀態的變化就是指以太坊賬戶組成成分發生的變化。以太坊賬戶含有四個組成部分:
(1) 序號(nonce):如果賬戶是一個外部擁有賬戶,nonce代表從此賬戶地址發送的交易序號。如果賬戶是一個合約賬戶,nonce代表此賬戶創建的合約序號。
(2) 余額(balance): 此地址擁有Wei的數量。
(3) Merkle 樹根的哈希值: Merkle樹會將此賬戶存儲內容的哈希值進行編碼,默認值是空值。
(4) 代碼哈希值:此賬戶太坊虛擬機內的代碼的哈希值。對于合約賬戶,就是被哈希的代碼并作為代碼哈希值保存起來。對于外部賬戶,代碼哈希值是一個空字符串的哈希值。
(3)以太坊的交易和交易費用
太坊區塊鏈系統只有兩種類型的交易:合約創建和消息通信。
以太坊所有的交易都是在外部賬戶觸動下發生的.合約賬戶不會自發地產生任何行動. 只有當外部賬戶發出交易時,合約賬戶才會執行相應的操作。以太坊通過規定節點必須與運算結果保持一致,從而保證智能合約嚴格確定執行。
在以太坊中一個重要的概念就是費用(fees). 發生在以太坊區塊鏈系統內的交易而產生的每一次計算都會要求相應的費用。這個費用是以”gas”的來支付。gas就是用來衡量在一個具體計算中要求的費用單位。gas 價格(gas price)就是你愿意在每個gas花費ETH的數量,以“gwei”進行衡量。“Wei”是ETH的最小單位,1ETH表示10^18Wei. 1gwei是1,000,000,000 Wei。
發生交易時,交易發送者先設置gas limit和gas price。gas limit和gas price就代表著發送者愿意為執行交易支付的Wei的最大值。以太坊用戶必須向以太坊區塊鏈系統支付少量交易費用。交易的發送者必須在激活的合約賬戶的每一步為所有的運算和數據存儲付費。如果在他們的賬戶余額中有足夠的Ether來支付這個最大值費用,那么就沒問題。在交易結束時任何未使用的gas都會被返回給發送者,以原始費率兌換。費用通過以太坊Gas結算,以太幣的形式支付的。這樣可以幫助太坊區塊鏈系統避免被濫用或被惡意攻擊.
交易費用由節點收集,節點在以太坊網絡中完成收集、傳播、確認和執行交易的工作。礦工們將交易活動分組:交易記錄(以太坊區塊鏈中賬戶狀態的更新)被分組存放在區塊中;節點通過互相競爭決定添加權;獲得添加權的節點將新的區塊添加到區塊鏈的上。獲得添加權的節點會得到以太幣獎勵,通過這些獎勵激勵節點為以太坊區塊鏈系統貢獻硬件和電力。
(4)以太坊的狀態變化機制
第一步,檢查交易的格式是否正確(即有正確數值)、簽名是否有效和隨機數是否與發送者賬戶的隨機數匹配。如否,返回錯誤。
第二步,計算交易費用,并從簽名中確定發送者的地址。從發送者的賬戶中減去交易費用和增加發送者的隨機數。如果賬戶余額不足,返回錯誤。
第三步,設定初值GAS = STARTGAS,并根據交易中的字節數減去一定量的Gas值。
第四步,從發送者的賬戶轉移價值到接收者賬戶。如果接收賬戶還不存在,創建此賬戶。如果接收賬戶是一個合約,運行合約的代碼,直到代碼運行結束或者燃料用完。
第五步,如果因為發送者賬戶沒有足夠的錢或者代碼執行耗盡燃料導致價值轉移失敗,恢復原來的狀態,但是還需要支付交易費用,交易費用加至礦工賬戶。
第六步,否則,將所有剩余的燃料歸還給發送者,消耗掉的燃料作為交易費用發送給礦工。
03 **對Hyperledger的認識
04 了解其他那些區塊鏈項目 Corda EOS
05 公鏈、聯盟鏈、私鏈的區別
中本聰巧妙地將以下幾個成熟的技術和理論組合的一起,并以此為基礎構建區塊鏈技術:
基于去中心化的分布式算法而建立起點對點對等(P2P)網絡。
基于非對稱加密算法。
基于分布式一致性算法,解決了分布式場景下的拜占庭將軍問題。
基于博弈論而精心設計的獎勵機制,實現了納什均衡,確保整個系統的安全和穩定運行。
如果同時具有上述四點要素,可以認為這是一種公共區塊鏈技術,簡稱公有鏈。如果只具有前三點要素,將其稱為私有區塊鏈技術,簡稱私有鏈。而聯盟鏈則介于兩者之間,可視為聯盟成員內的一種私有鏈。這里主要介紹公有鏈和私有鏈。
公鏈是指全世界任何人都可讀取的、任何人都能發送事務且能獲得有效確認的、任何人都能參與共識過程的區塊鏈。共識過程決定哪個區塊可被添加到區塊鏈中和明確當前狀態。作為中心化或者準中心化信任的替代物,公有鏈的安全由加密數字經濟維護。加密數字經濟采取工作量證明機制或權益證明機制等方式,將經濟獎勵和加密數字驗證結合了起來,并遵循著一般原則:每個人從中可獲得的經濟獎勵,與對共識過程作出的貢獻成正比。這些區塊鏈通常被認為是完全去中心化的。
私有鏈是指其寫入權限僅在一個組織手里的區塊鏈。讀取權限或者對外開放,或者被限制。相關的應用囊括數據庫管理、審計、甚至一個公司,盡管在有些情況下希望它能有公共的可審計性,但在很多的情形下,公共的可讀性并非是必須的。
私有鏈相比于公有鏈的優點:
事務的效率更高:比特幣區塊鏈目前每秒可完成7筆事務,而私有鏈目前最高可以到每秒10萬筆,并且還有提高的空間。顯然后者更適應現實世界金融事務的需求。
事務可以回滾:這點對于中心化機構也很重要,在某些情況下,某些事務會因為錯誤或法律的問題而被要求修改、撤銷。
事務費用更低:目前公有鏈的事務費用是每筆0.10美元,而且隨著時間流逝幣值趨于增長,導致事務費用也在增長。而私有鏈的事務費用將會降低一到兩個數量級。
仍然是基于分布式網絡,保留了分布式記賬系統的優點。
提供了更好的隱私保護:公有區塊鏈因為其透明共享總賬本的設計,本身不提供隱私保護功能。而私有鏈可以對讀取權限進行限制,從而提供更好的隱私保護。
驗證者是公開透明的,不存在一些礦工出于共謀原因而致的51%攻擊風險。
節點可以很好地連接:節點互相可以很好地連接,故障可以迅速通過人工干預來修復,并允許使用共識算法減少區塊時間,從而更快完成事務。
私有鏈的缺點:
違背了區塊鏈去中心化的本質,重新引入了若干“信任節點”;
其參與者需要經過審核和驗證,從而嚴格限制了其規模,其安全性容易受到威脅。因此,私有區塊鏈更適合為傳統機構所用。
公有鏈的優點:
保護用戶:免受開發者的影響——在公共區塊鏈中的用戶更多、更廣泛,程序開發者無權干涉
用戶的使用方式。反過來說,區塊鏈可以保護使用這些程序的用戶。
網絡規模效應——公共區塊鏈是開放的,因此有可能被許多外界用戶使用和產生一定的網絡效應。而在公有鏈上運行的應用越多,節點越多,那么該區塊鏈條也會越可信。
因此使用公有鏈,還是私有鏈,完全根據需求而定。
06 了解哪些共識算法
07 說說最熟悉的共識算法
08 看過哪些書
09 以太坊智能合約
10 拜占庭問題
在互聯網大背景下,當需要與不熟悉的對方進行價值交換活動時,人們如何才能防止不會被其中的惡意破壞者欺騙、迷惑從而作出錯誤的決策。進一步將“拜占庭將軍問題”延伸到技術領域中來,其內涵可概括為:在缺少可信任的中央節點和可信任的通道的情況下,分布在網絡中的各個節點應如何達成共識
11 51%算力攻擊
在比特幣網絡中,采用PoW共識機制來解決如何獲得記賬權的問題,采用“最長鏈共識”解決如何記賬的問題。
所謂51%的攻擊,就是利用比特幣網絡采用PoW競爭記賬權和“最長鏈共識”的特點,使用算力優勢生成一條更長的鏈“回滾”已經發生的“交易行為”。
51%是指算力占全網算力的51%,比特幣網絡需要通過哈希碰撞來匹配隨機數從而獲得記賬權,算力衡量的是一臺計算機每秒鐘能進行哈希碰撞的次數。
算力越高,意味著每秒鐘能進行越多次的哈希碰撞,即獲得記賬權的幾率越高。
在理論上,如果掌握了50%以上的算力,就擁有了獲得記賬權的絕對優勢,可以更快地生成區塊,也擁有了篡改區塊鏈數據的權利。
實際上,當惡意攻擊者持有比特幣全網占比比較高的算力時,即使尚未達到51%的比例,也可以制造相應的攻擊,比較典型的就是雙花問題。
12 Sybil攻擊
在對等網絡中,但節點通常具有多個身份標識,通過控制系統的大部分節點來消弱冗余備份的作用
13 Eclipse攻擊
Eclipse攻擊是一種網絡級的攻擊,攻擊者模仿所有其他節點的入流量和出流量,達到將受害者與網絡上的其他節點隔離的目的。這種攻擊意味著通過讓最新的區塊信息不能到達節點來達到隔離節點的目的。事實上,比特幣網絡也易受到eclipse攻擊。但在以太坊網絡上,兩個節點就足以發起eclipse攻擊。
14 DDoS攻擊
是指處于不同位置的多個攻擊者同時向一個或數個目標發動攻擊,或者一個攻擊者控制了位于不同位置的多臺機器并利用這些機器對受害者同時實施攻擊。由于攻擊的發出點是分布在不同地方的,這類攻擊稱為分布式拒絕服務攻擊,其中的攻擊者可以有多個。
15 Merkle Tree數據結構
A、Merkle樹結構
由一個根節點(root)、一組中間節點和一組葉節點(leaf)組成。葉節點(leaf)包含存儲數據或其哈希值,中間節點是它的兩個孩子節點內容的哈希值,根節點也是由它的兩個子節點內容的哈希值組成。所以Merkle樹也稱哈希樹。
B、哈希樹的特點
葉節點存儲的是數據文件,而非葉節點存儲的是其子節點的哈希值(Hash,通過SHA1、SHA256等哈希算法計算而來),這些非葉子節點的Hash被稱作路徑哈希值(可以據其確定某個葉節點到根節點的路徑),
葉節點的Hash值是真實數據的Hash值。因為使用了樹形結構, 其查詢的時間復雜度為 O(logn),n是節點數量。
默克爾樹的另一個特點是,底層數據的任何變動,都會傳遞到其父節點,一直到樹根。
16 哈希算法
哈希算法(Hash)又稱摘要算法(Digest),它的作用是:對任意一組輸入數據進行計算,得到一個固定長度的輸出摘要。
哈希算法最重要的特點就是:
相同的輸入一定得到相同的輸出;
不同的輸入大概率得到不同的輸出。
哈希算法的目的就是為了驗證原始數據是否被篡改。
17 看過那些白皮書 bitcoin ethereum EOS
18 未來你看好那些區塊鏈項目
19 區塊鏈的應用場景
20 以太坊協議 ERC20 ERC721 ERC223 ERC875
21.什么是挖礦?
挖礦是在區塊鏈網絡達成共識的過程。挖礦有兩個目的。首先,它在生成的塊中創建新的代幣。其次,它通過向網絡提供工作證明,包括分布式計費中的交易;也就是說,證明所生成的塊是有效的。
22.比特幣實現中的交易和塊是如何加密的?
比特幣塊不以任何方式加密:每個塊都是公開的。阻止修改和保證數據完整性的是一個稱為塊哈希的值。塊的內容是使用在比特幣的一種特殊Hash函數來處理,它的實現和得到的值包含在區塊鏈中。
23.什么是軟分叉?
在分類帳中的塊包括以建立最長鏈的方式,即具有最大累積難度的鏈。分叉是有兩個候選塊競爭形成最長的區塊鏈,兩個礦工發現工作問題的證明方法在很短的時間內沒有同步對方的情況。造成網絡分割,因為某些節點得到塊從礦工#1和而另外一些得到礦工#2。 分叉通常在一個塊中得到解決,因為這種情況再次發生的概率變得非常低,因為下一個塊出現,所以很快有一個新的最長鏈,將被認為是主要的。
**24.**什么是雙重支出?
這是與數字貨幣有關的主要問題之一。 事實上,這是一個數字通證被多次使用的條件,因為通證通常由易于克隆的數字文件組成。它只會導致通貨膨脹,組織不得不承受巨大的損失。 區塊鏈技術的主要目標之一是盡可能地消除這種方法。
------開發基礎篇--------
01 go語言問題
02 solidity語言語法問題
03 c/c++語言語法問題
04 java語言語法問題
問:以太坊的有價通證叫什么?
答:以太(ETH:Ether)
問:Wei和以太有什么區別?
答:Wei是一個面額,像美分到美元或便士到磅。 1 ETH =10^18 Wei
問:以太坊的平均出塊時間是多少?
答:大約14秒
問:以太坊的平均塊大小是多少?
答:大約2KB,實際值取決于具體情況。
問:以太坊是否支持腳本? 如果是這樣,支持什么類型的腳本?
答:是的。 它支持智能合約
問:你如何得到以太?
答:有幾種方法:
1.成為一名礦工
2.用其他貨幣換取
3.使用以太Faucet,例如 https://faucet.metamask.io
4.接受別人的贈送
問:以太從哪里來的?
答:在2014年預售中首次創建了6000萬個。另外,在挖出新塊時也會生成以太。
問:什么是節點?
答:一個節點本質上是一臺連接到網絡的計算機,它負責處理交易。
問:你熟悉多少種以太坊網絡?
答:有三種類型的網絡 - 實時網絡(主),測試網絡(如Ropsten和Rinkeby)和私有網絡。
問:與以太坊網絡交互的方式有哪些?
答:可以使用電子錢包或DApp
問:你可以“隱藏”一個以太坊交易嗎?
答:不可以。所有交易對每個人都是可見的。
問:交易記錄在哪里?
答:在公共賬本上。
問:這些網絡的ID是什么?
答:Live(id = 1),Ropsten(id = 3),Rinkeby(id = 4),Private(由開發人員分配)
問:我可以在Rinkeby測試網絡中挖一些以太,然后轉移到Live網絡嗎?
答:不可以。不能在不同的以太坊網絡之間傳遞以太。
問:為什么需要私有網絡?
答:有很多原因,但主要是為了數據隱私、分布式數據庫、權限控制和測試。
問:你如何輕松查看有關交易和區塊的詳細信息?
答:使用區塊鏈瀏覽器,如etherscan.io或live.ether.camp
問:私有網絡的交易和區塊信息怎么查看呢?
答:可以使用開源瀏覽器客戶端,例如https://github.com/etherparty/explorer
問:區塊鏈的共識是什么?
答:遵循特定協議(如以太坊)驗證交易(創建塊)的過程。
問:區塊鏈中兩種常用的共識模型是什么?
答:工作量證明(POW)和權益證明(POS)。
問:簡單地解釋下工作量證明。
答:它實際上是礦工為了證明自己的工作量并驗證交易而對一個計算密集型問題的求解。
問:以簡單的方式解釋權益證明。
答:區塊的創建者是根據節點所持有的財富和股權隨機選擇的。 它不是計算密集型的。
問:以太坊使用什么共識模式?
答:截至2018年初,它使用工作量證明,但今后將切換到權益證明。
問:怎么挖以太幣?
答:使用錢包或geth客戶端。
問:用什么來對交易進行簽名?
答:用戶的私鑰。
問:丟失私鑰后還能恢復以太坊賬戶嗎?
答:可以,可以使用助記詞組。
問:有哪些方法可以連接到一個以太坊節點?
答:IPC-RPC、JSON-RPC和WS-RPC。
問:那么Geth是什么?
答:Geth是以太坊的客戶端。
問:連接到geth客戶端的默認方式是什么?
答:默認情況下啟用IPC-RPC,其他RPC都被禁用。
問:你知道geth的哪些API?
答:Admin、eth、web3、miner、net、personal、shh、debug和txpool。
問:你可以使用哪些RPC通過網絡連接到geth客戶端?
答:可以使用JSON-RPC和WS-RPC通過網絡連接到geth客戶端。 IPC-RPC只能連接到同一臺機器上的geth客戶端。
問:如果啟動geth時使用了-rpc選項,哪些RPC會被啟用?
答:JSON-RPC。
問:哪些RPC API是默認啟用的?
答:eth、web3和net。
問:如何為JSON RPC啟用Admin API?
答:使用-rpcapi選項。
問:選項-datadir有什么作用?
答:它指定了區塊鏈的存儲位置。
問:什么是geth的“快速”同步,為什么它更快?
答:快速同步會將事務處理回執與區塊一起下載并完整提取最新的狀態數據庫,而不是重新執行所有發生過的交易。
問:選項–testnet是做什么的?
答:它將客戶端連接到Ropsten網絡。
問:啟動geth客戶端會在屏幕上輸出大量文字,應該如何減少輸出信息?
答:可以將–verbosity設置為較低的數字(默認值為3)
問:如何使用IPC-RPC將一個geth客戶端連接到另一個客戶端?
答:首先啟動一個geth客戶端,復制它的管道位置,然后使用同一個datadir啟動另一個geth客戶端并使用–attach選項傳入管道位置。
問:如何將自定義javascript文件加載到geth控制臺中?
答:通使用–preload選項傳入js文件的路徑。
問:geth客戶端的帳戶存儲在哪里?
答:在keystore目錄中。
問:為了進行交易,需要對賬戶進行什么操作?
答:必須先解鎖該賬戶 - 可以傳入賬戶地址或賬戶序號來解鎖。 也可以使用–password選項傳入一個密碼文件,其中包含每個賬戶的密碼。
問:你提到了一些有關賬戶序號的內容。 什么因素決定賬戶的序號?
答:添加帳戶的先后順序。
問:是否可以使用geth進行挖礦?
答:可以,使用–mine選項開啟。
問:什么是“etherbase”?
答:這是接收挖礦獎勵的帳戶,它是序號為0的帳戶。
問:什么是智能合約?
答:這是用多種語言編寫的計算機代碼。 智能合約存在于以太坊網絡上,它們根據預定規則執行動作,規則是由參與者在這些合約中商定的。
問:智能合約可以使用哪些語言編寫?
答:Solidity,這是最常用的語言,也可以使用Serpent和LLL。
問:你能舉出一個智能合約的用例嗎?
答:賣方-買方應用場景:買方在智能合約中存入款項,賣方看到存款并發送貨物,買方收到貨物并放行付款。
問:什么是Metamask?
答:Metamask是一個可以幫助用戶在瀏覽器中與以太坊網絡進行交互的工具
問:Metamask使用哪個以太坊節點?
答:它使用infura.io
問:Metamask不支持什么?
答:挖礦和合約部署。
問:執行合約是否免費?
答:不,調用合約方法是一個交易,因此需要支付費用。
問:訪問智能合約的狀態是否免費?
答:是的,查詢狀態不是交易。
問:誰執行合同?
答:礦工。
問:為什么調用智能合約的方法需要付費?
答:有些方法不會修改合約的狀態,也沒有其他邏輯,只是返回一個值,這樣的方法是可以免費調用的。 調用那些改變合約狀態的方法則需要付費,因為它們需要gas來執行。
問:為什么需要gas?
答:由于礦工在他們的機器上執行合約代碼,他們需要gas來覆蓋執行合約代碼的成本。
問:是不是gas的價格決定了交易什么時候被處理?
答:即是,也不是。 gas價格越高,交易成功的可能性就越大。 盡管如此,gas價格并不能保證更快的交易處理。
問:交易中的gas使用量取決于什么?
答:這取決于合約所用的存儲量、指令(操作碼)的類型和數量。 每個EVM操作碼都對應一個固定的gas用量。
問:交易費是如何計算的?
答:gas用量*gas價格(由調用方指定gas價格)
問:如果智能合約的執行成本低于調用方指定的gas用量,用戶是否得到退款?
答:是的
問:如果智能合約的執行成本高于指定的gas用量,會發生什么情況?
答:用戶不會得到退款,并且一旦所有的gas用完,執行就會停止,合約也不會改變。
問:誰支付智能合約的調用費用?
答:調用合約的用戶。
問:節點在什么上面運行智能合約代碼?
答:EVM - 以太坊虛擬機。 EVM遵循EVM規范,該規范是以太坊協議的組成部分。 EVM只是節點上的一個進程。
問:為了運行智能合同,EVM需要什么?
答:它需要合約的字節碼,是通過編譯Solidity等更高級別的語言編寫的合約來生成字節碼。
問:粗略的說,EVM有哪些組成部分?
答:內存區域、堆棧和執行引擎。
問:什么是Remix?
答:開發,測試和部署合約的在線工具。 適合快速構建和測試輕量級合約,但不適合更復雜的合約。
問:在Remix中,可以連接哪些節點?
答:可以使用Metamask連接到公共節點、也可以鏈接到使用Geth搭建的本地節點,或者在Javascript VM中模擬的內存節點。
問:什么是DApp,它與App有什么不同?有什么不同?
答:App通常包含一個客戶端,這個客戶端會與一些中心化的資源(由一個組織擁有)進行通信,通常客戶端通過一個中間層連接到中心化的數據層,如果中心化的數據層中的信息丟失,不能很輕松地恢復。
DApp表示去中心化應用程序。 DApps通過智能合約與區塊鏈網絡進行交互。 DApp使用的數據駐留在合約實例中。
中心化數據可能比去中心化數據更容易受到破壞。
問:DApp的前端是否局限于某些技術或框架?
答:不受限制。可以使用任何技術來開發DApp的前端,比如HTML,CSS,JS,Java,Python…
問:前端用什么庫連接后端(智能合同)?
答:Web3.js庫。
問:在DApp的前端需要哪些東西才能與指定的智能合約進行交互?
答:合約的ABI和字節碼。
問:ABI有什么作用?
答:ABI是合約的公開接口描述對象,被DApps用于調用合約的接口。
問:字節碼有什么作用?
答:節點上的EVM只能執行合約的字節碼。
問:為什么要使用BigNumber庫?
答:因為Javascript不能正確處理大數。
問:為什么需要檢查在Web DApp代碼的開始部分是否設置了web3提供器(Provider)?
答:因為Metamask會注入一個web3對象,它覆蓋其他的web3設置。
問:為什么要使用web3.js版本1.x而不是0.2x.x?
答:主要是因為1.x的異步調用使用Promise而不是回調,Promise目前在javascript世界中
是處理異步調用的首選方案。
問:如何在web3 1.x中列出賬戶?
答:web3.eth.getAccounts
問:.call和.send有什么區別?
答:.send發送交易并支付費用,而.call查詢合約狀態。
問:這樣發送1個以太對嗎:.send({value:1})?
A:不對,這樣發送的是1 wei。 交易中總是以wei為單位。
問:那么為了發送1個以太,我必須將這個值乘以10^18?
答:可以使用web3.utils.toWei(1,‘ether’)。
問:調用.send()時需要指定什么?
答:必須指定from字段,即發送賬戶地址。 其他一切都是可選的。
問:web3.eth.sendTransaction()的唯一功能是將以太發送到特定的地址,這個說法是否正確?
答:不對,也可以用它調用合約方法。
問:你是否知道以太坊的可擴展性解決方案?
答:2層協議。可能的解決方案是狀態通道(state channels)和Plasma。
Solidity
問:Solidity是靜態類型的還是動態類型的語言?
答:它是靜態類型語言,這意味著類型在編譯時是已知的。
問:Solidity中與Java“Class”類似的是什么?
答:合約。
問:什么是合約實例?
答:合約實例是區塊鏈上已部署的合約。
問:請說出Java和Solidity之間的一些區別。
答:Solidity支持多重繼承,但不支持重載。
問:你必須在Solidity文件中指定的第一件事是什么?
答:Solidity編譯器的版本,比如指定為^ 0.4.8。 這是必要的,因為這樣可以防止在使用其他版本的編譯器時引入不兼容性錯誤。
問:合約中包含什么?
答:主要由存儲變量、函數和事件組成。
問:合約中有哪些類型的函數?
答:有構造函數、fallback函數、修改合約狀態的函數和只讀的constant函數。
問:如果我將多個合約定義放入單個Solidity文件中,我會得到什么錯誤?
答:將多個合約定義放入單個Solidity文件是完全正確的。
問:兩個合約之間交互的方式有哪些?
答:一個合約可以調用另一個合約,也可以繼承其他合約。
問:當你嘗試使用部署一個包含多個合約的文件時會發生什么?
答:編譯器只會部署該文件中的最后一個合約,而忽略所有其他合約。
問:如果我有一個大項目,我需要將所有相關的合約保存到一個文件中嗎?
答:不需要。可以使用import語句導入其他合約文件,例如import “./MyOtherContracts.sol”;。
問:我只能導入本地合約文件嗎?
答:還可以使用HTTP協議導入其他合約文件,例如從Github導入:import “http://github.com/owner/repo/path_to_file”;。
問:EVM的內存分成了哪些部分?
答:它分為Storage、Memory和Calldata。
問:請解釋一下Storage。
答:可以把它想象成一個數據庫。 每個合約管理自己的Storage變量。 它是一個鍵-值數據庫(256位鍵值)。
就每次執行使用的gas而言,在Storage上讀取和寫入的成本更高。
問:請解釋一下Memory。
答:這是一個臨時存儲區。 一旦執行結束,數據就會丟失。 可以在Memory上分配像數組和結構這樣復雜的數據類型。
問:請解釋一下Calldata 。
答:可以把calldata視為一個調用堆棧。 它是臨時的、不可修改的,用來存儲EVM的執行數據。
問:哪些變量存儲在Storage,那些變量存儲在Memory?
答:狀態變量和局部變量(它們是對狀態變量的引用)存儲在Storage區域, 函數參數位于Memory區域。
轉自:csdn論壇 ,
藍藍設計( paul-jarrel.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務
藍藍設計的小編 http://paul-jarrel.com