新版MetaMask如何获取当前账户地址

在使用MetaMask7.6学习以太坊智能合约时,发现web3.eth.getAccounts()无法获取账户地址。经研究发现,高版本MetaMask为保护隐私,不再允许Dapp随意获取地址。解决方法是通过检测MetaMask版本,如果为新版,则调用window.ethereum.request({method: 'eth_requestAccounts'})请求用户授权。用户授权后,即可正常调用web3。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这段时间在学习以太坊智能合约,用到MetaMask,于是就在chrome应用商店下载了最新的版本MetaMask7.6,正常转账使用是没有任何问题的,但是,当开发智能合约时,遇到一个头疼的问题:web3.eth.getAccounts() 获取不了当前账户的地址。

为什么 web3.eth.getAccounts() 无法使用呢?

经反复验证,确定我的代码是没有问题的,后来实在是想不出什么解决方法,就请教了会智能合约的前辈,得到的回复是:高版本web3无法使用,并发给我一个比较低的版本 MetaMask4.4。经过我的测试,这个版本确实可以正常使用 web3.eth.getAccounts()。

  • MetaMask7.6

  • MetaMask4.4

如上图所示:是两个版本的MetaMask。使用旧版本后我很不习惯,一是全英文(英文水平不好…),二是,也是最主要的原因,调用的时候经常不能正常唤醒弹出,这个非常让人头疼。

为了能重新用回MetaMask7.6 我决定要深究原因,找出解决办法;

为什么高版本的 MetaMask7.6 无法调用 web3 ?

幸运的我很快就找到了原因,如下图(点击查看下图文章详情):

Web3.py 是一个 Python 的库,可以用来与以太坊网络进行交互。而 Metamask 是一个浏览器插件,可以让用户轻松地与以太坊网络进行交互。 要获取 Metamask 的交易报价,你需要使用 Web3.py 与以太坊网络进行交互,并向以太坊网络发送一个交易。当你发送交易时,Metamask 会弹出一个窗口,显示当前的交易报价。 以下是一个使用 Web3.py 获取 Metamask 交易报价的例子: ```python from web3 import Web3, HTTPProvider from web3.middleware import geth_poa_middleware # 连接以太坊网络 w3 = Web3(HTTPProvider('https://mainnet.infura.io/v3/your-infura-project-id')) w3.middleware_onion.inject(geth_poa_middleware, layer=0) # 设置当前账户 w3.eth.default_account = w3.eth.accounts[0] # 构造交易 transaction = { 'from': w3.eth.accounts[0], 'to': '0x6B175474E89094C44Da98b954EedeAC495271d0F', # DAI 合约地址 'value': w3.toWei(1, 'ether'), 'gas': 200000, 'gasPrice': w3.toWei('5', 'gwei') } # 获取当前交易报价 gas_price = w3.eth.generate_gas_price() print('当前交易报价:', gas_price) # 签名并发送交易 signed_txn = w3.eth.account.sign_transaction(transaction, private_key=private_key) txn_hash = w3.eth.send_raw_transaction(signed_txn.rawTransaction) print('交易哈希:', txn_hash) ``` 在上面的例子中,我们首先连接到以太坊网络,并设置默认账户。然后我们构造了一个交易,并使用 `generate_gas_price()` 方法获取当前交易报价(这个方法会调用 Metamask 弹出窗口显示交易报价)。最后我们签名并发送了交易,并打印出了交易哈希。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值