以太坊開(kāi)發(fā)(一)Truffle入門到實(shí)戰(zhàn)

什么是Truffle

Truffle是一個(gè)世界級(jí)的開(kāi)發(fā)環(huán)境悠反,測(cè)試框架,以太坊的資源管理通道注盈,致力于讓以太坊上的開(kāi)發(fā)變得簡(jiǎn)單晃危,Truffle提供:

  • 內(nèi)置的智能合約編譯,鏈接老客,部署和二進(jìn)制文件的管理僚饭。
  • 針對(duì)快速迭代開(kāi)發(fā)的自動(dòng)化合約測(cè)試。
  • 可腳本化胧砰,可擴(kuò)展的部署與遷移框架鳍鸵。
  • 用于部署到任意數(shù)量的公網(wǎng)或私網(wǎng)的網(wǎng)絡(luò)環(huán)境管理。
  • 使用EthPM&NPM提供的包管理尉间,使用ERC190標(biāo)準(zhǔn)偿乖。
  • 與合約直接通信的交互控制臺(tái)。
  • 可配的構(gòu)建流程哲嘲,支持緊密集成贪薪。
  • 在Truffle環(huán)境里支持執(zhí)行外部的腳本。

本篇文章將介紹怎樣使用Truffle進(jìn)行智能合約的編譯眠副、部署和測(cè)試画切。

第一步,安裝Truffle

$ sudo npm install -g truffle

安裝完成后執(zhí)行下面的命令囱怕,確保Truffle被正確安裝

zhujiantao@ubuntu:~$ truffle
Truffle v4.1.14 - a development framework for Ethereum

Usage: truffle <command> [options]

Commands:
  init      Initialize new and empty Ethereum project
  compile   Compile contract source files
  migrate   Run migrations to deploy contracts
  deploy    (alias for migrate)
  build     Execute build pipeline (if configuration present)
  test      Run JavaScript and Solidity tests
  debug     Interactively debug any transaction on the blockchain (experimental)
  opcode    Print the compiled opcodes for a given contract
  console   Run a console with contract abstractions and commands available
  develop   Open a console with a local development blockchain
  create    Helper to create new contracts, migrations and tests
  install   Install a package from the Ethereum Package Registry
  publish   Publish a package to the Ethereum Package Registry
  networks  Show addresses for deployed contracts on each network
  watch     Watch filesystem for changes and rebuild the project automatically
  serve     Serve the build directory on localhost and watch for changes
  exec      Execute a JS module within this Truffle environment
  unbox     Download a Truffle Box, a pre-built Truffle project
  version   Show version number and exit

See more at http://truffleframework.com/docs

第二步霍弹,創(chuàng)建并初始化項(xiàng)目

創(chuàng)建工程目錄并執(zhí)行初始化命令

zhujiantao@ubuntu:~$ mkdir dapp
zhujiantao@ubuntu:~$ cd dapp/
zhujiantao@ubuntu:~/dapp$ truffle init
Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!

Commands:

  Compile:        truffle compile
  Migrate:        truffle migrate
  Test contracts: truffle test
zhujiantao@ubuntu:~/dapp$ tree
.
├── contracts
│   └── Migrations.sol
├── migrations
│   └── 1_initial_migration.js
├── test
├── truffle-config.js
└── truffle.js

3 directories, 4 files

執(zhí)行初始化命令后可以看到目錄下生成了一些目錄及文件毫别,其中:contracts目錄下存放合約文件,migrations下存放遷移部署腳本庞萍,test目錄下存放測(cè)試文件拧烦,truffle.js和truffle-config.js為Truffle配置文件

接下來(lái)介紹一下 Truffle Boxes忘闻,Truffle Boxes裝有很多一些實(shí)用的項(xiàng)目模板钝计,能讓你忽略一些環(huán)境配置問(wèn)題,從而使你能更專注于你的dapp特性開(kāi)發(fā)齐佳。此外私恬,Truffle Boxes還包含其他有用的組件, Solidity 合約和庫(kù), 前后端視圖等等。更多可查看官網(wǎng)

那就下載個(gè)模板看看炼吴,MetaCoin是一個(gè)簡(jiǎn)單的代幣應(yīng)用本鸣,以此為例

zhujiantao@ubuntu:~/dapp$ truffle unbox metacoin
Downloading...
Error: Something already exists at the destination. `truffle init` and `truffle unbox` must be executed in an empty folder. Stopping to prevent overwriting data.
   at /usr/local/lib/node_modules/truffle/build/webpack:/packages/truffle-box/lib/utils/unbox.js:22:1
   at <anonymous>
   at process._tickCallback (internal/process/next_tick.js:188:7)
   at Function.Module.runMain (module.js:695:11)
   at startup (bootstrap_node.js:188:16)
   at bootstrap_node.js:609:3

可以看到truffle init和truffle unbox都需要在空文件夾中執(zhí)行,以防止數(shù)據(jù)重寫硅蹦,沒(méi)關(guān)系荣德,重新建一個(gè)工程目錄好了。

