基础前端使用web3 进行区块链项目开发

这篇具有很好参考价值的文章主要介绍了基础前端使用web3 进行区块链项目开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基础前端使用web3 进行区块链项目开发

这篇文章不会些区块链的机制算法等一切,只是对前端开发者,如何快速上手进行区块链项目开发做一个简单的引导。
阅读本文之前,需要了解一些简单的区块链知识,能回答以下四个问题就可以阅读本文了。
1、区块链是什么?
2、区块链节点是什么?
3、钱包是什么?
4、钱包如何使用?(普通用户层面的使用)
5、合约是什么?

传统开发的区别

传统项目与区块链项目的区别只有一点,数据通信对象不通,传统项目跟后端服务器通信,而区块链项目需要跟区块链的节点通信两者间的通信方式有所区别,其他地方都一样的,所以前端开发者进入区块链行业是比较容易的。

与节点通信

接下来我要介绍区块链项目如何与节点通信为了方便理解,我们需要提到一些传统的通信,作为对比,
1、链接节点
普通项目需要使用ajax来与服务器通信,通常是用axios来链接服务器

import axios from 'axios';

// 向给定ID的用户发起请求

axios.defaults.baseURL = 'http://127.0.0.1:3000/';

axios.get('/getBalance?address=0x02546eAcDe5BebACFB04b0351005c3d7d49E821D')
  .then( (res)=> {
    console.log(res);
  }) 

区块链项目需要使用web3.js来链接节点,

	安装		npm i web3

import Web3 from 'web3';

let web3 = await new Web3('https://bsc-dataseed1.ninicoin.io');
// 这个地址是随便找的,千万别往里面转钱
web3.eth.getBalance('0x02546eAcDe5BebACFB04b0351005c3d7d49E821D').then((res)=>{ 
    console.log(res);
})

这段代码链接了bsc链的一个节点,并查询了某个账户的原生币余额。
我们可以和axios做类比 先new了一个web3对象,需要指定一个节点地址,类似于axios指定baseURL。
然后调用eth下的getBalance查询原生币余额,类似axios指定路由,给定参数,然后得到返回值。
两者是不是很像呢?
有时间可以读读 web3.js的文档解锁跟多的web知识,但现在先跟我往下走。

与合约通信(获取数据)

大多数时候我们链上了节点之后是与合约进行通信,那么我们需要构建合约然后调用方法来获取数据

let web3 = await new Web3('https://bsc-dataseed1.ninicoin.io');
let abi = [{
            inputs: [
              {
                internalType: 'address',
                name: 'account',
                type: 'address',
              },
            ],
            name: 'balanceOf',
            outputs: [
              {
                internalType: 'uint256',
                name: '',
                type: 'uint256',
              },
            ],
            stateMutability: 'view',
            type: 'function',
          }]
 //构建合约固定方法,传入两个参数 abi、地址
let myContract = new web3.eth.Contract(abi,'0x55d398326f99059ff775485246999027b3197955');

//查询余额
let balance= await myContract.methods.balanceOf('0x02546eAcDe5BebACFB04b0351005c3d7d49E821D').call();

console.log(balance); 

上述代码是一个查询bsc上USDT余额的代码。首先new了一个web3对象,然后构建了一个合约,合约构建方法是固定的可以在 web3.js的文档中找到这里不做赘述,有了合约之后就调用合约上的 balanceOf 方法查询余额。

到了这里是不是有一点懵逼了?疑惑abi是什么?我又该如何知道合约有哪些方法可以给我调用呢?不要着急,且听我一一道来。

合约是由开发者开发的,合约的开发者会给你一份文档、一份abi 及 合约地址。
这个文档类似于接口文档,会告诉你你该调用哪个方法,该传什么参数,以及会得到什么样的数据响应。

至于abi和地址就是构建合约对象必不可少的东西了。

	到了现在你应该就没有关于数据上的疑惑了,下面是一部分数据解读,看了更好,不看也会在开发中慢慢发现这个问题

上面的abi中包含了inputs,outputs,name,type,stateMutability 几个属性,
name 就是你调用的方法的名称,
inputs 里面你可以看到你需要传入的参数类型,以及一些描述
outputs 里面你可以看到合约将会返回什么数据,
至于type和stateMutability 并不太重要,这里就不介绍了,你需要在开发中去留意他俩是干嘛的,

