以太坊學(xué)習(xí)筆記(六)——Truffle開發(fā)框架

前一篇文章講了以太坊Dapp開發(fā)的一些內(nèi)容,在嘗試Truffle的時(shí)候總是遇到各種各樣的問題醇滥,通過多次嘗試能夠正常的運(yùn)行一個(gè)demo了黎比,問題主要是出在我的環(huán)境上,另外鸳玩,網(wǎng)上的大部分文章都有些過時(shí)了阅虫,Truffle框架現(xiàn)在都已經(jīng)到V4+了有些內(nèi)容做出了比較大的調(diào)整,智能合約的語法也有了一些變化不跟。

首先颓帝,我糾正一下testrpc的配置

sudo npm install -g ethereumjs-testrpc
//輸出信息
+ ethereumjs-testrpc@6.0.3
added 404 packages in 37.952s

啟動(dòng)testrpc

testrpc
EthereumJS TestRPC v6.0.3 (ganache-core: 2.0.2)

Available Accounts
==================
(0) 0xd4c36cbc13aa269faef90cc33c21a16640b800db
(1) 0xdb2d100405b0377ab2ae1dd5ec0a42321703dca2
(2) 0x5ed80126ca200092418c14bca9c4b0a4a904f09b
(3) 0xaf7725ea608587ee44b40ad64c5bec38488d26c6
(4) 0x150856925c1101a21b4c9d57f2f34756888f99e5
(5) 0x57a70d1e1bd6de833c2e2f27728a36f108959b99
(6) 0x3c9c6fedb1e392b9430bad68b1abc97c80920e9f
(7) 0xbff334262de85a163c93dfe9485d741dda9c9b29
(8) 0x4bce3e355105bbfc228bfd0a2e0a55d3871fb984
(9) 0x598aacba1f1a78a241daab9f0126b6bf39063a40

Private Keys
==================
(0) c48b4eb2d42a085e163f6572958f63682e8f2b06fcafa838b205dca2640bc659
(1) 7fd8408c0b55d9550a310fb17a77ad82e1d55d856b574b7ac34a7a17c4c3847c
(2) 7340d2122c72b8e420acb703842c06bdf2170ac5e2adcd1f7bf4038a369edf1b
(3) b1916c4681d6ee9792f1fee10637aeecb357176ee00a434a18c5e5d3cfd11f83
(4) 7cda59f01f3aab76d2271c2497e6a4dd15a28faa67c143ec7d40ce25dfcdade5
(5) 26dedc489c16dc34292af820f11b430533d5a8fd8b30444cc8f51f5c1cbc511e
(6) 090b31a5d810327007c801601f830287a9d6031e805770d3e0516d232505ce80
(7) d110c83aed65532dc0a02e628bc4ebfa33e11f5b6742fcb865d1a7027298d0de
(8) e1c0874f40b94e165011671de60158770c1dd34679f830c6df2480501ed63d3d
(9) e87d1739ca3f543fc17cfe4c9007c61e5a1f7debfc3b670ca05da71c602c1da4

HD Wallet
==================
Mnemonic:      math organ body menu burger say leave simple sketch decorate throw city
Base HD Path:  m/44'/60'/0'/0/{account_index}

Listening on localhost:8545

備注:testrpc這種方式已經(jīng)不推薦了,官方推薦使用Ganache

Truffle
1.創(chuàng)建項(xiàng)目文件夾

mkdir /你的路徑/truffleTest
cd /你的路徑/truffleTest

2.初始化項(xiàng)目

$ truffle init
Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!

Commands:

  Compile:        truffle compile
  Migrate:        truffle migrate
  Test contracts: truffle test

此時(shí)的項(xiàng)目結(jié)構(gòu)如下:

$ tree
.
├── contracts
│   └── Migrations.sol
├── migrations
│   └── 1_initial_migration.js
├── test
├── truffle-config.js
└── truffle.js

3 directories, 4 files

3.編寫智能合約窝革,初始化的項(xiàng)目/contracts文件夾里只有Migrations.sol這個(gè)合約购城,不要修改里面的內(nèi)容,我們寫兩個(gè)簡(jiǎn)單的合約用來測(cè)試虐译。
第一個(gè)合約Test.sol

pragma solidity ^0.4.0;

contract Test{
    function f() public pure returns (string){
        return "method f()";
    }
    function g() public pure returns (string){
        return "method g()";
    }
}

第二個(gè)合約Greeter.sol

pragma solidity ^0.4.0;

contract Greeter
{
    address creator;
    string greeting;

    constructor() public{
        creator = msg.sender;
    }

    function greet() public constant returns (string){
        return greeting;
    }

    function setGreeting(string _newgreeting) public {
        greeting = _newgreeting;
    }

    function kill() public {
        if (msg.sender == creator)
            selfdestruct(creator);
        // kills this contract and sends remaining funds back to creator
    }

}