zhujiantao@ubuntu:~$ mkdir MetaCoin
zhujiantao@ubuntu:~$ cd MetaCoin/
zhujiantao@ubuntu:~/MetaCoin$ truffle unbox metacoin
Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!

Commands:

 Compile contracts: truffle compile
 Migrate contracts: truffle migrate
 Test contracts:    truffle test
zhujiantao@ubuntu:~/MetaCoin$ tree
.
├── contracts
│   ├── ConvertLib.sol
│   ├── MetaCoin.sol
│   └── Migrations.sol
├── migrations
│   ├── 1_initial_migration.js
│   └── 2_deploy_contracts.js
├── test
│   ├── metacoin.js
│   └── TestMetacoin.sol
├── truffle-config.js
└── truffle.js

3 directories, 9 files

相比執(zhí)行init童芹,多了關(guān)于metacoin的合約和庫(kù)文件涮瞻,合約部署文件和測(cè)試文件,關(guān)于這些文件的詳細(xì)內(nèi)容將在下篇文章中一一拆解

第三步假褪,啟動(dòng)以太坊客戶端

我們需要安裝Ethereum客戶端來(lái)支持JSON RPC API的調(diào)用署咽。

有許多的以太坊客戶端可以選擇。我們推薦在本地開(kāi)發(fā)和主網(wǎng)部署時(shí)使用不同客戶端生音。

本地開(kāi)發(fā)可以使用Canache宁否、Ethereumjs-testrpc、或者truffle自帶的Truffle Develop缀遍。

主網(wǎng)部署時(shí)使用Geth慕匠。

這里以Ethereumjs-testrpc為例,事實(shí)上域醇,合約在部署到主網(wǎng)之前絮重,都應(yīng)先使用TestRPC進(jìn)行充分測(cè)試。

安裝

$ sudo npm install -g ethereumjs-testrpc

運(yùn)行

zhujiantao@ubuntu:~$ testrpc
EthereumJS TestRPC v6.0.3 (ganache-core: 2.0.2)

Available Accounts
==================
(0) 0x14b1cf637d214963cd31c923711930aa7b97fd5b
(1) 0x8703ffa009e31e0eebf3aa2dacb32486e06077c0
(2) 0x2237e37056828dfb27e94a3274132a59ae5b4413
(3) 0x1744da91d3eca87fbcf2711740b12e62739965ec
(4) 0x3c35f08665a047f90ddce14d0f82b703a240a56f
(5) 0x2d4fa09b9f71d7b66a9c36d15eeda7311f49b837
(6) 0xc75df94d9a941cbab2a1297bd5770f0c036e4f89
(7) 0x7aaa5ff5f64970268183e06f56110a30571f753f
(8) 0x7c3b0b8193fff996b01bc77154fb91f3b361a646
(9) 0x2a5c667ba684bf0b7db61d7dec17751a6f6e03f8

Private Keys
==================
(0) 237fda9ce07f11cff672e58f633b514575613e96cb2653ea9d08ca69e882f042
(1) 50ea263a896e3b4ec3337ede58131e71dfdd71e7afa879b0957f3a3443b14b85
(2) dd251d5192bb0a73c1a9896f394099d646f6c8e2e96b88e7288f4e83d70a7392
(3) 3409d7a67896bbf2e6a8c9e414bb75284cf87fc66b9bb0e222cb8648a494709e
(4) e1229c76e7c1e5aad682c8b27da5d1a67171c7b3ad560fdb52cb1ae3855cc31d
(5) b627f6f491e8ed270733cd2483287cfa092d0b56b15de0f838ffc06257416c5b
(6) b25209ef82d3a44205d72b418b86476ac710afa1dcc582525954bc31db6c6832
(7) 20b540aa45c394306d38c1d37458d9c46d404311f822fc149fcd523c2e34d84d
(8) 838e1a99cca13ced482d9af2dbba6911a4ee3b676baa395a1462fd29fec070a5
(9) f586c3fe792d63b7459e399454d1798c21eb191db861aff67d9ec771cc22f83a

HD Wallet
==================
Mnemonic:      virus bamboo couch ankle afraid glide family attend empty bulb stadium cricket
Base HD Path:  m/44'/60'/0'/0/{account_index}

Listening on localhost:8545

第四步歹苦,編譯部署合約

編輯配置文件truffle.js青伤,保證配置文件中指定網(wǎng)絡(luò)和你運(yùn)行的網(wǎng)絡(luò)一致。

這里要注意的是:Ganache默認(rèn)運(yùn)行在7545端口殴瘦,Ethereumjs-testrpc 默認(rèn)運(yùn)行在8545端口狠角,Truffle Develop 默認(rèn)運(yùn)行在9545端口

module.exports = {
    networks: {
        development: {
            host: 'localhost',
            port: '8545',
            network_id: '*' // Match any network id
        }
    }
};

使用truffle compile命令編譯,生成build文件夾

