主页 > imtoken钱包 官方网站 > 以太坊开发实例

以太坊开发实例

imtoken钱包 官方网站 2023-05-25 07:18:59

本文不会介绍智能合约和 Solidity。 您可以参考其他资料以了解更多信息。 本文重点介绍基于以太坊的 Dapps 的开发、测试和部署中涉及的流行框架的使用。

一、重要工具介绍

1、Truffle:是以太坊的开发环境、测试框架和资产通道。 换句话说,它可以帮助您开发、发布和测试智能合约等。 您可以阅读有关 Truffle Suite 的文档以了解更多信息。

2.Ganache:以前叫TestRPC。 如果您几个月前阅读了该教程以太坊区块浏览器api,则可能他们在使用 TestRPC 的上下文中使用了 Truffle。 TestRPC 和 Truffle 整合后更名为 Ganache。 Ganache 的工作很简单:创建一个虚拟的以太坊区块链并生成一些我们将在开发过程中使用的虚拟账户。

3. Mist:Mist 是一款用于分布式网络应用程序的浏览器,相当于仅用于 Dapps 的 Chrome 或 Firefox。 目前,它仍然不安全,所以你还不能在不受信任的 dapps 中使用它。

4. Ethereum Wallet:它是Mist的一个版本,但只启动一个dapp——Ethereum Wallet。 Mist 和以太坊钱包只是 UI(用户界面)前端,我们还需要一个核心程序将我们连接到以太坊区块链(它可以是真正的以太坊区块链或测试版)。

5Geth:Geth 是将你连接到区块链的核心应用程序,它还可以启动一个新的区块链(在我们的示例中,我们将创建一个本地测试网区块链)、创建合约、挖掘以太币等。

2、安装(基于windows7,其他os仅供参考)

1、首先需要安装node.js,本文不再介绍;

2、truffle安装:npm install -g truffle,如果有错误,请参考Truffle文档;

3. Ganache 安装:npm install -g ganache-cli

如果您对此不确定,请在此处访问 Ganache 的 Github 页面。

注意:这是 Ganache 的 GUI(图形用户界面),但由于我们都是程序员,所以我们将使用 CLI(命令行界面)。

三、开发方式一(基于Truffle和Ganache)

首先新建一个文件夹,在文件夹目录下输入cmd。

truffle init

命令行输出如下:

image

这时候会初始化一个工程目录。

image

然后将写好的Wrestling.sol(写好的智能合约,下载地址)文件粘贴到contracts文件夹中。 接下来,打开“migrations”文件夹并创建一个名为“2_deploy_contracts.js”的新文件。 迁移只是帮助我们将合约部署到区块链的脚本。

将下面的代码粘贴到其中,然后保存。

const Wrestling = artifacts.require("./Wrestling.sol")
module.exports = function(deployer) {
    deployer.deploy(Wrestling);
};

第 1 行导入“Wrestling.sol”文件(从“contracts”文件夹导出),第 4 行将其部署到区块链。

现在,回到根目录,你会看到两个文件,“truffle.js”和“truffle-config.js”。 如果你在 Windows 上,删除“truffle.js”; 如果你在另一个系统上,删除一个或两个,没关系。 这样做的原因是在 Windows 上存在命名问题,当我们想要执行 Truffle 命令时,它会打开“truffle.js”配置文件而不是读取其中的数据。

我在 Windows 上编写本教程,所以我删除了“truffle.js”文件。 然后我会把这段代码放在 truff-config.js 中:

