首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么web3.version.api为web3 1.0显示未定义,而为web3 0.20.3显示未定义?

为什么web3.version.api为web3 1.0显示未定义,而为web3 0.20.3显示未定义?
EN

Ethereum用户
提问于 2019-05-13 08:53:16
回答 2查看 824关注 0票数 1

我正在尝试使用MetaMask和web3js来与我的智能合同对话。下面是我的测试代码。

这没有定义一个web3 js文件,我在控制台上得到了结果"0.20.3“。

代码语言:javascript
复制
<script>
window.addEventListener("load", function() {
    // Checking if Web3 has been injected by the browser (Mist/MetaMask)
    if (typeof web3 !== "undefined") {
      // Use Mist/MetaMask's provider
      web3 = new Web3(web3.currentProvider);
      var version = web3.version.api;
      console.log(version);
    } else {
      console.log("No web3? You should consider trying MetaMask!");
      // fallback - use your fallback strategy (local node / hosted node + in-dapp id mgmt / fail)
      window.web3 = new Web3(
        new Web3.providers.HttpProvider("https://localhost:8545")
      );
    });
</script>

这与定义一个web3 1.0 beta-34文件有关。但我在控制台得到了“未定义”。

代码语言:javascript
复制
<script src="https://cdn.jsdelivr.net/gh/ethereum/web3.js@1.0.0-beta.34/dist/web3.min.js"></script>
<script>
        window.addEventListener('load', function() {
        // Check if Web3 has been injected by the browser:
        if (typeof web3 !== 'undefined') {
            // You have a web3 browser! Continue below!
            web3 = new Web3(web3.currentProvider);

            var version = web3.version.api;
            console.log(version); // "0.2.0"

            startApp(web3);

        } else {
            alert("No hay web3");
            // Warn the user that they need to get a web3 browser
            // Or install MetaMask, maybe with a nice graphic.
        }
    });
</script>
EN

回答 2

Ethereum用户

发布于 2019-05-13 11:36:31

添加Peter的解释,如果您在您的chrome上安装了元问题扩展并登录,打开控制台并键入web3.version.api,您将得到"0.20.3“,因为这是元as注入的web3的版本。这就是当您第一次尝试=>时所发生的事情--“这没有定义一个web3 js文件,我在控制台上得到了结果"0.20.3”

在第二次尝试中,您正在检查web3的有效性。

if (typeof web3 !== 'undefined')

这个web3是由元one注入的。不是你剧本里的那个。稍后,您将更新此

web3 = new Web3(web3.currentProvider)

如果您注释这一行,您将得到控制台输出为"0.20.3“。在执行这一行之后,web3变量现在具有版本"1.0.0-beta.34“的Web3实例。所以你需要使用web3.version

此外,如果您添加了一个脚本文件,理想情况下,您应该按照该版本的用法定义使用api。

票数 1
EN

Ethereum用户

发布于 2019-05-13 09:23:48

他们在web3的beta版本中改变了很多apis。

如果您想知道web3.js的版本,可以使用web3.version或从package.json查看版本:

代码语言:javascript
复制
import { version } from 'web3/package.json';

如果您想知道api协议的版本,请检查这个版本(源代码来自v0.2):

代码语言:javascript
复制
return [
        new Property({
            name: 'version.node',
            getter: 'web3_clientVersion'
        }),
        new Property({
            name: 'version.network',
            getter: 'net_version',
            inputFormatter: utils.toDecimal
        }),
        new Property({
            name: 'version.ethereum',
            getter: 'eth_protocolVersion',
            inputFormatter: utils.toDecimal
        }),
        new Property({
            name: 'version.whisper',
            getter: 'shh_version',
            inputFormatter: utils.toDecimal
        })
];

协议的每个版本都是一个JSONRPC调用。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/70644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档