以太坊平台智能合约开发之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

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

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

你可能感兴趣的:(以太坊平台智能合约开发之HelloWorld(2))