module.exports = {
  // See 
  // for more about customizing your Truffle configuration!
  networks: {
    development: {
      host: "127.0.0.1",

sitejianshu.com 以太坊区块中文浏览器_以太坊区块浏览器api_以太坊区块浏览

port: 7545, network_id: "*" // Match any network id } } };

基本上它说当使用开发网络时,使用端口 7545 连接到位于 127.0.0.1 (localhost) 的主机。

现在我们准备好在区块链上测试代码了!

4. 方法一测试

在这里,将使用 Ganache。

启动一个新的命令行并输入以下命令:

ganache-cli -p 7545

它所做的就是告诉 ganache-cli 在端口 7545 上启动。

Ganache 会为我们生成测试账户,每个账户默认解锁 100 个以太币,所以我们可以自由地从那里发送以太币。 第一个示例帐户是这个人:

image

现在,回到我们的第一个命令行界面,执行两个命令:

truffle compile
truffle migrate --network development

Compile 会将我们的 Solidity 代码编译成字节码(以太坊虚拟机 (EVM) 理解的代码),在我们的例子中,Ganache 模拟 EVM。

Migrate 会将代码部署到区块链上,我们之前在“truffle-config.js”文件中设置了“development”网络,我们可以在其中找到区块链。

现在,如果一切按预期进行,您应该会看到:

image

请注意,此处显示了实例化的 Wrestling 合约的地址。

在运行ganache-cli的命令行界面,可以看到正在执行的事务:

image

请注意,它显示了实例化的 Wrestling 合约的地址。

现在输入以下命令启动 Truffle 控制台以太坊区块浏览器api,这将帮助我们与 ganache 区块链进行交互。

truffle console --network development

首先,我们将执行这个命令:

account0 = web3.eth.accounts[0]
account1 = web3.eth.accounts[1]

它将第一个账户的地址分配给变量account0,第二个账户的地址分配给变量account1。 Web3 是一个 JavaScript API,它包装了 RPC 调用以允许我们与区块链进行交互。

然后我们输入:

Wrestling.deployed().then(inst => { WrestlingInstance = inst })

sitejianshu.com 以太坊区块中文浏览器_以太坊区块浏览器api_以太坊区块浏览

它将对 truffle 部署的合约实例的引用分配给变量“WrestlingInstance”。

执行下一行:

WrestlingInstance.wrestler1.call()

它将返回参与者 1 的地址,在我们的例子中是第一个帐户。 在迁移过程中,Truffle 会从 Ganache 中选择默认账户,这是第一个账户,因为我们在迁移过程中或在 Truffle 配置文件中没有指定其他地址。

然后我们将第二个账户注册为交易对手:

WrestlingInstance.registerAsAnOpponent({from: account1})

在这里,“from”指令告诉函数应该从哪个帐户触发交易。

执行此行后,它应该返回如下内容:

image

请注意,此交易使用 Gas 并触发“WrestlingStartsEvent”事件。

您可以通过执行以下代码来检索第二个参与者的地址:

WrestlingInstance.wrestler2.call()

现在,玩家可以开始摔跤了:

WrestlingInstance.wrestle({from: account0, value: web3.toWei(2, "ether")})
WrestlingInstance.wrestle({from: account1, value: web3.toWei(3, "ether")})
// End of the first round
WrestlingInstance.wrestle({from: account0, value: web3.toWei(5, "ether")})
WrestlingInstance.wrestle({from: account1, value: web3.toWei(20, "ether")})
// End of the wrestling

“value”命令用于在交易中发送以太币。 "web3.toWei(5, "ether")"表示发送5个以太币,这个值会转化为Wei。 Wei 是以太币的基本单位(最小面额)。 单击此链接可查找更多信息。

执行最后一行时,account1 将成为大赢家,因为我们总共质押了 23 个以太币,是我们在 account0 中质押的两倍多。

给你的一个小练习:从合约中提取以太币。

现在,由您决定如何使用 Truffle 和 Ganache 的高级功能。 您可以从阅读文档开始,或者,如果您感到不知所措或想巩固刚刚学到的知识,这里有一个很好的 Truffle 介绍。

5.开发方式二(geth+mist或者以太坊钱包)

好了,我们已经使用 Ganache 进行开发,现在我们想尝试一些更接近真实运行环境的东西,哪怕只是熟悉一下运行环境。

安装:

首先,下载geth。 在 Windows 上,您可能需要将 geth 的安装文件夹添加到您的 PATH 变量中。

下载 Mist 或以太坊钱包。 其实在使用上都是一样的,所以选择哪一个都无所谓。 (本文下载Mist)

两者直接下载解压即可。 您需要将解压后的文件添加到 PATH 中。

创建本地私有测试网络

在项目的根目录中,创建一个新文件并将其命名为“genesis.json”。 然后将以下内容复制进去。

{

以太坊区块浏览_sitejianshu.com 以太坊区块中文浏览器_以太坊区块浏览器api

"difficulty" : "0x20000", "extraData" : "", "gasLimit" : "0x8000000", "alloc": {}, "config": { "chainId": 15, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 } }

注:json参数说明:

image

目录如下:

image

“genesis.json”是geth创建新区块链所需的配置文件。 现在了解这个文件的内容并不重要。

如果您在未指定任何参数的情况下运行 Geth,它将尝试连接到主网。 Mainnet是以太坊的主网,是真正的以太坊区块链。

如果您在不指定任何参数的情况下运行 Mist,如果 geth 实例也在运行,它将报告错误。 但是如果你让 Mist 连接到一个正在运行的 geth 实例(我们稍后会做),它会工作正常。 如果您在没有运行 geth 实例的情况下运行 Mist,它将启动一个新的 geth 实例,并最终询问您应该从哪个区块链下载块。

虽然有一个公共以太坊测试网络,但我们将使用我们之前创建的“genesis.json”文件在本地创建一个私有测试网络。

启动另一个命令行界面并输入以下命令(确保在项目根文件夹中运行它):

geth --datadir=./chaindata/ init ./genesis.json

启动 geth 并指定区块链的存储位置,这里是 chaindata 文件夹(它会自动生成),然后我们使用“genesis.json”配置文件对其进行初始化。

接下来,我们使用以下命令启动 geth:

geth --datadir=./chaindata/ --rpc

有必要使用“--rpc”参数让 geth 接受 RPC 连接,这样 truffle 才能连接到 geth。

打开另一个命令行界面,启动Mist或Ethereum Wallet,使用相同的参数:

mist –rpc http://127.0.0.1:8545

“-rpc”参数告诉 Mist(或以太坊钱包)连接到我们刚刚启动的 geth 实例。

在“钱包”选项卡中,按添加帐户创建一个新钱包:

image

请注意,我们使用的是专用网络。 请注意,您不应出于开发目的在主网上花费以太币。

image

我将创建一个密码为“123456789”的帐户。 在真实环境中,使用更强的密码。

以太坊区块浏览_sitejianshu.com 以太坊区块中文浏览器_以太坊区块浏览器api

打开一个新的命令行界面并运行以下命令:

geth attach

注意:在windows上可能会出现以下错误:

image

使用此命令:

geth attach  ipc:\\.\pipe\geth.ipc

运行后:

image

这将运行 geth 的控制台,我们现在可以与之交互。

我们将在“geth attach”控制台中运行此命令,而不是通过在 Mist UI 上创建的主帐户:

miner.start()

输出如下:

image

它将启动一个矿工,该过程将确认交易,几秒钟或几分钟后(取决于您的计算机),您应该开始看到以太币添加到您的余额中(并且您还将拥有主账户)。

image

请注意,如果您没有足够的可用 RAM,它可能根本不会开始挖掘。 您可以使用“miner.stop()”命令停止挖矿。

image

现在,再次打开“truffle-config.js”文件并修改如下:

module.exports = {
  // See 
  // for more about customizing your Truffle configuration!
  networks: {
    development: {
      host: "127.0.0.1",
      port: 7545,
      network_id: "*"
    },
    ourTestNet: {
      host: "127.0.0.1",
      port: 8545,
      network_id: "*" 
    }
  }

以太坊区块浏览器api_sitejianshu.com 以太坊区块中文浏览器_以太坊区块浏览

};

“ourTestNet”是连接到 geth 实例所需的配置。 Geth 默认在端口 8545 上启动。

在我们启动“geth attach”的命令行界面中,我们解锁帐户。 因此,有了它,我们可以从 Truffle 迁移智能合约。 使用以下指令:

personal.unlockAccount('0x6AC4660c960Aaf5d9E86403DDAcB4791767e5869', '123456789')

输出如下:

image

这里我使用了我刚创建的帐户地址,创建时它会是一个不同的地址,我将用于这些测试的密码“123456789”对你来说也会不同。 请注意,密码以纯文本形式显示,在真实账户中,您应该使用不同的方法。

现在,在项目根目录中,运行以下命令:

truffle migrate --network ourTestNet

它将开始将合同转移到运行 geth 的区块链。 如果您之前停止挖矿,请立即开始挖矿,否则将不会执行迁移。 如果迁移成功,您应该会看到如下输出:

image

现在,通过运行以下命令启动 Truffle 控制台:

truffle console --network ourTestNet

然后运行这两个命令:

Wrestling.address
JSON.stringify(Wrestling.abi)

你会看到这样的输出:

image

第一行返回部署的 Wresting 合约实例的地址。

第二行返回 Wresting 合约 ABI。 ABI 基本上是对合约的描述。 它包含函数、变量和其他因素的列表。

现在,回到 Mist,我们打开 Contracts 中的选项卡并查看合同。

image

然后,复制之前部署的Wrestling合约的地址和ABI:

windows命令行工具坑坑洼洼,不可复制,大家自己琢磨吧!

image

单击“确定”,它将显示在您要查看的合约列表中。 单击它,它将打开合同页面。 如果你向下滚动,你会看到这样的东西:

image

使用“选择功能”部分与合约进行交互。 这和我们之前使用 Truffle 控制台是一样的。

就是这样,我们了解了 Ganache 和 geth 的工作原理。 当你想将合约部署到真正的区块链时,你应该使用第二种方法并将geth连接到主网。

注意:您可以在不使用 Truffle 迁移系统的情况下直接在 Mist 上部署合约,这里是该过程的示例视频。 虽然在实际的开发过程中,使用Truffle其实更有趣,因为如果你想以模块化的方式开发你的智能合约,你可以导入多个其他的智能合约和脚本。

另外:您可以在基本的 nodepad 应用程序上编写合同代码,然后使用一些受信任的第三方门户将其部署到主网上,但我不建议这样做。

在这篇文章中,我在参考原文中做了自己实践中的一些问题,以及命令行的输出,让新手有一个更直观的认识。

致敬原创: