WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi

这篇具有很好参考价值的文章主要介绍了WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

好 各位 经过我们上文 WEB3 solidity 带着大家编写测试代码 操作订单 创建/取消/填充操作 我们自己写了一个测试订单业务的脚本 没想到运行的还挺好的

那么 今天开始 我们就可以开始操作我们前端 Dapp 的一个操作了

在整个过程中 确实是没有我们后端的操作 或者说 我们自己就是后端 solidity 就是服务端
虽然我个人并不是很开好 WEB3的前景 我觉得很可能无法推广 但是 如果之后WEB3真的起来了 那么 可能会延伸成 前端开发Dapp工程师 和 新的 solidity 开发工程师 而我们这种从一开始就一直在做学习的 也很可能成为这一领域的 全栈开发工程师
我们还是先将 ganache 的环境起起来
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
然后 部署一下我们的合约
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
然后呢 这年头 我们写前端 不用个框架 都会让人笑话 所以 我们用目前大家用的比较多的 React

可能这种很多人会觉得vue会更平易近人 或者是 可能很多人不太了解React 但WEB3在国外比较火 所以做这块基本都是React的 我要是用vue写给你们 搞不好你们拿出去会被别人笑话啊

正好我这也有很多React的文章 大家也可以补补基础
我们在本地创建一个文件夹 作为项目目录
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
然后 我们终端执行

create-react-app webdapp

前提你电脑要安装了 React
创建一个 叫 webdapp的react项目
项目可能要创建有点久

WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
创建好之后 我们用编辑器打开这个项目
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
然后 我们尝试在终端输入

npm start

能够运行起这个React 项目的欢迎界面 我们就算成功了
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
然后 这里 因为 我们是 前端和solidity一起写 我们完全可以做一个框架的整合
这里 我们知道 每次部署合约 json都会有一定变化,而这个Abi是前端链接合约的途径
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
那么 我们开发过程中 总不想重新部署一次合约 前端就要重新复制一次
其实我们完全可以将这些东西搬到前端项目中

然后 我们来到智能合约项目的所在目录下
然后 将除了 node_modules 依赖包 package-lock.json 如果你的项目中有package.json 则也不要
其他的文件都复制过来
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
然后扔掉 我们react项目的根目录下
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
但是 之前我们也说了 没有带一切有关依赖的工具和文件
那么 我们此时 合约项目是没有依赖 执行不起来的
我们可以在react项目 终端下执行

npm i openzeppelin-solidity

引入 openzeppelin-solidity 这是 一个开源的 solidity 库
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
好 安装好之后 为了证明这是没问题的 我们在react项目下执行

truffle migrate --reset

尝试部署智能合约
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
但这里显然报错了 他说 我们之前用的这个 WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
找不到 我们终端输入

npm install @openzeppelin/contracts

安装一下依赖
然后 再次部署合约
这样 我们的合约就部署成功了
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
然后 我们将 scripts 目录下的 test.js 测试文件代码更改如下

//指定以token grtoken合约
const GrToken = artifacts.require("grToken.sol")
//交易所合约
const Exchange = artifacts.require("Exchange.sol")
//定义E代理地址
const ETHER_ADDRESS = '0x0000000000000000000000000000000000000000';

const fromWei = (bn) => {
  return web3.utils.fromWei(bn, "ether");
}
const toWei = (bn) => {
    return web3.utils.toWei(bn.toString(), "ether");
}