合约通信(提供数据,改变链上数据)

在开始之前有两点知识需要先说明,

合约方法的调用有两种,

第一种方法不会对合约数据进行更改的不需要更改链上数据,自然就不需要节点进行广播操作,上述的查询余额就是这类方法。
第二种是要对合约内部的数据进行更改,进行了数据更改,节点就要向其他节点广播最终被矿工节点打包,这种需要支付一定的手续费。相当于给矿工开工资。转账就是这种方法。下面介绍转账方法的调用。

需要钱包来辅助操作

如果你是开发者完全可以用代码来管理私钥,签发事务等,但是开发网页是给用户使用的,用户只需要打开网页,点击转账,然后弹起钱包输入密码就好了。所以需要先学习钱包如何使用metamask文档,其实可以后面慢慢学,现在先跟我往下走。

首先打开浏览器的插件商店安装一个metamask 设置>扩展程序>访问chrome商店

		//链接钱包
          linkWallet() {
            window.ethereum
              .request({ method: 'eth_requestAccounts' })
              .then((addressList) => {
                this.wallet = addressList[0];
              });
          },

但我们的浏览器上装了metamask钱包之后,window对象上就会被挂载一个window.ethereum对象,打开控制台能看到该对象就说明你的metamask装好了, 直接调用上述方法就可以链接钱包。

注意上述代码返回的是当前链接的地址,需要保存一下下面要使用


let web3 = await new Web3(window.ethereum);
let abi = [{
          inputs: [
            {
              internalType: 'address',
              name: 'sender',
              type: 'address',
            },
            {
              internalType: 'address',
              name: 'recipient',
              type: 'address',
            },
            {
              internalType: 'uint256',
              name: 'amount',
              type: 'uint256',
            },
          ],
          name: 'transferFrom',
          outputs: [
            {
              internalType: 'bool',
              name: '',
              type: 'bool',
            },
          ],
          stateMutability: 'nonpayable',
          type: 'function',
        }]
 //构建合约固定方法,传入两个参数 abi、地址
let myContract = new web3.eth.Contract(abi,'0x55d398326f99059ff775485246999027b3197955');

//转账
await myContract.methods.transferFrom(
		this.wallet,
		'0x02546eAcDe5BebACFB04b0351005c3d7d49E821D',
		'1000000000000000000')
		.send({from:this.wallet})
		.then(()=>{
		    // 转账成功
		});

console.log(res); 

链接上代码之后使用上述代码就可以转账了,你可以对照着abi来看看传入的参数分别是什么,并且猜猜将会返回什么样的数据。
说明1: 转账这里我new web3时使用的是window.ethereum而不是节点ip,这是因为从钱包来的window.ethereum里面本身就包含了节点的ip,代码和钱包使用同一个节点一致性会更好一些,
说明2:两次交互都只跟erc20的合约交互,但我我使用了不同的abi,是因为abi可以跟链上合约不一致,只要保证你用的方法是合约里面有的即可,也就是说,你可以只放要用的那个方法,也可以将很多个abi合在一起,构建不同合约都使用同一份abi。
说明3:前面提到合约方法的调用有两种,其实对应了,调用方法 call() 和 send().
说明4:市面上的钱包多种多样,metamask、tp、imtoken、onkey等,大都有自己的链接方法。幸运的是,大多数的钱包都兼容metamask的链接调用方法,不需要额外去学习他们单独的规则。

至此你已经学会了怎么简单的从链上拿数据,并发送数据给链上,是不是和对接后端非常类似呢?
最后你需要多读web3.js 的文档,以及matemask的文档文章来源地址https://www.toymoban.com/news/detail-790160.html

