day06

鏈上和鏈下

oracle先知javascript

pragma solidity ^0.4.11;
import "github.com/oraclize/ethereum-api/oraclizeAPI.sol";

contract ExampleContract is usingOraclize {
    string public EURGBP;
 function __callback(bytes32 myid, string result) {
      EURGBP =  result;
    }
    function updatePrice() payable {
oraclize_query("URL",
  "json(https://www.therocktrading.com/api/ticker/BTCEUR).result.0.last");
  }
}

oracle官方文檔html

http://docs.oraclize.it/#ethereum-quick-start前端

event和emit

contract Test{
   event Demo (string log);
   function haha() public {
       emit Demo("ahaha");
   }  
}

數字貨幣的發行編寫

https://www.ethereum.org/token
編寫轉帳的前端邏輯
添加數字token到metamaskjava

數字交易所原理分析

中心化交易所

1.開戶:用戶在交易所註冊, 交易所給用戶建立一個新的地址(用戶無私鑰);node

2.充值:用戶打錢到交易所分配的地址裏面。用戶只享有地址,卻不擁有對應密鑰,密鑰仍在交易所手中!(核心)python

3.自動轉帳:交易所分配地址獲得錢後,自動轉帳到中心交易所地址.react

4.交易:內部幣幣交易. 效率很高.相似於如今的證券中心.git

5.提現或提幣:提幣的過程是由交易所的地址轉向用戶錢包地址。程序員

中心化交易所費用分析

1.充值時,用戶錢包地址充值到交易所分配給用戶的地址,須要消耗GAS,費用由用戶直接承擔;github

2.自動轉帳時,交易所分配給用戶的地址自動轉入交易所地址,也須要消耗GAS,費用由交易所直接承擔,目前基本上主流交易所均採用充值免費的模式;

3.交易時,交易所會收取手續費,通常是總交易金額的0.1% (個別交易所爲0.2%,使用交易所代幣打5折),費用由用戶直接承擔;

4.提現時,交易所地址充值到用戶錢包地址,也須要消耗GAS,交易所通常直接收取用戶0.01ETH做爲手續費。

因而可知,中心化交易所交易和體現過程都是收手續費的。

3、中心化交易所優點:

1.中心化交易所在技術實現上是有傳統成熟解決方案的,即便面對海量大併發實時交易,依舊能夠給用戶提供很好的服務體驗。

2.中心化交易所龐大的用戶量和交易量,也帶來了足夠的交易深度,提供了充分的流動性。

3.中心化交易所的交易成本從經濟上看是由市場環境和監管政策決定的。它能夠根據運營策略來制定變化的手續費規則。爲了鼓勵用戶高頻交易,甚至能夠不收取交易手續費。但通常都會對資產提現進行收取手續費。

4.因爲中心化交易所的全部交易實質都是IOU記帳,因此從技術上看交易成本是很是低的。

4、中心化交易所劣勢:

1.人爲因素——中心化信用背書,會面臨包括內部運營風險、商業道德風險、資產盜用等嚴重影響用戶資產安全的風險。有名的案例也比比皆是,如:

2013年10月比特幣交易所GBL忽然關閉,負責人捐款跑路,用戶損失2000萬美圓資產。

2014年2月Mt.Gox85萬比特幣監守自盜,大名鼎鼎的門頭溝事件

2015年2月3日臺灣比特幣交易所Yes-BTC被盜435個比特幣,網站聲明其董事長何兆翼不翼而飛。

2016年4月7日交易所ShapeShift的錢包被黑客盜竊,後證明該盜竊行爲是監守自盜,黑客受一名離職員工的指使。

2017年1月比特幣亞洲閃電交易中心捲款跑路,捲走上億資金。

2017年7月BTC-e交易所下線,隨後域名被封禁,運營者Alexander Vinnik涉嫌洗錢、盜竊被捕。

2017年12月10日加密貨幣交易平臺幣集網網站關閉,疑似跑路,用戶已報案維權。

2.技術因素——資產的第三方背書集中式託管,會招致巨大的黑客攻擊風險,至關考驗網站技術能力和緊急應對能力,有名的案例也比比皆是,如:

