在以太坊测试网上部署合约

前言

在部署合约之前,您需要确保你的操作系统上已经安装了MetaMask,并熟练掌握其使用方法,以及掌握了部分Solidity基础语法知识。

如果没有,请移步到下面链接,确保您以及做好了充足的准,开始接下来的合约部署。

MetaMask的安装及使用:MetaMask安装及使用(全网最全!!!)_sepoliaeth水龙头-CSDN博客

Solidity基础语法知识:Solidity基础(详细易懂!!!)-CSDN博客

值得注意的是!!!

Remix-Desktop连接MetaMask程序比较繁琐,所以我们将在Remix浏览器版进行我们的部署操作。

Remix浏览器版:Remix – Ethereum IDE

Remix-Desktop我们也讲一下,连接MetaMask的具体方式是,点击左下角的插件管理,搜索wallet connect,再带点击Activate,在弹出来的页面中点击connect to a wallet,然后找到我们的MetaMask钱包,连接上就行。

正文

首先打开浏览器,进入我们的Remix浏览器版:Remix – Ethereum IDE(确保你的浏览器已经安装了MetaMask扩展)

同Remix-Desktop,操作步骤是一样的,我们首先创建一个名字叫SimpleStorage.sol的合约文件,然后粘贴如下代码。

代码:

// SPDX-License-Identifier: MITpragma solidity ^0.8.22;contract SimpleStorage {// This gets initialized to zero!//  uint256) public nameToFavoriteNumber;struct People {uint256 favoriteNumber;string name;}// uint256[] public favoriteNumbersList;People[] public people;function store(uint256 _favoriteNumber) public virtual{favoriteNumber = _favoriteNumber;retrieve();}// view, purefunction retrieve() public view returns(uint256) {return favoriteNumber;}// calldata, memory, storagefunction addPerson(string memory _name, uint _favoriteNumber) public {people.push(People(_favoriteNumber, _name));nameToFavoriteNumber[_name] = _favoriteNumber;}}

对于这个SimpleStorage合约。

我们有一个全局变量favoriteNumber,通过使用store函数,可以往里面存储一个我们喜欢的数字,我们还有一个名为nameToFavoriteNumber的mapping,并且我们还拥有了一个新类型的数组,一种我们创建的名为People的新类型,我们还可以往这些数组和mapping中添加新内容,就用我们创建的这个addPerson函数,这样我们就既能够保存许多个不同的人的favorite number,又能够保存单独一个全局的favorite number,现在我们已经准备好把它发送到一个测试网络上,并让其他人与之互动了。

当然,一般来说,直到写完测试前不要部署上去,或是直到你做一些非常简单的审核,不过现在让我们先往下走,学习怎么把合约部署到测试网络或者真实网络上,请牢记,测试网完全是人们出于好心而自发运行的,所以哪怕它有点异常,或者没有像我们这里演示的那样工作,没有关系,只要它能与Remix虚拟机(VM)一起工作就行了,但是学习一下如何将这些东西部署到实际的测试网上仍不失为是一次很好的实践活动。

这里是我们的合约SimpleStorage.sol,编译好了,编译通过后,这里会有一个绿色的小对勾,进入部署选项,现在我们要改变下环境。

我们正在使用的是Remix VM环境,这是一种虚假的模拟环境,我们现在要转移到lnjected Provider上。

接着我们要把 MetaMask或其他Web3钱包,注入到浏览器中以便能够使用,就像我们使用水龙头时做的那样,我们选择一个想要使用的账户,这里我选择了第二个账户(哪个账户都无所谓,重要的是要有ETH测试币)。

现在我们看到,账户出现在了Remix的ACCOUNT选项中。

lnjected Provider意味着我们正在使用·MetaMask或其他 Web3钱包。

无论lnjected Provider是哪个网络,或者这样说,我们的钱包连接到了哪个网络上就会部署到那个网络上,在本篇文章中,我们选择部署到Sepolia上(SepoliaETH获取方法在文章前言中介绍的MetaMask安装及使用文章里有)。

当然,你可以根据你的具体情况,进行选择,如果你有其他测试网络的ETH,你可以选择部署在其他网络上。

这里我们选择Sepolia,为了部署到测试网上,请记住,我们是需要gas的,所以我们需要一些测试用的以太币,或者你可以部署到以太坊主网上,但你最好别这样做。

所以现在我们就使用Injected Provider,我们可以通过完全相同的步骤,把合约部署到测试网上,就和部署到虚拟机上一样,并且记住,如果你没有足够的gas来部署合约,那么一定要在部署前来查看一下水龙头,所以我们要做的就是相同的事,去点击这个Deploy按钮。

但是这一次MetaMask会弹出来,并询问我们是否真的要部署这个合约,这就是我们之前在区块链示例中看到的,给交易签名,我们现在其实就在签署和发送这个交易。

这个交易的数据量非常非常庞大,它们就代表着我们刚刚创建的合约,我们可以看到这次交易或者说部署这个合约的所有付款信息。

