以太坊本地開發環境以及智能合約

來源:互聯網
上載者:User

首先安裝go環境 https://golang.org/dl/ 直接用安裝包安裝。
完成後看下
go env
然後關注下gopath路徑,
GOPATH="/Users/MacPro/box/
我們要把go版用戶端放這裡,go編譯器執行都是去設定好的目錄執行。以後寫go的時候項目也要放這裡。

下載go版以太坊用戶端
git clone https://github.com/ethereum/go-ethereum
cd go-ethereum
make geth
編譯成功以後開始以太坊本地測試
先用命令看下,是否成功,
build/bin/geth -h

如果直接用geth 需要做下環境變數
export PATH=$PATH:/全路徑/build/bin/geth

開始搭建私人測試鏈
1 找一個目錄存放挖礦資料 /home/vagrant/
2 建立創世塊設定檔
vim genesis.json

{"config": {        "chainId": 1024,        "homesteadBlock": 0,        "eip155Block": 0,        "eip158Block": 0},"nonce": "0x0000000000000042","difficulty": "0x020000","mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000","coinbase": "0x0000000000000000000000000000000000000000","timestamp": "0x00","parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000","extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa","gasLimit": "0xffffffff","alloc": {}}

3 初始化配置
geth --datadir data init genesis.json

4 啟動節點
geth --datadir data --networkid 123456 --rpc --rpccorsdomain "*" --nodiscover console
各參數代表的含義如下:
networkid 設定當前區塊鏈的網路ID,用於區分不同的網路,1表示公鏈
rpc 表示啟動rpc通訊,可以進行智能合約的部署和調試
console 表示啟動命令列模式,可以在Geth中執行命令
執行成功後將進入區塊鏈的JavaScript控制台環境

5 Geth JavaScript控制台環境使用說明
建立新帳號
personal.newAccount() 或 personal.newAccount("123456")

查看節點資訊
admin.nodeInfo

挖礦
開始挖礦 miner.start(1)
停止挖礦 miner.stop()

查看當前礦工帳號
eth.coinbase 預設為第一個賬戶

修改礦工帳號
miner.setEtherbase(eth.accounts[1])

查看賬戶資訊
eth.accounts[0]

查看賬戶餘額
eth.getBalance(eth.accounts[0]) 或者 web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")

解鎖帳號
personal.unlockAccount(eth.accounts[0])
使用賬戶資金前都需要先解鎖帳號

轉賬eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(3,"ether")})
使用txpool.status可以看到交易狀態

查看區塊資料
eth.blockNumber
eth.getTransaction("0x0c59f431068937cbe9e230483bc79f59bd7146edc8ff5ec37fea6710adcab825")
eth.getBlock(1)通過區塊號查看區塊

可以開一個視窗挖礦,再開一個視窗做交易。
build/bin/geth attach ipc:/Users/MacPro/go_project/src/github.com/ethereum/go-ethereum/data/geth.ipc

6 智能合約
建立一個solidity 編寫的 Token.sol 檔案,內容如下:

contract Token {    address issuer;    mapping (address => uint) balances;    event Issue(address account, uint amount);    event Transfer(address from, address to, uint amount);    function Token() {        issuer = msg.sender;    }    function issue(address account, uint amount) {        if (msg.sender != issuer) throw;        balances[account] += amount;    }    function transfer(address to, uint amount) {        if (balances[msg.sender] < amount) throw;        balances[msg.sender] -= amount;        balances[to] += amount;        Transfer(msg.sender, to, amount);    }    function getBalance(address account) constant returns (uint) {        return balances[account];    }}

這份代碼實現了一個簡單的Token合約功能。
issue 函數可以向賬戶直接存放token
transfer 函數可以向其他帳號發送token
getBalance 函數可以擷取某個帳號的token餘額
從這個合約就能瞭解到,erc20協議就是在以太坊上存一個數字,然後加減所謂交易,其他的其實也做不了更多。
7部署合約
先到http://remix.ethereum.org/上編譯測試合約,會產生一個web3格式的部署代碼


先解鎖 personal.unlockAccount(eth.accounts[0])
點擊details 左邊WEB3DEPLOY下代碼複製到geth視窗
然後貼代碼斷行符號

成功以後 執行 token 看下abi資料
開始執行合約方法
此時挖礦程式要一直工作

>token.issue(eth.accounts[0],30,{from: eth.accounts[0]})"0xae0fafd672cfcbaf3bf717a2dee49db3017d4da87cb3e087f2b3e2f28f933cf7">token.getBalance(eth.accounts[0])100> token.transfer(eth.accounts[1], 30, {from: eth.accounts[0]})"0x0df5fb59e8c96cb0884db40163f50fba9d65ad6e03080c21ba7d9fc2ca9663f0"> token.getBalance(eth.accounts[1])30

參考文章
以太坊私鏈與智能合約部署入門教程
以太坊之部署智能合約

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.