轉載:以太坊聯盟鏈quorum搭建(二)

原文鏈接:https://blog.csdn.net/zhj_fly/article/details/80586022

本篇文章介紹通過truffle來部署智能合約欧漱。

1留夜、首先需要有一個聯盟鏈quorum的環(huán)境,如上篇文章所示蒋搜。

2册着、部署合約,這里介紹兩種方法逃顶,一是教程里的使用solc編譯讨便,獲取編譯后的abi和bytecode充甚,然后在geth控制臺里部署;第二種方法是使用truffle直接部署霸褒。

下面分別介紹:

(1)使用solc編譯

智能合約文件:simplestorage.sol

pragma solidity ^0.4.15;

contract simplestorage {

? uint public storedData;

functionsimplestorage(uint initVal)public{

? ? storedData = initVal;

? }

functionset(uint x)public{

? ? storedData = x;

? }

functionget()constantpublicreturns(uint retVal){

returnstoredData;

? }

}

編譯:

solcjs --bin --abi simplestorage.sol

會生成兩個文件:?simplestorage_sol_simplestorage.abi 和 simplestorage_sol_simplestorage.bin分別是abi和bytecode伴找,在部署時會用到。(或者使用在線編譯器remix废菱,更加方便)

然后進入geth客戶端(第一個節(jié)點):

geth attach qdata/dd1/geth.ipc

然后在部署合約和調用合約:

>varabi = [{"constant":true,"inputs":[],"name":"storedData","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"retVal","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"initVal","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]

undefined

>varbytecode ="0x6060604052341561000f57600080fd5b60405160208061014b833981016040528080519060200190919050508060008190555050610109806100426000396000f3006060604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632a1afcd914605857806360fe47b114607e5780636d4ce63c14609e575b600080fd5b3415606257600080fd5b606860c4565b6040518082815260200191505060405180910390f35b3415608857600080fd5b609c600480803590602001909190505060ca565b005b341560a857600080fd5b60ae60d4565b6040518082815260200191505060405180910390f35b60005481565b8060008190555050565b600080549050905600a165627a7a72305820e0660d73fff0ee27ccbbbb63012dedeb1191c88555c15f78e81c856f58125d9a0029"

undefined

>varsimpleContract = web3.eth.contract(abi);

undefined

> simpleContract.new(42, {from:web3.eth.accounts[0],data: bytecode,gas:0x47b760,privateFor: ["ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc="]})

{

abi: [{

constant:true,

inputs: [],

name:"storedData",

outputs: [{...}],

payable:false,

stateMutability:"view",

type:"function"

? }, {

constant:false,

inputs: [{...}],

name:"set",

outputs: [],

payable:false,

stateMutability:"nonpayable",

type:"function"

? }, {

constant:true,

inputs: [],

name:"get",

outputs: [{...}],

payable:false,

stateMutability:"view",

type:"function"

? }, {

inputs: [{...}],

payable:false,

stateMutability:"nonpayable",

type:"constructor"

? }],

address:undefined,

transactionHash:"0x5c7fc60d8370bed6eb14e3f776365f77806eda9653e6a3f682827f68e056c0f8"

}

部署成功技矮,其中simpleContract.new中

privateFor: ["ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc="]}

是指明這個合約是私有合約,只有創(chuàng)建合約的節(jié)點1和地址代表的節(jié)點7可以正常調用殊轴。下面節(jié)點1調用合約衰倦,需要用地址和abi來加載已經部署好的合約,其中地址在日志文件/qdata/logs/1.log中旁理,找到這么一行:

INFO [06-07|19:57:38] Submitted contract creation? ? ? ? ? ? ? fullhash=0x5c7fc60d8370bed6eb14e3f776365f77806eda9653e6a3f682827f68e056c0f8to=0x4D3bfd7821E237fFE84209d8E638f9f309865b87

to后面的地址就是合約的地址樊零,

>varprivate = eth.contract(abi).at("0x4D3bfd7821E237fFE84209d8E638f9f309865b87")

undefined

> private.get()

42

然后節(jié)點2調用合約,同樣需要地址和abi來加載合約韧拒,執(zhí)行結果:

> private.get()

0

節(jié)點7執(zhí)行合約:

> private.get()

42

然后在節(jié)點1調用set淹接,改變數值:

> private.set(65656, {from:eth.coinbase,privateFor:["ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc="]})

"0xb42a5483ef98f6a7b3dc35d7ffaaf0170360de63fb7d14c8514532906fb10395"

> private.get()

65656

同樣在節(jié)點2和節(jié)點7獲取修改的值,結果分別為0和65656

到此叛溢,部署和調用智能合約結束塑悼。

(2)下面介紹使用truffle來部署智能合約(這里使用truffle主要是編譯和部署合約)

新建一個目錄test,然后進入目錄初始化一個truffle項目:

truffle init

然后在contracts目錄中編寫智能合約:

pragma solidity ^0.4.15;

contract simplestorage {

? uint public storedData;

functionsimplestorage(uint initVal)public{

? ? storedData = initVal;

? }

functionset(uint x)public{

? ? storedData = x;

? }

functionget()constantpublicreturns(uint retVal){

returnstoredData;

? }

}

在test目錄下編譯合約:

truffle compile

部署合約:

在migrations文件夾里添加新的部署文件:

2_deploy_simplestorage.js

varsimple_storage = artifacts.require("SimpleStorage");

module.exports =function(deployer){

deployer.deploy(simple_storage,123, {privateFor:["ROAZBWtSacxXQrOe3FGAqJDyJjFePR5ce4TSIzmJ0Bc="]});

};

修改truffle.js文件:

module.exports = {

networks: {

development: {

host:"localhost",

port:22000,

network_id:"*",

gas:4600000,

gasPrice:0

? ? ? ? },

second_node: {

host:"localhost",

port:22001,

network_id:"*",

gas:4600000,

gasPrice:0

? ? ? ? },

third_node: {

host:"localhost",

port:22002,

network_id:"*",

gas:4600000,

gasPrice:0

? ? ? ? },

forth_node: {

host:"localhost",

port:22003,

network_id:"*",

gas:4600000,

gasPrice:0

},

fifth_node:{

host:"localhost",

port:22004,

network_id:"*",

gas:4600000,

gasPrice:0

},

sixth_node: {

host:"localhost",

port:22005,

network_id:"*",

gas:4600000,

gasPrice:0

},

seventh_node: {

host:"localhost",

port:22006,

network_id:"*",

gas:4600000,

gasPrice:0

? }

? ? }

};

在test目錄下執(zhí)行命令:truffle migrate --network development --reset

>truffle migrate --network development --reset

Running migration:1_initial_migration.js

? Replacing Migrations...

...0x3d22b37608222c33cf2485bbcd746f46979e76e2c31f1be96571098a958f230f

Migrations:0xd9d64b7dc034fafdba5dc2902875a67b5d586420

Saving successful migration to network...

...0x7b6d86cadb782c0e41a35f6ebd64dd4650ccb7a7a11f6b07e63df6fcaba2311e

Saving artifacts...

Running migration:2_deploy_simplestorage.js

? Replacing simplestorage...

...0x43ad5af6cf9276a78febde309b7f214af988797d62fb9ecc71f7a879cbbc6306

simplestorage:0x938781b9796aea6376e40ca158f67fa89d5d8a18

Saving successful migration to network...

...0xb9dce27942015a3a93b0f6475cc3ef59b1bc82405b90faaaa4053e8eeb835886

Saving artifacts...

其中倒數第四行中是合約的地址楷掉。

3厢蒜、進入geth控制臺

geth attach qdata/dd1/geth.ipc

合約地址和abi加載合約,再調用烹植。這里就和上面方法一樣了斑鸦,不再重復。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末草雕,一起剝皮案震驚了整個濱河市巷屿,隨后出現的幾起案子,更是在濱河造成了極大的恐慌墩虹,老刑警劉巖嘱巾,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異诫钓,居然都是意外死亡旬昭,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門菌湃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來问拘,“玉大人,你說我怎么就攤上這事≈枳” “怎么了绪杏?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長或油。 經常有香客問我寞忿,道長,這世上最難降的妖魔是什么顶岸? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任腔彰,我火速辦了婚禮,結果婚禮上辖佣,老公的妹妹穿的比我還像新娘霹抛。我一直安慰自己,他們只是感情好卷谈,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布杯拐。 她就那樣靜靜地躺著,像睡著了一般世蔗。 火紅的嫁衣襯著肌膚如雪端逼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天污淋,我揣著相機與錄音顶滩,去河邊找鬼。 笑死寸爆,一個胖子當著我的面吹牛礁鲁,可吹牛的內容都是我干的。 我是一名探鬼主播赁豆,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼仅醇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了魔种?” 一聲冷哼從身側響起析二,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎节预,沒想到半個月后甲抖,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡心铃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了挫剑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片去扣。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出愉棱,到底是詐尸還是另有隱情唆铐,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布奔滑,位于F島的核電站艾岂,受9級特大地震影響,放射性物質發(fā)生泄漏朋其。R本人自食惡果不足惜王浴,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梅猿。 院中可真熱鬧氓辣,春花似錦、人聲如沸袱蚓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喇潘。三九已至体斩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颖低,已是汗流浹背絮吵。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留枫甲,地道東北人源武。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像想幻,于是被迫代替她去往敵國和親粱栖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內容

  • 【本文目標】 通過本文的學習和時間脏毯,你將熟悉以太坊開發(fā)框架Truffle的配置和運行闹究,并借助Truffle完成一...
    筆名輝哥閱讀 13,025評論 8 55
  • 1.搭建自己的以太坊網絡 目前以太坊官方提供了兩種網絡:線上生產網絡、測試網絡食店。 以太坊生產網絡就是真正有價值的 ...
    NO123456閱讀 1,975評論 0 1
  • 文|李偉志 關于“以太貓”的流行渣淤,相信不少人都有所耳聞,甚至入手養(yǎng)過幾只吉嫩。從游戲性來說价认,其本質就是一個簡單的...
    ROW供享社閱讀 1,057評論 0 3
  • 作為銷售人員,我們與客戶交流的目的是很明確的自娩,就是要讓客戶購買自己的產品用踩。但是,在真正與客戶交流時,我們最好不要那...
    無湦閱讀 1,347評論 0 0
  • 昨天暗下決心脐彩,告訴自己每天晚上十一點之前完成復盤碎乃,結果今天就有事情給耽誤了,所以這有很多干擾因素惠奸,不可控不可控啊 ...
    拾玖___閱讀 245評論 0 0