2014年3月1日美國加密貨幣交易所Poloniex被盜,損失總量12.3%的比特幣。

2014年8月15日加密貨幣交易所比特兒微博稱被黑客盜走5000萬個NXT,價值約1000多萬元人民幣。

2015年1月10日比特幣交易所Bitstamp遭受黑客攻擊,損失價值510萬美圓的比特幣。

2016年5月香港數字交易所Gatecoin被盜18萬個ETH,250個比特幣。

2016年6月衆籌項目The Dao因智能合約漏洞遭黑客攻擊被盜360萬個ETH。

2016年8月香港Bitfinex因爲網站出現安全漏洞,12萬個比特幣被盜,當時價值6500萬美圓。

2017年7月韓國加密貨幣交易所Bithumb被盜,據評估損失達數十億韓元。

2017年7月加密貨幣交易所CoinDash遭黑客盜走大量以太坊,損失達700萬美圓。戲劇性的是黑客分別於2017年9月與與今年2月,分兩次將被盜以太坊原數返還。

2017年12月19日Youbit第二次遭受黑客攻擊,損失17%的數字資產,並宣告破產,用戶補償工做暫無後續進展。

2018年1月26日加密貨幣交易所Coincheck被黑客盜走大量NEM,損失約5.3億美圓。

2018年2月10日意大利交易所BitGrail遭黑客攻擊,損失了1700萬個NANO幣,總價值約1.7億美圓。

2018年3月7日 加密貨幣交易所Binance遭受黑客攻擊,所幸沒有出現丟幣狀況。

去中心化幣交所

以太坊錢包簡介

https://github.com/ethereum/mist/releases/tag/v0.11.1

兩個圖形化版本,都是基於命令行版本的geth

以太坊私鏈搭建

一、建立工做目錄
新建目錄 geth
建立配置文件 gensis.json
二、配置創世區塊配置文件

{
    "config": {
          "chainId": 123123,
          "homesteadBlock": 0,
          "eip155Block": 0,
          "eip158Block": 0
      },
    "coinbase"   : "0x0000000000000000000000000000000000000000",
    "difficulty" : "0x40000",
    "extraData"  : "",
    "gasLimit"   : "0xffffffff",
    "nonce"      : "0x0000000000000042",
    "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp"  : "0x00",
    "alloc": {
    }
  }
注:chainid 爲區塊鏈網絡id,對應啓動時的networkid
chainid 1爲主網 2爲Morden 3爲ropsten 4爲rankybe 這些id保留

三、建立存儲目錄及初始化創世區塊
建立目錄用於存放區塊鏈數據
建立 blockdb
執行初始化命令

geth --datadir "./blockdb" init gensis.json
Fatal: invalid genesis file: json: cannot unmarshal hex string without 0x prefix into Go struct field Genesis.extraData of type hexutil.Bytes
若執行過程當中出現以上錯誤提示,請檢查==gensis.json==文件。
其中 chaindata 中存放的時 區塊數據,keystore 中存放的是 帳戶數據。

四、啓動私鏈初始節點
執行如下命令啓動私鏈

geth --datadir "./blockdb" --rpc --rpcport 8545 --rpccorsdomain "*" --rpcapi "eth,net,web3,personal,admin,shh,txpool,debug,miner" --nodiscover --maxpeers 30 --networkid 123123 --port 30303  --verbosity 4 console

rpccorsdomain 這裏配置 「 * 」是容許經過任意域名訪問,也能夠指定具體的域名。
verbosity 日誌等級:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)。
==error==

Fatal: Failed to start mining: etherbase missing: etherbase must be explicitly specified

出現場景,gensis.json中節點alloc未配置帳號,而啓動私鏈時需指定一個礦工帳號,不然回出現該錯誤。

Error: etherbase missing: etherbase address must be explicitly specified

緣由是當前環境沒有帳戶,須要創建一個帳戶

error:Fatal: Unable to attach to remote geth: no known transport for URL scheme "c",解決辦法使用以下命令行連接console

geth attach \\.\pipe\geth.ipc

五、經常使用命令
以太坊的JavaScript控制檯中內置了一些對象,經過這些對象咱們能夠很方便的和以太坊進行交互,這些內置對象包括:

