区块链开发之Metamask使用调研

区块链开发之Metamask使用调研区块链开发之 Metamask 使用调研支持的浏览器 链接 Metamask 自动链接 Metamask 钱包 代码示例 constWeb3 require web3 constethEnab async gt if window ethereum 获取账户地址 constaccount awaitwindow ethereum request method eth requestAccou c

区块链开发之Metamask使用调研

支持的浏览器

image-20220104170836535

链接Metamask

自动链接Metamask钱包。

代码示例
const Web3 = require("web3"); const ethEnabled = async () => { 
    if (window.ethereum) { 
    //获取账户地址 const account = await window.ethereum.request({ 
   method: 'eth_requestAccounts'}); console.log("当前账户地址", account[0]) window.web3 = new Web3(window.ethereum); return true; } return false; } //链接metamask ethEnabled().then(r => console.log("connect wallet", r)); 
结果

image-20220105144056506

api 接口

Metamask ethereum provider

Web3js api docs

手机插件是否支持

web3是登录流程的先决条件。在桌面浏览器上,MetaMask将其注入。但是,移动浏览器上没有扩展程序,因此该登录流程无法在移动Safari,Chrome或Firefox上直接使用。有些独立的移动浏览器会注入web3,基本上是将MetaMask封装在浏览器中。

  • 移动端app。

​ 官方下载地址(需科学上网)

​ 安卓下载链接1

安卓下载链接2

  • Dapp浏览器

    常见的DApp浏览器包括:Mist、MetaMask、Coinbase Wallet、Trust Wallet、imToken、Status、Cipher等

支付流程是如何实现的

用户发起操作,实际是操作链上的合约,调用合约即会产生gas费用,会调用Metamask支付gas费用,调用合约会返回结果,根据结果页面做相应跳转逻辑。

  • gas费用
    • 大于实际区块打包费用:会退回,会直接退回到小狐狸地址。
    • 小于实际区块打包费用:交易失败,不会退回小号的gas费用。
如何为用户自动添加BSC网络

自动添加网络并切换,这都要归功于 EIP-3085的新RPC方法wallet_addEthereumChain 。MetaMask的文档在这里。

示例:

const params = [{ 
    
    "chainId": "0x38", // 56 in decimal
    "chainName": "BSC",
    "rpcUrls": [
        "https://bsc-dataseed.binance.org"
    ],
    "nativeCurrency": { 
    
        "name": "Binance Coin",
        "symbol": "BNB",
        "decimals": 18
    },
    "blockExplorerUrls": [
        "https://bscscan.com"
    ]
}]
try { 
    
    await window.ethereum.request({ 
    
        method: 'wallet_addEthereumChain',
        params,
    })
} catch (error) { 
    
   console.error('添加BSC网络失败',error)
}

效果图:

image-20220104184411422

思考
网络支持

切换链网络(币安),什么阶段切换?

一般都是进入主网站即唤起钱包进行登录,根据支持的区块链网络进行网络切换,如用户放弃切换网络则有两种情况,第一种:用户不可在主网站中操作,只要操作即再次提示网络切换;第二种:用户可以正常使用,但涉及交易等操作时需要切换网络。

NFT合并

销毁再铸造(上链);

一般游戏内都是完全上链,即所有操作都会上链,产生gas费,但是有一些会部分上链,例如交易所,所有流通的NFT或者代币都在交易所流通,只有真正发生交易时(账户的提现即代币充值)才会上链。

metamask app?

手机浏览器能否唤醒 metamask app

必须在MetaMask集成的浏览器中使用DApp

提现(NFT、代币)实现

如何从公共账户转到个人账户?如何实现?

待解决。

参考

平台记录交易(用户消费)

不涉及上链,所有记录都在数据库维护,只有用户真正提现时上链(公共账户转移到个人账户)

所有非提现操作的交易都记录在平台数据中,当用户发生提现时才产生真实的上链操作。

nft下发:上链

提现:上链

支付:游戏钱包不会上链,metamask上链。

钱包代币来源:

  1. *metamask充值,实际充值到平台账户,用户游戏账户+代币。
  2. 战斗获取
提现交互

游戏客户端调用游戏平台,平台返回提现类型(例如:Metamask)及网络(例如:币安链)配置信息

所有和Metamask有交互的操作都需要和平台确认,例如:

钱包是否支持:是否支持metamsk

网络是否支持:是否支持bsc网络

交易参数:调用合约时的参数,例如调用制作NFT,需要合约的地址及abi。

合约发布费用差别

一个及多个合约发布的费用有何差别?

实现过程

  1. 合约代码少(代码量及规则简单)

image-20220106151556844

  1. 合约代码多(相对上面而言)

