部署一個私鏈以太坊的智能合約

部署智能合約的步驟為:

  1. 啟動一個以太坊節(jié)點 (例如geth或者testrpc)。
  2. 使用solc編譯智能合約。 => 獲得二進(jìn)制代碼丹禀。
  3. 將編譯好的合約部署到網(wǎng)絡(luò)。(這一步會消耗以太幣,還需要使用你的節(jié)點的默認(rèn)地址或者指定地址來給合約簽名双泪。) => 獲得合約的區(qū)塊鏈地址和ABI(合約接口的JSON表示持搜,包括變量,事件和可以調(diào)用的方法)焙矛。(譯注:作者在這里把ABI與合約接口弄混了葫盼。ABI是合約接口的二進(jìn)制表示。)
  4. 用web3.js提供的JavaScript API來調(diào)用合約村斟。
智能合約.png

Brew MacOS包管理器

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安裝go的環(huán)境

brew install go

安裝 geth

npm install -g solc

Solidity以太坊智能合約語言

brew  install solidity

geth console會啟動節(jié)點贫导,geth attach是通過rpc或者ipc和已經(jīng)啟動的節(jié)點進(jìn)行交互。所以二者的使用區(qū)別還是挺大的蟆盹,在geth console里面可以使用所有模塊的api孩灯,但是geth attach只能使用已經(jīng)打開的模塊的api,如果節(jié)點沒有打開rpc geth attach甚至都不能連接上節(jié)點

修改創(chuàng)世Genesis.json


webwxgetmsgimg.jpg

1,啟動一個以太坊節(jié)點

1,geth --datadir "./" --nodiscover console
2,user1 = eth.accounts[0]

"0xa4aa2105cc3e6b6a83faaaf72782d1e9a68e90ca"

> eth.getBalance(user1)

1.156e+21

> user2 = eth.accounts[1]

"0x33481f6d7b7f4ff430397913af1eaf582f3f4391"

> eth.getBalance(user2)

4000000000000000000

2,智能合約代碼:

contract Multiply7 {
   event Print(uint);
   function multiply(uint input) returns (uint) {
      Print(input * 7);
      return input * 7;
   }
}

3逾滥,獲得abiDefinition和bytecode,

通過https://remix.ethereum.org編譯智能合約或者solc編譯

合約1.png

合約2.png

我們先把合約代碼壓縮為一行.新建一個ssh session, 切換到geth用戶環(huán)境su - geth, 然后輸入:cat contracts/Token.sol | tr '\n' 空格'空格 '.

