智能合约开发 基于Hardhat(实操)

news2025/7/9 17:35:07

Hardhat是一个编译、部署、测试和调试以太坊应用的开发环境。


Hardhat内置了Hardhat网络,这是一个专为开发设计的本地以太坊网络。主要功能有Solidity调试,跟踪调用堆栈、 console.log() 和交易失败时的明确错误信息提示等

​安装

# 创建项目目录
mkdir hardhat-tutorial
cd hardhat-tutorial

# 初始化node.js环境
npm init

# 安装 hardhat
npm install --save-dev hardhat


npx hardhat

编写合约代码

 编写代码,注意目录,文件名

//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;


contract Computed{

    uint x;

    function add(uint y) public view returns(uint){
        return x + y;
    }

    function readd(uint y) public view returns(uint){
        return add(y);
    }

}

编译

npx hardhat compile

编译成功后

测试

# 安装工具
npm install --save-dev @nomicfoundation/hardhat-toolbox

 创建测试文件  computed.js,注意文件夹和文件名 

const { expect } = require("chai");


describe("Computed contract", function () {
  it("Deployment Computed compute result", async function () {
    
    // ether.js里getSigners 表示账户
    const [owner] = await ethers.getSigners();

    // ether.js里getContractFactory 是部署合约的抽象类
    const Computed = await ethers.getContractFactory("Computed");

    // 部署合约
    const hardhatComputed = await Computed.deploy();

    // 调用合约函数
    const result = await hardhatComputed.add(2);


    expect( result == 2  );
  });
});
#执行测试
 npx hardhat test

debug

// Computed.sol 里添加

pragma solidity ^0.8.9;

//添加内容
import "hardhat/console.sol";

contract Computed{

    uint x;

    function add(uint y) public view returns(uint){
        // 打印日志
        console.log(
            "start add",
            msg.sender,
            x,
            y
        );
        return x + y;
    }

    function readd(uint y) public view returns(uint){
        return add(y);
    }
}

执行结果

部署测试网、主网

新建目录,文件 deploy.js

async function main() {
    const [deployer] = await ethers.getSigners();
  
    console.log("Deploying contracts with the account:", deployer.address);
  
    console.log("Account balance:", (await deployer.getBalance()).toString());
  
    const Token = await ethers.getContractFactory("Computed");
    const token = await Token.deploy();
  
    console.log("Token address:", token.address);
  }
  
  main()
    .then(() => process.exit(0))
    .catch((error) => {
      console.error(error);
      process.exit(1);
    });

修改 hardhat.config.js

require("@nomicfoundation/hardhat-toolbox");

// 到  https://www.alchemyapi.io, 创建dAPP,找到key , 替换 KEY
const ALCHEMY_API_KEY = "KEY";

// 替换钱包私钥,记得这是Goerli测试网
// 打开小狐狸 Metamask 钱包
// 打开 Account Details > 导出 Private Key
// 注意: 不要往测试网里转主网(真实账号)的eth
const GOERLI_PRIVATE_KEY = "YOUR GOERLI PRIVATE KEY";

module.exports = {
  solidity: "0.8.9",
  networks: {
    goerli: {
      url: `https://eth-goerli.alchemyapi.io/v2/${ALCHEMY_API_KEY}`,
      accounts: [GOERLI_PRIVATE_KEY]
    }
  }
};

 以下2个可以 Goerli 水龙头可以领取 测试网的eth

  • Chainlink faucet
  • Alchemy Goerli Faucet

部署: 


npx hardhat run scripts/deploy.js --network Goerli

查看Hardhat命令

npx hardhat 

hardhat.config.js 添加

require("@nomicfoundation/hardhat-toolbox");

参考:

3. Creating a new Hardhat project | Ethereum development environment for professionals by Nomic Foundation

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TSRFormer:复杂场景的表格结构识别新利器

编者按:近年来,各大企业和组织机构都在经历数字化转型。将文档转换成计算机所能识别的样态,是数字化转型的关键步骤,如何识别出图片中表格具体的结构与内容,并直接提取其中的数据和信息是学术界和工业界共同瞩目的焦点…

C语言操作符大全(建议收藏)

前言 💖作者:龟龟不断向前 ✨简介:宁愿做一只不停跑的慢乌龟,也不想当一只三分钟热度的兔子。 👻专栏:C初阶知识点 👻工具分享: 刷题: 牛客网 leetcode笔记软件&#xff…

操作系统4小时速成:进程管理占考试40%,进程状态,组织,通信,线程拥有调度,进程拥有资源,进程和线程的区别

操作系统4小时速成:进程管理占考试40%,进程状态,组织,通信,线程拥有调度,进程拥有资源,进程和线程的区别 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招…

生活中的5 个自动化Python 项目——从初学者到高级(附零基础学习教程)

前言 如果你正在学习 Python,你应该尝试自动化你的日常任务。(文末送读者福利) 您不仅可以通过实现您已经知道的知识来学习更多 Python,而且最终,您可以看到所有的辛勤工作是如何得到回报的。 最近,由于…

拉格朗日粒子扩散FLEXPART模式

当前,大气污染是我国重要的环境问题之一。为了高效、精准地治理区域大气污染,需要弄清污染物的来源。拉格朗日粒子扩散模式FLEXPART通过计算点、线、面或体积源释放的大量粒子的轨迹,来描述示踪物在大气中长距离、中尺度的传输、扩散、干湿沉…

第五节.常用Linux命令—远程管理

第五节.常用Linux命令—远程管理 1.关机/重启:(shutdown) 1).命令格式: 命令作用shutdown 选项 时间关机/重新启动 2).常用命令: 命令含义shutdown -r now重新启动操作系统,其中now表示现在shutdown now立刻关机,其中now表示现在shutdown …

热门Java开发工具IDEA入门指南——从Eclipse迁移到IntelliJ IDEA(一)

IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能是非常强大的。 本文…

css水平居中的几种方法

实现方法实现方法:定位 position 偏移值 left margin-left 回退定位 position 偏移值 left CSS-2d transform文字居中:text-align:center; 行内块元素弹性布局: display:flex; [推荐]实现方法: 1、添加 margin 值 auto 2、定位 positio…

[附源码]计算机毕业设计JAVA电影影评网

[附源码]计算机毕业设计JAVA电影影评网 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Mav…

企业 SDLC 安全生命周期管理

最近看了很多SDLC的东西,把其中比较重要关键的记录一下,用简洁的语言说清楚 0x01 SDL 介绍 SDL是微软提出的一种软件开发安全生命周期管理的一种最佳安全实践,全称为Security Development Lifecycle 0x02 为什么要SDL 目的是为了从安全漏…

硕士论文阅读——基于机器视觉和深度学习的工人安全帽检测与身份识别方法

文章目录零、摘要一、绪论1、背景与研究意义2、国内外研究现状(1)安全帽佩戴检测研究现状与不足(2)身份识别研究现状与不足(3)基于深度学习的目标检测二、深度学习目标检测理论1、卷积神经网络(…

jQuery基础

目录 jQyery简介 获取jQuery jQuery基本语法 1.使用jQuery弹出提示框 2.$(document).ready()与window.onload的区别 jQuery选择器 jQuery层次选择器 jQyery简介 jQuery由美国人John Resig于2006年创建。jQuery是目前最流行的JavaScript程序,它是对JavaScript对…

Windows OpenGL 图像灰度图

目录 一.OpenGL 图像灰度图 1.原始图片2.效果演示 二.OpenGL 图像灰度图源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL ES …

27k入职阿里测试岗那天,我哭了,这5个月付出的一切总算没有白费~

先说一下自己的个人情况,计算机专业,16年普通二本学校毕业,经历过一些失败的工作经历后,经推荐就进入了华为的测试岗,进去才知道是接了个外包项目,不太稳定的样子,可是刚毕业谁知道什么外包不外…

Linux任务调度

基本原理: crontab [选项] -e 编辑crontab定时任务 -l 查询crontab任务 -r 删除当前用户所有的crontab任务 快速入门 设置任务调度文件: /etc/crontab 设置个人任务调度。执行crontab -e命令。 接…

100道Spring面试题以及参考答案(2022年最新版)

77道Spring面试题以及参考答案(2022年最新版),分享给大家~ 一、Spring概述 1. 什么是spring? Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各…

netstat命令应用和ifconfig命令应用

记录: 318 场景: 在CentOS 7.9操作系统上,使用netstat命令监控和查看TCP/IP等网络信息;使用ifconfig命令查看IP地址等网络信息。 版本: 操作系统: CentOS 7.9 1.基础环境 在CentOS 7.9操作系统,使用netstat命令和ifconfig命令&#xff…

Linux之LNMP离线安装

一、需求说明 LNMP一键安装包对于小型系统部署来说真的是非常方便,日常工作中除了在线安装,也存在部分场景要求离线安装。比如内网专网、严格限制访问外网的网络等,有些院校的实验室就是这种情况,需要使用光盘来完成系统的部署安装…

2022年认证杯SPSSPRO杯数学建模C题(第二阶段)污水流行病学原理在新冠疫情防控方面的作用求解全过程文档及程序

2022年认证杯SPSSPRO杯数学建模 C题 污水流行病学原理在新冠疫情防控方面的作用 原题再现: 2019 年新型冠状病毒肺炎疫情暴发至今已过两年,新型冠状病毒历经多次变异,目前已有 11 种变异毒株,包括阿尔法、贝塔、德尔塔、奥密克戎…

Optional详解

一 有什么用 对象的NPE处理简化if else代码 二 怎么用 Optional 就好像是一个包装类,可以把具体的数据封装到 Optional 对象内部,然后我们去使用 Optional 中封装好的方法操作封装进去的数据就可以非常优雅的避免空指针异常 2.1 创建Optional对象 O…