国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記錄分享vue3通過web3.js連接MetaMask的流程及簽名、驗簽方法

這篇具有很好參考價值的文章主要介紹了記錄分享vue3通過web3.js連接MetaMask的流程及簽名、驗簽方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

記錄下web3.js連接,希望對像我一樣的小白有幫助。廢話不多說,開整!

一、先在瀏覽器上面下載 小狐貍MetaMask插件,然后創(chuàng)建賬戶,創(chuàng)建成功之后默認連接的是以太坊 Ethereum 主網(wǎng)絡,如果有相關網(wǎng)絡的信息(如RPC URL和和鏈id等,可以自己添加,沒有就先不管)。

記錄分享vue3通過web3.js連接MetaMask的流程及簽名、驗簽方法

?二、本地項目庫中下載web3.js的相關依賴
//在vue中安裝web3
npm install web3 --save
//在項目頁中引入
import Web3 from "web3";

三、相關調試代碼

//可以在生命周期中判斷瀏覽器有沒有安裝插件,減少無效交互
if (typeof window.ethereum !== "undefined") {
? ? ? console.log("安裝插件了");
? ? } else {
? ? ? console.log("沒安裝插件");
? ? }
//通過相應判斷給用戶做出提示,如果window.ethereum提示紅標的話,就在vite-env.d.ts文件中加上下面的即可
declare interface Window{
? ? ethereum:any
}

//開始連接,可以通過 window.ethereum.request觸發(fā)連接,此時會彈出小狐貍連接的請求,如果用戶點擊成功連接,可以在then中獲取到賬戶的地址,如果用戶拒絕連接或者連接出錯則在catch中獲取相關錯誤

//獲取當前連接網(wǎng)絡的id

console.log(window.ethereum.chainId)

//主網(wǎng)絡是0x1,例如自己的網(wǎng)絡id是91199,要先轉為16進制再拼接0x開頭

let id=91196

let chainId = "0x" + id.toString(16)

if(chainId ==window.ethereum.chainId){

//當前連接的是自己的網(wǎng)絡

}else{

//反之連接的是其他網(wǎng)絡

}

