主页 > imtoken钱包官网下载2.0 > 第二课:如何在以太坊中实现最简单的智能合约“Hello World”的运行

第二课:如何在以太坊中实现最简单的智能合约“Hello World”的运行

imtoken钱包官网下载2.0 2023-02-09 07:41:04

以太坊合约怎么做_以太坊智能合约取款_以太坊合约赚钱快吗

【本文目的】

完成以太坊中最简单的智能合约“Hello World”的编写和运行

【技术收获】

通过本文的实践,您将有以下收获:

启动GETH 以太坊钱包环境 准备账户 创建账户 转账到新账户 解锁账户 编写合约代码 部署合约 运行合约

【实践课程一览】

第一课:如何在WINDOWS环境下搭建以太坊开发环境

第二课:如何在以太坊中实现最简单的智能合约“Hello World”的运行

第4课以太坊开发框架Truffle从入门到实战

第六课技术小白如何开发DAPP区块链应用(以宠物店为例)

第七课 如何在45分钟内发行代币(TOKEN)并进行在线交易

第八课 如何调试以太坊官网智能合约众筹案例

【说明】未列出的课程为非实践性知识普及课程。 所有区块链文章以太坊合约怎么做,请参考“区块链入门”专栏。

1.启动GETH以太坊钱包环境

如果您对以太坊智能合约开发没有概念(本文假设您已经了解这些概念),建议先阅读介绍文章。 就像首先学习任何编程语言一样,您开始的第一个程序是 Hello World。 今天我们将从一步步搭建以太坊智能合约开发环境开始,讲解如何编写智能合约的Hello World。

【说明】强烈建议新手使用Browser-Solidity进行开发。

Browser-Solidity 是基于浏览器的 Solidity,所以你不需要安装 Solidity。 本文中的 Hello World 教程也将基于 Browser-Solidity。 如果你想自己安装,请参考Solidity安装指南。

geth是一个以太坊客户端,现在使用geth启动一个以太坊(开发者)网络节点。

geth --datadir testNet --dev console 2>> test.log

执行命名后,会进入geth控制台,光标会停在右箭头处,像这样:

以太坊合约赚钱快吗_以太坊合约怎么做_以太坊智能合约取款

以太坊合约怎么做_以太坊智能合约取款_以太坊合约赚钱快吗

命令参数说明:

–dev 启用开发者网络(模式),开发者网络将使用POA共识,默认预分配一个开发者账户并自动开始挖矿。

–datadir 后面的参数为区块数据和密钥存放目录。

第一次输入命令后,会在当前目录下创建一个testNet目录,用于存放数据。

console 进入控制台

2>> test.log 表示将控制台日志输出到test.log文件

为了更好的理解,建议打开一个新的命令行终端来实时显示日志:

tail -f test.log

输出截图:

以太坊合约怎么做_以太坊智能合约取款_以太坊合约赚钱快吗

Xshell新建一个窗口用于输出LOG结果

2.准备账户

部署智能合约需要一个外部账户。 我们先来看看分配的开发者账号。 使用以下命令在控制台查看账号:

eth.accounts

回车后,返回一个账户数组,其中包含一个默认账户,

也可以使用 personal.listAccounts 查看帐户。

个人.listAccounts

本文作者已创建账号,一共有2个账号:

以太坊合约怎么做_以太坊智能合约取款_以太坊合约赚钱快吗

eth.getBalance(eth.accounts[0]) 表示账户列表中的第一个账户

回车后可以看到一大笔余额,比如:

1.15792089237316195423570985008687907853269...e+77

以太坊智能合约取款_以太坊合约赚钱快吗_以太坊合约怎么做

开发者账户余额过多。 如果您使用此帐户部署合约,您将无法看到余额变化。 为了更好的体验完整的过程,在这里选择创建一个新账户。

以太坊合约怎么做_以太坊智能合约取款_以太坊合约赚钱快吗

3.创建一个帐户

使用以下命令创建一个帐户:

个人的。 newAccount("邓肯旺")

duncanwang为新账号密码,回车返回新账号。

可以看到账户数组包含3个账户,新账户在第三个(索引2)位置。

现在查看账户的新余额,可以发现是0。

eth.accounts

伦理。 getBalance(eth.accounts[2])

截图如下:

以太坊合约怎么做_以太坊智能合约取款_以太坊合约赚钱快吗

4. 将资金转入新账户

我们知道没有余额的账户是不能部署合约的,所以我们从默认账户转1个ETH到新账户,使用如下命令(请使用自己的eth.accounts对应输出账户):

eth.sendTransaction({from: '0x8cfa24a398efd88de3843d7834cb07fce41e6f46', to: '0x0f1b9da153d910f6ae150145924615c23bbf5176', value: web3.toWei(99, "ether")})

伦理。 getBalance(eth.accounts[2])

在打开的tail -f test.log日志终端,可以同时看到挖矿记录

再次查看新账户余额,可以看到新账户有99个以太币(显示单位是wei,所以有18个0)。

以太坊合约怎么做_以太坊智能合约取款_以太坊合约赚钱快吗

5.解锁账户

在部署合约之前,需要先解锁账户(就像银行转账输入密码一样),使用如下命令:

