1. 程式人生 > >09以太坊開發工具、框架和庫

09以太坊開發工具、框架和庫

框架

框架可使以太坊智慧合約開發變得輕鬆。自己做所有事情,你可以更好地理解所有事物如何結合在一起,但這是一項繁瑣而重複的工作。下面列出的框架可以自動執行某些任務並使開發變得輕而易舉。

Truffle

安裝 Truffle 框架

Truffle 框架由多個 NodeJS+包組成。在我們安裝+Truffle+之前,我們需要安裝+NodeJS+和Node Package Manager(+npm)的最新版。

推薦的安裝 NodeJS 和 npm 的方法是使用node版本管理器(NVM)nvm。一旦我們安裝了+nvm+,它將為我們處理所有依賴和更新。我們將按照以下網址中的說明進行操作:

一旦在你的作業系統上安裝了+nvm+,安裝+NodeJS+就很簡單了。我們使用+--lts+標誌告訴nvm我們想要最新的“長期支援(LTS)”版本+NodeJS+

$ nvm install --lts

確認你已安裝 node 和 npm:

$ node -v
v8.9.4
$ npm -v
5.6.0

建立一個包含DApp支援的Node.js版本的隱藏檔案.nvmrc,這樣開發人員只需要在專案目錄的根目錄下執行`nvm install`,它就會自動安裝並切換到使用該版本。

$ node -v > .nvmrc
$ nvm install

看起來不錯。現在安裝Truffle:

$ npm -g install Truffle

+ [email protected]
installed 1 package in 37.508s

整合預編譯的 Truffle 專案 (Truffle Box)

如果我們想要使用或建立一個建立在預先構建的樣板上的DApp,那麼在Truffle Boxes連結中,我們可以選擇一個現有的Truffle專案,然後執行以下命令來下載並提取它:

$ Truffle unbox <BOX_NAME>

建立 Truffle 專案目錄

對於我們將使用Truffle的每個專案,我們建立一個專案目錄並在該目錄中初始化Truffle。Truffle將在我們的專案目錄中建立必要的目錄結構。通常,我們為專案目錄指定一個描述我們專案的名稱。對於這個例子,我們將使用Truffle從 

[simple_contract_example] 部署我們的Faucet合約,因此我們將命名專案資料夾+Faucet+。

$ mkdir Faucet
$ cd Faucet
Faucet $

一旦進入 Faucet 目錄,我們初始化 Truffle:

Faucet $ Truffle init

Truffle建立了一個目錄結構和一些預設檔案:

Faucet
├── contracts
│   └── Migrations.sol
├── migrations
│   └── 1_initial_migration.js
├── test
├── Truffle-config.js
└── Truffle.js

除了Truffle本身之外,我們還將使用一些JavaScript(nodeJS)支援包。我們可以用npm安裝這些。我們初始化npm目錄結構並接受npm建議的預設值:

$ npm init