module.exports = async function(callback) {
    const grTokenDai = await GrToken.deployed();
    const exchage = await Exchange.deployed();
    //获取用户列表
    const accounts = await web3.eth.getAccounts();
    //第一个账户 调用transfer 发送100000 grtoken给第二个用户 accounts[1]
    await grTokenDai.transfer(accounts[1],toWei(100000),{
        from: accounts[0]
    })
    //通过 exchage 交易所提供的  depositEther 函数 accounts[0] 第一个用户往交易所存入 100 E
    await exchage.depositEther({
        from: accounts[0],
        value: toWei(100)
    })

    //给第一个用户 accounts[0] 交易所 授权 100000 GRTOKEN 就是我自己定义的token
    await grTokenDai.approve(exchage.address,toWei(100000),{
        from: accounts[0]
    })

    //第一个用户 accounts[0] 通过交易所提供的 depositToken函数 存入100000 grToken
    await exchage.depositToken(grTokenDai.address,toWei(100000),{
        from: accounts[0]
    })

    //通过 exchage 交易所提供的  depositEther 函数 accounts[1] 第二个用户往交易所存入 50 E
    await exchage.depositEther({
        from: accounts[1],
        value: toWei(50)
    })

    //给第二个用户 accounts[1] 交易所 授权 50000 GRTOKEN 就是我自己定义的token
    await grTokenDai.approve(exchage.address,toWei(50000),{
        from: accounts[1]
    })

    //第二个用户 accounts[1] 通过交易所提供的 depositToken函数 存入50000 grToken
    await exchage.depositToken(grTokenDai.address,toWei(50000),{
        from: accounts[1]
    })

    //存储订单id
    let orderId = 0;
    //存储创建订单返回结果
    let res ;
    //调用交易所创建订单  两千 gr 对 0.2E 由第一个用户发布
    res = await exchage.makeOrder(grTokenDai.address,toWei(2000), ETHER_ADDRESS ,toWei(0.2),{
        from: accounts[0]
    });
    //接收创建完成的订单id
    orderId = res.logs[0].args.id
    //告诉我们订单创建好了
    console.log("创建成功"+res.logs[0].args.id)
    //通过id取消订单
    await exchage.cancelorder(orderId,{
        from: accounts[0]
    })
    console.log(orderId,"取消订单成功")


    //调用交易所创建订单  一千 gr 对 0.1E 由第一个用户发布
    res = await exchage.makeOrder(grTokenDai.address,toWei(1000), ETHER_ADDRESS ,toWei(0.1),{
        from: accounts[0]
    });
    //接收创建完成的订单id
    orderId = res.logs[0].args.id
    //告诉我们订单创建好了
    console.log("创建成功"+res.logs[0].args.id)
    //利用用户 accounts[1] 来完成这个订单
    await exchage.fillorder(orderId,{from: accounts[1]})
    console.log("完成订单")

    // 获取第一个用户在交易所中的E数值
    let res1 = await exchage.tokens(ETHER_ADDRESS,accounts[0])
    console.log(fromWei(res1)+":E");
    //获取第一个用户 在交易所中 grtoken的数量
    let res2 = await exchage.tokens(grTokenDai.address,accounts[0])
    console.log(fromWei(res2)+":grtoken");

    // 获取第二个用户在交易所中的E数值
    let res3 = await exchage.tokens(ETHER_ADDRESS,accounts[1])
    console.log(fromWei(res3)+":第二个用户 E");
    // 获取第二个用户的 grtoken 并输出
    let res4 = await exchage.tokens(grTokenDai.address,accounts[1])
    console.log(fromWei(res4)+":第二个用户 grtoken");

    callback()
}

然后我们终端执行

truffle exec .\scripts\test.js

尝试运行测试文件
运行上也是没有任何问题 那就OK了呗
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
但是 这不代表完全成功 大家可以尝试一下 你用react组件尝试导入 src目录外的文件 是会报错的
所以 我们还得想办法将 build/contracts 内的json拿到src里面来
但是 这里 我们不能手动移 因为之后你重新部署 他还是在那个位置
我们如果还要每次发不完手动将文件夹放到src里面 那还不如不要给他们合在一起 每次去复制 abi 就好了

这里 我们需要研究一个问题 合约json的生成位置是谁配置的?
其实这些内容 我们都是可以在 truffle-config.js 中配置的
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
我们加一个字段

"contracts_build_directory" : "./src/build"

WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
指定他将编译好的json 放到 当前目录下的 src下的 build 目录下面

然后 我们重写终端执行

truffle migrate --reset

部署智能合约
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
此时 可以看到 我们的目录就成功的生成出来了 里面的json也没什么问题
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
那么 我们就可以将原来最外面的这个
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
build 直接给它干掉了 已经没用了

然后 我们用 App.js 引入一个json合约 并控制台输出一下内容试试
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js
然后 我们再次运行项目 打开控制台 你就会发现 这个json 内容就被成功输出在控制台了
WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi,前端,web3,react.js文章来源地址https://www.toymoban.com/news/detail-728200.html

