Web3+vue-cli-plugin-web3modal 快速来建立你的第一个以太坊 dAPP

Web3是为让互联网更去中心化、可验证、安全而发起的一组普遍的运动和协议;Web3愿景是实现无服务器、去中心化的互联网,即用户掌握本身身份、数据和命运的互联网;Web3将启动新全球数字经济系统,创造新业务模式和新市场,打破平台垄断,推进普遍的、自下而上的创新。 从Web2.0到Web3.0javascript

知识储备vue

  1. web3.js
  2. DApp 的 Solidity 合约

IPFS + DAPP 真正的WEB3.0的时代到来java

前言

在工做中,天天都会重复昨天的工做(复制粘贴), 因为从事区块链的工做,必不可少的就是写DAPP了。react

对于web端DAPP实现,利用web3js和以太坊网络的上的节点合约交互。DAPP主要发布在 Imtoken 和Metamask等等钱包上固然也有pc端的。业界ETH上的Dapp比较有名的就是:uniswapgit

思考 : 它是怎么作到能够链接这个多的钱包的?github

而后连夜翻导它的源码,惋惜人家是react写的(想拷贝人家的代码 本身用的想法破灭了!”狗头“),个人dapp用的vuejs写的。苦逼 要不推翻了用react在重新写吧,不行呀,那就照抄吧...web

既然这种代码常常用 那就写个vue-cli-plugin-web3modal 这样就可插拔了,美滋滋vue-cli

那为何不自定义cli呢?npm

使用

vue add vue-cli-plugin-web3modal 
复制代码

或者安全

npm install --save-dev vue-cli-plugin-web3modal

yarn add vue-cli-plugin-web3modal --dev
复制代码

依提示能够根据本身的状况一步步的来配置,等待下载依赖(可能会等好久,由于要下载钱包节点提供者SDK)

cli.png

目录结构

src
│   ├── App.vue
│   ├── assets
│   │   └── logo.png
│   ├── components
│   │   ├── ConnectWallteExample.vue
│   │   └── HelloWorld.vue
│   ├── hooks
│   │   └── useWallte.js // 核心逻辑
│   ├── main.js
│   ├── registerServiceWorker.js
│   └── web3
│       ├── abis.js // 提供abis
│       ├── chains.js
│       ├── config.js // 配置项
│       ├── constants.dev.js
│       ├── constants.js
│       └── tools.js
复制代码
  • src/web3/config.js, 默认使用Metamask的web3提供者 ,providerOptions 配置能够参考 github.com/Web3Modal/w…,

    Metamask 默认使用 Infura 的服务器作为 web3 提供者。 就像咱们上面作的那样。不过它还为用户提供了选择他们本身 Web3 提供者的选项。因此使用 Metamask 的 web3 提供者,你就给了用户选择权,而本身无需操心这一块。

//默认使用Metamask的web3提供者
const providerOptions = {
  // Example with injected providers
  injected: {
    display: {
      logo: "data:image/gif;base64,INSERT_BASE64_STRING",
      name: "Injected",
      description: "Connect with the provider in your Browser"
    },
    package: null
  },
  // Example with WalletConnect provider
  walletconnect: {
    display: {
      logo: "data:image/gif;base64,INSERT_BASE64_STRING",
      name: "Mobile",
      description: "Scan qrcode with your mobile wallet"
    },
    package: WalletConnectProvider,
    options: {
      infuraId: "INFURA_ID" // required
    }
  }
};
复制代码
  • src/hooks/useWallte.js 这里暴露出来的web三、userAddress、chainId、networkId、resetApp、assets、getAccountAssets 等,

能够参考ConnectWallteExample.vue这个demo 。

这就是 vue-cli-plugin 的好处 ,你能够随便的 自定义 操做增删改 useWallter.js

  • 一旦你有了合约的地址和 ABI,你能够像这样来实例化 Web3.js,就能够愉快的调用咱们合约的函数: call and send
<script setup>
const {
  onConnect,
  connected,
  web3,
  userAddress,
  chainId,
  networkId,
  resetApp,
  assets,
  getAccountAssets,
} = useWallet();

const handleWalletConnect = async () => {
  await onConnect();
  if (connected) {
    console.log('afterConnectdWallet', connected);
  }
};
const contract = computed(
  () => new web3.value.eth.Contract(USDT_API, USDT_ADDRESS),
);
function approve() {
  return contract.value.methods
    .approve(USDT_ADDRESS, utils.toHex(utils.toWei('1000000000000000000000000000', 'gwei')))
    .send({ from: userAddress.value });
}

// .....
</script>
复制代码

注意⚠️

咱们一般不多把 实例化 myContract 写在业务层。都是利用vue3的组合式 API更好的解耦。

如:@/components/ConnectWallteExample.vue

// @/components/ConnectWallteExample.vue
<script setup>
  const {
      web3,
      userAddress,
      connected,
  } = useWallet();
 import useGswap from '@/hooks/useGswap';
  
 const { balanceOf } = useGswap({
      web3,
      userAddress,
      connected,
    });
// .....
</script>


复制代码

@/hooks/useGswap.js

// @/hooks/useGswap.js
 import {
  ref, computed, toRefs, watch, watchEffect,
} from 'vue';
import { GSWAPABI, POINTABI } from '@/web3/abi';
import { gswapAddress, poinAddress } from '@/web3/config';

export default function (props) {
  const { web3, userAddress, connected } = toRefs(props);

  const contract = computed(
    () => new web3.value.eth.Contract(GSWAPABI, gswapAddress),
  );
  const pointContract = computed(() => new web3.value.eth.Contract(POINTABI, poinAddress));
  // methods
  function balanceOf() {
    return pointContract.value.methods
      .balanceOf(userAddress.value)
      .call()
      .then((res) => res);
  }
  // ....
  return {
    balanceOf
  };
}

复制代码

demo.png

ps:

天天摸鱼时,看到大佬们理财,一个个的都财富自由了。因而本身也慢慢的萌生了理财的念头, 基金 股票 搞起来,本金少 涨也发不了财,可是亏可真的是割肉呀!

一直在寻找来钱快的理财方案,由于从事区块链相关的工做 玩起了数字货币,“眼看着它高楼起,....!" 曾经有财富自由的机会我没有好好的把握住....,不说了 我妈叫吃韭菜馅饺子去了(远离合约,真爱生命)

相关文章
相关标签/搜索