EVM-以太坊虛擬機器
是以太坊中智慧合約的執行環境。
以太坊客戶端
也稱錢包,提供賬戶管理、挖礦、轉賬、智慧合約的部署和執行等等功能,以太坊節點利用以太坊客戶端接入到以太坊網路。 現在以太坊客戶端主要有:Wallent/ist , Geth, Parity, Harmony,
Geth
go-ethereum的簡稱,由以太坊基金會提供的官方客戶端軟體,用Go語言編寫,用於建立一個本地的測試網路。geth是真正的以太坊環境。
Solidity語言
一種高階語言,以太坊編寫智慧合約最流行的程式語言。在Remix IDE中編寫,然後編譯成在EVM上可執行的位元組碼。
Remix
以太坊官方推薦的智慧合約開發IDE,適合新手,可以在瀏覽器中快速部署測試智慧合約。
執行Remix IDE環境:
remix.ethereum.org/#optimize=f…
Web3.js
javascript庫,可以用來與一個節點進行互動。
當Solidity合約編譯好並且傳送到網路上之後,你可以使用以太坊的web3.js JavaScript API來呼叫它,構建能與之互動的web應用。
web3.js的介面文件:github.com/ethereum/wi…
web3.js的程式碼庫:github.com/ethereum/we…
JavaScript格式化工具(能正常恢復被壓縮的JS程式碼):tool.oschina.net/codeformat/…
Truffle
Truffle 和 Embark 是用於開發以太坊 DApps的兩個最常用的框架。 它們抽象出在區塊鏈上編譯和部署合同的許多複雜的東西。
Truffle讓你可以迅速進入寫程式碼-編譯-部署-測試-打包DApp這個流程。(Truffle ['trʌfl] 、Embark [ɪm'bɑrk] )
本地的用來編譯、部署智慧合約的工具。
testrpc
testrpc不同於geth,geth是真正的以太坊環境,testrpc是在本地使用記憶體模擬的一個以太坊環境,對於開發除錯來說,更為方便快捷,當你的合約在testrpc中測試通過後,再可以部署到geth中去。
Ganache
Ganache是為以太坊開發準備的個人區塊鏈錢包,你可以用它執行智慧合約,研發應用和執行測試用例。Ganache的前身是testrpc,跟testrpc一樣的功能。
Ganache現在有兩個版本,一個是帶圖形介面的版本,下載地址:
MetaMask
【定義】MetaMask 是一款外掛形式的以太坊輕客戶端,開發過程中使用MetaMask和我們的dapp進行互動是個很好的選擇。
百度雲盤獲取連結:pan.baidu.com/s/1N0oH5Azb… 密碼:77sl
Solc
編譯器,用Solidity寫好智慧合約之後,需要用solc來編譯。它是一個來自C++客戶端實現的元件。
Gas
可理解成汽油, 在以太坊上執行程式以及儲存資料都要消耗一定量的以太幣,Gas是以太幣轉換而成。這個機制用來保證效率。
**油費計算 **
油費 = gasPrice 油價 × gasLimit 用油限制
gasCost = gasPrice * gasLimit(used gas)
注意gasLimit只是一個最大使用值,如果沒有使用完全則會退回賬戶。就像是開車去某個目的地一樣,gasPrice就是油價,油箱大小就是gasLimit,油夠,到達目的地多餘的油會留在油箱裡面,也就是轉賬成功,多餘的油費會返回賬戶。如果少了那就到達不了,意味著轉賬失敗。
貨幣單位(Ether Units):Gwei / wei / Eth之間的關係
gasPrice單位一般用 Gwei表示,三者之間的轉換關係為:
1 eth = 1e9 Gwei = 1e18 wei
【注意】1e9 代表的是10的9次方
智慧合約也是一樣的,當一個發起者部署執行一段智慧合約時,以太坊會收取gas費用,就像汽車行駛需要燒油一樣,直到你的智慧合約執行完畢,“油箱”中剩餘的gas會退還給你,如果你的程式碼死迴圈了,耗盡了你“油箱”中的gas,那麼以太坊會自動報出異常停止你的智慧合約。
一個數字常量(字面量)後面跟隨一個字尾wei, finney,szabo或ether,這個字尾就是貨幣單位。不同的單位可以轉換。不含任何字尾的預設單位是wei。
不同的以太幣單位轉換關係如下:
1 ether == 10^3 finney == 1000 finney
1 ether == 10^6 szabo
1 ether == 10^18 wei
插曲:以太幣單位其實是密碼學家的名字,是以太坊創始人為了紀念他們在數字貨幣的領域的貢獻。他們分別是:
wei: Wei Dai 戴偉 密碼學家 ,發表 B-money
finney: Hal Finney 芬尼 密碼學家、工作量證明機制(POW)提出
szabo: Nick Szabo 尼克薩博 密碼學家、智慧合約的提出者
賬戶
以太坊中有兩類賬戶,它們共用同一個地址空間:
外部賬戶,該類賬戶被公鑰-私鑰對控制(人類)。
合約賬戶,該類賬戶被儲存在賬戶中的程式碼控制。
外部賬戶的地址是由公鑰決定的,合約賬戶的地址是在建立改合約時確定的(這個地址由合約建立者的地址和該地址發出過的交易數量計算得到,地址發出過的交易數量也被稱作"nonce")
合約賬戶儲存了程式碼,外部賬戶則沒有,除了這點以外,這兩類賬戶對於EVM來說是一樣的。
每個賬戶有一個key-value形式的持久化儲存。其中key和value的長度都是256bit,名字叫做storage.
另外,每個賬戶都有一個以太幣餘額(單位是“Wei"),該賬戶餘額可以通過向它傳送帶有以太幣的交易來改變。
ERC-20
代幣合約標準,一系列通過以太坊智慧合約釋出的代幣制定了代幣發放的通用規則。該標準是目前通過ICO發行代幣的基礎準則。
該標準能夠確保基於以太坊的代幣在整個生態系統中以一種可預測的方式進行,使去中心化應用程式和智慧合約可以在整個平臺上彼此協作,所有代幣都遵循一個固定的安全標準。
ERC721
ERC721 是由Dieter Shirley 在2017年9月提出。Dieter Shirley 正是謎戀貓CryptoKitties背後的公司Axiom Zen的技術總監。因此謎戀貓也是第一個實現了ERC721 標準的去中心化應用。ERC721號提議已經被以太坊作為標準接受,但該標準仍處於草稿階段。
ERC721同樣是一個代幣標準,ERC721官方簡要解釋是Non-Fungible Tokens,簡寫為NFTs,多翻譯為非同質代幣。非同質代表獨一無二,謎戀貓為例,每隻貓都被賦予擁有基因,是獨一無二的(一隻貓就是一個NFTs),貓之間是不能置換的。這種獨特性使得某些稀有貓具有收藏價值,也因此受到追捧。
DAPP(分散式應用)
DAPP是Decentralized Application的縮寫,中文叫分散式應用/去中心化應用。通常來說,不同的DAPP會採用不同的底層區塊鏈開發平臺和共識機制,或者自行釋出代幣(也可以使用基於相同區塊鏈平臺的通用代幣)。DAPP於區塊鏈,就好比APP之於IOS和Android。
根據David Johnston對DAPP的定義,一個真正的DAPP應用,需要同時滿足一下幾個條件:
1、應用必須完全開源、自治,且沒有一個實體控制著該應用超51%Token。該應用必須能夠根據使用者的反饋及技術要求進行升級,且應用升級必須由大部分使用者達成共識之後方可進行;
2、應用的資料必須加密後儲存在公開的區塊鏈上;
3、應用必須擁有Token機制(可用基於相同底層區塊鏈平臺的通用代幣或自行發行新幣),礦工或應用維護節點需要得到代幣獎勵;
4、應用代幣的產生必須依據標準的加密演算法,有價值的節點可以根據該演算法獲取應用的代幣獎勵。
IPFS
星際檔案系統IPFS(InterPlanetary File System)是一個面向全球的、點對點的分散式版本檔案系統,目標是為了補充(甚至是取代)目前統治網際網路的超文字傳輸協議(HTTP),將所有具有相同檔案系統的計算裝置連線在一起。原理用基於內容的地址替代基於域名的地址,也就是使用者尋找的不是某個地址而是儲存在某個地方的內容,不需要驗證傳送者的身份,而只需要驗證內容的雜湊,通過這樣可以讓網頁的速度更快、更安全、更健壯、更持久。
IPFS想打造一個點對點的網路拓撲,相當於顛覆HTTP所代表的分佈關係,它具有內容可定址的特點,通過檔案內容生成唯一的雜湊標識,一定程度上節約了空間開銷的成本。
Lite Server
它是一個全功能的網站架設工具軟體包,內建有Web、FTP、Telnet and E-Mail等伺服器,你可以容易地進行設定,方便初學者使用。
lite-server 是輕量級的,僅適用於開發 的 node 伺服器, 它僅支援 web app。
安裝FTP伺服器
參考文章連結:
Markdown 語法整理大集合2017
這個跟以太坊無關,筆者寫文章需要,就臨時存放這兒了。
GITHUB
gitHub是一個面向開源及私有軟體專案的託管平臺,因為只支援git 作為唯一的版本庫格式進行託管,故名gitHub。
gitHub於2008年4月10日正式上線,除了git程式碼倉庫託管及基本的 Web管理介面以外,還提供了訂閱、討論組、文字渲染、線上檔案編輯器、協作圖譜(報表)、程式碼片段分享(Gist)等功能。目前,其註冊使用者已經超過350萬,託管版本數量也是非常之多,其中不乏知名開源專案 Ruby on Rails、jQuery、python 等。
中文幫助文件:
中文教程:
DAG
DAG(Directed Asyclic Graph)意思是有向無環圖,所謂有向無環圖是指任意一條邊有方向,且不存在環路的圖。相比較於比特幣的最長鏈共識, DAG 將最長鏈共識改成最重鏈共識機制, 通過交易權重與節點間建立區域性共識來確認新的交易,將工作量證明巧妙的和每一筆交易繫結一起,不但打破了目前比特幣挖礦集中化的問題,而且大幅度提升了整個分散式網路的吞吐能力,帶來極低的交易成本。
SPV
SPV( Simple Payment Verification , 簡單支付驗證) 是一種無須維護完整的區塊鏈資訊,只需要儲存所有的區塊頭部資訊即可進行支付驗證的技術。
ABI
ABI是Application Binary Interface的縮寫,它是智慧合約的介面說明。
參考文件:me.tryblockchain.org/Solidity-ab…
JSON-RPC遠端呼叫協議
JSON-RPC是一種基於JSON的跨語言遠端呼叫協議。有文字傳輸資料小,便於除錯擴充套件的特點。
參考文件:www.cnblogs.com/cielosun/p/…
演算法
1)比原鏈 - 圖解比原鏈Tensority演算法:如何讓POW做到人工智慧友好
ABI壓縮網站
推薦幾個區塊鏈技術文章博主
1,深入淺出區塊鏈 - 熊麗兵
2,
國內知名區塊鏈公鏈專案網址
1,比原鏈官網地址:bytom.io/
2,幣乎官網地址:www.bihu.com/
3,量子鏈官網地址:www.qtum.org/zh/
4,小蟻鏈官網地址:neo.org/
入門培訓教程
**1, 以太坊DApp開發入門 - 匯智網 **
**2,以太坊電商DApp實戰 - 匯智網 **
打包GOOGLE外掛的方法
獲取google商店的外掛ID,例如https://chrome.google.com/webstore/detail/scatter/ammjpmhgckkpcamddpolhchgomcojkle?hl=zh-CN的外掛ID為ammjpmhgckkpcamddpolhchgomcojkle。
在http://yurl.sinaapp.com/crx.php輸入ID即可完成打包工作。
vmware虛擬機器啟動提示"內部錯誤"
**現象描述:**windows上安裝的虛擬機器多日不用,開啟“VMware Workstation”時提示"內部錯誤”,點選快照也不能恢復。
**解決方法:**關閉VMware Workstation後,右鍵點選圖示“VMware Workstation”,選擇“以管理員身份執行”就恢復了。
如何獲知NPM有哪些安裝包及操作命令?
登入註冊後即可查詢truffle-hdwallet-provider,openzeppelin-solidity都是存在的。
(例如輝哥註冊了賬號:duncanwang)
以太坊開發者資源工具集
常用以太坊互動程式碼庫
Web3.js - 以太坊官方的 Javascript API
Eth.js - 優化過的 Web3.js
Web3.php - PHP 版的 Web3
Web3j - Java 版的 Web3
Web3.py - Python 版的 Web3
錢包
Gnosis multisig wallet - 多重簽名錢包
imToken - 廣為使用的閉源錢包
WallETH - 開源的 Android 以太坊錢包
gas 計算
EthGasStation - 估計交易費用和時間的網站
Petrometer - 計算特定賬戶每天所花費的 gas
CryptoProf - 智慧合約 gas 消耗測量工具
相關服務
ENS - 以太坊域名系統
Name Bazaar - 以太坊域名市場
Quantstamp - 安全審計
SmartCheck - solidity 原始碼靜態分析
MD4 Online Hash Function - hash 演算法線上工具
合約程式碼庫
Zeppelin - 經過測試的可重用合約庫比如 SafeMath、 ZeppelinOS 等
Modular Libraries - 另一個合約庫
測試
Solidity code coverage- solidity 單元測試覆蓋率
Solidity coverage- 另一個 solidity 程式碼覆蓋率工具
Solidity function profiler- 列出合約函式
Espresso- solidity 測試框架
Eth tester- 以太坊應用測試套件
Cliquebait- 簡化驗收測試的工具
Hevm- 專為合約測試的 EVM 實現
Ethereum graph debugger- solidity 除錯圖形化工具
安全
Mythril- 智慧合約靜態安全分析
Oyente- 智慧合約靜態安全分析
Porosity- 智慧合約反編譯與靜態安全分析
Ethersplay- EVM 反彙編
Evmdis- EVM 反彙編
Hydra- 去中心化的合約安全分析框架
Solgraph- 圖形化智慧合約處理流程
Manticore- 合約分析工具
Solidity security blog- 合約安全分析部落格
Awesome Buggy ERC20 Tokens- 問題合約彙集
智慧合約最佳實踐- by ConsenSys
Safety wiki- 以太坊安全