zhujiantao@ubuntu:~/MetaCoin$ truffle compile
Compiling ./contracts/ConvertLib.sol...
Compiling ./contracts/MetaCoin.sol...
Compiling ./contracts/Migrations.sol...
Writing artifacts to ./build/contracts

zhujiantao@ubuntu:~/MetaCoin$ tree
.
├── build
│   └── contracts
│       ├── ConvertLib.json
│       ├── MetaCoin.json
│       └── Migrations.json
├── contracts
│   ├── ConvertLib.sol
│   ├── MetaCoin.sol
│   └── Migrations.sol
├── migrations
│   ├── 1_initial_migration.js
│   └── 2_deploy_contracts.js
├── test
│   ├── metacoin.js
│   └── TestMetacoin.sol
├── truffle-config.js
└── truffle.js

5 directories, 12 files

部署合約

zhujiantao@ubuntu:~/MetaCoin$ truffle migrate
Using network 'development'.

Running migration: 1_initial_migration.js
  Deploying Migrations...
  ... 0xf8e61ddf4663ae812678e0a62324911866b3b38c48d933c50c554a17f56da4f0
  Migrations: 0xb8d96e14501462f922b05d08bd1e461f59e71b77
Saving successful migration to network...
  ... 0xe6806b8ded1054326b5b795828c5306f186e584794732cba9f1fb50bd8e1dad8
Saving artifacts...
Running migration: 2_deploy_contracts.js
  Deploying ConvertLib...
  ... 0xddac202a2dc8dbe32b96867080e64ce6931dd05e3e2a9b1b29ef7b7970615a3b
  ConvertLib: 0xef4d768c8cb7dec157d40e06af71598176b15c5b
  Linking ConvertLib to MetaCoin
  Deploying MetaCoin...
  ... 0x4c2d8dcc99ffb631208a5568140e194515b03f38b9019d9c833770cfb3c262b6
  MetaCoin: 0xbc2104e9f774ea0a1d5f708401ff71ba451670b3
Saving successful migration to network...
  ... 0xabacbc322a9af2d359a49cdbc0e5a4ab55914956f95b4bc177b1789621bea3c9
Saving artifacts...

第五步蚪腋,測(cè)試合約

zhujiantao@ubuntu:~/MetaCoin$ truffle test
Using network 'development'.

Compiling ./contracts/ConvertLib.sol...
Compiling ./contracts/MetaCoin.sol...
Compiling ./test/TestMetacoin.sol...
Compiling truffle/Assert.sol...
Compiling truffle/DeployedAddresses.sol...


  TestMetacoin
    ? testInitialBalanceUsingDeployedContract (88ms)
    ? testInitialBalanceWithNewMetaCoin (94ms)

  Contract: MetaCoin
    ? should put 10000 MetaCoin in the first account
    ? should call a function that depends on a linked library (50ms)
    ? should send coin correctly (128ms)


  5 passing (1s)

可以看到測(cè)試結(jié)果和用時(shí)等相關(guān)信息丰歌。

那么今天就先到這里啦姨蟋,接下來(lái),分析metacoin和webpack代碼立帖,學(xué)習(xí)怎樣編寫合約眼溶、遷移腳本和測(cè)試腳本,七夕快樂(lè)晓勇,嗒嗒嗒堂飞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市绑咱,隨后出現(xiàn)的幾起案子绰筛,更是在濱河造成了極大的恐慌,老刑警劉巖描融,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铝噩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡窿克,警方通過(guò)查閱死者的電腦和手機(jī)骏庸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)年叮,“玉大人具被,你說(shuō)我怎么就攤上這事∧庇遥” “怎么了硬猫?”我有些...
    開(kāi)封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)改执。 經(jīng)常有香客問(wèn)我啸蜜,道長(zhǎng),這世上最難降的妖魔是什么辈挂? 我笑而不...
    開(kāi)封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任衬横,我火速辦了婚禮,結(jié)果婚禮上终蒂,老公的妹妹穿的比我還像新娘蜂林。我一直安慰自己,他們只是感情好拇泣,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布噪叙。 她就那樣靜靜地躺著,像睡著了一般霉翔。 火紅的嫁衣襯著肌膚如雪睁蕾。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音子眶,去河邊找鬼瀑凝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛臭杰,可吹牛的內(nèi)容都是我干的粤咪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼渴杆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼寥枝!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起将塑,我...
    開(kāi)封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤脉顿,失蹤者是張志新(化名)和其女友劉穎蝌麸,沒(méi)想到半個(gè)月后点寥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡来吩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年敢辩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弟疆。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡戚长,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怠苔,到底是詐尸還是另有隱情同廉,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布柑司,位于F島的核電站迫肖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏攒驰。R本人自食惡果不足惜蟆湖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玻粪。 院中可真熱鬧隅津,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至充蓝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蹲缠,已是汗流浹背棺克。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工悠垛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人娜谊。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓确买,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親纱皆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子湾趾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容