以太坊本地开发环境以及智能合约

首先安装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

参考文章
以太坊私链与智能合约部署入门教程
以太坊之部署智能合约

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容

  • 先访问github上go语言开发客户端网址: https://github.com/ethereum/go-eth...
    iOS小飞羊阅读 1,238评论 0 0
  • #131 · 匿名 | 表白 1天前 希望四年的点滴回忆,能再用四年忘记吧~
    山工院表白墙阅读 134评论 0 0
  • 001配套定律 当女生买了一件衣服之后就会想着要配一件打底,一双适合的鞋子,一些好看的挂饰。所以,尝试着在原来的衣...
    芬芬vstar阅读 385评论 0 1
  • 你我之间 也许根本不需要任何的标注 从一开始就有了无法逾越的距离 情不知所起 一往而情深 当我鼓足勇气 准备好好爱...
    七彩糖阅读 236评论 0 3
  • 夜,宁静的夜,除夕的夜 仪式的喧嚣过后,人们酣然入梦 城市像卸空的超载货车,复归宁静 街灯兀自炫耀,像谄媚的花朵 ...
    请再说一遍阅读 411评论 7 29