package name: (faucet)
version: (1.0.0)
description:
entry point: (Truffle-config.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to Faucet/package.json:

{
  "name": "faucet",
  "version": "1.0.0",
  "description": "",
  "main": "Truffle-config.js",
  "directories": {
    "test": "test"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this ok? (yes)

現在,我們可以安裝我們用來使Truffle變得更容易的依賴關係:

$ npm install dotenv Truffle-wallet-provider ethereumjs-wallet

你現在有一個帶有數千個檔案的+node_modules+目錄。

在將DApp部署到雲生產或持續整合環境之前,指定 engines 欄位非常重要,以便你的Dapp使用正確的Node.js版本進行構建,並且會安裝相關的依賴關係。

配置 Truffle

Truffle 建立一些空的配置檔案,Truffle.js+和+Truffle-config.js。在Windows系統上,當你嘗試執行命令+Truffle+,Windows嘗試執行+Truffle.js+時,+ Truffle.js+名稱可能會導致衝突。為了避免這種情況,我們將刪除+Truffle.js+並使用+Truffle-config.js+來支援Windows使用者,他們的確已經受夠了。

$ rm Truffle.js

現在我們編輯 Truffle-config.js 並用下面的內容替換:

Truffle-config.js - a Truffle configuration to get us started

module.exports = {
	networks: {
		localnode: { // Whatever network our local node connects to
			network_id: "*", // Match any network id
			host: "localhost",
			port: 8545,
		}
	}
};

以上配置是一個很好的起點。它設定了一個預設的以太坊網路(名為+localnode+),該網路假定你正在執行以太坊客戶端(如Parity),既可以作為完整節點,也可以作為輕客戶端。該配置將指示Truffle與埠8545上的本地節點通過RPC進行通訊。Truffle將使用本地節點連線的任何乙太網(如Ethereum主網路)或測試網路(如Ropsten)。本地節點也將提供錢包功能。

在下面的章節中,我們將配置其他網路供Truffle使用,比如+ganache+ test-RPC區塊鏈和託管網路提供商Infura。隨著我們新增更多網路,配置檔案將變得更加複雜,但它也將為我們的測試和開發工作流程提供更多選擇。

使用Truffle部署合約

我們現在有一個針對我們的 Faucet 專案的基本工作目錄,並且我們已經配置了Truffle和它的依賴關係。合約在我們專案的+contracts 子目錄中。該目錄已經包含一個“helper”合約,+Migrations.sol+管理合約升級。我們將在後面的章節中研究 +Migrations.sol 的使用。

讓我們將 Faucet.sol 合約([solidity_faucet_example])複製到+contracts+子目錄中,以便專案目錄如下所示:

Faucet
├── contracts
│   ├── Faucet.sol
│   └── Migrations.sol
...

我們現在可以讓Truffle編譯我們的合約:

$ Truffle compile
Compiling ./contracts/Faucet.sol...
Compiling ./contracts/Migrations.sol...
Writing artifacts to ./build/contracts

Truffle migrations - 理解部署指令碼

Truffle提供了一個名為_migration_的部署系統。如果你曾在其他框架中工作過,你可能會看到類似的東西:Ruby on Rails,Python Django和許多其他語言和框架都有+migrate+命令。

在所有這些框架中,migration的目的是處理不同版本軟體之間資料模式的變化。以太坊migration的目的略有不同。因為以太坊合約是不可變的,而且要消耗gas部署,所以Truffle提供了一個migration機制來跟蹤哪些合約(以及哪些版本)已經部署。在一個擁有數十個合約和複雜依賴關係的複雜專案中,你不希望為了重新部署尚未更改的合約而支付gas。你也不想手動跟蹤哪些合約的哪些版本已經部署了。Trufflemigration機制通過部署智慧合約+Migrations.sol+完成所有這些工作,然後跟蹤所有其他合約部署。

我們只有一份合約,Faucet.sol,這至少意味著migration系統是大材小用的。不幸的是,我們必須使用它。但是,通過學習如何將它用於一個合約,我們可以開始練習一些良好的開發工作習慣。隨著事情變得更加複雜,這項努力將會得到回報。

Truffle的+migrations+目錄是找到遷移指令碼的地方。現在,只有一個指令碼 1_initial_migration.js,它會部署 Migrations.sol 合約本身:

[[1_initial_migration]] .1_initial_migration.js - the migration script for Migrations.sol

include::code/truffle/Faucet/migrations/1_initial_migration.js

var Migrations = artifacts.require("./Migrations.sol");

module.exports = function(deployer) {
  deployer.deploy(Migrations);
};

我們需要第二個migration指令碼來部署 Faucet.sol。我們稱之為+2_deploy_contracts.js+。它非常簡單,就像+1_initial_migration.js+一樣,只需稍作修改即可。實際上,你可以複製+ 1_initial_migration.js+的內容,並簡單地將+Migrations+的所有例項替換為+Faucet+:

[[2_deploy_contracts]] .2_deploy_contracts.js - the migration script for Faucet.sol

include::code/truffle/Faucet/migrations/2_deploy_contracts.js

var Faucet = artifacts.require("./Faucet.sol");

module.exports = function(deployer) {
  deployer.deploy(Faucet);
};

指令碼初始化變數+Faucet+,將+Faucet.sol+ Solidity原始碼標識為定義+Faucet+的工件。然後,它呼叫部署功能來部署此合約。

我們都準備好了。我們使用 truffle migrate 來部署合約。我們必須使用+--network+引數指定在哪個網路上部署合約。我們只在配置檔案中指定了一個網路,我們將其命名為+localnode+。確保你的本地以太坊客戶端正在執行,然後輸入:

Faucet $ Truffle migrate --network localnode

因為我們使用本地節點連線到以太坊網路並管理我們的錢包,所以我們必須授權Truffle建立的交易。我正在執行+parity+連線到Ropsten測試區塊鏈,所以在Trufflemigration期間,我會在parity的Web控制檯上看到一個彈出視窗:

Parity asking for confirmation to deploy Faucet

Figure 1. Parity asking for confirmation to deploy Faucet

你將看到四筆交易,總計。一個部署+Migrations+,一個用於將部署計數器更新為+1+,一個用於部署+Faucet+,另一個用於將部署計數器更新為+2+。

Truffle將顯示migration完成情況,顯示每個交易並顯示合約地址:

$ Truffle migrate --network localnode
Using network 'localnode'.

Running migration: 1_initial_migration.js
  Deploying Migrations...
  ... 0xfa090db179d023d2abae543b4a21a1479e70ca7d35a469a5d1a98bfc6bd80fe8
  Migrations: 0x8861c27715550bed8362c0345add158489df6db0
Saving successful migration to network...
  ... 0x985c4a32716826ddbe4eae284104bef8bc69e959899f62246a1b27c9dfcd6c03
Saving artifacts...
Running migration: 2_deploy_contracts.js
  Deploying Faucet...
  ... 0xecdbeef77f0558edc689440e34b7bba0a3ba7a45e4b680b071b47c30a930e9d6
  Faucet: 0xd01cd8e7bd29e4bff8c1693f59eee46137a9f300
Saving successful migration to network...
  ... 0x11f376bd7307edddfd40dc4a14c3f7cb84b6c921ac2465602060b67d08f9fd8a
Saving artifacts...

使用Truffle控制檯

Truffle提供了一個JavaScript控制檯,我們可以使用這個控制檯與Ethereum網路(通過本地節點)進行互動,與已部署的合約進行互動,並與錢包提供商進行互動。在我們當前的配置(localnode)中,節點和錢包提供商是我們的本地parity客戶端。

讓我們開始Truffle控制檯並嘗試一些命令:

$ Truffle console --network localnode
Truffle(localnode)>

Truffle提示一個提示符,顯示所選的網路配置(localnode)。記住並瞭解我們正在使用哪個網路很重要。你不希望在Ethereum主網路上意外部署測試合約或進行交易。這可能是一個昂貴的錯誤!

Truffle控制檯提供了自動補全功能,使我們可以輕鬆探索環境。如果我們在部分完成的命令後按+Tab+,Truffle將為我們完成命令。如果有多個命令與我們的輸入相匹配,按+Tab+兩次將顯示所有可能的完成。事實上,如果我們在空提示符下按兩次+Tab+,Truffle將列出所有命令:

Truffle(localnode)>
Array Boolean Date Error EvalError Function Infinity JSON Math NaN Number Object RangeError ReferenceError RegExp String SyntaxError TypeError URIError decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt undefined

ArrayBuffer Buffer DataView Faucet Float32Array Float64Array GLOBAL Int16Array Int32Array Int8Array Intl Map Migrations Promise Proxy Reflect Set StateManager Symbol Uint16Array Uint32Array Uint8Array Uint8ClampedArray WeakMap WeakSet WebAssembly XMLHttpRequest _ assert async_hooks buffer child_process clearImmediate clearInterval clearTimeout cluster console crypto dgram dns domain escape events fs global http http2 https module net os path perf_hooks process punycode querystring readline repl require root setImmediate setInterval setTimeout stream string_decoder tls tty unescape url util v8 vm web3 zlib

__defineGetter__ __defineSetter__ __lookupGetter__ __lookupSetter__ __proto__ constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf

絕大多數錢包和節點相關功能由+web3+物件提供,該物件是 web3.js+庫的一個例項。+web3+物件將RPC介面抽象為我們的parity節點。你還會注意到兩個熟悉名稱的物件:+Migrations 和 Faucet。這些代表我們剛剛部署的合約。我們將使用Truffle控制檯與合約進行互動。首先,讓我們通過 web3 物件檢查我們的錢包:

Truffle(localnode)> web3.eth.accounts
[ '0x9e713963a92c02317a681b9bb3065a8249de124f',
  '0xdb5dc1a13e3a55cf3b4587cd8d1e5fdeb6738145' ]

我們的parity客戶端有兩個錢包,Ropsten有一些測試ether。web3.eth.accounts 屬性包含所有帳戶的列表。我們可以使用 getBalance 函式檢查第一個帳戶的餘額:

Truffle(localnode)> web3.eth.getBalance(web3.eth.accounts[0]).toNumber()
191198572800000000
Truffle(localnode)>

web3.js 是一個大型JavaScript庫,通過提供者(如本地客戶端)為以太坊系統提供全面的介面。我們將在[web3js]中更詳細地研究+web3.js+。現在讓我們嘗試與我們的合約進行互動:

Truffle(localnode)> Faucet.address
'0xd01cd8e7bd29e4bff8c1693f59eee46137a9f300'
Truffle(localnode)> web3.eth.getBalance(Faucet.address).toNumber()
0
Truffle(localnode)>

接下來,我們將使用 sendTransaction 傳送一些測試ether,為 Faucet 提供資金。請注意使用+web3.toWei+為我們轉換ether單位。在沒有出錯的情況下輸入十八個零既困難又危險,因此使用單位轉換器來獲取值總是更好。以下是我們傳送交易的方式:

Truffle(localnode)> web3.eth.sendTransaction({from:web3.eth.accounts[0], to:Faucet.address, value:web3.toWei(0.5, 'ether')});
'0xf134c75b985dc0e0c27c2f0412251e0860eb530a5055e660f21e7483ab336808'

切換到+parity+的Web控制檯,你將看到一個彈出視窗,要求你確認該交易。等一下,一旦交易開始,你將能夠看到我們的+Faucet+合約的餘額:

Truffle(localnode)> web3.eth.getBalance(Faucet.address).toNumber()
500000000000000000

我們呼叫+withdraw+函式,從Faucet中取出一些測試ether:

Truffle(localnode)> Faucet.deployed().then(instance => {instance.withdraw(web3.toWei(0.1, 'ether'))}).then(console.log)

同樣,你需要批准parity Web控制檯中的交易。Faucet+的餘額已經下降,我們的測試錢包已經收到+0.1 ether:

Truffle(localnode)> web3.eth.getBalance(Faucet.address).toNumber()
400000000000000000
Truffle(localnode)> Faucet.deployed().then(instance => {instance.withdraw(web3.toWei(1, 'ether'))})
StatusError: Transaction: 0xe147ae9e3610334ada8d863c9028c12bd0501be2d0cfd05865c18612b92d3f9c exited with an error (status 0).

Embark

$ npm -g install embark

OpenZeppelin

OpenZeppelin 是Solidity語言的一個可重複使用且安全的智慧合約的開放框架。

OpenZeppelin框架是以太坊智慧合約使用最廣泛的解決方案。這是由於社群討論每個提議的解決方案並從這些解決方案的實施和整合中學習,這將變成一個不斷增長的反饋迴圈,改進現有合約並找到將它們結合在一個清晰安全的體系結構中的新可能性。它不斷增加新的可重用合約來解決越來越複雜的挑戰,或在以太坊區塊鏈上探索激動人心的新可能性。如前所述,該框架目前擁有豐富的合約庫,從ERC20和ERC721 token的實現,到眾多的crowdsale模型,到簡單的行為,例如`Ownable`,Pausable`或`LimitBalance。 在某些情況下,此儲存庫中的合約甚至作為_de facto_標準實現。

該框架擁有MIT許可證,並且所有合約都採用模組化方法進行設計,以確保易用性和擴充套件性。這些都是乾淨而基本的構建塊,可以在你的下一個以太坊專案中使用。讓我們設定框架,並使用OpenZeppelin合約構建一個簡單的crowdsale,作為使用它的簡單例子。這個例子還強調了重用安全元件的重要性,而不是自己編寫安全元件,並給出了以太坊平臺及其社群成為可能的想法的一個小樣本。

首先,我們需要將npm中的openzepelin-solidity庫安裝到我們的工作區中。截至撰寫本文時的最新版本是`v1.9.0`,所以我們將使用該版本。

mkdir sample-crowdsale
cd sample-crowdsale
npm install [email protected]
mkdir contracts

對於crowdsale而言,我們需要定義一個token,我們會給予投資者以換取其ether。在撰寫本文時,OpenZeppelin包含了遵循ERC20,ERC721和ERC827標準的多個基本token合約,具有不同的發行,限制,兌現,生命週期等特徵。

讓我們製作一個ERC20 token,這意味著初始供應從0開始,token所有者(在我們的例子中,是crowdsale合約)可以建立新的 token並分配給投資者。為此,使用以下內容建立`contracts/SampleToken.sol`檔案:

include::code/OpenZeppelin/contracts/SampleToken.sol

pragma solidity 0.4.23;

import 'openzeppelin-solidity/contracts/token/ERC20/MintableToken.sol';

contract SampleToken is MintableToken {
  string public name = "SAMPLE TOKEN";
  string public symbol = "SAM";
  uint8 public decimals = 18;
}
include::code/OpenZeppelin/contracts/SampleCrowdsale.sol

pragma solidity 0.4.23;

import './SampleToken.sol';
import 'openzeppelin-solidity/contracts/crowdsale/emission/MintedCrowdsale.sol';
import 'openzeppelin-solidity/contracts/crowdsale/distribution/PostDeliveryCrowdsale.sol';

contract SampleCrowdsale is PostDeliveryCrowdsale, MintedCrowdsale {

  constructor(
    uint256 _openingTime,
    uint256 _closingTime
    uint256 _rate,
    address _wallet,
    MintableToken _token
  )
    public
    Crowdsale(_rate, _wallet, _token)
    PostDeliveryCrowdsale(_openingTime, _closingTime)
  {
  }
}

最後,在我們對我們的解決方案感到滿意並且我們已經徹底測試之後,我們需要部署它。OpenZeppelin與Truffle很好地整合在一起,所以我們可以按照上面的Truffle部分所述編寫一個migration檔案。在 migrations/2_deploy_contracts.js 中寫入以下內容:

include::code/OpenZeppelin/migrations/2_deploy_contracts.js

const SampleCrowdsale = artifacts.require('./SampleCrowdsale.sol');
const SampleToken = artifacts.require('./SampleToken.sol');

module.exports = function(deployer, network, accounts) {
  const openingTime = web3.eth.getBlock('latest').timestamp + 2; // two secs in the future
  const closingTime = openingTime + 86400 * 20; // 20 days
  const rate = new web3.BigNumber(1000);
  const wallet = accounts[1];

  return deployer
    .then(() => {
      return deployer.deploy(SampleToken);
    })
    .then(() => {
      return deployer.deploy(
        SampleCrowdsale,
        openingTime,
        closingTime,
        rate,
        wallet,
        SampleToken.address
      );
    });
};

這只是OpenZeppelin框架中一些合約的簡要概述。還有更多,社群總是提出新的想法,實施新的策略以使它們更安全,更簡單,更清晰,並儘早發現漏洞以防止主要網絡合約中的漏洞。歡迎你加入社群進行學習和貢獻。

zeppelin_os

zeppelin_os 是一款開源的分散式工具和服務平臺,位於EVM之上,安全地開發和管理智慧合約應用程式。

與OpenZeppelin的程式碼每次都需要重新部署每個應用程式不同,zeppelin_os的程式碼處於鏈上。需要特定功能的應用程式(例如ERC20 token)不僅不需要重新設計和重新審計其實施(OpenZeppelin解決了這些問題),而且甚至不需要部署它。使用zeppelin_os,應用程式可直接與 鏈上的token實現進行互動,這與桌面應用程式與其底層作業系統的元件進行互動的方式大致相同。

利用OpenZeppelin的應用程式通過重用庫的組織和同行評審合約避免了“重新發明輪子”。然而,每當應用程式使用ERC20 token實現時,同一個ERC20位元組碼會一次又一次地部署到區塊鏈中。這種位元組碼在網路中無數次重複存在。現在,使用zeppelin_os的應用程式可以避免這種不必要的重複。他們並沒有部署自己的ERC20實施,而是連結到定義了社群接受的最新ERC20實現的合約。這種單一的中央實現僅部署在區塊鏈中,與Solidity的庫非常相似,但卻相當複雜。

與Solidity的庫不同,zeppelin_os提供的實現可以像常規合約一樣對待,即它們具有儲存空間。而且,它們是可升級的。如果在其中一個OS的官方實現中發現了一個漏洞,它可以簡單地與升級的漏洞交換。對於ERC20 token,對其實施的升級會立即波及到所有使用它的應用程式。作業系統不僅為其所有實現提供可升級性,還為使用者自己的合約提供升級能力,甚至為其自己的程式碼庫提供升級能力!開發人員決定應用程式何時以及如何實施升級,甚至決定要遵守哪種實施方案。

zeppelin_os的核心是一個非常聰明的合約,被稱為“代理(proxy)”。代理是一種能夠包裝任何其他合約,暴露其介面而無需手動實現setter和getter的合約,並且可以在不丟失狀態的情況下進行升級。在Solidity術語中,它可以被看作是一個正常的合約,其業務邏輯包含在一個庫中,隨時可以由一個新庫來交換,而不會丟失其狀態。代理連結到其實現的方式是完全自動的,並且封裝給開發人員。實際上,任何合約都可以升級,程式碼幾乎不變。關於zeppelin_os的代理機制的更多資訊可以在Zeppelin的部落格中找到:https://blog.zeppelinos.org/[upgradeability-using-unstructured-storage],

作業系統將其實現封裝在可使用ZepTokens擔保(vouched)的軟體包或“發行版”中。因此,可以針對某個版本押注ZepTokens,將其標識為社群可接受的實現集。任何人都可以提交新的發行版,由社群審查並最終被接受為官方的新版本。作為獎勵,發行版的開發者在它每次被押注時都會收到token。作為一名Dapp開發人員,擔保(vouching)提供了一種可測量的方式來確定給定發行版獲得的支援,以及可信度。

使用Zeppelin_os開發應用程式與使用NPM開發Javascript應用程式類似。AppManager處理應用程式的每個版本的應用程式包。包只是一個合約目錄,每個合約都可以有一個或多個可升級的代理。AppManager不僅為特定於應用程式的合約提供代理,而且還以標準庫的形式為Zeppelin_os實現提供代理。要檢視這方面的完整示例,請訪問:https://github.com/zeppelinos/zos-lib/tree/master/[examples/complex]。

//// TODO: the example provided above is still a WIP - link to a tutorial once it’s finished

雖然目前正在開發中,但zeppelin_os旨在提供一系列附加功能,例如開發人員工具,自動執行合約中後臺操作的排程程式,開發獎勵,促進應用程式之間進行通訊和交換價值的市場等等。所有這些都在zeppelin_os的https://zeppelinos.org/zeppelin_os_[whitepaper].pdf中描述。

實用程式

ethereumJS helpeth: 命令列實用程式

helpeth是一個命令列工具,使開發人員更容易的操作金鑰和交易。

它是基於JavaScript的庫和工具集合ethereumjs的一部分。

Usage: helpeth [command]

Commands:
  signMessage <message>                     Sign a message
  verifySig <hash> <sig>                    Verify signature
  verifySigParams <hash> <r> <s> <v>        Verify signature parameters
  createTx <nonce> <to> <value> <data>      Sign a transaction
  <gasLimit> <gasPrice>
  assembleTx <nonce> <to> <value> <data>    Assemble a transaction from its
  <gasLimit> <gasPrice> <v> <r> <s>         components
  parseTx <tx>                              Parse raw transaction
  keyGenerate [format] [icapdirect]         Generate new key
  keyConvert                                Convert a key to V3 keystore format
  keyDetails                                Print key details
  bip32Details <path>                       Print key details for a given path
  addressDetails <address>                  Print details about an address
  unitConvert <value> <from> <to>           Convert between Ethereum units

Options:
  -p, --private      Private key as a hex string                        [string]
  --password         Password for the private key                       [string]
  --password-prompt  Prompt for the private key password               [boolean]
  -k, --keyfile      Encoded key file                                   [string]
  --show-private     Show private key details                          [boolean]
  --mnemonic         Mnemonic for HD key derivation                     [string]
  --version          Show version number                               [boolean]
  --help             Show help                                         [boolean]

dapp.tools

安裝:

==== Dapp
https://dapp.tools/dapp/

==== Seth
https://dapp.tools/seth/

==== Hevm
https://dapp.tools/hevm/

==== SputnikVM

SputnikVM是一個獨立的可插拔的用於不同的基於以太坊的區塊鏈的虛擬機器。它是用Rust編寫的,可以用作二進位制,貨物箱,共享庫,或者通過FFI,Protobuf和JSON介面整合。它有一個單獨的用於測試目的的二進位制sputnikvm-dev,它模擬大部分JSON RPC API和區塊挖掘。

Github link; https://github.com/etcdevteam/sputnikvm

== Libraries

=== web3.js

web3.js是以太坊相容的JS API,用於通過以太坊基金會開發的JSON RPC與客戶進行通訊。

Github link; https://github.com/ethereum/web3.js

+npm+ package repository link; https://www.npmjs.com/package/web3

Documentation link for web3.js API 0.2x.x; https://github.com/ethereum/wiki/wiki/JavaScript-API

Documentation link for web3.js API 1.0.0-beta.xx; https://web3js.readthedocs.io/en/1.0/web3.html

=== web3.py

web3.py 是一個用於與以太坊區塊鏈進行互動的Python庫。它現在也在以太坊基金會的GitHub中。

Github link; https://github.com/ethereum/web3.py

PyPi link; https://pypi.python.org/pypi/web3/4.0.0b9

Documentation link; https://web3py.readthedocs.io/

=== EthereumJS

以太坊的庫和實用程式集合。

Github link; https://github.com/ethereumjs

Website link; https://ethereumjs.github.io/

=== web3j

web3j 是Java和Android庫,用於與Ethereum客戶端整合並使用智慧合約。

Github link; https://github.com/web3j/web3j

Website link; https://web3j.io

Documentation link; https://docs.web3j.io

=== Etherjar


Etherjar 是與Ethereum整合並與智慧合約一起工作的另一個Java庫。它專為基於Java 8+的伺服器端專案而設計,提供RPC的低層和高層封裝,以太坊資料結構和智慧合約訪問。

Github link; https://github.com/infinitape/etherjar

=== Nethereum

Nethereum 是以太坊的.Net整合庫。

Github link; https://github.com/Nethereum/Nethereum

Website link; http://nethereum.com/

Documentation link; https://nethereum.readthedocs.io/en/latest/

=== ethers.js

ethers.js 庫是一個緊湊,完整,功能齊全,經過廣泛測試的以太坊庫,完全根據MIT許可證獲得,並且已收到來自以太坊基金會的DevEx資助以擴充套件和維護。

GitHub link: https://github.com/ethers-io/ethers.js

Documentation: https://docs.ethers.io


=== Emerald Platform

Emerald Platform提供了庫和UI元件,可以在以太坊上構建Dapps。Emerald JS和Emerald JS UI提供了一組模組和React元件來構建Javascript應用程式和網站,Emerald SVG Icons是一組區塊鏈相關的圖示。除了Javascript庫之外,它還有Rust庫來操作私鑰和交易簽名。所有Emerald庫和元件都使用 Apache 2許可。

Github link; https://github.com/etcdevteam/emerald-platform

Documentation link; https://docs.etcdevteam.com

<<第十章#,下一章:Tokens>>

image::images/thanks.jpeg["讚賞譯者",height=400,align="center"]

相關推薦

09開發工具框架

框架 框架可使以太坊智慧合約開發變得輕鬆。自己做所有事情,你可以更好地理解所有事物如何結合在一起,但這是一項繁瑣而重複的工作。下面列出的框架可以自動執行某些任務並使開發變得輕而易舉。 Truffle 安裝 Truffle 框架 Truffle 框架

:事件日誌布隆過濾器

 版權宣告:本文系博主原創,未經博主許可,禁止轉載。保留所有權利。 引用網址:https://www.cnblogs.com/zhizaixingzou/p/10122288.html   目錄   1. 事件、日誌和布隆過濾器 本文Java原始碼截圖來

區塊鏈開發開發的技術資料資源匯總

以太坊 以太坊開發 ethereum truffle solidity 以太坊入門 區塊鏈入門 區塊鏈 區塊鏈開發 blockchain 一個適合區塊鏈新手的以太坊DApp開發教程: http://xc.hubwiz.com/course/5a952991adb

開發DApp實戰教程——用區塊鏈星際文件系統(IPFS)Node.jsMongoDB來構建電商平臺

IPFS 區塊鏈電商 區塊鏈開發 以太坊開發 以太坊dapp 以太坊教程 智能合約 以太坊 星際文件系統 區塊鏈 第一節 簡介 歡迎和我們一起來用以太坊開發構建一個去中心化電商DApp!我們將用區塊鏈、星際文件系統(IPFS)、Node.js和Mong

windows 開發框架Truffle環境搭建

truffle框架搭建的教程網上也有好多,但是隨著truffle版本的更新,truffle.js改名truffle-config.js、truffle命令升級、truffle與testrpc埠不一致、瀏覽器錢包外掛等問題,導致原有的教程不再適用。 包括nodejs、truffle、solc、

開發DApp實戰教程——用區塊鏈星際檔案系統(IPFS)Node.jsMongoDB來構建電商平臺

第一節 簡介 歡迎和我們一起來用以太坊實戰開發構建一個去中心化電商DApp!我們將會構建一個類似淘寶的線上電子商務應用,我將使用區塊鏈、星際檔案系統(IPFS)、Node.js和MongoDB來構建電商平臺,賣家可以自由地出售商品,買家可以自由地購物: 去中心化:

區塊鏈(2)開發框架Truffle教程(Windows)

概述 上一篇部落格介紹瞭如何搭建一個私有鏈的以太坊開發環境,並部署一個簡單“hello world”智慧合約到區塊鏈上,詳情請前往區塊鏈開發環境搭建。 本文進一步介紹區塊鏈的一個主流開發框架Truffle 環境搭建 使用 Truffle

是什麽 - 開發入門指南

以太坊 以太坊 入門 很多同學已經躍躍欲試投入到區塊鏈開發隊伍當中來,可是又感覺無從下手,本文將基於以太坊平臺,以通俗的方式介紹以太坊開發中涉及的各晦澀的概念,輕松帶大家入門。寫在前面閱讀本文前,你應該大概了解區塊鏈是什麽,如果你還不了解,歡迎訂閱專欄:區塊鏈技術指引你從頭開始學區塊鏈技術。以太坊

開發環境搭建

適合 extra limit class ref acc difficult 發現 就是 Geth安裝 全稱 Go Ethereum, 官網地址:https://github.com/ethereum/go-ethereum/wiki/geth 安裝指令: brew tap

開發入門

智能合約 合約 以太坊 以太坊開發 ethereum truffle solidity 區塊鏈 區塊鏈開發 blockchain 以太坊開發入門 目標讀者: 專業的程序員;

EthBox開發套件,一鍵安裝開發環境

百度雲 技術 aid 驗證 cli nac 下載到本地 ejs 11.2 EthBox是匯智網為了方便以太坊開發學習者快速安裝本地開發環境而 制作的開發套件,可以一鍵安裝以下必備開發工具: nodejs:8.11.2 git:2.17.1.2 geth:1.8.10 ga

python開發dapp的實戰教程

智能合約 合約 EOS 區塊鏈 Dapp blockchain 以太坊作為最流行區塊鏈平臺,最大的特點是運行各種智能合約。我們已經出過node.js、java、php的以太坊開發實戰教程,這一次是python。Python官方提供了一系列的Python包用於支持在Pyth

開發實戰:私有鏈搭建操作指南

雖然以太坊是一個公有鏈系統,但是我們可以通過設定一些引數來執行自己的私有鏈節點,在自己的私有鏈上進行開發和測試不需要同步公有鏈資料,也不需要花錢來買以太幣,節省儲存空間和成本,而且很靈活很方便。本文介紹使用geth客戶端搭建私有鏈的操作步驟,同時會解釋在這個過程中用到的各個命令及選項的含

分享實錄|開發需知

1 以太坊開發與傳統應用開發的差異 相比起傳統應用而言,以太坊開發引入了新的基礎設施,由此必不可少的帶來了部署和運維的複雜度,比如作為系統設計者,我們需要做出選擇: 自建節點,還是信任第三方節點? 公有鏈、聯盟鏈、私有鏈? 由於加入了新的設計

這30個開發示例,讓你成為80萬都挖不走的區塊鏈人才!

2018年已過了大半,幣圈跌跌蕩蕩,而鏈圈的人在等待鳳凰涅槃,熊市專心做技術,牛市才能一展身手、衝破雲霄! 本文主要告訴你,如何成為一名優秀的以太坊開發者! 如果你是以太坊開發者中的“老司機”,請直接看最後一部分:30個為你量身定做的挑戰示例! 如果你是以太坊

開發教程(二) 利用truffle發布寵物商店 DAPP 到 測試環境Ropsten

ini 寵物 func on() append localhost -c success compile 1.環境安裝 1) node安裝 設置鏡像地址: curl --silent --location https://rpm.nodesource.com/s

開發生態

區塊鏈中級.以太坊開發 From:JamesZou & 傳智播客研究院 & 傳智播客區塊鏈 以太坊開發生態 課程介紹 1.五個模組 什麼是以太坊:以太坊介紹、常見概念、測試 … 如何與以太坊節點網路:錢包、瀏覽器、web

開發】發幣指南--進階篇

參考:https://www.ethereum.org/token pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value,

開發自己的ERC-20加密貨幣及如何ICO

今天我將向你展示如何在以太坊區塊鏈上開發你自己的加密貨幣並將其出售!我將向你展示如何使用以太坊智慧合約逐步建立自己的ERC-20代幣和眾籌銷售,如何測試智慧合約,如何將智慧合約部署到以太坊區塊鏈,以及如何構建ICO網站部署到網路上。我還將解釋ERC-20代幣是什麼,以太坊代幣如何工作,初始代

20181117--區塊鏈2.0開發

以太坊(Ethereum)是一個建立在區塊鏈技術之上, 去中心化應用平臺。它允許任何人在平臺中建立和使用通過區塊鏈技術執行的去中心化應用。 智慧合約 智慧合約可以理解為在區塊鏈上可以自動執行的(由訊息驅動的)、以程式碼形式編寫的合同(特殊的交易)。 智慧合約非常適合對信任、安全和永續性要求較