personal.unlockAccount(eth.accounts[2],"duncanwang");

“duncanwang”是之前创建账号时的密码

以太坊合约赚钱快吗_以太坊合约怎么做_以太坊智能合约取款

解锁成功后,账户就准备好了,接下来就是写合约代码了。

以太坊合约怎么做_以太坊智能合约取款_以太坊合约赚钱快吗

【阐明】

geth的这些函数的接口文档是哪个?需要学习GETH的所有库函数,可以参考官网文档

1、admin、debug、miner、personal、txpool实例的接口函数【控制台说明】

2、eth实例的接口函数【例如eth_protocolVersion去掉下划线变成eth.protocolVersion】

6. 编写合约代码

下面开始编写第一个智能合约代码,solidity代码如下:

pragma solidity ^0.4.21;
contract hello {
    string greeting;
    function hello(string _greeting) public {
        greeting = _greeting;
    }
    function say() constant public returns (string) {
        return greeting;
    }
}

简单说明一下,我们定义一个名为hello的合约,在合约初始化的时候保存一个字符串(我们会传入hello world),每次调用say时返回一个字符串。

将这段代码写入(复制)到Browser-Solidity中,如果没有报错,点击Details获取部署代码,如:

以太坊合约怎么做_以太坊智能合约取款_以太坊合约赚钱快吗

以太坊合约赚钱快吗_以太坊合约怎么做_以太坊智能合约取款

在弹出的对话框中找到WEB3DEPLOY部分,点击复制,粘贴到编辑器中,修改初始化字符串为hello world。

以太坊合约赚钱快吗_以太坊合约怎么做_以太坊智能合约取款

写博文时(2018/3/30),solidity的版本是0.4.21。 Solidity 发展很快,solidity 版本可能不兼容。 您可以在 Browser-Solidity 的 Settings 中选择对应的编译器版本。 Browser-Solidity也在不断更新,截图可能和你看到的界面不一样。 7.部署合约

将Browser-Solidity生成的代码复制到编辑器中以太坊合约怎么做,修改后的代码如下:

var _greeting5 ="hello world" ;
var helloContract5 = web3.eth.contract([{"constant":true,"inputs":[],"name":"say","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_greeting5","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]);
var hello = helloContract5.new(
   _greeting5,
   {
     from: web3.eth.accounts[2], 
     data: '0x6060604052341561000f57600080fd5b6040516102b83803806102b8833981016040528080518201919050508060009080519060200190610041929190610048565b50506100ed565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061008957805160ff19168380011785556100b7565b828001600101855582156100b7579182015b828111156100b657825182559160200191906001019061009b565b5b5090506100c491906100c8565b5090565b6100ea91905b808211156100e65760008160009055506001016100ce565b5090565b90565b6101bc806100fc6000396000f300606060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063954ab4b214610046575b600080fd5b341561005157600080fd5b6100596100d4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009957808201518184015260208101905061007e565b50505050905090810190601f1680156100c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100dc61017c565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101725780601f1061014757610100808354040283529160200191610172565b820191906000526020600020905b81548152906001019060200180831161015557829003601f168201915b5050505050905090565b6020604051908101604052806000815250905600a165627a7a72305820427519fec7c58323ba692e485469b971a098bccaeb0ddf7a48f15b917d2d13910029', 
     gas: '4700000'
   }, function (e, contract){
    console.log(e, contract);
    if (typeof contract.address !== 'undefined') {
         console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
    }
 })

【注意】

第一行:修改变量名为_geeting5,修改字符串为Hello World

第2行:合约变量名为helloContract5,里面的引用改为_greeting5

以太坊智能合约取款_以太坊合约赚钱快吗_以太坊合约怎么做

第3行:修改合约实例变量名为helloContract5,然后就可以直接使用实例调用函数了。

第6行:修改部署账户为新账户索引,这里改为[2],即使用新账户部署合约。

第8行:需要支付的gas费,IDE已经帮我们估算好了。

第9行:设置部署回调函数。

其中,变量名是全局的,_geeting5只是一个例子,代表一个新定义的变量。

该副本将位于 geth 控制台中。 回车后可以看到输出,说明合约已经部署成功。

以太坊合约怎么做_以太坊智能合约取款_以太坊合约赚钱快吗

在打开的tail -f test.log日志终端,可以同时看到挖矿记录

现在让我们检查新帐户的余额:

伦理。 getBalance(eth.accounts[2])

输出不再是 99 ETH,它比以前少了。

以太坊合约怎么做_以太坊智能合约取款_以太坊合约赚钱快吗

8.运行合约

执行合约功能:

你好。 说()

输出 Hello World,我们的第一个合约 Hello World 运行成功。

以太坊合约怎么做_以太坊智能合约取款_以太坊合约赚钱快吗

更重要的是,合约的意义在于体验智能合约的开发过程。 对于初学者,可以选择先放弃一些细节。 开发流程打开后,可以增加信心进行下一步的学习。

参考文件

1.智能合约开发环境搭建及Hello World合约

2. GETH账户管理接口文档

3、geth JSON-RPC接口调用函数

4、GETH API接口管理