eth:提供了操做區塊鏈項目的方法
net:提供了查看p2p網絡狀態的相關方法
admin:提供了管理節點相關方法
miner:提供了啓動和中止挖礦的方法
personal:提供了管理帳戶的方法
txpool:提供了查看交易內存池的方法
web3:除了包含以上對象中有的方法外,還包含一些單位換算的方法。
下面幾個步驟以一個完整的流程介紹一些經常使用命令,即建立用戶->查看用戶->挖礦->交易。

建立帳戶
personal.newAccount('123456')
查看帳戶
eth.accounts
eth.accounts[0]
查看餘額
eth.getBalance(eth.accounts[0])
web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')
此時帳戶數據爲0
挖礦命令:
miner.start()
miner.stop()
交易
首先交易需2個帳戶,因此使用newAccount命令再建立一個帳戶;
其次交易以前需先解鎖,不然會報錯。
解鎖命令:
personal.unlockAccount(eth.accounts[0],'123456')
轉帳命令:
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(1,"ether")})
此時查看另外一個帳戶,能夠看到已存在1eth。
若轉帳時若未開啓挖礦,此時交易處於待打包交易,因此另外一個帳戶查不到轉帳的數據,能夠經過==txpool.status== 查看狀態。

https://ethereum.gitbooks.io/frontier-guide/content/web3.html#web3ethsyncing

truffle介紹

https://truffleframework.com/

6天課技能總結

  • 熟悉solidity智能合約的開發
  • 熟練使用solc, ganache, web3.js, mocha, truffle工具和框架
  • 熟練使用remix-ide
  • 熟練使用nodejs和react, 與以太坊網絡智能合約進行交互
  • 對solidity代碼安全審計有經驗
  • 對密碼學,安全協議和加密算法有必定的研究
  • 有基於以太坊貨幣的開發經驗
  • 有良好的團隊協做精神和執行力,較強的分析問題和解決問題能力
  • 能編寫智能合約的自動化測試腳本
  • 在github有java版/kotlin版開源比特幣實現項目
  • 具有必定的產品經驗.

以太坊面試題詳解

1.以太幣和比特幣有哪些區別?

* 區塊時間。比特幣出塊時間是平均10分鐘,而以太坊約是15-30秒。

* 挖礦獎勵: 以太幣獎勵爲5以太幣,而且每次出塊獎勵不減小,大都會後改成了3個以太幣。比特幣是每次減半,第一塊的是50個比特幣。以後每一塊都減半

* 叔塊(uncle block)獎勵。由於以太坊的出塊時間很短,很容易出現兩個節點同時出塊的狀況,爲了使得全部同時出塊的節點均可以獲得獎勵,減小無用礦工。

2.智能合約是什麼?目前應用到什麼行業?有什麼特色?

在區塊中傳遞的合約,或者說是傳遞的字符串,不過不是單純的字符串和信息,而是一段可執行的腳本,好比說,有觸發條件,有交互能力

1:公信力好,代碼是公開透明的,莊家是不能做弊的(也能夠說沒有莊家),並且沒有中央服務器;2:賭博過程很難被監控被追蹤,一旦入局不可逆轉,並且金額走向沒法追蹤

特色:一、公開透明的策略,任何人均可以檢查其代碼邏輯可靠性;二、即時與區塊鏈代幣支付結合,典型如以太坊。三、去中心化和持續生命力,代碼發佈後,即使發佈方倒閉,解散,其產品依然會在鏈上運行。

3.以太坊虛擬機 EVM和JVM有什麼差異?

虛擬機都是跨平臺的
以太坊實現了一個叫Ethereum Virtual Machine(EVM)的運行時環境,相似JVM,它的主要工做是執行智能合約的字節碼,EVM「位於區塊鏈之上」,而JVM主要是執行目標代碼(字節碼),內存回收機制好像也不同

4.Solidity編程語言有哪些特色?和Javascript、Python有什麼區別?