備注:因?yàn)闆]有比較復(fù)雜的內(nèi)容瘪板,就沒太關(guān)注solidity語法版本。另外漆诽,上面的合約語法可能在以后也會(huì)有所變化侮攀,可能需要適當(dāng)修改。

4.初始化的項(xiàng)目/migrations/里只有一個(gè)1_initial_migration.js文件拴泌,需要手動(dòng)創(chuàng)建一個(gè)2_deploy_contracts.js

var Greeter = artifacts.require('./Greeter.sol')
var Test = artifacts.require('./Test.sol')

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

注意:移植腳本文件名以數(shù)字開頭魏身,一個(gè)描述性的后綴結(jié)尾。數(shù)字前綴是必須的蚪腐,用于記錄移植是否成功箭昵,后綴僅僅是為了提高可讀性,以方便理解回季。

補(bǔ)充:如果有庫文件需要按照如下的方式連接庫和合約

var ConvertLib = artifacts.require("ConvertLib.sol");
var MetaCoin = artifacts.require("MetaCoin.sol");

module.exports = function(deployer) {
 deployer.deploy(ConvertLib);
 deployer.link(ConvertLib, MetaCoin);
 deployer.deploy(MetaCoin);
};

5.修改配置文件truffle.js文件中聲明了項(xiàng)目的一些配置信息

module.exports = {
    // See <http://truffleframework.com/docs/advanced/configuration>
    // to customize your Truffle configuration!
    networks: {
        development: {
            host: '127.0.0.1',
            port: 8545,
            network_id: '*' //匹配任何id
        }
    }
};

提示:這里我只配置了需要用的網(wǎng)絡(luò)環(huán)境家制,可以配置多個(gè)正林,更多詳細(xì)的配置請(qǐng)閱讀Truffle Doc

6.啟動(dòng)一個(gè)測(cè)試節(jié)點(diǎn),測(cè)試節(jié)點(diǎn)啟動(dòng)方式很多颤殴,這里使用testrpc觅廓,參見文首。因?yàn)橹碍h(huán)境配置有問題涵但,后面的操作就遇到了以下的錯(cuò)誤信息

Error: No network specified. Cannot determine current network.

7.編譯項(xiàng)目杈绸,truffle compile默認(rèn)編譯自上次編譯后被修改過的文件,來減少不必要的編譯矮瘟。如果你想編譯全部文件瞳脓,可以使用--compile-all選項(xiàng)。

$ truffle compile --compile-all
Compiling ./contracts/Greeter.sol...
Compiling ./contracts/Migrations.sol...
Compiling ./contracts/Test.sol...
Writing artifacts to ./build/contracts

編譯完成之后項(xiàng)目/build/下生產(chǎn)了幾個(gè)json文件澈侠,這些就是合約的元數(shù)據(jù)

8.部署合約劫侧,在使用truffle migrate部署合約的時(shí)候,可以通過--network development來指定部署的網(wǎng)絡(luò)節(jié)點(diǎn)哨啃,development就是在truffle.js中配置的參數(shù)

$ truffle migrate --network development
Using network 'development'.

Running migration: 1_initial_migration.js
  Replacing Migrations...
  ... 0x42b2d96809816765b609ca1b5e3505858a6d03ea1145f2ae47359fd66a6ebd69
  Migrations: 0xe331f52a830f6abd8eb8e143fbde110edd28b9b8
Saving successful migration to network...
  ... 0x95f6e662c20a0350ff1903216a61cd1c878c8a571cb4a214b62d44a28e38a22d
Saving artifacts...
Running migration: 2_deploy_contracts.js
  Replacing Greeter...
  ... 0x33b9776384f25342d51799970744b44dcfedf55a36093d55a72c5323dcbc8cf5
  Greeter: 0x4cf91392df7740176d74f63faf9991ec838a6473
  Replacing Test...
  ... 0x84463c7b8bce644a4df200ed1afdb3714514696cb32eef443854ca2dc2e56a70
  Test: 0x57fec0a6d60ce7a133bbc6f7ac64f99a7b97425f
Saving successful migration to network...
  ... 0xc8902db446771ad43bf55b50acf6ae0e5c7972a48e72e7ff924104e5a8fbf6b0
Saving artifacts...

提示:如果你之前的移植是成功執(zhí)行的烧栋。truffle migrate僅會(huì)執(zhí)行新創(chuàng)建的移植。如果沒有新的移植腳本拳球,這個(gè)命令不同執(zhí)行任何操作审姓。如果報(bào)錯(cuò)出現(xiàn)了一些你之前編譯部署過,但你已經(jīng)不需要的合約醇坝,可以用truffle migrate --reset來重置部署

9.驗(yàn)證合約邑跪,上一步操作已經(jīng)成功部署了合約,其實(shí)驗(yàn)證合約應(yīng)該是通過web3.js在應(yīng)用里調(diào)用合約的方法呼猪,但我們的合約內(nèi)容簡(jiǎn)單画畅,我們通過console來驗(yàn)證

