掀起区块链开发狂潮!Scaffold-eth带你一键打造震撼DApp

文章目录

  • 前言
  • 一、Scaffold-eth是什么?
  • 二、安装和配置
    • 1.准备工作
    • 2.安装
    • 3.配置开发环境
  • 三、进阶使用
    • 1.放入自己的合约
    • 2.部署运行
  • 总结


前言

前面的文章传送🚪:hardhat入门 与 hardhat进阶

在之前的文章中,我们已经探讨了使用Hardhat框架来开发以太坊智能合约的方法。本文将介绍另一个强大的工具——Scaffold-eth,它更加注重全栈式的开发体验,提供了一个集成了Hardhat、React和其他工具的开发环境。帮助我们更轻松地构建完整的以太坊去中心化应用(DApp)

在这里插入图片描述

一、Scaffold-eth是什么?

官网点击此处
doc文档指南点击此处
Scaffold-eth是一个基于以太坊的开发框架,旨在简化以太坊智能合约和前端应用程序的开发过程。它提供了一个集成了Hardhat、React和其他工具的开发环境,帮助开发者更轻松地构建以太坊去中心化应用(DApp)。

具体来说,Scaffold-eth的特点包括:

  • 全栈式开发环境:Scaffold-eth提供了一个完整的开发环境,包括智能合约的编写、部署和交互,以及前端应用程序的开发和测试。

  • 集成了HardhatReact:Hardhat是一个强大的以太坊智能合约开发框架,而React是一个流行的前端框架。Scaffold-eth将它们集成在一起,使得智能合约和前端应用程序之间的交互变得更加简单。

  • 自动化工具:Scaffold-eth提供了许多自动化工具,如自动部署合约、自动连接以太坊网络等,帮助开发者提高开发效率。

  • 示例项目和模板:Scaffold-eth提供了许多示例项目和模板,包括简单的交易应用、去中心化交易所(DEX)等,帮助开发者快速上手并快速构建原型。

总的来说,Scaffold-eth是一个强大而灵活的工具,适用于初学者和资深开发者,帮助他们更轻松地构建以太坊DApp,并加速区块链应用的开发过程。

二、安装和配置

1.准备工作

在开始之前,您需要确保电脑已安装以下工具:
Node (>= v18.17) 节点 (>= v18.17)
Yarn (v1)or Yarn (v2+)PS:这里推荐安装v2+版本
Git

安装完成后可以输入下面命令查看是否安装成功

node --version
yarn --version
git --version

在这里插入图片描述

2.安装

在github上下载scaffold-eth,并且下载所需依赖

git clone https://github.com/scaffold-eth/scaffold-eth-2.git
cd scaffold-eth-2
yarn install

在这里插入图片描述
在这里插入图片描述

3.配置开发环境

初始化本地区块链
在新开的一个终端里输入yarn chain,这条链与我前面讲的hardhat入门里的链是一样的,都可以连到MetaMask钱包
在这里插入图片描述
部署智能合约
刚才的终端不要关闭,再开第二个终端输入yarn deploy
在这里插入图片描述
启动NextJS
前面的两个都不要关掉,再开第三个终端输入yarn start

在这里插入图片描述
启动项目
打开浏览器输入http://localhost:3000/就可以进到项目主页面
在这里插入图片描述

三、进阶使用

1.放入自己的合约

上面我们安装完成后就可以把自己的一个合约放到里面去,我们在项目的packages/hardhat/contracts/目录下放入EthVoting.sol文件,再到packages/hardhat/deploy/目录下创建一个01_deploy_ethvoting.ts文件,把前面00的文件复制改一下即可,如下图所示:
在这里插入图片描述
在这里插入图片描述

EthVoting.sol

//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;contract EthVoting {//附议人信息struct Voter {uint voteTimeStamp; //投票时的区块时间bool initialized;   //判断是否投过票的标志}//提案内容struct  Proposal {string pName;        //提案标题string pCtx;         //提案内容address chairperson; //提案主持人uint voteCount;      //附议人数bool initialized;    //判断提案是否存在的标志uint limitTime;      //附议限制时间mapping(address => Voter) voters; //附议列表}//所有提案列表mapping(uint => Proposal) public proposals;//附议事件event VoteEvt(string indexed eventType, address _voter, uint timestamp);//提案事件event ProposeEvt(string indexed eventType, uint _proposalId, uint _limitTime);//创建新提案function createProposal(uint _pid,string  memory _pName, string memory  _pCtx, uint _limitTime) public returns (uint){uint pId = _pid;Proposal storage _proposal = proposals[pId];_proposal.pName = _pName;_proposal.pCtx = _pCtx;_proposal.chairperson = msg.sender;_proposal.initialized = true;_proposal.limitTime= _limitTime;_proposal.voteCount = 0;emit ProposeEvt("propose", pId, _limitTime);return pId;}//进行附议function doVoting(uint pId) public {//提案是否存在if (proposals[pId].initialized == false)revert("proposal not exist");uint currentTime = block.timestamp;//是否已超过提案时限if (proposals[pId].limitTime < currentTime)revert("exceed voting time");//是否已经投过票if (proposals[pId].voters[msg.sender].initialized == true)revert("already vote");//新投票信息Voter memory voter = Voter({voteTimeStamp: block.timestamp,initialized: true});//记录投票信息proposals[pId].voters[msg.sender] = voter;proposals[pId].voteCount+=1;emit VoteEvt("vote", msg.sender, block.timestamp);}//查询是否附议function queryVoting(uint pId, address voterAddr) public view returns (uint){//提案是否存在if (proposals[pId].initialized == false)revert("proposal not exist");//返回投票时间return proposals[pId].voters[voterAddr].voteTimeStamp;}//获取区块链时间function getBlockTime() public view returns (uint t) {t = block.timestamp;}//查询提案标题function getProposalName(uint pId) public view returns (string memory s) {s = proposals[pId].pName;}//查询提案内容function getProposalCtx(uint pId) public view returns (string memory s) {s = proposals[pId].pCtx;}//查询提案内容function getProposalVCnt(uint pId) public view returns (uint v) {v = proposals[pId].voteCount;}//查询提案期限function getProposalLimit(uint pId) public view returns (uint t) {t = proposals[pId].limitTime;}
}