強類型編程語言, javascript和python是弱類型編程語言
Solidity是一種智能合約高級語言,運行在Ethereum虛擬機(EVM)之上。
Solidity是以太坊的首選語言,語法接近於Javascript,是一種面向對象的語言,這下降了學習門檻,易於被掌握和使用,由於JavaScript是Web開發者的經常使用語言。所以,Solidity充分利用了現有數以百萬程序員已掌握JavaScript這一現狀。
但做爲一種真正意義上運行在網絡上的去中心合約,它又有不少的不一樣,下面列舉一些:

以太坊底層是基於賬戶,而非UTXO的,因此有一個特殊的Address的類型。用於定位用戶,定位合約,定位合約的代碼(合約自己也是一個賬戶)。
因爲語言內嵌框架是支持支付的,因此提供了一些關鍵字,如payable,能夠在語言層面直接支持支付,並且超級簡單。
存儲是使用網絡上的區塊鏈,數據的每個狀態均可以永久存儲,因此須要肯定變量使用內存,仍是區塊鏈。
運行環境是在去中心化的網絡上,會比較強調合約或函數執行的調用的方式。由於原來一個簡單的函數調用變爲了一個網絡上的節點中的代碼執行,分佈式的感受。
最後一個很是大的不一樣則是它的異常機制,一旦出現異常,全部的執行都將會被回撤,這主要是爲了保證合約執行的原子性,以免中間狀態出現的數據不一致。

5. 以太坊目前須要解決的難題有哪些?將來的需求是什麼?

Vitalik Buterin:目前的挑戰主要是技術性問題,大致分爲如下三類:

第一,可擴展性。咱們要增長區塊鏈的容量,這一性能主要反映在每秒可處理的原始交易數。目前以太坊每秒鐘可處理15筆交易左右,但要知足主流採用,還須要數千倍的提高。

第二,隱私性。咱們須要努力確保在使用區塊鏈應用時不會泄露我的隱私數據。

第三,安全性。 咱們須要在技術上幫助社區最大程度地下降數字資產被盜的風險,私鑰遺失、智能合約代碼漏洞等風險也要最小化。

在實用性方面也存在着一些挑戰,但相較於核心協議和平臺自己,每一個單獨應用的開發團隊對實用性有着更大的影響 。

但目前咱們已經有不少可靠的解決方案來應對以上全部的挑戰 。例如,咱們有專門的團隊在研究狀態通道技術,分片技術和Plasma技術來解決可擴展性方面的問題。拜占庭硬分叉已經完成,並且它的加密功能也達到可用狀態,但在構建基礎設施以及利用它們的方面還有不少細節工做要作。

6.通常錢包 Transaction 的流程是什麼?

7. 轉帳的詳細描述

nonce:發送者發送交易數的計數

gasPrice:發送者願意支付執行交易所需的每一個gas的Wei數量

gasLimit:發送者願意爲執行交易支付gas數量的最大值。這個數量被設置以後在任何計算完成以前就會被提早扣掉

to:接收者的地址。在合約建立交易中,合約帳戶的地址尚未存在,因此值先空着

value:從發送者轉移到接收者的Wei數量。在合約建立交易中,value做爲新建合約帳戶的開始餘額

v,r,s:用於產生標識交易發生着的簽名

data(可選域,只有在消息通訊中存在):消息通話中的輸入數據(也就是參數)。

8.合約可以向其餘合約發送消息,那麼如何理解這個消息?

在以太坊狀態全局範圍內的合約能夠與在相同範圍內的合約進行通訊。他們是經過「消息」或者「內部交易」進行通訊的。咱們能夠認爲消息或內部交易相似於交易,不過與交易有着最大的不一樣點—它們不是由外部擁有帳戶產生的。相反,他們是被合約產生的。
參考衆籌項目的fundingFactory , 由智能合約部署智能合約.

9.以太坊客戶端是錢包嗎?目前經常使用的有哪些?各有什麼優缺點?

  1. Mist
    說到以太坊錢包,第一個要說的固然就是Ethereum官方錢包+瀏覽器 Mist。Mist是一個錢包(全節點錢包通俗的來講就是同步了所有的以太坊區塊信息的錢包)。也就是說打開錢包後,電腦會自動同步所有的以太坊區塊信息,若是設備和網絡的條件過關的狀況下,目前(17年9月8日)大概須要半天左右的時間。
    優點:
    安全度高,不須要通過第三方發起交易
    節點未同步完成以前沒法查看地址餘額
    劣勢:
    沒法調整Gas Price
    對網絡要求高,須要鏈接節點,才能發起交易

  2. ethereum wallet
    優點:
    安全度高,不須要通過第三方發起交易
    劣勢:
    對網絡要求高,須要鏈接節點才能發起交易

  3. MyEtherWallet