image-20220106151726217

发布合约费用取决于合约本身,多个合约同时发布也是一个个发布,发布费用和单个合约自身有关系。

NFT上链

合约上链时有没有数量?什么时候铸造的NFT?NFT如何与业务关联?

发布的合约本身没有数量,铸造时数量+1。

游戏与平台交互

发生Metamask交易时,游戏客户端如何与平台交互?交易信息如何保证正确性及准确性?

回调+轮询。

跨链是什么?
基本业务梳理
业务模块

Metamask Platform模块关系图

登陆、授权接口

授权api

代码示例

ethereum
    .request({ method: 'eth_requestAccounts' })
    .then(handleAccountsChanged)
    .catch((error) => {
      if (error.code === 4001) {
        console.log('Please connect to MetaMask.');
      } else {
        console.error(error);
      }
    });
支付接口

调用metamask交易api

示例代码

params: [
  {
    from: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',
    to: '0xd46e8dd67c5d32be8058bb8eb970870f07244567',
    gas: '0x76c0', // 30400
    gasPrice: '0x9184e72a000', // 10000000000000
    value: '0x9184e72a', // 2441406250
    data:
      '可选',
  },
];

ethereum
  .request({
    method: 'eth_sendTransaction',
    params,
  })
  .then((result) => {
    // The result varies by RPC method.
    // For example, this method will return a transaction hash hexadecimal string on success.
  })
  .catch((error) => {
    // If the request fails, the Promise will reject with an error.
  });
铸造接口

web3js api调用合约

......
//根据abi获取合约
var contract =  new web3.eth.Contract(abi, address);
......
调用合约方法,例如查询余额
contract.methods.balanceOf(address).call().then(function(err,result) {
              console.log('balance',result)
})

就是调用合约中的铸币方法。

销毁接口

就是调用合约中的销毁方法。

同铸造方法

提币接口

调用metamask 交易接口。

需要客户端传递

用户账户地址

提现费用

交易单信息(交易金额,交易币种)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218194.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午7:50
下一篇 2026年3月18日 上午7:50


相关推荐

  • Agent到底是什么,一文搞懂智能体相关概念及原理【建议收藏】

    Agent到底是什么,一文搞懂智能体相关概念及原理【建议收藏】

    2026年3月16日
    2
  • ab网站压力测试

    ab网站压力测试命令的参数、输出结果的中文注解permalink以前安装好APACHE总是不知道该如何测试APACHE的性能,现在总算找到一个测试工具了。就是APACHE自带的测试工具AB(apa

    2021年12月25日
    52
  • 卡尔曼滤波算法详细推导

    卡尔曼滤波算法详细推导一、预备知识1、协方差矩阵是一个维列向量,是的期望,协方差矩阵为可以看出协方差矩阵都是对称矩阵且是半正定的协方差矩阵的迹是的均方误差2、用到的两个矩阵微分公式公式一:公式二:若是对称矩阵,则下式成立…

    2022年6月14日
    49
  • i386和i686的区别[通俗易懂]

    i386和i686的区别[通俗易懂]i386和i686现在所有的intel32位体系(包括AMD等兼容CPU)都叫i386体系,包括P4。、i686仍然属于i386体系,不过对CPU(相对于386)的特性作了指令优化。GNU/Linux分为alpha、PowerPC、Sun等各个不同版本,所有从Intel386-P4都用i386版本,但i386版本中有几个内核(i486,i486,i586,i686),安装时安装程序检测到

    2022年6月7日
    36
  • MySQL数据库增删改查(基础操作命令详解)

    MySQL数据库增删改查(基础操作命令详解)MySQL 数据库初体验 基础操作命令详解 文章目录一 MySQL 数据库管理 基本命令 一 查看数据库结构 二 创建及删除数据库和表 三 管理表中的数据记录 四 修改表名和表结构 五 数据表高级操作 六 数据库用户管理 七 数据库用户授权一 MySQL 数据库管理 基本命令 数据库 gt 数据表 gt 行 记录 用来描述一个对象的信息列 字段 用来描述对象的一个属性常用的数据类型 int 整型 float 单精度浮点 4 字节 32 位 double 双精度浮点 8 字节 64 位

    2026年3月18日
    1
  • 递归算法php,php递归算法经典实例「建议收藏」

    递归算法php,php递归算法经典实例「建议收藏」PHP递归算法就是函数调用函数了操作非常的简单了,我们下面来给各位介绍PHP递归算法及实际的一些关于递归的用法。递归函数为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行,可能这样给大家讲解,还是很难明白,直接上例子functiontest($n){echo$n.”…

    2022年8月11日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号