我们可以看到,部署这个合约将花费大约这么多以太币,再次强调,我们现在处于Sepolia测试网络上,所以这些都是假的以太币,我们继续,点击确认(Confirm)。

如果你弹出这个小控制台,在Remix里,你会在短暂的延迟后看到,它会用这个绿色的小对勾,表示合约已经确实是被部署上了。

我们可以继续复制一下这个交易哈希,并在etherscan上查看这笔交易,稍作延迟后,我们就可以看到这里的交易详情。

TESTNET Sepolia (ETH) Blockchain Explorer (etherscan.io)

就和我们之前发送以太币的交易详情一样,我们有一个哈希(Hash),有一个状态(status),有区块(Block),有确认区块数(Block Confirmation),还有时间戳(Timestamp),From,就是我们自己,To,是我们刚刚创建的合约的地址,我们这次没有发送任何价值(Value),所以这里是0个以太币,然后当然,我们会看到交易费(Transaction Fee)还有gas价格(Gas Price)。

因为把合约部署到区块链上会修改区块链的状态,所以我们必须为此支付gas,其余的部分在这里也都看得到,正如我们所见,Gas Limit和gas Usage比单纯发送以太币要高得多,这是因为我们把大量数据送到了链上,进而增加了大量的计算量,所以这个数字远远高于单纯发送以太币所需要的21000gas。

现在让我们回到Remix拉到下面,可以看到我们的SimpleStorage合约就在这个地址上。


温馨提示:

如果,没有看到可以交互的合约,可以手动添加,输入合约地址即可,合约地址,可以看刚才etherscan的交易明细中的To,或者看Remix控制台小绿勾中的To,如果不小心退出后,找不到合约地址的话,可以在etherscan中查账户地址的交易记录,从而找到合约地址。


紧接上面。

如果我们点击这个copy按钮,然后去到Sepolia etherscan,把地址粘贴到搜索栏里,我们会得到我们刚刚部署的这个合约。

并且可以看到它的第一笔交易,也就是这个合约的创建交易,所以这是我们刚刚创建的合约。有一笔交易,它是在合约创建时产生的。

所以我们现在已经把这个合约创建出来了,并且拥有和使用Remix虚拟机时完全相同的功能,或者说我们的虚假环境,也可说是超级虚假环境,现在我们就可以做一些之前在Remix VM上做过的操作了,只不过这次是在测试网络上。

你可以看到,如果我点击retrieve,MetaMask不会弹出,这是因为这个蓝色按钮是一个view函数,如果我们看一下people在0处的值,这也是一个view函数所以 MetaMask同样也没有弹出,nameToFavoriteNumber现在还是空的,所以如果我现在输入zhangsan,当然返回是空了,对吧?其实这里我得到了一个返回值0,这是因为mapping初始化每个值的时候使用都是相应的空值,对uint256来说就是0。

现在我们可以尝试存储一个favorite number,这一操作会导致区块链被修改,所以MetaMask会弹出来让我们确认以及签署该笔交易,从而修改区块链的状态。

现在我要存储一个我喜欢的数字749,点击store,MetaMask会弹出来,而接下来我们需要做的就是点击确认(Confirm),点击确认就意味着,我们要签署该交易并把它发送到区块链上以修改状态,所以我们继续,点击确认。

我们现在应该能在etherscan上看到这笔交易了,它可能需要一点时间才能索引或者说实际开始工作,所以请耐心等待一下这些测试网络,这也就是为什么你在构建应用程序时,最好是尽量最后一步再部署到测试网上,因为你会在这一步上等待很长时间,并且这也为运行这些测试网络的人带来了负担,他们纯粹是出于好心才运行这些网络的,所以请尽量把这一步作为你实际搭建应用时的最后一步,对于在这里学习的我们来说,倒是关系不大。

稍作等待后,我们刷新一下。看起来它正在etherscan上建立索引,etherscan网站仍然在确认这笔交易到底进行到哪里了。

回来看看Remix,看起来在区块链上,交易其实已经通过了,所以如果我们现在去点击retrieve,可以看到,我们最喜欢的数字确实就是749,当然了,nameToFavoriteNumber和people还是空的。

看起来这笔交易已经完成了,etherscan已经把它索引上了。

现在让我们继续,添加一个人物zhangsan,最喜欢的数字是23,接着我们点people击addPerson,这是个橙色按钮,所以交易会弹出来,因为我们正在修改区块链的状态,我们继续点击确认。

这里需要我们有一点耐心,等待我们的交易通过,届时我们应该就能看到nameToFavoriteNumber会更新,还有people也是,如果我点击nameToFavoriteNumber,输入的是zhangsan,我会得到23,如果点击people,输入参数是0,我会得到favoriteNumber是23,name是zhangsan。

太棒了!你现在已经成功地把一个合约部署到了实际的测试网上,并且能够在etherscan上看到交易的具体细节。

现在如果你想看着把它部署到其他网络上是什么样的,你只需要在MetaMask上切换到其他测试网就行了。

顺便期待一下博主的go语言-区块链学习(三),文章正在编辑中。。。