MyEtherWallet 做爲一個輕錢包,上手難道不大,無需下載,在直接在網頁上就能夠完成全部的操做。在MyEtherWallet上生成的私鑰由用戶自我保管,平臺方並沒有備份。

優點:

方便快捷,連網便可發起交易

劣勢:

交易時須要上傳私鑰(使用時認準惟一網址: https://www.myetherwallet.com 謹防釣魚網站 )

  1. MetaMask

MetaMask的錢包屬性偏弱,更多的是起到使Chrome瀏覽器兼容以太坊網絡的做用
優勢:
經過添加錢包插件將Chrome變成兼容以太坊的瀏覽器
缺點:
不支持自動顯示Erc20代幣。(須要用戶本身添加代幣的智能合約地址)

10.Geth是什麼?有哪些命令?

以太坊客戶端Geth在以太坊智能合約開發中最經常使用的工具,一個多用途的命令行工具。
能夠用來搭建以太坊私鏈. 具體指令見上面內容.

11.web3.js是什麼?有什麼優缺點?

web3.js是以太坊提供的一個Javascript庫,它封裝了以太坊的JSON RPC API,提供了一系列與區塊鏈交互的Javascript對象和函數,包括查看網絡狀態,查看本地帳戶、查看交易和區塊、發送交易、編譯/部署智能合約、調用智能合約等,其中最重要的就是與智能合約交互的API。

12.Gas是什麼?在以太坊上有什麼做用?和智能合約有什麼關係?

gas能夠有效的防止惡意攻擊,通證經濟學.

智能合約,就是一些代碼,運行整個分佈式網絡中。因爲網絡中的每個節點都是一個全節點。這樣的好處是容錯性強,壞處是效率低,消耗資源與時間。由於執行計算要花錢,而要執行的運算量與代碼直接相關。因此,每一個在網絡運行的底層操做都須要必定量的gas。gas只是一個名字,它表明的是執行所須要花費的成本(注:因爲以太坊是圖靈完備的,隨便一個死循環就將致使網絡不可用,因此引入了gas的概念)。整個分佈式網絡引入了強制限制,來避免停機問題。所以若是你寫一個死循環,當gas耗盡後,網絡就會拒絕執行接下來的操做,而且回滾你以前的全部操做。

gas的價格由市場決定,相似於比特幣的交易費機制。若是你的gas價格高,節點則將優先由於利益問題打包你的交易。

通常來講,在Ethereum中計算和存儲東西比在傳統環境中作的更爲昂貴,可是,Ethereum爲您的代碼提供了上述咱們討論過的那些好的屬性,這多是同樣有價值的。

通常來講,在以太坊網上讀取狀態是免費的,只有寫入狀態是收費的

這些gas的錢到底去了哪裏?發送者在gas上花費的全部錢都發送給了「受益人」地址,一般狀況下就是礦工的地址。由於礦工爲了計算和驗證交易作出了努力,因此礦工接收gas的費用做爲獎勵。

一般,發送者願意支付更高的gas price,礦工從這筆交易總就能得到更多的價值。所以,礦工也就更加願意選擇這筆交易。這樣的話,礦工能夠自由的選擇一筆交易本身願意驗證或忽略。爲了引導發送者應該設置gas price爲多少,礦工能夠選擇建議一個最小的gas值他們願意執行一個交易。

13.coinbase是什麼?有什麼用?

爲了賺取以太幣,你必須有coinbase 地址。這個etherbase默認爲你生成的第一個帳戶。若是你沒有etherbase地址,geth –mine就不會開啓。

挖礦必需要設置 coinbase的.

14.balance(餘額)最多能夠顯示小數點後幾位?

18位 ERC20規範建議都是20位.

15.GHOST協議是什麼?有什麼做用?

不論何時只要多個路徑產生了,一個」分叉「就會出現。咱們一般都想避免分叉,由於它們會破壞系統,強制人們去選擇哪條鏈是他們相信的鏈。
爲了肯定哪一個路徑纔是最有效的以及防止多條鏈的產生,以太坊使用了一個叫作「GHOST協議(GHOST protocol.)」的數學機制。
簡單來講,GHOST協議就是讓咱們必須選擇一個在其上完成計算最多的路徑。區塊號越大,路徑就會越長,就說明越多的挖礦算力被消耗在此路徑上以達到葉子區塊。使用這種推理就能夠容許咱們贊同當前狀態的權威版本。

16.默克樹是什麼?做用是什麼?

17.Frontier(前沿)是什麼?

「前沿」是以太坊的最第一版本, 只有命令行界面,主要使用者是開發者

18.Homestead(家園)是什麼?

「家園」增長了相似 Windows系統那樣的圖形界面普通用戶也能夠方便地體驗以太坊的功能

19.Metropolis(大都會)是什麼?

「大都會」加入了—個像谷歌瀏覽器那樣的瀏覽器,除了使用方便以外,它還擁有一個強大的應用商店,能夠安裝插件實現更多功能。第三個版本在2017年年末發佈了出來

20.Serenity(寧靜)是什麼?

「寧靜」目前尚未肯定發佈時間,預計它會將前三個版本採用的工做量證實(Pow) 共識機制切換到混合的共識機制

21.零知識證實是什麼?有哪些零知識證實的例子?

簡單說就是,在不透露交易細節的狀況下驗證了交易記錄。零知識證實能夠有效保護交易隱私,隱藏交易來源並防止追溯,同時也能保證交易是安全的,由於任何試圖修改交易的行爲都沒法經過驗證。

22.PoS是什麼?和POW有什麼區別?缺點是什麼?

POS 就是基於擁有的數量和時間得到證實的共識算法,它不像POW注重算力競爭,而是強化了擁有的意義,好比在銀行存的錢越多,存的越長 則收益越大

缺點:POS也存在一些問題,好比馬太效應,最後系統決策和收益依然會集中在少數寡頭手裏,除此以外,當礦工熱潮退卻後,如何保證有效的工做節點數量來完成運算,也是值得觀察的

23.Casper 的共識算法是什麼樣的?

以太坊中PoS協議的實現, 剛開始每100個區塊將有一個採用PoS協議挖出

24.以太坊帳戶的類型?

在的以太坊有兩類帳戶:即外部帳戶和合約帳戶,以太坊正在試圖模糊兩者的界限,即你能夠同時擁有合約帳戶和外部帳戶,這種作法本質上就是讓用戶按照合約帳戶的格式來定義外部帳戶。

25.難度炸彈是什麼?有什麼做用?

爲了確保以太坊的礦工能加入到新鏈條中來,開發團隊引入了"難度炸彈"機制。它會使難度係數呈指數增長以致於讓挖礦變得幾乎不可能的。

26.以太坊硬分叉是什麼?能解決什麼問題?有什麼缺點?

所謂硬分叉是分叉方約定,在某個區塊節點開始,啓用新的系統架構繼續前進,再也不和主鏈保持一致,但同時繼承了該節點前的全部區塊。在這個節點以後,雙方各自挖各自的礦,各自爆各自的區塊,各走各的路。好比:公司有一本對公帳本,有一本內部帳本,兩個帳本徹底獨立

能解決什麼問題:在我看來有兩點:1.黑客發起針對The DAO智能合約多個漏洞的攻擊,其中也包含了遞歸調用漏洞,並向一個匿名地址轉移了3600萬個以太幣,致使以太坊選擇硬分叉啓用新的系統架構;2.不少人爲了發行ICO經過以太坊割點韭菜的錢

缺點:硬分叉不須要主鏈容許或經過,任何人均可以發起硬分叉,均可以基於本身的理解和判斷髮起一個新的分支,但對於信仰者來講,每一個分叉都是對共識的撕裂,是在破壞共識。共識算法自己就是防範故障或者惡意分叉的,而人爲強行分叉顯然是算法所不能處理的。

  • 軟分叉:若是區塊鏈的共識規則改變後,這種改變是向前兼容的,舊節點能夠兼容新節點產生的區塊,即爲軟分叉。
  • 硬分叉:若是區塊鏈軟件的共識規則被改變,而且這種規則改變沒法向前兼容,舊節點沒法承認新節點產生的區塊,即爲硬分叉

區塊鏈的價值在於共識, 全部人達成一致,這種一致性帶來的價值是沒法衡量的, 爲何只有比特幣有價值?如今事實給了大家一些答案,你能夠複製比特幣的代碼,創造無數個比特幣,可是比特幣背後的生態(開發者、礦工、交易所、商家、用戶)你沒法複製。就像若是把淘寶、微信的源碼給你,你能再造一個淘寶和微信嗎?

27.ERC-20是什麼?在什麼地方會用到?

代幣合約標準,一系列經過以太坊智能合約發佈的代幣制定了代幣發放的通用規則。該標準是目前經過ICO發行代幣的基礎準則。

該標準可以確保基於以太坊的代幣在整個生態系統中以一種可預測的方式進行,使去中心化應用程序和智能合約能夠在整個平臺上彼此協做,全部代幣都遵循一個固定的安全標準。

ERC-20 標準是在2015年11月份推出的,使用這種規則的代幣,表現出一種通用的和可預測的方式。簡單地說,任何 ERC-20 代幣都能當即兼容以太坊錢包, 因爲交易所已經知道這些代幣是如何操做的,它們能夠很容易地整合這些代幣。這就意味着,在不少狀況下,這些代幣都是能夠當即進行交易的。

28 .叔塊是什麼?有什麼缺點?

是一個區塊的父區塊與當前區塊父區塊的父區塊是相同的。

因爲以太坊區塊生產時間(大概15秒左右)比比特幣(大概10分鐘左右)要快不少。更短的區塊生產時間的一個缺點就是:更多的競爭區塊會被礦工發現。

這些競爭區塊一樣也被稱爲「孤區塊」(也就是被挖出來可是不會被添加到主鏈上的區塊)

Ommers的目的就是爲了幫助獎勵礦工歸入這些孤區塊,Ommer區塊會收到比全區塊少一點的獎勵。

29 .Oracle預言機是什麼?有什麼做用?

經過向智能合約提供數據,它現實世界和區塊鏈之間的橋樑

30.公有鏈是什麼?

公有鏈是目前咱們熟知的比特幣,以太坊,瑞波幣這些,每一個人均可以參與,每一個人均可以在上面進行交易,若是支持智能合約,每一個人也均可以發佈本身的應用。

31.聯盟鏈是什麼?

聯盟鏈是指一些願意彼此實現共信的機構和組織共同組建的,爲各自機構提供共識信用和價值傳遞的平臺,這樣只要聯盟不存在一家獨大的狀況,仍是能夠實現共識基礎,並且相對來講可能價值更大一些,我其實以爲聯盟鏈是有一些市場機會的。

32.私有鏈是什麼?

用戶本身搭建的私有鏈, 私有鏈缺少共識,也須要公權機構背書,與傳統中心化相比價值有限,只能說防黑客篡改可能略微有點意義。

33.測試網絡有哪幾種?各自在什麼狀況下使用?如何使用?

Ropsten
Kovan測試網絡 - 僅parity錢包支持,使用PoA共識
Rinkeby測試網絡 - 僅parity錢包支持,使用PoA共識

34.DAO(decentralized autonomous organization)去中心自治組織做用是什麼?有什麼侷限性?

這是一個組織(就像,一羣人),其中,使用代碼來保證最終的強制執行,而不是使用傳統的法律文件。這羣人使用智能合約來作常見組織作的全部的事情,好比在某件事上進行投票,好比決定是否對什麼進行投資等等。

反作用是決策,管理,以及對什麼進行投資的結果將會不可改變的存儲在區塊鏈上。

35. storage和 memory

智能合約存儲數據的位置
solidity編程中變量是值傳遞仍是引用傳遞

36 .區塊鏈的共識算法

共識算法是計算中的過程,其在區塊鏈過程當中達成單數據值的協議。這些算法旨在提供涉及衆多不可靠節點的網絡可靠性,以防止雙重花費。
有不一樣類型的算法,如PoW,PoS,DPoS,PoA

37 .什麼是以太坊節點?

一個節點本質上是一臺有以太坊客戶端鏈接到網絡的計算機。

38 如何查看有關交易和區塊的詳細信息?

etherscan.io

39. 與來自DApp的合同進行交互,您須要什麼?

合同的ABI和字節碼。

40. ABI是什麼有什麼做用?

ABI是DApps用於調用合同的合同的公共接口的描述。ABI是合約的公開接口描述對象,被DApps用於調用合約的接口。

41.什麼是字節碼bytecode?

EVM須要字節碼才能執行合同代碼。

42. 跟以太坊網絡交互的方式

web3.js web3j mist metamask

43. solidity的數據類型有哪些, 值類型引用類型的區別

44.DApp的前端是否侷限於某些技術或框架?

不受限制。可使用任何技術來開發DApp的前端,好比HTML,CSS,JS,Java,Python...

45.前端用什麼庫鏈接後端(智能合同)?

Web3.js庫。

46.在DApp的前端須要哪些東西才能與指定的智能合約進行交互?

合約的ABI和字節碼。

47.字節碼有什麼做用?

節點上的EVM只能執行合約的字節碼。

48.爲何須要檢查在Web DApp代碼的開始部分是否設置了web3提供器(Provider)?

由於Metamask會注入一個web3對象,它覆蓋其餘的web3設置。

49.爲何要使用web3.js版本1.x而不是0.2x.x?

主要是由於1.x的異步調用使用Promise而不是回調,能夠經過async和await的方式調用. Promise目前在javascript世界中 是處理異步調用的首選方案。

50. 如何在web3 1.x中列出帳戶?

web3.eth.getAccounts

51 .call和.send有什麼區別?

.send發送交易並支付費用,而.call查詢合約狀態。

52. 這樣發送1個以太對嗎:.send({value:1})?

不對,這樣發送的是1 wei。 交易中老是以wei爲單位。

53.那麼爲了發送1個以太,我必須將這個值乘以10^18?

可使用web3.utils.toWei(1,'ether')。

54.調用.send()時須要指定什麼?

必須指定from字段,即發送帳戶地址。 其餘一切都是可選的。

55. web3.eth.sendTransaction()的惟一功能是將以太發送到特定的地址,這個說法是否正確?

不對,也能夠用它調用合約方法。

56. 你是否知道以太坊的可擴展性解決方案?

分片,分區。

57.solidity是靜態類型的仍是動態類型的語言?

它是靜態類型語言,這意味着類型在編譯時是已知的。

58.Solidity中與Java「Class」相似的是什麼?

contract

59 什麼是合約實例和智能合約的區別?

合約實例是區塊鏈上已部署的合約。

60.請說出Java和Solidity之間的一些區別。

都是面向對象, 語法有些相同之處, Solidity支持多重繼承,可是要慎用

61. 你必須在Solidity文件中指定的第一件事是什麼?

Solidity編譯器的版本,好比指定爲^ 0.4.8。 這是必要的,由於這樣能夠防止在使用其餘版本的編譯器時引入不兼容性錯誤。

62. 合約中包含什麼?

主要由存儲變量、函數和事件組成。

63.合約中有哪些類型的函數?

有構造函數、payable函數、修改合約狀態的函數和只讀的view函數。

64.若是我將多個合約定義放入單個Solidity文件中,我會獲得什麼錯誤?

將多個合約定義放入單個Solidity文件是徹底正確的。跟java內部類相似

65. 兩個合約之間交互的方式有哪些?

一個合約能夠調用另外一個合約,也能夠繼承其餘合約。

contract Animal {
    function eat() {  }
  }

contract dog is Animal {
    
}

66.看看下面的代碼,並解釋代碼的哪一部分對應於哪一個內存區域:

contract MyContract {
  // part 1
  uint count;
  uint[] totalPoints;
 
  function localVars(){
     // part 2
     uint[] localArr;
     // part 3
     uint[] memory memoryArr;
     // part 4
     uint[] pointer = totalPoints;
  }
}
第1部分 - Storage
第2部分 - memory
第3部分 - Memory
第4部分 - Storage
相關文章
相關標籤/搜索