ETH 开发环境搭建及智能合约 helloworld
ETH 開發(fā)環(huán)境搭建及智能合約 helloworld
自己的菜鳥級(jí)的起步教程,給自己長(zhǎng)記性
準(zhǔn)備
什么是以太坊
以太坊白皮書
以太坊白皮書_ZH
以太坊白皮書_EN
環(huán)境介紹
這里使用了,以下兩個(gè)開發(fā)工具
- truffle
 - testrpc
 
Truffle 是一個(gè)基于js 開發(fā)的 以太坊開發(fā)框架,其集成很多開發(fā)功能及一身, 能夠在本地編譯, 部署智能合約, 并且可以通過console 對(duì)節(jié)點(diǎn)進(jìn)行 rpc 。
testrpc 嚴(yán)格意義上是一個(gè)節(jié)點(diǎn)模擬工具(調(diào)試環(huán)境), 打開本地端口后, 其數(shù)據(jù)存在內(nèi)存中, 不在硬盤的數(shù)據(jù)庫(kù)內(nèi)(不同于 geth ,mist ) 用于測(cè)試合約很方便, 
 (如果在geth 上測(cè)試合約,需要自己開私鏈,還是方便了不少)
工具安裝
truffle 安裝
truffle 是node.js工程 
 所以先安裝 node.js 
安裝環(huán)境后 console 執(zhí)行
npm install -g truffle #可能需要權(quán)限安裝完成后執(zhí)行
truffle version回顯
Truffle v4.0.5 (core: 4.0.5) Solidity v0.4.18 (solc-js)如上安裝成功
這個(gè)框架在激烈的開發(fā)中,所以不同版本,可能出入大,(反正我是支持支持最新版!)
testrpc 安裝
npm install -g ethereumjs-testrpc也是js 開發(fā),所以,一鍵安裝它 
 執(zhí)行后,回顯如下
會(huì)自動(dòng)的分配我們十個(gè)地址,用于測(cè)試, 打開8545 rpc端口
環(huán)境測(cè)試
先啟動(dòng)節(jié)點(diǎn) testrpc
testrpc之后啟動(dòng)truffle的rpc命令行
truffle console #可能會(huì)有網(wǎng)絡(luò)問題,見后當(dāng)終端1出現(xiàn)
truffle(development)>說(shuō)明已經(jīng),正常接入rpc控制臺(tái)
執(zhí)行命令
truffle(development)> web3.eth.accounts [ '0x819d0cce264d8c7028f079f828ec44ad50ab6f1f','0xa0eb8d663514aed055c26fdfa02082f283e3814b','0x083c2e3debbd83e7193d430c95cb65dfac38be2e','0xa268de20bc84f2a371f46e71dd51a437fd0b2b8a','0x6a183c520fac524984ff620f6962e758b0a72d3c','0xe365cc8ef2ab2bc1bc4d6bbda83a8abb589239cc','0x179aa33ae7918af15c956d8b2c8e784004da30e7','0x596a67f06884c15ffe9c8767b698730791d6a80d','0x318bb06f46a24a322a2a0a173712b630a41f8755','0xe1b157fed1cbd523538ed0785bbafef2bb5b5aa5' ]回顯恰好是分配我們的測(cè)試地址
余額查詢
ruffle(development)> web3.eth.getBalance(web3.eth.accounts[0]) BigNumber { s: 1, e: 20, c: [ 1000000 ] }(好像js 對(duì)大數(shù)支持不好???)
Q&A
因?yàn)檫@個(gè)版本迭代太快,所以發(fā)現(xiàn)網(wǎng)上有些教程,存在各種報(bào)錯(cuò) 
 所以算是自己慢慢摸索考證,解決了部分問題
至此環(huán)境搭建完畢
開始
上面算是搭建好了開發(fā)的環(huán)境 
 下面開始寫一個(gè)hello world的智能合約
什么是智能合約
其實(shí)在我的理解上 EVM 以太坊虛擬機(jī),就是我們?cè)试S智能合約的平臺(tái), 我們使用solidity 編寫的合約,然后,經(jīng)過編譯器,將其編譯成字節(jié)碼(op) , (真的神奇), 當(dāng)部署,和使用合約之后,就會(huì)被執(zhí)行 
 就是一個(gè)函數(shù),簽訂合同的就可以使用(估計(jì)錯(cuò)誤)
