「教程」用Solidity开始编写你的第一个智能合约

匆匆过客 提交于 2021-01-10 21:25:56

本文翻译自: Gerald Nash《Build Your First Smart Contract》

原文地址:https://medium.com/crypto-currently/build-your-first-smart-contract-fc36a8ff50ca

由微信公众号“Wancloud万云”翻译并发布于公众号上。

 

这篇文章,我们将用使用编程语言Solidity教大家编写一个简单的counter智能合约。Solidity这种语言与JavaScript相似。

 

开始之前,您需要安装的工具:

1. Ganache:这将是我们用来创建仅在我们的计算机上运行的私有区块链的工具。链接:http://truffleframework.com/ganache/

2.MyEtherWallet副本,在这种情况下,URL托管的网站将不起作用。链接:https://github.com/kvhnuke/etherwallet/releases 注意:下载的版本是etherwallet-v3.xx.x.x.zip。

 

安装完成后,我们开始访问https://remix.ethereum.org/,打开这个网址后显示如下:

这是Remix,一个Solidity语言的在线编译器,我们将用此编译器来编写智能合约代码。

 

第一次访问该页面时,我们需要将本文编辑器预加载的代码删除,并替换为如下内容:

 

这是我们counter的代码。正如你所看到的,它有一个变量和三个函数。变量count是一个私有整数,这意味着它不能被合约以外的任何人访问。第一个函数incrementCounter()通过递增其值来改变或改变count的值。 第二个函数decrementCounter()通过递减其值来改变count的值。第三个函数getCount()访问count并将其值返回给任何函数。

 

当把counter的代码粘贴到Remix时,它应该如下所示并自动编译:

 

我们将保留该选项卡,以便稍后返回。 现在,打开Ganache,会显示如下所示:

屏幕最上方所显示“RPC” 服务器,我们一会儿需要用到它的信息。

现在,解压MyEtherWallet,并打开文件夹。 然后,在浏览器中打开index.html文件便可看到如下图所示。

 

在右上角,您可以看到一个关于以太坊网络连接的下拉列表,默认情况下,它会连接到以太坊(ETH)主网。我们需要点击下拉框选择我们需要的网络。

 

现在您可以输入Ganache早些时候给我们提供的RPC服务器信息。 注意:您可以随意命名节点。

 

MyEtherWallet现在通过Ganache连接到您的自托管区块链。让我们使用MyEtherWallet将Counter智能合约上传到我们的区块链。为此,我们在MyEtherWallet的顶部导航栏中点击“Contracts”并选择“Deploy Contract”。

 

正如您所看到的,MyEtherWallet向我们请求合约的字节码。 要找到这个,我们将回到我们的Remix IDE并点击“Details”按钮。

 

您现在应该看到一个对话,其中包含有关我们的Counter合约的大量信息。

 

要复制字节码,我们将点击“BYTECODE”旁边的剪贴板图标。

 

然后,我们将回到MyEtherWallet并将字节码粘贴到对话框中。

 

现在我们可以向下滚动并导入一个帐户以上传合约。幸运的是,Ganache给了我们5个地址,我们可以使用它与我们的私有区块链进行交互。要使用其中一个上传此合约,我们可以返回到Ganache并单击任何地址的钥匙图标。

   点击钥匙之后,它会向我们显示与此帐户关联的私钥。

 

我们复制此私钥到MyEtherWallet。

 

现在,如果我们点击“Unlock”,MyEtherWallet会询问我们是否签署这笔交易并部署我们的合约。我们执行它。

 

如果交易成功,那么Ganache将增加其“Current Block”值,并且我们用于部署合约的账户的交易计数也增加。

我们的合约现在已上传到我们的区块链! 要通过递增和递减counter与其交互,我们可以返回MyEtherWallet并选择“Interact With Contract”。

MyEtherWallet现在要求我们新部署的合约所在的地址和我们合约的应用程序二进制接口(ABI)。要找到地址,我们可以回到Ganache并查看我们的交易记录。

此页面显示我们之前在部署合约时创建的交易。正如你所看到的,Ganache告诉我们用来部署合约的地址,我们区块链上的合约地址以及有关交易的更多信息。让我们单击事务,复制创建的合约地址,并将其粘贴到MyEtherWallet中。

 

剩下的就是我们需要的ABI。这是告诉MyEtherWallet如何与我们的合约进行交互。为了得到它,我们将回到Remix并点击“INTERFACE - ABI”旁边的剪贴板图标将其复制。

 

现在我们可以回到MyEtherWallet,将ABI粘贴到文本框中,然后单击“Access”按钮。

 

真棒! 现在我们可以通过点击“Select a function”下拉菜单与我们的合约进行交互。

 

成功运行!在更改计数值之前,我们的合约返回0。但是,我们还有另外两个函数,incrementCounter()和decrementCounter()。我们来调用incrementCounter()来测试一下。我们将通过再次选择函数下拉菜单,选择incrementCounter并创建一个新的交易。

 

这只是增加了计数值。现在我们可以再次调用getCount()来确认值是否真的改变了。

 

正如你所看到的,count现在等于1! 所以,我们的incrementCount()函数成功运行。你可以尝试调用decrementCount()函数,并且探索更多!

 

在整篇文章中,我们在自己的机器上发布了区块链,并为其部署了一个智能合约,并与合约进行了交互。这与专业以太坊智能合约开发人员的工作流程非常相似,只是略有不同。在智能合约的早期开发过程中,这个过程非常有效,但如果您希望通过将其部署到mainnet来使得其他人与您的智能合约进行交互而不使用真实货币的话,会发生什么呢?在这种情况下,您可以将您的合约上传到以太坊测试网络或testnet,以便将合约复制到以太坊全球网络中的每台机器上,但用户仍然可以使用虚拟货币与其进行交互。

 

本文教程到此结束。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!