2.部署运行

保证区块本地链与NextJS两个端口的启动,然后再次打开一个端口输入yarn deploy,再次打开http://localhost:3000/debug界面,可以发现多了一个合约,并且自动对应到了合约里的读(read)和写(write)的方法
在这里插入图片描述
在这里插入图片描述


总结

通过使用Scaffold-eth,你可以快速搭建一个完整的以太坊开发环境,并进行智能合约的开发、部署和交互。它让你不用为前端调用而烦恼,会自动生成读和写的方法,让开发者更加专注与智能合约逻辑的编写,提供了一套完整的工具和模板,帮助你更轻松地构建以太坊应用程序。祝你在使用Scaffold-eth时取得成功!
希望本文能够帮助读者更好地了解Scaffold-eth,如果有任何疑问或者建议,欢迎留言讨论🌹

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

输入变量数据通过隶属函数从真实论域转变到模糊论域的示例

1. 示例1 假设我们有一个关于顾客满意度的调查&#xff0c;调查数据是顾客对某项服务的评分&#xff0c;评分范围是1到5分。现在&#xff0c;我们希望对这些评分进行模糊化处理&#xff0c;以便更好地理解和解释顾客的满意度。 首先&#xff0c;我们定义三个模糊集合&#xf…

边缘计算网关主要有哪些功能?-天拓四方

随着物联网&#xff08;IoT&#xff09;的快速发展和普及&#xff0c;边缘计算网关已经成为了数据处理和传输的重要枢纽。作为一种集成数据采集、协议转换、数据处理、数据聚合和远程控制等多种功能的设备&#xff0c;边缘计算网关在降低网络延迟、提高数据处理效率以及减轻云数…

Python 入门指南(五)

原文&#xff1a;zh.annas-archive.org/md5/97bc15629f1b51a0671040c56db61b92 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十六章&#xff1a;Python 中的对象 因此&#xff0c;我们现在手头上有一个设计&#xff0c;并且准备将该设计转化为一个可工作的程序&a…

C++从入门到精通——类和对象(下篇)

1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _year;int _mont…

spring webflux 小结

一、WebFlux 简介 WebFlux 是 Spring Framework5.0 中引入的一种新的反应式Web框架。通过Reactor项目实现Reactive Streams规范&#xff0c;完全异步和非阻塞框架。本身不会加快程序执行速度&#xff0c;但在高并发情况下借助异步IO能够以少量而稳定的线程处理更高的吞吐&…

QT creator 代码中有中文,提示常量中有换行符解决方案

QT creator 代码中有中文&#xff0c;提示常量中有换行符解决方案 参考视频问题问题解决 参考 感谢感谢,非常感谢,有你,让Qt不再困难,困扰我四年的问题解决了!!! https://blog.csdn.net/m0_45866718/article/details/112389513 视频 https://www.bilibili.com/video/BV1Fp4…

Towards Street-Level Client-Independent IP Geolocation(2011年)(第一部分)

被引次数:306 Wang Y, Burgener D, Flores M, et al. Towards {Street-Level}{Client-Independent}{IP} Geolocation[C]//8th USENIX Symposium on Networked Systems Design and Implementation (NSDI 11). 2011. Abstract 一个高度精确的客户端独立的地理定位服务将是互联…

MGRE环境下的ospf实验

MGRE环境下的ospf实验 一.拓扑图 二.实验步骤 1.分配各路由网段IP [R1]int g 0/0/0 [R1-GigabitEthernet0/0/0]ip address 16.0.0.1 24 [R1-GigabitEthernet0/0/0]int g 0/0/1 [R1-GigabitEthernet0/0/1]ip address 116.0.0.1 24[R2]int g 0/0/0 [R2-GigabitEthernet0/0/0]…

【Linux】磁盘阵列RAID技术

目录 一、RAID介绍 1.1 什么是RAID技术&#xff1f; 1.2 为什么要使用RAID技术&#xff1f; 二、RAID级别 2.1 常见的RAID级别 2.2 常见RAID介绍 三、RAID特性对比 一、RAID介绍 1.1 什么是RAID技术&#xff1f; 把多块独立的物理磁盘按不同的方式组合起来形成一个硬盘…

基于Python的景区票务人脸识别系统(V2.0)

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

【C语言】带你完全理解指针(五)练习

复习一下对数组名的理解 数组名的理解 数组名是数组首元素的地址 但是有2个例外&#xff1a; 1. sizeof(数组名)&#xff0c;这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小&#xff0c;单位是字节 2. &数组名&#xff0c;这里的数组名表示整个数组&#xff…

【应用】SpringBoot-自动配置原理

前言 本文简要介绍SpringBoot的自动配置原理。 本文讲述的SpringBoot版本为&#xff1a;3.1.2。 前置知识 在看原理介绍之前&#xff0c;需要知道Import注解的作用&#xff1a; 可以导入Configuration注解的配置类、声明Bean注解的bean方法&#xff1b;可以导入ImportSele…