到了这里,关于基础前端使用web3 进行区块链项目开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 使用Spring框架进行Web项目开发(初级)

    目录 前言 1. 为什么常规的Spring框架不适合Web项目呢? 2. 如何在Spring框架中创建容器? 3. Spring框架开发Web项目的步骤 3.1 创建maven项目 3.2 添加相应的依赖 3.3 在webapp目录下的web.xml中注册监听器 3.4 在webapp文件夹下的web.xml中配置Servlet控制器 3.5 自定义控制器  总结 我们在初步

    2024年01月19日
    浏览(46)
  • 最高5万美金激励,树图中国Web3.0项目开发

           树图区块链由多伦多大学教授龙凡博士创始发起,华人唯一图灵奖得主,著名计算机科学家姚期智院士担任首席科学家,拥有自主知识产权的树图(Conflux)区块链底层系统公链。核心研发团队平均年龄仅 30 岁,他们主要来自清华大学“姚班”或海外美国麻省理工学院

    2024年02月12日
    浏览(34)
  • 【区块链】走进web3的世界-对于前端来说,web2与web3的区别

    web3离不开几个概念,智能合约、区块链、前端交互     1、智能合约可以直接与区块链中的区块进行交互;     2、前端通过web3.js/ethers.js等npm库可以和智能合约进行交互; 说的直白点,web3与web2对于前端来说,只是对接的对象发生了变化,从后端API接口改为了智能合约。这

    2023年04月16日
    浏览(49)
  • 一文搞定dhtmlx-gantt调度界面,vue下使用dhtmlxgantt进行项目甘特图模块设计开发(前端界面显示篇(1))

    前言: 本文基于在较为成熟完整的项目,进行甘特图模块开发的内容。并不涉及node相关下载、安装及vue的相关使用。 1 需安装的模块 (1) dhtmlxgantt是进行甘特图开发过程中所用到的插件库,用于跨浏览器和跨平台应用程序的功能较为齐全的Gantt图表。其祖家组件为一个JavaScr

    2024年02月11日
    浏览(52)
  • Web3 整理React项目 导入Web3 并获取区块链信息

    上文 WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi 我们用react 创建了一个 dapp 项目 并将前后端代码做了个整合 那么 我们就来好好整理一下 我们的前端react的项目结构 我们在 src 目录下创建一个 components 用来存放我们的 大规模组件 然后 在

    2024年02月02日
    浏览(48)
  • 【Web3 系列开发教程——创建你的第一个 NFT(8)】如何开发一个成功的 NFT 项目 | NFT 社区建设技巧

    ⭐️ 本文首发自 前端修罗场(点击加入),是 一个由 资深开发者 独立运行 的专业技术社区 ,我专注 Web 技术、Web3、区块链、答疑解惑、面试辅导以及职业发展 。 博主创作的 《Web3 实战教程》(点击订阅) ,已经帮助许多开发者成功铸造 NFT,内容浅显易懂,能够快速对 W

    2024年02月05日
    浏览(64)
  • 给Web3应用新增区块链数据(Web3项目一实战之六)

    当您在浏览首页以卡片形式来展示区块链列表数据(Web3项目一实战之五)时,不禁发问,既然首页读取了 区块链 列表数据,那么,那些列表数据总得在哪个页面进行添加进去吧!绝不会凭空冒出这许多数据的。 没错,如您所想,也正是您所猜测的那般, DApp 与传统 App 一样

    2024年02月05日
    浏览(44)
  • Web3 处理智能合约部署到本地区块链,并在本地进行测试

    上文 Web3 在Truffle项目中编写出自己的第一个solidity智能合约我们演示了 在Truffle环境下写一个智能合约并编译的功能 编译出的文件夹中的这个JSON就非常重要了 我们就可以通过 它这个ABI链接到需要的智能合约程序上去 但这也仅仅是编译完了 我们的智能合约还没有部署到我们

    2024年02月13日
    浏览(43)
  • 前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第十一章 基础界面开发 (组件封装和使用)

    Vue 是前端开发中非常常见的一种框架,它的易用性和灵活性使得它成为了很多开发者的首选。而在 Vue2 版本中,组件的开发也变得非常简单,但随着 Vue3 版本的发布,组件开发有了更多的特性和优化,为我们的业务开发带来了更多便利。本文将介绍如何使用 Vue3 开发业务组件

    2024年02月19日
    浏览(88)
  • 区块链和WEB3.0有哪些基础知识呢

    常用区块链基础知识包括: (1) 区块链概念 :区块链是一种 去中心化 的 分布式 账本技术,它通过加密算法和共识机制保证了数据的 安全 性和 不可篡改 性。区块链中的每一个区块都包含了前一个区块的哈希值,形成了一个不可篡改的链式结构。 (2) 共识机制 :区块链

    2024年02月14日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包