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
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
* 區塊時間。比特幣出塊時間是平均10分鐘,而以太坊約是15-30秒。 * 挖礦獎勵: 以太幣獎勵爲5以太幣,而且每次出塊獎勵不減小,大都會後改成了3個以太幣。比特幣是每次減半,第一塊的是50個比特幣。以後每一塊都減半 * 叔塊(uncle block)獎勵。由於以太坊的出塊時間很短,很容易出現兩個節點同時出塊的狀況,爲了使得全部同時出塊的節點均可以獲得獎勵,減小無用礦工。
在區塊中傳遞的合約,或者說是傳遞的字符串,不過不是單純的字符串和信息,而是一段可執行的腳本,好比說,有觸發條件,有交互能力 1:公信力好,代碼是公開透明的,莊家是不能做弊的(也能夠說沒有莊家),並且沒有中央服務器;2:賭博過程很難被監控被追蹤,一旦入局不可逆轉,並且金額走向沒法追蹤 特色:一、公開透明的策略,任何人均可以檢查其代碼邏輯可靠性;二、即時與區塊鏈代幣支付結合,典型如以太坊。三、去中心化和持續生命力,代碼發佈後,即使發佈方倒閉,解散,其產品依然會在鏈上運行。
虛擬機都是跨平臺的 以太坊實現了一個叫Ethereum Virtual Machine(EVM)的運行時環境,相似JVM,它的主要工做是執行智能合約的字節碼,EVM「位於區塊鏈之上」,而JVM主要是執行目標代碼(字節碼),內存回收機制好像也不同
強類型編程語言, javascript和python是弱類型編程語言 Solidity是一種智能合約高級語言,運行在Ethereum虛擬機(EVM)之上。 Solidity是以太坊的首選語言,語法接近於Javascript,是一種面向對象的語言,這下降了學習門檻,易於被掌握和使用,由於JavaScript是Web開發者的經常使用語言。所以,Solidity充分利用了現有數以百萬程序員已掌握JavaScript這一現狀。 但做爲一種真正意義上運行在網絡上的去中心合約,它又有不少的不一樣,下面列舉一些: 以太坊底層是基於賬戶,而非UTXO的,因此有一個特殊的Address的類型。用於定位用戶,定位合約,定位合約的代碼(合約自己也是一個賬戶)。 因爲語言內嵌框架是支持支付的,因此提供了一些關鍵字,如payable,能夠在語言層面直接支持支付,並且超級簡單。 存儲是使用網絡上的區塊鏈,數據的每個狀態均可以永久存儲,因此須要肯定變量使用內存,仍是區塊鏈。 運行環境是在去中心化的網絡上,會比較強調合約或函數執行的調用的方式。由於原來一個簡單的函數調用變爲了一個網絡上的節點中的代碼執行,分佈式的感受。 最後一個很是大的不一樣則是它的異常機制,一旦出現異常,全部的執行都將會被回撤,這主要是爲了保證合約執行的原子性,以免中間狀態出現的數據不一致。
Vitalik Buterin:目前的挑戰主要是技術性問題,大致分爲如下三類: 第一,可擴展性。咱們要增長區塊鏈的容量,這一性能主要反映在每秒可處理的原始交易數。目前以太坊每秒鐘可處理15筆交易左右,但要知足主流採用,還須要數千倍的提高。 第二,隱私性。咱們須要努力確保在使用區塊鏈應用時不會泄露我的隱私數據。 第三,安全性。 咱們須要在技術上幫助社區最大程度地下降數字資產被盜的風險,私鑰遺失、智能合約代碼漏洞等風險也要最小化。 在實用性方面也存在着一些挑戰,但相較於核心協議和平臺自己,每一個單獨應用的開發團隊對實用性有着更大的影響 。 但目前咱們已經有不少可靠的解決方案來應對以上全部的挑戰 。例如,咱們有專門的團隊在研究狀態通道技術,分片技術和Plasma技術來解決可擴展性方面的問題。拜占庭硬分叉已經完成,並且它的加密功能也達到可用狀態,但在構建基礎設施以及利用它們的方面還有不少細節工做要作。
nonce:發送者發送交易數的計數
gasPrice:發送者願意支付執行交易所需的每一個gas的Wei數量
gasLimit:發送者願意爲執行交易支付gas數量的最大值。這個數量被設置以後在任何計算完成以前就會被提早扣掉
to:接收者的地址。在合約建立交易中,合約帳戶的地址尚未存在,因此值先空着
value:從發送者轉移到接收者的Wei數量。在合約建立交易中,value做爲新建合約帳戶的開始餘額
v,r,s:用於產生標識交易發生着的簽名
data(可選域,只有在消息通訊中存在):消息通話中的輸入數據(也就是參數)。
在以太坊狀態全局範圍內的合約能夠與在相同範圍內的合約進行通訊。他們是經過「消息」或者「內部交易」進行通訊的。咱們能夠認爲消息或內部交易相似於交易,不過與交易有着最大的不一樣點—它們不是由外部擁有帳戶產生的。相反,他們是被合約產生的。
參考衆籌項目的fundingFactory , 由智能合約部署智能合約.
Mist
說到以太坊錢包,第一個要說的固然就是Ethereum官方錢包+瀏覽器 Mist。Mist是一個錢包(全節點錢包通俗的來講就是同步了所有的以太坊區塊信息的錢包)。也就是說打開錢包後,電腦會自動同步所有的以太坊區塊信息,若是設備和網絡的條件過關的狀況下,目前(17年9月8日)大概須要半天左右的時間。
優點:
安全度高,不須要通過第三方發起交易
節點未同步完成以前沒法查看地址餘額
劣勢:
沒法調整Gas Price
對網絡要求高,須要鏈接節點,才能發起交易
ethereum wallet
優點:
安全度高,不須要通過第三方發起交易
劣勢:
對網絡要求高,須要鏈接節點才能發起交易
MyEtherWallet
MyEtherWallet 做爲一個輕錢包,上手難道不大,無需下載,在直接在網頁上就能夠完成全部的操做。在MyEtherWallet上生成的私鑰由用戶自我保管,平臺方並沒有備份。
優點:
方便快捷,連網便可發起交易
劣勢:
交易時須要上傳私鑰(使用時認準惟一網址: https://www.myetherwallet.com 謹防釣魚網站 )
MetaMask的錢包屬性偏弱,更多的是起到使Chrome瀏覽器兼容以太坊網絡的做用
優勢:
經過添加錢包插件將Chrome變成兼容以太坊的瀏覽器
缺點:
不支持自動顯示Erc20代幣。(須要用戶本身添加代幣的智能合約地址)
以太坊客戶端Geth在以太坊智能合約開發中最經常使用的工具,一個多用途的命令行工具。
能夠用來搭建以太坊私鏈. 具體指令見上面內容.
web3.js是以太坊提供的一個Javascript庫,它封裝了以太坊的JSON RPC API,提供了一系列與區塊鏈交互的Javascript對象和函數,包括查看網絡狀態,查看本地帳戶、查看交易和區塊、發送交易、編譯/部署智能合約、調用智能合約等,其中最重要的就是與智能合約交互的API。
gas能夠有效的防止惡意攻擊,通證經濟學.
智能合約,就是一些代碼,運行整個分佈式網絡中。因爲網絡中的每個節點都是一個全節點。這樣的好處是容錯性強,壞處是效率低,消耗資源與時間。由於執行計算要花錢,而要執行的運算量與代碼直接相關。因此,每一個在網絡運行的底層操做都須要必定量的gas。gas只是一個名字,它表明的是執行所須要花費的成本(注:因爲以太坊是圖靈完備的,隨便一個死循環就將致使網絡不可用,因此引入了gas的概念)。整個分佈式網絡引入了強制限制,來避免停機問題。所以若是你寫一個死循環,當gas耗盡後,網絡就會拒絕執行接下來的操做,而且回滾你以前的全部操做。
gas的價格由市場決定,相似於比特幣的交易費機制。若是你的gas價格高,節點則將優先由於利益問題打包你的交易。
通常來講,在Ethereum中計算和存儲東西比在傳統環境中作的更爲昂貴,可是,Ethereum爲您的代碼提供了上述咱們討論過的那些好的屬性,這多是同樣有價值的。
通常來講,在以太坊網上讀取狀態是免費的,只有寫入狀態是收費的
這些gas的錢到底去了哪裏?發送者在gas上花費的全部錢都發送給了「受益人」地址,一般狀況下就是礦工的地址。由於礦工爲了計算和驗證交易作出了努力,因此礦工接收gas的費用做爲獎勵。
一般,發送者願意支付更高的gas price,礦工從這筆交易總就能得到更多的價值。所以,礦工也就更加願意選擇這筆交易。這樣的話,礦工能夠自由的選擇一筆交易本身願意驗證或忽略。爲了引導發送者應該設置gas price爲多少,礦工能夠選擇建議一個最小的gas值他們願意執行一個交易。
爲了賺取以太幣,你必須有coinbase 地址。這個etherbase默認爲你生成的第一個帳戶。若是你沒有etherbase地址,geth –mine就不會開啓。
挖礦必需要設置 coinbase的.
18位 ERC20規範建議都是20位.
不論何時只要多個路徑產生了,一個」分叉「就會出現。咱們一般都想避免分叉,由於它們會破壞系統,強制人們去選擇哪條鏈是他們相信的鏈。
爲了肯定哪一個路徑纔是最有效的以及防止多條鏈的產生,以太坊使用了一個叫作「GHOST協議(GHOST protocol.)」的數學機制。
簡單來講,GHOST協議就是讓咱們必須選擇一個在其上完成計算最多的路徑。區塊號越大,路徑就會越長,就說明越多的挖礦算力被消耗在此路徑上以達到葉子區塊。使用這種推理就能夠容許咱們贊同當前狀態的權威版本。
「前沿」是以太坊的最第一版本, 只有命令行界面,主要使用者是開發者
「家園」增長了相似 Windows系統那樣的圖形界面普通用戶也能夠方便地體驗以太坊的功能
「大都會」加入了—個像谷歌瀏覽器那樣的瀏覽器,除了使用方便以外,它還擁有一個強大的應用商店,能夠安裝插件實現更多功能。第三個版本在2017年年末發佈了出來
「寧靜」目前尚未肯定發佈時間,預計它會將前三個版本採用的工做量證實(Pow) 共識機制切換到混合的共識機制
簡單說就是,在不透露交易細節的狀況下驗證了交易記錄。零知識證實能夠有效保護交易隱私,隱藏交易來源並防止追溯,同時也能保證交易是安全的,由於任何試圖修改交易的行爲都沒法經過驗證。
POS 就是基於擁有的數量和時間得到證實的共識算法,它不像POW注重算力競爭,而是強化了擁有的意義,好比在銀行存的錢越多,存的越長 則收益越大
缺點:POS也存在一些問題,好比馬太效應,最後系統決策和收益依然會集中在少數寡頭手裏,除此以外,當礦工熱潮退卻後,如何保證有效的工做節點數量來完成運算,也是值得觀察的
以太坊中PoS協議的實現, 剛開始每100個區塊將有一個採用PoS協議挖出
在的以太坊有兩類帳戶:即外部帳戶和合約帳戶,以太坊正在試圖模糊兩者的界限,即你能夠同時擁有合約帳戶和外部帳戶,這種作法本質上就是讓用戶按照合約帳戶的格式來定義外部帳戶。
爲了確保以太坊的礦工能加入到新鏈條中來,開發團隊引入了"難度炸彈"機制。它會使難度係數呈指數增長以致於讓挖礦變得幾乎不可能的。
所謂硬分叉是分叉方約定,在某個區塊節點開始,啓用新的系統架構繼續前進,再也不和主鏈保持一致,但同時繼承了該節點前的全部區塊。在這個節點以後,雙方各自挖各自的礦,各自爆各自的區塊,各走各的路。好比:公司有一本對公帳本,有一本內部帳本,兩個帳本徹底獨立
能解決什麼問題:在我看來有兩點:1.黑客發起針對The DAO智能合約多個漏洞的攻擊,其中也包含了遞歸調用漏洞,並向一個匿名地址轉移了3600萬個以太幣,致使以太坊選擇硬分叉啓用新的系統架構;2.不少人爲了發行ICO經過以太坊割點韭菜的錢
缺點:硬分叉不須要主鏈容許或經過,任何人均可以發起硬分叉,均可以基於本身的理解和判斷髮起一個新的分支,但對於信仰者來講,每一個分叉都是對共識的撕裂,是在破壞共識。共識算法自己就是防範故障或者惡意分叉的,而人爲強行分叉顯然是算法所不能處理的。
區塊鏈的價值在於共識, 全部人達成一致,這種一致性帶來的價值是沒法衡量的, 爲何只有比特幣有價值?如今事實給了大家一些答案,你能夠複製比特幣的代碼,創造無數個比特幣,可是比特幣背後的生態(開發者、礦工、交易所、商家、用戶)你沒法複製。就像若是把淘寶、微信的源碼給你,你能再造一個淘寶和微信嗎?
代幣合約標準,一系列經過以太坊智能合約發佈的代幣制定了代幣發放的通用規則。該標準是目前經過ICO發行代幣的基礎準則。
該標準可以確保基於以太坊的代幣在整個生態系統中以一種可預測的方式進行,使去中心化應用程序和智能合約能夠在整個平臺上彼此協做,全部代幣都遵循一個固定的安全標準。
ERC-20 標準是在2015年11月份推出的,使用這種規則的代幣,表現出一種通用的和可預測的方式。簡單地說,任何 ERC-20 代幣都能當即兼容以太坊錢包, 因爲交易所已經知道這些代幣是如何操做的,它們能夠很容易地整合這些代幣。這就意味着,在不少狀況下,這些代幣都是能夠當即進行交易的。
是一個區塊的父區塊與當前區塊父區塊的父區塊是相同的。
因爲以太坊區塊生產時間(大概15秒左右)比比特幣(大概10分鐘左右)要快不少。更短的區塊生產時間的一個缺點就是:更多的競爭區塊會被礦工發現。
這些競爭區塊一樣也被稱爲「孤區塊」(也就是被挖出來可是不會被添加到主鏈上的區塊)
Ommers的目的就是爲了幫助獎勵礦工歸入這些孤區塊,Ommer區塊會收到比全區塊少一點的獎勵。
經過向智能合約提供數據,它現實世界和區塊鏈之間的橋樑
公有鏈是目前咱們熟知的比特幣,以太坊,瑞波幣這些,每一個人均可以參與,每一個人均可以在上面進行交易,若是支持智能合約,每一個人也均可以發佈本身的應用。
聯盟鏈是指一些願意彼此實現共信的機構和組織共同組建的,爲各自機構提供共識信用和價值傳遞的平臺,這樣只要聯盟不存在一家獨大的狀況,仍是能夠實現共識基礎,並且相對來講可能價值更大一些,我其實以爲聯盟鏈是有一些市場機會的。
用戶本身搭建的私有鏈, 私有鏈缺少共識,也須要公權機構背書,與傳統中心化相比價值有限,只能說防黑客篡改可能略微有點意義。
Ropsten
Kovan測試網絡 - 僅parity錢包支持,使用PoA共識
Rinkeby測試網絡 - 僅parity錢包支持,使用PoA共識
這是一個組織(就像,一羣人),其中,使用代碼來保證最終的強制執行,而不是使用傳統的法律文件。這羣人使用智能合約來作常見組織作的全部的事情,好比在某件事上進行投票,好比決定是否對什麼進行投資等等。
反作用是決策,管理,以及對什麼進行投資的結果將會不可改變的存儲在區塊鏈上。
智能合約存儲數據的位置
solidity編程中變量是值傳遞仍是引用傳遞
共識算法是計算中的過程,其在區塊鏈過程當中達成單數據值的協議。這些算法旨在提供涉及衆多不可靠節點的網絡可靠性,以防止雙重花費。
有不一樣類型的算法,如PoW,PoS,DPoS,PoA
一個節點本質上是一臺有以太坊客戶端鏈接到網絡的計算機。
etherscan.io
合同的ABI和字節碼。
ABI是DApps用於調用合同的合同的公共接口的描述。ABI是合約的公開接口描述對象,被DApps用於調用合約的接口。
EVM須要字節碼才能執行合同代碼。
web3.js web3j mist metamask
不受限制。可使用任何技術來開發DApp的前端,好比HTML,CSS,JS,Java,Python...
Web3.js庫。
合約的ABI和字節碼。
節點上的EVM只能執行合約的字節碼。
由於Metamask會注入一個web3對象,它覆蓋其餘的web3設置。
主要是由於1.x的異步調用使用Promise而不是回調,能夠經過async和await的方式調用. Promise目前在javascript世界中 是處理異步調用的首選方案。
web3.eth.getAccounts
.send發送交易並支付費用,而.call查詢合約狀態。
不對,這樣發送的是1 wei。 交易中老是以wei爲單位。
可使用web3.utils.toWei(1,'ether')。
必須指定from字段,即發送帳戶地址。 其餘一切都是可選的。
不對,也能夠用它調用合約方法。
分片,分區。
它是靜態類型語言,這意味着類型在編譯時是已知的。
contract
合約實例是區塊鏈上已部署的合約。
都是面向對象, 語法有些相同之處, Solidity支持多重繼承,可是要慎用
Solidity編譯器的版本,好比指定爲^ 0.4.8。 這是必要的,由於這樣能夠防止在使用其餘版本的編譯器時引入不兼容性錯誤。
主要由存儲變量、函數和事件組成。
有構造函數、payable函數、修改合約狀態的函數和只讀的view函數。
將多個合約定義放入單個Solidity文件是徹底正確的。跟java內部類相似
一個合約能夠調用另外一個合約,也能夠繼承其餘合約。
contract Animal { function eat() { } } contract dog is Animal { }
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