用我的智能合约对你 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


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

你可能感兴趣的:(用我的智能合约对你 say “Happy Mid-autumn Day !”)