$ truffle console
truffle(development)> 

//調(diào)用Test合約的g()方法
truffle(development)> Test.deployed().then(function(func){return func.g.call();});
'method g()'
//調(diào)用Test合約的f()方法
truffle(development)> Test.deployed().then(function(func){return func.f.call();});
'method f()'
//調(diào)用Greeter合約的setGreeting()方法
truffle(development)>  Greeter.deployed().then(function(func){return func.setGreeting("hello");});
{ tx: '0x2660bc0b7a769d995b32f68a9a1166d0ef93d8adb4a77a9fcb31cdccba000c41',
  receipt: 
   { transactionHash: '0x2660bc0b7a769d995b32f68a9a1166d0ef93d8adb4a77a9fcb31cdccba000c41',
     transactionIndex: 0,
     blockHash: '0x1fd9b5431279aadf9076a561aae7de355fbc3ba3ec4646c892de3cf577dd02a0',
     blockNumber: 18,
     gasUsed: 43033,
     cumulativeGasUsed: 43033,
     contractAddress: null,
     logs: [],
     status: 1 },
  logs: [] }
//調(diào)用Greeter合約的greet()方法
truffle(development)> Greeter.deployed().then(function(func){return func.greet();});
'hello'
//退出控制臺(tái)
truffle(development)> .exit

關(guān)于Dapp開發(fā)的Truffle框架Ⅰ的內(nèi)容就先寫到這里,后面就開始講web3調(diào)用的內(nèi)容宋距,Truffle框架的高級(jí)應(yīng)用在以后的內(nèi)容中遇到了再詳細(xì)講吧轴踱。至于智能合約的語法solidity目前我還不是很熟練,就暫時(shí)不深講了谚赎,多讀讀文檔淫僻,多動(dòng)手嘗試編寫一些智能合約。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末壶唤,一起剝皮案震驚了整個(gè)濱河市雳灵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌闸盔,老刑警劉巖悯辙,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡躲撰,警方通過查閱死者的電腦和手機(jī)针贬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拢蛋,“玉大人桦他,你說我怎么就攤上這事∽焕猓” “怎么了快压?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)础锐。 經(jīng)常有香客問我嗓节,道長(zhǎng)皆警,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任信姓,我火速辦了婚禮,結(jié)果婚禮上绸罗,老公的妹妹穿的比我還像新娘意推。我一直安慰自己,他們只是感情好珊蟀,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布菊值。 她就那樣靜靜地躺著,像睡著了一般育灸。 火紅的嫁衣襯著肌膚如雪腻窒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天磅崭,我揣著相機(jī)與錄音儿子,去河邊找鬼。 笑死砸喻,一個(gè)胖子當(dāng)著我的面吹牛柔逼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播割岛,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼愉适,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了癣漆?” 一聲冷哼從身側(cè)響起维咸,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后腰湾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雷恃,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年费坊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了倒槐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡附井,死狀恐怖讨越,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情永毅,我是刑警寧澤把跨,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站沼死,受9級(jí)特大地震影響着逐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜意蛀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一耸别、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧县钥,春花似錦秀姐、人聲如沸若贮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽细移。三九已至,卻和暖如春雪侥,著一層夾襖步出監(jiān)牢的瞬間精绎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來泰國打工旬牲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人原茅。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像晌区,于是被迫代替她去往敵國和親通贞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

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

  • 【本文目標(biāo)】 通過本文的學(xué)習(xí)和時(shí)間,你將熟悉以太坊開發(fā)框架Truffle的配置和運(yùn)行茎用,并借助Truffle完成一...
    筆名輝哥閱讀 13,035評(píng)論 8 55
  • 文|李偉志 關(guān)于“以太貓”的流行,相信不少人都有所耳聞彤避,甚至入手養(yǎng)過幾只夯辖。從游戲性來說蒿褂,其本質(zhì)就是一個(gè)簡(jiǎn)單的...
    ROW供享社閱讀 1,063評(píng)論 0 3
  • 一個(gè)成熟的人卒暂,必然有著認(rèn)清現(xiàn)實(shí)的自知之明和延遲滿足的精神力。 大多數(shù)人的痛苦昙楚,源于他們不能接受一個(gè)現(xiàn)實(shí):有些欲望就...
    玄名子閱讀 210評(píng)論 0 0
  • 活節(jié)奏加快,不少人飲食不健康昔字,引發(fā)胃部問題。俗話說“三分治七分養(yǎng)”陨囊,今天就教教大家怎么養(yǎng)胃? 1.養(yǎng)成良好的生活習(xí)...
    簡(jiǎn)愛玉閱讀 204評(píng)論 0 0
  • 想放棄了挂捅,放棄自己的夢(mèng)想堂湖,放棄父母親人的期望,放棄自己曾經(jīng)的驕傲伺糠,放棄一切的一切的一切斥季,包括我自己…… ...
    三無患者閱讀 283評(píng)論 0 1