到了这里,关于WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web3 React dapp中编写balance组件从redux取出并展示用户资产

    好啊 上文WEB3 在 React搭建的Dapp中通过redux全局获取并存储用户ETH与自定义token与交易所存储数量中 我们拿到了用户的一个本身 和 交易所token数量 并放进了redux中做了一个全局管理 然后 我们继续 先 起来ganache的一个模拟环境 然后 我们启动自己的项目 顺手发布一下合约 然后

    2024年02月05日
    浏览(26)
  • 6.DApp-用Web3实现前端与智能合约的交互

    题记         用Web3实现前端与智能合约的交互,以下是操作流程和代码。 准备ganache环境         文章地址:4.DApp-MetaMask怎么连接本地Ganache-CSDN博客  准备智能合约          文章地址: 2.DApp-编写和运行solidity智能合约-CSDN博客 编写index.html文件          !DOCTYPE htm

    2024年02月08日
    浏览(29)
  • web3 React dapp项目通过事件从区块链中拿到 已取消 已完成 和所有的订单数据 并存入redux中

    好 上文web3通过antd 在React dapp中构建订单组件基本结构我们算是把一个基本的订单组件展示做出来了 然后 我们继续 起一下环境先 ganache 终端运行 MetaMask 登录一下 然后 打开项目 发布一下合约 然后 运行一下 测试脚本 转入交易所 ETH和grToken 还创建两个订单 然后 运行起 dapp项

    2024年02月05日
    浏览(37)
  • 【Web3 系列开发教程——创建你的第一个 NFT(7)】创建一个 NFT DApp,给你的 NFT 赋予属性,例如图片

    在本文中,你将构建一个 NFT 铸币机,并学习如何通过使用 Metamask 和 Web3 工具将你的智能合约连接到 React 前端,来创建一个NFT dApp。 我认为,对于具备 Web2 开发背景的开发者来说,最大的挑战之一是 弄清楚如何将你的智能合约连接到前端项目并与之交互。 通过构建 NFT 铸币

    2024年01月16日
    浏览(47)
  • WEB3 在 React搭建的Dapp中通过redux全局获取并存储用户ETH与自定义token与交易所存储数量

    上文 web3 在React dapp中全局管理web3当前登录用户/智能合约等信息中 我们简单操作,将web3的公共信息都存在了window对象上 然后 我们先来启动一下环境 终端输入 打开项目 终端输入 在区块链上发布一下智能合约 然后 我们在 src下的 components 目录下创建两个组件 分别是 余额组件

    2024年02月05日
    浏览(36)
  • web3简述Dapp组成部分

    好啊 都说光说不练 会感觉很空啊 那 我们就来进入真正的这个操作过程啊 区块链这种东西 我们肯定是无法从零开始搭建的 我们在这里说 是通过 以太坊提供的公有链的应用开发平台来做的 就可以理解为 以太坊是一个大的公共平台 人家给我们把地基搭好了 我们只需要在上面

    2024年02月09日
    浏览(40)
  • DAPP开发(一)——web3.0和智能合约

    web1.0~3.0,很多年前,互联网没有那么发达,刚出来的时候,仅仅只能在网上浏览观看信息,这就是1.0,后来出现了很多的软件,人们不仅可以浏览还可以发表自己的看法,手机app百花齐放,每个应用都有自己的数据库,存储数据,这就是2.0,现如今出现了3.0,去中心化的思想

    2024年02月05日
    浏览(30)
  • 【区块链】走进web3的世界-DApp如何快速接入wall

    在web3中,wall是您进入区块链的一个标识,每个用户使用的wall都不近相同,因此接入更多的wall是很有必要的,从用户角度来说,非必要情况下,我是不愿意去额外下载wall的。因此今天我们来聊一下,DApp如何快速的接入wall。 1、基于wagmi 1.1 在wagmi中内置了很多 wall 的连接,可

    2024年02月04日
    浏览(32)
  • Web3.0 DApp(去中心化应用程序)设计架构

    先来回顾下 Web2.0 应用程序架构,一图胜千言:   图示是对大多数 Web 2.0 应用程序如何工作的一个很好的抽象总结。以一个博客平台为例: 首先 ,必须有一个地方来存储基本数据,也就是数据库; 其次 ,要有后端代码(用 Node.js、Java 或 Python 等语言编写),用于定义业务逻

    2024年02月02日
    浏览(37)
  • 关于区块链、Web3.0、智能合约、DApp、DAO一文解释清楚

    区块链简单理解就是, 所有数据变成区块组成的链条,一个区块里保存着一条数据。 一笔支付、一个评论、一次查看、一条短信、一袋苹果都能保存为一个数据区块。 由于区块通过链条环环相扣,这确保了链上的数据是不可被篡改的。 链条复制了多条副本放置到多台互不相

    2024年02月02日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包