//數(shù)據(jù)簽名以及驗簽
// 簽名:
//關于數(shù)據(jù)簽名可以用eth.sign或eth.personal.sign,函數(shù)一般傳遞3個參數(shù),第一個簽名信息,第二個是簽名者的地址,第三個是回調函數(shù)。其區(qū)別在于eth.sign 函數(shù)需要傳遞給它的消息是消息哈希而 eth.personal.sign 函數(shù)需要傳遞給它的消息是未經(jīng)哈希處理的字符串,可以根據(jù)具體業(yè)務來選擇。
// eth.sign?
?let val = web3.value.utils.sha3('sss')//將數(shù)據(jù)消息哈希
? ? ? web3.value.eth.sign(val,address.value, (err, sign) => {
? ? ? ? if (err) { //簽名失敗
? ? ? ? ? console.error(err);
? ? ? ? } else { //簽名成功
? ? ? ? ? console.log(sign);//返回的簽名
? ? ? ? }
? ? ? ?}
// eth.personal.sign
web3.value.eth.personal.sign('abc', address.value, (err, sign) => {
? ? ? ? if (err) {
? ? ? ? ? console.error(err);
? ? ? ? } else {
? ? ? ? ? console.log(sign);
? ? ? ? }
? ? ? })

//簽名的時候會彈出簽名界面可以看到簽名消息內容,簽名成功后就會在回調函數(shù)中獲取到簽名之后的信息

記錄分享vue3通過web3.js連接MetaMask的流程及簽名、驗簽方法

//驗簽:
//可以通過eth.personal.ecRecover驗證簽名是否有效,傳入2個參數(shù),一個是簽名前的消息和簽名后的消息,通過回調函數(shù)獲得該簽名的地址,如果該地址等于簽名者的地址,表明改簽名有效,反之無效
web3.value.eth.personal.ecRecover('abc', sign).then(res => {
? ? ? ? ? ? console.log(res)//獲得該簽名者的地址
? ? ? })

記錄分享vue3通過web3.js連接MetaMask的流程及簽名、驗簽方法

?四、合約相關操作

?//如果需要調用合約方法,首先要引入JSON格式的合約abi,具體abi格式如圖所示
import abi from "../abi/abi";

記錄分享vue3通過web3.js連接MetaMask的流程及簽名、驗簽方法

?//還需要合約地址和鏈id,獲取合約實例(abi是合約,contractAddress是合約地址)
let myContract= new web3.value.eth.Contract(abi.abi, contractAddress);
//具體合約實例包含合約的方法及其他相關信息,如圖

記錄分享vue3通過web3.js連接MetaMask的流程及簽名、驗簽方法

五、源碼


<template>
  <div @click="connection()">連接</div>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import Web3 from 'web3'
import abi from "../abi/abi";
let web3 = ref() as any
defineProps<{ msg: string }>()
let address=ref()//小狐貍地址
let myContract=ref()//合約實例
const connection = () => {//鏈接小狐貍
  window.ethereum.request({ method: 'eth_requestAccounts' }).then((res: any) => {
    console.log(res, '這就是小狐貍地址')
    address.value=res[0]
  }).catch((err: any) => {
    console.log(err)
    if (err.code == 4001) {
      console.log('用戶拒絕連接')
    }
  })
}
onMounted(() => {
  if (typeof window.ethereum !== "undefined") {
    console.log("安裝插件了");
  } else {
    console.log("沒安裝插件");
  }
  web3.value = new Web3(window.ethereum)
  // const {abi} = require('../abi/abi')
  myContract.value= new web3.value.eth.Contract(abi.abi, contractAddress.value);
  console.log(myContract.value)//abi實例
  let id=91196
  let chainId = "0x" + id.toString(16)
  if(chainId ==window.ethereum.chainId){
        //當前連接的是自己的網(wǎng)絡
        
    }else{
        //反之連接的是其他網(wǎng)絡
    }
    //簽名及驗簽
    // eth.sign 
     let val = web3.value.utils.sha3('sss')//將數(shù)據(jù)消息哈希
      web3.value.eth.sign(val, address.value, (err, sign) => {
        if (err) { //簽名失敗
          console.error(err);
        } else { //簽名成功
          console.log(sign);//返回的簽名
        }
       }
    // eth.personal.sign
    web3.value.eth.personal.sign('abc', address.value, (err, sign) => {
        if (err) {
          console.error(err);
        } else {
          console.log(sign);
          web3.value.eth.personal.ecRecover('abc', sign).then(res => {
            console.log(res)//獲得該簽名者的地址
          })
        }
      })

})
</script>
<style scoped>
.read-the-docs {
  color: #888;
}
</style>

六、總結
以上就是vue3連接小狐貍的流程,代碼上面有很多瑕疵,比如ts中引入abi.js一直在爆紅,提示無法找到js的申明模塊,雖然不影響使用但是還是看起來不舒服,還有就是當用戶第一次連接小狐貍的時候點擊拒絕了,再次點擊連接時,無法喚醒小狐貍連接界面,只能手動去點擊小狐貍圖標手動去點連接,我這邊一直沒有找到相關方法,如有解決的大佬還望不吝賜教。文章來源地址http://www.zghlxwxcb.cn/news/detail-462588.html

到了這里,關于記錄分享vue3通過web3.js連接MetaMask的流程及簽名、驗簽方法的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • vue3 使用 web3.js;錢包轉賬;喚醒錢包.......

    web3.js基本使用 本篇文章不適合沒有經(jīng)驗的小白,需要對web3有一定的了解,所以有些參數(shù)需要自己懂! 準備 安裝web3.js依賴包 npm install web3 文檔教程地址:https://web3.tryblockchain.org/ 這是我自己封裝的類 web3.js 直接復制過去就可以用

    2024年02月03日
    瀏覽(24)
  • HTML頁面通過Web3JS連接智能合約并調用其中接口

    HTML頁面通過Web3JS連接智能合約并調用其中接口

    之前我們學習solidity 并用它編寫了智能合約 登上區(qū)塊鏈 然后也做了基本的測試 但是 其實在web3時代 前端依舊扮演者非常重要的角色 我們現(xiàn)在就來打通web3 從合約到頁面的一個管理 首先 我們還是將自己的ganache環(huán)境起起來 然后 在我們之前智能合約的項目終端執(zhí)行 將我們的智

    2024年02月16日
    瀏覽(39)
  • 使用Node.js和Web3.js實現(xiàn)鏈接MetaMask錢包并批量創(chuàng)建錢包并且批量發(fā)送代幣

    MetaMask是一款基于瀏覽器的插件錢包,它可以安全地存儲、發(fā)送和接收以太坊(Ethereum)代幣。而Web3.js是一款JavaScript庫,可以通過它連接以太坊區(qū)塊鏈網(wǎng)絡并管理以太坊錢包。 在此文中,我們將學習如何使用Node.js和Web3.js編程語言編寫代碼,實現(xiàn)鏈接MetaMask錢包并批量創(chuàng)建錢

    2024年02月08日
    瀏覽(54)
  • 使用nodejs和web3js實現(xiàn)鏈接metamask錢包并實現(xiàn)合約交互

    在以太坊區(qū)塊鏈上,metamask錢包是一個非常常用的錢包,用以管理以太幣和其他以太坊資產(chǎn)。同時,它也是一個重要的以太坊智能合約交互工具。在本文中,我們將介紹如何使用nodejs和web3js實現(xiàn)鏈接metamask錢包并實現(xiàn)合約交互。 在開始之前,首先需要安裝NodeJS和Web3JS。 NodeJS是

    2024年02月04日
    瀏覽(32)
  • html通過web3JS 獲取當前連接的區(qū)塊鏈信息和賬號信息

    html通過web3JS 獲取當前連接的區(qū)塊鏈信息和賬號信息

    前面 我們講了 MetaMask和ganache的配置安裝 并用 MetaMask管理ganache的啟動的虛擬區(qū)塊鏈 那么 我們現(xiàn)在也完全可以寫一個網(wǎng)頁來做這個東西的管理 您可以先查看文章web3.js獲取導入做一個導入了 web3的html文件 首先我們可以來試著 獲取 自己當前是在哪個區(qū)塊的 getBlockNumber 當然 你要

    2024年02月17日
    瀏覽(30)
  • 使用nodejs和web3js來實現(xiàn)鏈接MetaMask錢包并取消風險代幣授權

    隨著區(qū)塊鏈技術的快速發(fā)展,數(shù)字貨幣資產(chǎn)在投資及交易市場中得到了廣泛的應用。而在數(shù)字貨幣交易過程中,錢包是一個非常重要的環(huán)節(jié)。比如MetaMask就是一款非常流行的區(qū)塊鏈錢包,它可以讓用戶在瀏覽器中安全地管理自己的數(shù)字資產(chǎn)。 然而,在數(shù)字貨幣交易過程中也存

    2024年01月23日
    瀏覽(36)
  • 前端VUE使用web3調用小狐貍(metamask)和合約(ERC20)交互

    前端VUE使用web3調用小狐貍(metamask)和合約(ERC20)交互

    1.創(chuàng)建vue項目 2.安裝web3 npm install web3 3.項目web3 main.js 項目結構 頁面代碼中引用web3,倒入ERC20代幣的abi 項目頁面 ? 調用小狐貍metamask演示 ? 項目任何難題,可以加入qq群:981921011 ? ? ?

    2024年02月15日
    瀏覽(30)
  • 【W(wǎng)eb3】MetaMask錢包配置

    【W(wǎng)eb3】MetaMask錢包配置

    目錄 主網(wǎng)更換測試網(wǎng) 私鑰如何登錄錢包 主網(wǎng)更換測試網(wǎng) 私鑰如何登錄錢包

    2024年02月12日
    瀏覽(23)
  • Web3簡述MetaMask并演示谷歌安裝MetaMask擴展程序方式

    Web3簡述MetaMask并演示谷歌安裝MetaMask擴展程序方式

    我們會基本使用顯然不夠啊 我們要去了解mustache的原理 乃至自己去寫一個mustache 首先 mustache 不是不能用簡單的正則表達式來實現(xiàn) 但是 這里為了讓大家理解 為什么不能 我們還是用簡單正則寫一下 我們創(chuàng)建一個 html文件 然后 編寫代碼如下 這里 我們定義了一個模板字符串 t

    2024年02月09日
    瀏覽(73)
  • MetaMask與Web3中智能合約調用(2)

    MetaMask與Web3中智能合約調用(2)

    智能合約交易區(qū)別于點對點交易,智能合約交易只需付費給礦工費用,也就是gas fee,是支付給礦工的手續(xù)費,當我們在以太坊區(qū)塊鏈上進行轉賬時,礦工要把我們的交易打包并放上區(qū)塊鏈,才能使交易完成,在這過程中會消耗區(qū)塊鏈的運算資源,所以要支付費用 這個過程為

    2024年01月16日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包