文章摘要: 每個節點上的EVM需要位元組碼才能執行合同程式碼它支援智慧合同 問
區塊鏈領域,鏈神探很專注
問:以太坊的價值標誌是什麼
答:(ETH)
問:魏和ETH有什麼區別?
答:魏是一個面額,像美分到美元或便士到磅。1 ETH =10¹⁸魏
問:以太坊的平均阻擋時間是多少?
答:14秒
問:以太坊的平均街區大小是多少?
答:大約2KB。
問:以太坊是否支援指令碼?如果是這樣,什麼型別的指令碼?
答:是的。它支援智慧合同
問:你如何得到ETH?
答:有幾種方法:
1.成為礦工
2.交易其他貨幣
3.乙太網水龍頭,如https://faucet.metamask.io
4.從他人那裏接收Ethers
問:ETH從哪裏來?
答:在2014年預售中首次建立了6000萬個。另外,在開採塊時建立了ETH。
問:什麼是節點?
答:一個節點本質上是一臺連線到網路的計算機,它處理事務。
問:你熟悉多少個以太坊網路?
答:有三種類型的網路 – 實時網路(主),測試網路(如Ropsten和Rinkeby)和專用網路。
問:什麼是與網路互動的一些方式?
答:您可以使用電子錢包或DApp
問:你可以「隱藏」一項交易嗎?
答:不可以。所有交易對每個人都是可見的。
問:交易記錄在哪裏?
答:在公共賬本上。
問:這些網路的ID是什麼?
答:Live(id = 1),Ropsten(id = 3),Rinkeby(id = 4),Private(由開發人員分配)
問:所以我可以在林克比中挖掘一些Ethers並將它們轉移到Live網路,對吧?
答:不,你不能在網路之間傳輸乙太網。
問:你為什麼要有私人網路?
答:有很多原因,但主要是因為資料隱私,分散式資料庫,許可權控制和測試。
問:您如何輕鬆檢視有關交易和區塊的詳細資訊?
答:使用像etherscan.io或live.ether.camp這樣的區塊鏈探索器
問:私有網路怎麼樣?
答:您可以使用開源瀏覽器客戶端(如https://github.com/etherparty/explorer)
問:區塊鏈的共識是什麼?
答:遵循特定協議(如以太坊)驗證交易(建立塊)的過程。
問:區塊鏈中兩種常用的共識模型是什麼?
答:工作證明和利益證明。
問:以簡單的方式解釋工作證明。
答:這實際上是礦工爲了生成工作證明和驗證交易而必須解決的難題。
問:以簡單的方式解釋股權證明。
答:該塊的建立者是通過財富和年齡(股份)隨機選擇的。它不是計算密集型的。
問:以太坊使用什麼共識模式?
答:截至2018年初,它使用工作證明,但它將切換到股權證明。
問:你怎麼能用Ethers?
答:使用錢包或geth cli
問:什麼是用來簽署交易?
答:使用者的私鑰。
問:丟失私鑰後你能恢復你的以太坊賬戶嗎?
答:可以,你可以用你的12字助記符。
問:有哪些方法可以連線到節點?
答:IPC-RPC,JSON-RPC和WS-RPC。
問:那麼Geth是什麼?
答:Geth是以太坊cli客戶端。
問:連線到geth客戶端的預設方式是什麼?
答:預設情況下啟用IPC-RPC,每個其他RPC都被禁用。
問:你知道什麼geth API?
答:Admin,eth,web3,礦工,網路,個人,除錯和txpool。
問:您可以使用哪些RPC通過網路連線到geth客戶端?
答:您可以使用JSON-RPC和WS-RPC通過網路連線到geth客戶端。IPC-RPC只能連線到同一臺機器上的geth客戶端。
問:如果你通過選項 – rpc哪些RPC被啟用?
答:JSON-RPC。
問:哪些RPC API預設啟用?
答:eth,web3和net。
問:如何為JSON RPC啟用管理API?
答:通過使用選項 – rpcapi
問:選項 – datadir有什麼作用?
答:它指定了區塊鏈的儲存位置。
問:什麼是geth的「快速」同步,為什麼它更快?
答:與其一次處理整個區塊鏈一個連結並重播所有發生的事務,快速同步會將事務處理回執與區塊一起下載並提取整個最近的狀態資料庫。
問:測試網是做什麼的?
答:它將客戶端連線到Ropsten網路。
問:啟動geth客戶端會在螢幕上轉儲大量輸出。你會如何減少噪音?
答:通過將詳細程度設定為較低的數字(預設值為3)
問:如何使用IPC-RPC將一個geth客戶端連線到另一個客戶端?
答:首先啟動一個geth客戶端,複製它的管道位置,然後使用同一個datadir啟動另一個geth客戶端並傳遞 – 附加到管道位置。
問:如何將自定義javascript檔案載入到geth控制檯中?
答:通過傳遞 – 預載入和檔案的路徑。
問:geth客戶帳戶儲存在哪裏?
答:在金鑰庫目錄中。
問:爲了進行交易,您與賬戶有什麼關係?
答:您必須解鎖該賬戶 – 通過傳遞賬戶地址或索引解鎖。您也可以指定一個 – 密碼檔案,其中所有密碼都駐留在每個帳戶中。
問:你提到了一些有關索引的內容。什麼決定了賬戶指數?
答:您新增帳戶的順序。
問:是否可以使用geth挖掘?
答:是的,通過 – 我的選擇。
問:什麼是「etherbase」?
答:這是接收採礦獎勵的帳戶,它是索引0的帳戶。
問:那麼什麼是智慧合約?
答:這是用多種語言編寫的計算機程式碼。智慧合約存在於網路上。他們執行規則並執行行動,由參與者在這些合同中進行談判。
問:智慧合約可以寫入哪些語言?
答:Solidity,這是最常用的語言,Serpent和Lisp Like Language
問:智慧合同用例的例子?
答:賣方 – 買方的場景,買方在智慧合約中存入資金,賣方看到存款併發送貨物,買方收到貨物並放行付款。
問:什麼是Metamask?
答:Metamask是一款可以幫助您輕鬆在瀏覽器中與以太坊網路進行互動的工具
問:Metamask使用哪個節點?
答:它使用infura.io
問:Metamask不支援什麼?
答:採礦和合同部署。
問:執行合同是否免費?
答:不,呼叫合約方法是一個交易。
問:訪問智慧合同狀態是否免費?
答:是的,查詢狀態不是交易。
問:誰執行合同?
答:礦工。
問:為什麼在智慧合約上呼叫方法會花費金錢?
答:一些方法不會修改合約的狀態,也沒有其他邏輯,除了返回一個值以外,都是免費的。
除了將ETH作為付款之外,呼叫改變國家花費的方法也是因為它們需要gas來執行。
問:更確切地說為什麼會有氣體?
答:由於礦工在他們的機器上執行合同程式碼,他們必須通過執行呼叫者請求的程式碼來承擔他們的成本。
問:交易處理時,gas價格是否確定?
答:是,不是。gas價格越高,交易開採的可能性就越大。儘管如此,天然氣價格並不能保證更快的交易處理。
問:交易中的gas使用量取決於什麼?
答:這取決於儲存量,指令的型別和數量(可選程式碼)。每個EVM可選程式碼都有一個固定數量的氣體。
問:交易費是如何計算的?
答:使用的氣體*gas價格(由主叫方指定)
問:如果智慧合同的執行成本低於指定的gas,使用者是否得到退款?
答:是的
問:如果智慧合同的執行成本高於指定的天然氣,會發生什麼情況?
答:使用者沒有得到退款,並且一旦所有的氣體用完並且合同沒有改變,執行就會停止。
問:誰支付智慧合同呼叫?
答:呼叫合同的使用者。
問:節點執行智慧合同程式碼的是什麼?
答:EVM – 以太坊虛擬機器。EVM遵循作為以太坊協議一部分的EVM規範。EVM只是節點上的一個程序。
問:爲了執行智慧合同,EVM需要什麼?
答:它需要合約的位元組碼,它是通過編譯Solidity等更高階別的語言生成的。
問:更高階別的EVM部分有哪些?
答:記憶體區域,堆疊和執行引擎。
問:什麼是混音?
答:開發,測試和部署合同的線上工具。快速構建和測試輕量級合同非常好,但不適合更復雜的合同。
問:在混音中,您可以連線哪些節點?
答:您可以使用Metamask,使用Geth中的本地節點以及Javascript VM中的模擬記憶體節點連線到公共節點。
問:什麼是DApp,為什麼它與普通應用程式不同?
答:應用程式通常由一個客戶端與一些集中資源(由一個組織擁有)通訊組成。
有一箇中間層連線到一個集中的資料層。如果集中資料層中的資訊丟失,則無法恢復(輕鬆)。
DApp表示分散式應用程式。DApps通過智慧合同與網路進行互動。他們使用的資料駐留在合同例項中。
集中式資料可能比分散式更容易受到損害。
問:DApp的前端是否侷限於任何技術/框架?
答:不可以。你可以使用任何你想要的東西,比如HTML,CSS,JS,Java,Python,這個名單還在繼續。
問:前端用於連線後端(智慧合同)的是什麼?
答:Web3 API庫。
問:爲了與來自DApp的合同進行互動,您需要什麼?
答:合同的ABI和位元組碼。
問:ABI用於什麼?
答:ABI是DApps用於呼叫合同的合同的公共介面的描述。
問:什麼是位元組碼?
答:每個節點上的EVM需要位元組碼才能執行合同程式碼。
問:為什麼要使用BigNumber庫?
答:因為Javascript不能正確處理大數字。
問:為什麼有必要始終檢查web3提供程式是否設定在Web DApp程式碼的開頭?
答:因為Metamask注入它並用自己的覆蓋其他web3。
問:為什麼要使用版本web3 js 1.x而不是0.2xx?
答:主要是因為它的非同步呼叫使用承諾而不是回撥,這在javascript世界中是首選。
問:如何在web3 1.x中列出賬戶?
答:web3.eth.getAccounts。
問:.call和.send有什麼區別?
答:.send傳送交易並支付費用,而.call查詢合同狀態。
問:傳送一個這樣的以太「.send({value:1})」好嗎?
答:不,你派1個。交易總是與wei一起工作。
問:所以爲了傳送1個乙醚,我必須將這個值減10?
答:您可以使用util方法web3.utils.toWei(1,’ether’)
問:呼叫「.send()」時需要指定什麼?
答:您必須指定「發件人」是發件人地址。其他一切都是可選的。
問:web3.eth.sendTransaction()的唯一功能是將ethers傳送到特定的地址,這是否正確?
答:不,您也可以呼叫合約方法。
問:您是否知道以太坊的可擴充套件性解決方案?
答:2層協議。可能的解決方案是狀態通道和血漿。
問:Solidity是靜態的還是動態的?
答:它是靜態型別的,這意味著型別在編譯時已知。
問:與Solidity中的Java「Class」相當的功能是什麼?
答:這是合同。
問:什麼是合同例項?
答:合同的一個例項是區塊鏈上已部署的合同。
問:給我一些Java和Solidity之間的區別。
答:Solidity支援多重繼承,但不支援過載。
問:你必須在Solidity檔案中首先指定什麼?
答:Solidity編譯器的版本,指定為^ 0.4.8。這是必要的,因為它可以防止在與其他版本編譯時引入的不相容性錯誤。
問:合同包含什麼?
答:它主要由儲存變數,函式和事件組成。
問:那裏有哪些型別的功能?
答:有一個建構函式,回退函式,修改合同狀態的常量函式和函式。
問:如果我將多個合約定義放入單個Solidity檔案中,我會得到什麼錯誤?
答:將多個合約定義放入單個Solidity檔案是完全正確的。
問:兩種合同可以進行互動的方式有哪些?
答:合同可以呼叫,建立和繼承其他合同。
問:當您嘗試使用多個合同部署檔案時會發生什麼?
答:編譯器只會部署該檔案中的最後一個合同,而所有其他合同都將被忽略。
問:如果我有一個龐大的專案,我需要將所有相關合同儲存到一個檔案中嗎?
答:您可以使用匯入語句匯入檔案,
匯入「./MyOtherContracts.sol」;
問:我只能匯入本地檔案嗎?
答:您還可以使用HTTP(甚至可以從Github)匯入檔案,
匯入「 http://github.com/
問:EVM的記憶體分成了哪些部分?
答:它分為儲存,記憶體和Calldata
問:解釋儲存
答:將其視為資料庫。每個合同管理自己的儲存變數。它是一個鍵值資料儲存(256位鍵值)。就每次執行使用的氣體而言,讀取和寫入成本更高。
問:解釋記憶
答:這是一個臨時儲存。一旦執行結束,資料就會丟失。您可以像陣列和結構一樣分配複雜的資料型別。
問:解釋卡爾達塔
答:它可以被認為是一個呼叫堆疊。它是臨時的,不可修改的,它儲存EVM執行資料。
問:哪些變數分別儲存在儲存區和記憶體區?
答:狀態變數和區域性變數(它們是對狀態變數的引用)儲存在儲存器中。函式引數位於記憶體區域中。
問:看看下面的程式碼,並解釋程式碼的哪一部分對應於哪個記憶體區域:
合同MyContract {
//第1部分
uint count;
uint [] totalPoints;
函式localVars(){
//第2部分
uint [] localArr;
//第3部分
uint [] memory memoryArr;
// part 4
uint [] pointer = totalPoints;
}
}
答:
第1部分 – 儲存。
第2部分 – 儲存(陣列大小指向相同的位置counter)
第3部分 – 記憶體。
第4部分 – 參考儲存。
宣告:本文版權屬作者所有,轉載須註明”來源:鏈神探 Vitanov”,違者將依法追究責任。
要了解更多鏈圈幣圈的資訊,可以加入鏈神探社羣
加入方式:關注鏈神探公眾號