以太坊平台智能合约开发之HelloWorld(2)

智能合约说的高大上,其实就是一段分布式执行的代码;根据一定的输入,执行确定的输出;和任何编程语言一样,都从一个hello world 开始,我们从hello ethereum开始吧!

环境配置

这里说的是mac平台;其实很简单。打开控制台,简单运行如下命令:
brew tap ethereum/ethereum brew install ethereum
提示,如果没有安装brew,可以在mac上安装一下这个命令;

启动

安装完成之后,在终端中geth就可以用了;这个命令其实就是一个以太坊客户端;
geth --datadir helloEthereum --dev console 2>>hello-eth-log.txt
启动之后如下

image.png

命令解释,可以参考geth帮助
geth --h
--datadir : 会在datadir后面紧跟的路径下下面创建一个文件夹以保存区块数据库和秘钥;
--dev :开发者模式,默认共识方法是POA,会自动创建一个挖矿账号
再后面的意思,启动命令行模式并输出日志到log日志中。

如果想实时查看这个文件的内容,可以Command+T新建一个Tab页,如果日志文件有更新,在tab页中可以实时查看。


image.png

熟悉一下简单的命令

查看账户
eth.accounts
或者
personal.listAccounts

image.png

效果是等价的!

查看金额
eth.getBalance(eth.accounts[0])
或者
eth.getBalance('0x8e3d0ddfe74009f33f0e8b44b3b03fb9b371b885')

image.png

新建账号
personal.newAccount("bitwiki")
新建一个账号,密码是bitwiki

image.png

查看新账余额
eth.getBalance("0x70ef644a8524d953d4a24c403ac637748ab388c6")

image.png

给新账号转账
eth.sendTransaction({from:'0x8e3d0ddfe74009f33f0e8b44b3b03fb9b371b885',to:'0x70ef644a8524d953d4a24c403ac637748ab388c6',value:web3.toWei(10,'ether')})

image.png

这里做了一笔交易,日志文件就会显示,已经挖了一个区块


image.png

编写智能合约

打开浏览器(最好chrom浏览器)
https://ethereum.github.io/browser-solidity/#optimize=false&version=soljson-v0.4.19+commit.c4cbbb05.js

智能合约如下(其实就是简单的输出)
`
pragma solidity ^0.4.0;
contract HelloWorld {
string message;

function HelloWorld(string _message) public {
     message = _message;   
}

function echo() public constant returns(string){
    return message;
}

}
`

image.png
image.png

当然,详情里面还有很多其他信息,例如编译目标版本、metadata、字节码等;可以慢慢研究。
我们只需要部署版本的智能合约代码即可,简单修改
var _message = /* var of type string here */ ; var helloworldContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"echo","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_message","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]); var helloworld = helloworldContract.new( _message, { from: web3.eth.accounts[1], data: '0x6060604052341561000f57600080fd5b6040516102b83803806102b8833981016040528080518201919050508060009080519060200190610041929190610048565b50506100ed565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061008957805160ff19168380011785556100b7565b828001600101855582156100b7579182015b828111156100b657825182559160200191906001019061009b565b5b5090506100c491906100c8565b5090565b6100ea91905b808211156100e65760008160009055506001016100ce565b5090565b90565b6101bc806100fc6000396000f300606060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806329f4acb014610046575b600080fd5b341561005157600080fd5b6100596100d4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009957808201518184015260208101905061007e565b50505050905090810190601f1680156100c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100dc61017c565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101725780601f1061014757610100808354040283529160200191610172565b820191906000526020600020905b81548152906001019060200180831161015557829003601f168201915b5050505050905090565b6020604051908101604052806000815250905600a165627a7a723058204af995fa7b3dbfa345a36b876cc7b21f1cb605ae8ce7e55af377ff151f030c9c0029', gas: '4700000' }, function (e, contract){ console.log(e, contract); if (typeof contract.address !== 'undefined') { console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash); } })

有两个地方值得注意
1、 from: web3.eth.accounts[1], 这个代码代表用哪一个账户部署合约,这里选择第2个也就是我们新建的那个
2、var _message = /* var of type string here */ ; 把注释去掉,改成'Hello Etherum'

回到控制台(geth这个终端下面)
粘贴刚才的部署版本合约代码,回车
如果不出意外,回报一个错:

image.png

先解锁账户
personal.unlockAccount(eth.accounts[1]),根据提示输入密码 bitwiki,当然,也可以把bitwiki密码放在第二个参数中。

再次粘贴部署版本合约,回车,成功


image.png

运行合约

helloworld.echo();

image.png

部署了之后,你会发现账户余额,变少了 !!!!!

第一个智能合约就算完成了。虽然很简单,但是流程算是走通了 !!!

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

推荐阅读更多精彩内容