這樣援引一段話
智能合約只是一些運(yùn)行在電腦(或其他節(jié)點(diǎn))的區(qū)塊鏈加密貨幣網(wǎng)絡(luò)的特定代碼,一旦節(jié)點(diǎn)執(zhí)行了這個(gè)代碼,合約就會(huì)更新總賬(ledger)。所以如果你們熟悉我的話,我喜歡在一些已經(jīng)存在的概念上(notion),做一些類比和抽象上的嘗試。實(shí)際上這可以構(gòu)建的知識(shí)結(jié)構(gòu),比如模式(schema)。 
 什么是智能合約
這里是部分EOS(基于eth的去中心操作系統(tǒng)的部分合約代碼)
contract DSAuthority { function canCall(address src, address dst, bytes4 sig) constant returns (bool); }contract DSAuthEvents {event LogSetAuthority (address indexed authority);event LogSetOwner (address indexed owner); }下面是部分的evm機(jī)器碼(匯編!!!)
PUSH1 0x60 PUSH1 0x40 MSTORE CALLDATASIZE ISZERO PUSH2 0x011b JUMPI這里是的EOS合約內(nèi)容
合約部署
工程模板
truffle 很方便的給我們提供了,便捷的工程模板的搭建
建立目錄hello 執(zhí)行
truffle init等待片刻
Downloading... Unpacking... Setting up... Unbox successful. Sweet!Commands:Compile: truffle compileMigrate: truffle migrateTest contracts: truffle test以上回顯 表示模板建立OK 目錄結(jié)構(gòu)
hello ├── contracts │ └── Migrations.sol ├── migrations │ └── 1_initial_migration.js ├── test ├── truffle-config.js └── truffle.js3 directories, 4 files模板初始化完畢
合約編譯
solidity是編寫合約的語(yǔ)言,和js相似(奈何沒學(xué)過),所以從度娘那里抄了一個(gè)helloworld
pragma solidity ^0.4.4;contract hello {function sayHello() returns (string) {return ("Hello World");} }contract {} 說(shuō)明是合約, 定義函數(shù),說(shuō)明返回值類型,函數(shù)體返回字符串,所以最后應(yīng)該會(huì)顯示該字符串(應(yīng)該吧)
保存為hello.sol ,保存在contract 目錄下 
 (模板本身自帶一個(gè)合約,可以刪除,可以不動(dòng),沒影響)
執(zhí)行 完成編譯
truffle compile Compiling ./contracts/Migrations.sol... Compiling ./contracts/hello.sol...Compilation warnings encountered:/Users/r4y/Misc/tmmp/contracts/hello.sol:4:6: Warning: No visibility specified. Defaulting to "public".function sayHello() returns (string) {^ Spanning multiple lines. ,/Users/r4y/Misc/tmmp/contracts/hello.sol:4:6: Warning: Function state mutability can be restricted to purefunction sayHello() returns (string) {^ Spanning multiple lines.Writing artifacts to ./build/contracts警告先忽略, 編譯內(nèi)容在我們的 build/contract 下的json文件中
合約部署
修改部署腳本 igrations/1_initial_migration.js
ar Migrations = artifacts.require("./hello.sol");module.exports = function(deployer) {deployer.deploy(Migrations); };部署合約前先要啟動(dòng)節(jié)點(diǎn) 
 執(zhí)行 以進(jìn)行合約部署
注意 : 當(dāng)增加或者刪除了某個(gè)合約后,可以執(zhí)行“truffle migrate –reset”命令重新部署合約。 
 終端回顯
同時(shí) 節(jié)點(diǎn)終端dbg 
 有我們的TX gas
合約部署完畢
合約執(zhí)行
truffle consloe #進(jìn)入rpc 命令行ruffle(development)> var contract undefined truffle(development)> hello.deployed().then(instance => contract = instance) ...... truffle(development)> contract.sayHello.call() 'Hello World'至此HELLOworld 總算是hel出來(lái)了
常見問題
Q&A
總結(jié)
以上是生活随笔為你收集整理的ETH 开发环境搭建及智能合约 helloworld的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: Docker/Docker 起步123
 - 下一篇: 第二个智能合约