truffle使用筆記

編譯

truffle compile僅默認(rèn)編譯自上次編譯后被修改過的文件锹锰,來減少不必要的編譯酸役。如果你想編譯全部文件,可以使用--compile-all選項

truffle compile --compile-all

Truffle需要定義的合約名稱和文件名準(zhǔn)確匹配。舉例來說,如果文件名為MyContract.sol楔脯,那么合約文件須為如下兩者之一(區(qū)分大小寫):

contract MyContract {
  ...
}
// or
library MyContract {
  ...
}

依賴

你可以通過使用import來聲明依賴。Truffle將會按正確順序依次編譯合約胯甩,并在需要的時候自動關(guān)聯(lián)庫昧廷。

部署合約

如果你之前的移植是成功執(zhí)行的堪嫂。truffle migrate僅會執(zhí)行新創(chuàng)建的移植。如果沒有新的移植腳本木柬,這個命令不同執(zhí)行任何操作皆串。可以使用選項--reset來從頭執(zhí)行移植腳本眉枕。
例如migrations目錄下的移植腳本是4_example_migration.js愚战,文件名以數(shù)字開頭,一個描述性的后綴結(jié)尾齐遵。數(shù)字前綴是必須的,用于記錄移植是否成功塔插。后綴僅是為了提高可讀性梗摇,以方便理解。

部署器(deployer)

你的移植文件會使用部署器來緩存部署任務(wù)想许。所以伶授,你可以按一定順序排列發(fā)布任務(wù),他們會按正確順序執(zhí)行流纹。

// Stage deploying A before B 先部署A再部署B(yǎng)
deployer.deploy(A);
deployer.deploy(B);

另一選中可選的部署方式是使用Promise糜烹。將部署任務(wù)做成一個隊列,是否部署依賴于前一個合約的執(zhí)行情況

// Deploy A, then deploy B, passing in A's newly deployed address
deployer.deploy(A).then(function() {
  return deployer.deploy(B, A.address);
});

要實現(xiàn)不同條件的不同部署步驟漱凝,移植代碼中需要第二個參數(shù)network疮蹦。示例如下:

module.exports = function(deployer, network) {
  // Add demo data if we're not deploying to the live network.
  if (network != "live") {
    deployer.exec("add_demo_data.js");  
  }
}
// Deploy a single contract without constructor arguments
deployer.deploy(A);

// Deploy a single contract with constructor arguments
deployer.deploy(A, arg1, arg2, ...);  //部署合約A構(gòu)造函數(shù)傳入的參數(shù)

// Deploy multiple contracts, some with arguments and some without.
// This is quicker than writing three `deployer.deploy()` statements as the deployer
// can perform the deployment as a batched request.
//依次部署多個合約
deployer.deploy([
  [A, arg1, arg2, ...],
  B,
  [C, arg1]
]);
DEPLOYER.LINK(LIBRARY, DESTINATIONS)

聯(lián)接一個已經(jīng)發(fā)布的庫到一個或多個合約。destinations可以是一個合約或多個合約組成的一個數(shù)組茸炒。如果目標(biāo)合約并不依賴這個庫愕乎,部署器會忽略掉這個合約。

DEPLOYER.AUTOLINK(CONTRACT)

關(guān)聯(lián)合約依賴的所有庫壁公。這需要所依賴的庫已經(jīng)部署感论,或在其前一步部署。
例子:

// Assume A depends on a LibB and LibC
deployer.deploy([LibB, LibC]);
deployer.autolink(A);

另外你可以省略參數(shù)來調(diào)用函數(shù)autolink()紊册。這會自動關(guān)聯(lián)合約依賴的所有庫比肄。需要保證在調(diào)用這個函數(shù)前,所有被需要的庫已經(jīng)部署了囊陡。
例子:

// Link *all* libraries to all available contracts
deployer.autolink();
DEPLOYER.THEN(FUNCTION() {...})

Promise語法糖芳绩,執(zhí)行做生意的部署流程。
例子:

deployer.then(function() {
  // Create a new version of A
  return A.new();
}).then(function(instance) {  //這里的instance就是上邊A.new()返回的合約A的實例
  // Set the new instance of A's address on B.
  var b = B.deployed();
  return b.setA(instance.address);
});
DEPLOYER.EXEC(PATHTOFILE)

執(zhí)行truffle exec做為部署的一部分关斜。查看10. 外部腳本章節(jié)了解更多示括。
例子:

// Run the script, relative to the migrations file.
deployer.exec("../path/to/file/demo_data.js");

捕捉事件(Catching Events)

你的合約可以觸發(fā)事件,你可以進行捕捉以進行更多的控制痢畜。事件API與Web3一樣垛膝△⒙拢可以參考Web3 documentation來了解更多。

var meta = MetaCoin.deployed();
var transfers = meta.Transfer({fromBlock: "latest"});
transfers.watch(function(error, result) {
  // This will catch all Transfer events, regardless of how they originated.
  if (error == null) {
    console.log(result.args);
  }
}
METHOD:DEPLOYED()

每一個抽象出來的合約接口都有一個deployed()方法吼拥,上述例子中倚聚,你已經(jīng)見到過。調(diào)用這個函數(shù)返回一個實例凿可,這個實例代表的是之前部署到網(wǎng)絡(luò)的合約所對應(yīng)的抽象接口的實例惑折。

var meta = MetaCoin.deployed();

警告:這僅對使用truffle deploy部署的合約,且一定是在project configuration中配置發(fā)布的才有效枯跑。如果不是這樣惨驶,這個函數(shù)執(zhí)行時會拋出異常。

METHOD:AT()

類似于deployed()敛助,你可以通過一個地址來得到一個代表合約的抽象接口實例粗卜。當(dāng)然這個地址一定是這個合約的部署地址。

var meta = MetaCoin.at("0x1234...")

警告:當(dāng)你的地址不正確纳击,或地址對應(yīng)的合約不正確時续扔,這個函數(shù)并不會拋出異常。但調(diào)用接口時會報錯焕数。請保證在使用at()時輸入正確的地址纱昧。

METHOD:NEW()

你可以通過這個方法來部署一個完全全新的合約到網(wǎng)絡(luò)中。

MetaCoin.new().then(function(instance) {
  // `instance` is a new instance of the abstraction.
  // If this callback is called, the deployment was successful.
  console.log(instance.address);
}).catch(function(e) {
  // There was an error! Handle it.
});

需要注意的是這是一個交易堡赔,會改變網(wǎng)絡(luò)的狀態(tài)识脆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市善已,隨后出現(xiàn)的幾起案子存璃,更是在濱河造成了極大的恐慌,老刑警劉巖雕拼,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纵东,死亡現(xiàn)場離奇詭異,居然都是意外死亡啥寇,警方通過查閱死者的電腦和手機偎球,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辑甜,“玉大人衰絮,你說我怎么就攤上這事×状祝” “怎么了猫牡?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長邓线。 經(jīng)常有香客問我淌友,道長煌恢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任震庭,我火速辦了婚禮瑰抵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘器联。我一直安慰自己二汛,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布拨拓。 她就那樣靜靜地躺著肴颊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渣磷。 梳的紋絲不亂的頭發(fā)上苫昌,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音幸海,去河邊找鬼。 笑死奥务,一個胖子當(dāng)著我的面吹牛物独,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播氯葬,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼挡篓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帚称?” 一聲冷哼從身側(cè)響起官研,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闯睹,沒想到半個月后戏羽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡楼吃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年始花,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孩锡。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡酷宵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出躬窜,到底是詐尸還是另有隱情浇垦,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布荣挨,位于F島的核電站男韧,受9級特大地震影響朴摊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜煌抒,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一仍劈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寡壮,春花似錦贩疙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至棒仍,卻和暖如春悲靴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背莫其。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工癞尚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乱陡。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓浇揩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親憨颠。 傳聞我的和親對象是個殘疾皇子胳徽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

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