轉(zhuǎn)義成字符串
http://www.bejson.com

 abi=[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
屏幕快照 2018-03-03 下午8.10.55.png

4峰档,看黑板:字節(jié)碼前加0x

bytecode="0x6060604052341561000f57600080fd5b60b18061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006007820290509190505600a165627a7a72305820e8baa72a4bd1ffe2e8fa51812e8d65fc7b145baf48382c4ae5039510fd35a6ff0029"

5,通過abiDefinition和bytecode實例化創(chuàng)建合約

var contract = eth.contract(abi);
var initializer = {from:web3.eth.accounts[0],data:bytecode,gas:300000};
personal.unlockAccount(user1,"jianghua")
var token = contract.new(initializer)
屏幕快照 2018-03-03 下午8.12.37.png

屏幕快照 2018-03-03 下午8.13.02.png

INFO [03-03|17:25:44] Submitted contract creation fullhash=0x7e1bd79681ee748b1057f123a9951652e67232c2624631a5531edb0bb629e88b contract=0x1BeEf17Dac85D369d41A9891276D58fC8F877A24

6寨昙,需要通過挖礦這一步驟讥巡,對合約地址進(jìn)行確認(rèn)

miner.start(4)
 admin.sleepBlocks(2)
      miner.stop()

到此為止,合約的布署已布署到了區(qū)塊鏈上舔哪。

7欢顷,通過合約地址,實例化自己的合約尸红,并進(jìn)行調(diào)用

mycontract = contract.at(token.address)
屏幕快照 2018-03-03 下午8.10.09.png

{
abi: [{
constant: false,
inputs: [{...}],
name: "multiply",
outputs: [{...}],
payable: false,
stateMutability: "nonpayable",
type: "function"
}],
address: "0x1beef17dac85d369d41a9891276d58fc8f877a24",
transactionHash: null,
allEvents: function(),
multiply: function()
}

8吱涉,到這里,合約的布署與調(diào)用完成

mycontract.multiply.call(2)

到了這一步外里,我們可以得到自己合約的返回值14

9怎爵,預(yù)估手續(xù)費

web3.eth.estimateGas({data:bytecode})

10,檢查合約是否部署成功

eth.getCode("0x1beef17dac85d369d41a9891276d58fc8f877a24")

"0x606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006007820290509190505600a165627a7a72305820e8baa72a4bd1ffe2e8fa51812e8d65fc7b145baf48382c4ae5039510fd35a6ff0029"

11盅蝗,驗證區(qū)塊的內(nèi)容

屏幕快照 2018-03-03 下午6.34.03.png
eth.getBlock(2550)

{
difficulty: 314416,
extraData: "0xd783010802846765746886676f312e31308664617277696e",
gasLimit: 4712388,
gasUsed: 99930,
hash: "0x57ca73b779ae13c542f0421fc81a272fc6ce938aab1951b412f8813b6dc5bc8e",
logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
miner: "0xa4aa2105cc3e6b6a83faaaf72782d1e9a68e90ca",
mixHash: "0xecee4f13a617954c9bfe19e14bdf00c6b0d006d16e19e7474faa8de49eb74bf9",
nonce: "0x39f04fd757c3fab6",
number: 2550,
parentHash: "0xcdfb7e8f78f86e942acfe5a9a1f1ef3637a77cd96ebf35f28e6880e40e94fa0c",
receiptsRoot: "0xea304d377e8d7db719679ecfb3900e0b6c18469512ac3ba1c74c754e54f73d9e",
sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
size: 830,
stateRoot: "0x69c10e0e14757623f279f8df6564659f1ac4cf25ab2ec559acedb964315804f7",
timestamp: 1520069708,
totalDifficulty: 589085710,
transactions: ["0x7e1bd79681ee748b1057f123a9951652e67232c2624631a5531edb0bb629e88b"],
transactionsRoot: "0xba26a1e628172e65320c9d9474148763c03bd16513fc63b425f781537d542aa9",
uncles: []
}

12鳖链,驗證交易信息

屏幕快照 2018-03-03 下午6.33.37.png
eth.getTransaction("0x7e1bd79681ee748b1057f123a9951652e67232c2624631a5531edb0bb629e88b")

{
blockHash: "0x57ca73b779ae13c542f0421fc81a272fc6ce938aab1951b412f8813b6dc5bc8e",
blockNumber: 2550,
from: "0xa4aa2105cc3e6b6a83faaaf72782d1e9a68e90ca",
gas: 300000,
gasPrice: 0,
hash: "0x7e1bd79681ee748b1057f123a9951652e67232c2624631a5531edb0bb629e88b",
input: "0x6060604052341561000f57600080fd5b60b18061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006007820290509190505600a165627a7a72305820e8baa72a4bd1ffe2e8fa51812e8d65fc7b145baf48382c4ae5039510fd35a6ff0029",
nonce: 4,
r: "0x4a3d67e18204891de590b634ef34cdff373a199f0640fa5d11b91b4788ad8290",
s: "0x45467daa1b578c05e5b2c64b564a41a306d7e1ecc21ce1b472290b719fecc77c",
to: null,
transactionIndex: 0,
v: "0xfe7",
value: 0
}

合約的布署與調(diào)用驗證無誤,大功告成墩莫!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芙委,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子狂秦,更是在濱河造成了極大的恐慌灌侣,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裂问,死亡現(xiàn)場離奇詭異侧啼,居然都是意外死亡牛柒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門痊乾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來皮壁,“玉大人,你說我怎么就攤上這事哪审《昶牵” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵湿滓,是天一觀的道長滴须。 經(jīng)常有香客問我,道長茉稠,這世上最難降的妖魔是什么描馅? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮而线,結(jié)果婚禮上铭污,老公的妹妹穿的比我還像新娘。我一直安慰自己膀篮,他們只是感情好嘹狞,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著誓竿,像睡著了一般磅网。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上筷屡,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天涧偷,我揣著相機與錄音,去河邊找鬼毙死。 笑死燎潮,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扼倘。 我是一名探鬼主播确封,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼再菊!你這毒婦竟也來了爪喘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤纠拔,失蹤者是張志新(化名)和其女友劉穎秉剑,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稠诲,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡秃症,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年候址,在試婚紗的時候發(fā)現(xiàn)自己被綠了吕粹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片种柑。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖匹耕,靈堂內(nèi)的尸體忽然破棺而出聚请,到底是詐尸還是另有隱情,我是刑警寧澤稳其,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布驶赏,位于F島的核電站,受9級特大地震影響既鞠,放射性物質(zhì)發(fā)生泄漏煤傍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一嘱蛋、第九天 我趴在偏房一處隱蔽的房頂上張望蚯姆。 院中可真熱鬧,春花似錦洒敏、人聲如沸龄恋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽郭毕。三九已至,卻和暖如春函荣,著一層夾襖步出監(jiān)牢的瞬間显押,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工傻挂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乘碑,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓踊谋,卻偏偏與公主長得像蝉仇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子殖蚕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

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