美文网首页区块链技术 blockchain区块链研习社区块链开发
以太坊平台智能合约开发之HelloWorld(2)

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

作者: 孔祥子看天下 | 来源:发表于2018-01-26 18:08 被阅读164次

    智能合约说的高大上,其实就是一段分布式执行的代码;根据一定的输入,执行确定的输出;和任何编程语言一样,都从一个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)

      本文链接:https://www.haomeiwen.com/subject/jjeiaxtx.html