用我的智能合约对你 say “Happy Mid-autumn Day !”

【本文由赞我(zaneds.com)独家冠名】

中秋节到了,我用以太坊客户端geth创建了一个智能合约“Happy Mid-autumn Day”祝大家中秋节快乐。本文是利用geth在window上创建智能合约“Happy Mid-autumn Day”的全步骤进行说明,下面的图大部分都是我边做边截图下来的,主要是步骤图。有不懂的可以在下面问,我会的尽量解答。

让我们先来看看最后调用智能合约成功的图片来为大家加油鼓劲!

首先介绍一下什么是geth:geth是基于go语言开发的可以操作ETH节点的客户端工具。在本地生成ETH节点,可以对节点进行操作,例如生成账户信息、查看账户余额、转账,查看合约信息和挖矿等操作。

1.geth下载https://ethereum.github.io/go-ethereum/downloads/

2.测试是否安装成功:点击运行输入“cmd”,Enter,进入终端,输入“geth version”后出现版本号就说明已下载完成。

3.在D盘创建文件夹gethDev

4.在以太坊本地网络D盘启动节点:和ETH网络进行通讯

输入命令:“geth --datadir D:\gethDev --dev --dev.period=1 console 2>>D:\gethDev\file_to_log_output”

(注释:datadir为节点所在目录;

dev以开发者模式启动,基于Poa的共识机制,它默认在本地节点上创建一个默认的账户,并且这个默认账户会有一定的以太币余额;

dev.period=0意思是只有在交易发生的时候才会挖,而dev.period=1代表一直在持续不断地挖矿;console意思是把我们的启动节点作为一个命令控制台来启动,启动以后可以在命令控制台执行相应的命令;)

节点控制台启动成功,这时D盘的gethDev 文件夹里会出现几个文件夹:

其中geth子文件夹里保存的是节点数据;子文件夹keystore里保存的是私钥信息;file_to_log_output 是我刚刚指定的是日志输出文件,记录的是我们的节点在执行过程中实时输出的一些log信息。

5.成功启动节点控制台以后,执行一系列命令。

首先看看有没有账户在里面存在,输入“eth.accounts”     

(注释:查询在全网的节点里有多少个账户?)

从图中可以看到默认有一个账户。我们再创建一个账户,输入命令“personal.newAccount('123456')”

(注释:该命令是创建一个密码为123456的新的账户地址)

然后我们查询账户信息,即你可以再查询下这条链上的账户总共有多少,输入命令“eth.accounts” ,这时你会发现有两个账户。

然后你再查询账户余额:输入命令 “eth.getBalance(eth.accounts[0])”

(注释:此命令代表第一个账户用(eth.accounts[0])来表示,balance代表余额。)

看上图账户1的余额还是很多的,因为是开发模式会默认给很多以太币在里面。注意这里启用的不是以太坊公网,而只是我们本地的以太坊网络。启动本地网络是为了开发更方便!接着看一下第二个账户的余额,输入命令“eth.getBalance(eth.accounts[1])”,可以看到账户2的余额为0。

下面学习如何增加账户余额,即如何给账户转账?输入命令“eth.sendTransaction({from: user1,to:user2,value: web3.toWei(3,"ether")})”

(注释:ether代表以太币的单位;命令的意思是从user1转账3eth到user2)

因为在控制台上并没有user,所以在输入上面的命令前我们先创建一个user1让它等于我们的用户1的地址,输入命令:“user1=eth.accounts[0]”。

同理,再创建一个user2让他等于我们的用户2的地址,输入命令:“user2=eth.accounts[1]”

然后再输入上面转账的命令:“eth.sendTransaction({from:user1,to: user2,value: web3.toWei(3,"ether")})”

上图显示转账成功!这时可以验证查询一下转账成功后user2的余额是多少?输入命令“eth.getBalance(user2)”:

从上图可以确定user1向user2转账成功了,注意这里写user2或eth.accounts[1]都可以!

6.编写智能合约“Happy Mid-autumn Day”

实现功能:把智能合约代码部署到ETH公链上,在调用这个合约时让他对外面说一句话:“Happy Mid-autumn Day”。

step1:了解“happy mid-autumn day”代码

pragma solidity ^0.4.18;

contract hello {

    string greeting;


    function hello(string _greeting) public {

        greeting = _greeting;

    }

    function say() constant public returns (string) {

        return "happy mid-autumn day!";

    }

}

(注释:智能合约以太坊上的开发语言叫solidity,注意在第一行要声明我们是4.18的版本,也就是告诉我们的以太坊虚拟机,我们的智能合约采用的是开发语言版本是solidity4.18版本)

step2.访问在线编译器brower-solidity,以便编译智能合约

因为以太坊用的是以太坊EVM,无法直接读懂代码,要编译成EVM能看懂的字节码文件。为了编译智能合约,我们需要打开网页版的编译工具:这个工具叫做brower-solidity,访问地址:https://ethereum.github.io/browser-solidity

在brower-solidity输入上文中的代码并开始编译。

step3.查看编译后的details文件中的web3 deploy

这里的第二行hello contract构造了一个智能合约的接口函数,里面定义了函数和属性。

step4.在节点控制台设置接口abi=[]里面的内容

在geth控制台输入命令:abi=[{"constant":true,"inputs":[],"name":"say","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_greeting","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]

step5.使用eth.contract(abi)定义一个合约

在geth控制台内输入命令:

happymid-autumnday=eth.contract(abi)

注意上面的abi要输入step4中的"abi="后的内容!

step6.把编译器生成的合约二进制代码进行赋值

在geth控制台中输入命令:sampleHello=编译器中的data

即输入命令:sampleHello='0x608060405234801561001057600080fd5b50604051610243380380610243833981018060405281019080805182019291905050508060009080519060200190610049929190610050565b50506100f5565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061009157805160ff19168380011785556100bf565b828001600101855582156100bf579182015b828111156100be5782518255916020019190600101906100a3565b5b5090506100cc91906100d0565b5090565b6100f291905b808211156100ee5760008160009055506001016100d6565b5090565b90565b61013f806101046000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063954ab4b214610046575b600080fd5b34801561005257600080fd5b5061005b6100d6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009b578082015181840152602081019050610080565b50505050905090810190601f1680156100c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60606040805190810160405280601581526020017f6861707079206d69642d617574756d6e206461792100000000000000000000008152509050905600a165627a7a723058201681085277315ac6c8ed4259c9c9b954434d759cea45d7334cfd2fba03a8e75e0029'

step7.把智能合约部署上链

输入命令:“theHelloSample=happymidautumnday.new(1,{from:eth.accounts[0],data:sampleHello,gas:3000000})”

step8.查看交易细节

在geth控制台输入命令:

samplerecpt=eth.getTransactionReceipt()

注意()里是自己上一步骤的交易哈希地址

step9.获取合约

在geth控制台输入命令:

samplecontract=happymidautumnday.at("上一步的contractAddress")

step10.调用合约:

在geth控制台输入命令:

samplecontract.say()

看,我设置的智能合约代替我向大家说出了中秋节快乐哦!


综上,手把手教你利用geth在window上创建智能合约“Happy Mid-autumn Day”的全步骤到此就完成了,其实看起来复杂其实很简单,快行动起来,部署你的智能合约吧!


END


我是安晴,一个正在进击中的区块链内容创作者。如果你也对区块链感兴趣,欢迎和我一起交流,共同成长!

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

推荐阅读更多精彩内容