hardhat部署合约-(?测试?)

1,356 阅读4分钟

部署合约:1有合约 2有区块链 3利用hardhat把合约部署到区块链上

D:\git\AlyssaTestNpm>npx hardhat run --network localhost scripts/deploy.js ParserError: Multiple SPDX license identifiers found in source file. Use "AND" or "OR" to combine multiple licenses. Please see spdx.org for more information. --> contracts/Box.sol

Error HH600: Compilation failed

For more info go to hardhat.org/HH600 or run Hardhat with --show-stack-traces 原因:多个license声明需要用and/or,复制的时候重复了 删掉一个license声明就好了

image.png 在已经建立本地区块链,且在另一个cmd终端里始终运行本地区块链,但使用 npx hardhat run --network localhost scipts/deploy.js将写的box合约部署到本地区块链上时出错 scipts/deloy.js中实际上是:hardhat中没有原生部署系统,而是使用脚本来部署合约的,即hardhat使用deploy.js来在区块链上完成部署合约。

脚本中的ethers。。不知道是啥。。等会再查

看到一个不错的教程learnblockchain.cn/article/135…

已经把用deploy.js脚本部署完后下一步是合约与控制台的交互(在此之前我们要先知道hardhat的控制台,hardhat提供了控制台建立代码npx harhat console

先别管自己新建了,先看一下项目代码 1.到项目文件夹cmd,安装hardhat。npm install hardhat,之后我们就可以运行npx了

3.要使用openzepplelin库,要先安装这个库,npm installnpm @openzeppelin/contracts,然后在contract的源代码中导入这个库比如import "@openzeppelin/contracts/access/Ownable.sol";

4使用ether(不知道这是啥,但是为了部署,所以有hardhat.config.js脚本文件,脚本文件中有这个ether,所以需要下载) npm install @nomiclabs/hardhat-etherscan

2.使用npx功能创建js脚本文件。但是我们直接用的项目源码,所以不会再问是否创建一个新的hardhat.config.js文件了。 2.1npx harhat compile可以实行编译(evm不能识别solidity,在aritifacts里是已经编译好的字节码和元数据 2.脚本文件中的ethers.js中的Signer是代表以太坊账户的对象。 它用于将交易发送到合约和其他帐户。 在这里,我们获得了所连接节点中的帐户列表,

4.创建本地网络npx hardhat node 可以参考www.jianshu.com/p/e8324cde7… 使用metamask

5.使用run命令可以把合约布置到本地区块链上。npx hardhat run --network localhost scripts/deploy.js // npx hardhat run ./scripts/deploy.js --network network_name(报错,没有network-name,应该是哪一个库之类的还没装?) //?为啥说部署是要node scripts/deploy.js?官网没说。。运行失败说没有ghoastcastle。好像第二次看到这个错误了??www.jianshu.com/p/9ac5288c8…

在这个项目用的是npx hardhat run ./scripts/deploy.js --network network_name?? 但是一直在报错networkname不存在,说明这是个标识?他有实际的值?那实际的值是什么。。。

6.测试合约,断言单元测试。npm install --save-dev chai(morning老师没写呀),npx hardhat test 运行之后有五个错误HardhatError: HH700: Artifact for contract "MAYWeirdoGhostGang" not found. Did you mean "WeirdoGhostGang"? ohmorning老师用的是Ethers.js和Waffle插件,通过他们与以太坊进行交互并测试合约。 加一个npm install --save-dev @nomiclabs/hardhat-ethers ethers - [ ] @nomiclabs/hardhat-waffle ethereum-waffle chai(没写还是不需要?)

7.升级合约 npm install @openzeppelin/hardhat-upgrades

再次因为hardhat是没有原生部署系统的,所以要使用脚本来部署智能合约,deployproxy.js就是为了部 署我们的可升级合约

8.etherscan是为了将合约部署到主网上之后测试源代码的,第三方将对其进行编译并验证它是否与部署的程序集匹配。 之后运行verify任务 npx hardhat verify --network mainnet DEPLOYED_CONTACT_ADDRESS "Constrcor argument 1" verify任务会传递合约的地址、部署他的网络以及用于部署他的构造函数参数(如果有)

***最开始问morning老师那个我的地址部署错了无法返回上一步是不是可以被其他代码替换而不需要在npx hardhat console里设置,因为并没有在read.me里找到这个代码。还是没写。。?需要我自己不知 oh不是,console里是什么? run命令才是部署合约!虽然不知道我们的项目部署到哪,官网是本地的localhost console:是在控制台与我们的智能合约进行交互来发送交易啊什么的。控制台创建一个新的账户。

npx hardhat console --network localhost //networok要明确设置,如果不设置,hardhat默认使用新的临时网络,而我们把harhat部署到了我们本地127.0.0.0? Welcome to Node.js v12.22.1. Type ".help" for more information.

const Box = await ethers.getContractFactory('Box'); undefined const box = await Box.attach('0x5FbDB2315678afecb367f032d93F642f64180aa3') //networok要明确设置,如果不设置,hardhat默认使用新的临时网络,而我们把harhat部署到了我们本地127.0.0.0? undefined

***所以我们合约部署的网络到底是哪个,可升级合约(proxy-deploy?还是upgrade-deploy?这两个分别是啥。。代码区别不也大)部署到哪?

更新合约代码后upgradeProxy将创建以下交易:

1.部署实现合约(我们的BoxV2合约) 2.调用ProxyAdmin更新代理合约以使用新的实现。

我们将创建一个脚本来升级我们的Box合约以BoxV2使用upgradeProxy. 我们将此文件另存为scripts/upgrade_box.js. 我们需要在部署Box合约时指定代理合约的地址。

***retrieve函数

...ohoh 那个部署到的networkname可以是polygan之类的。