【问题标题】:(intermediate value).toBigNumber is not a function(中间值).toBigNumber 不是函数
【发布时间】:2021-07-16 04:19:03
【问题描述】:

我正在关注构建你的第一个区块链教程(https://www.youtube.com/watch?v=coQ5dg8wM2o&t=494s)。

我的 index.html 中有以下内容:

<script src="https://cdn.jsdelivr.net/gh/ethereum/web3.js/dist/web3.min.js"></script>
    <script src="vendor/truffle-contract/dist/truffle-contract.js"></script>
    <script src="app.js"></script> 

当我打开我的 index.html 页面时,我在控制台上收到以下错误:

   (intermediate value).toBigNumber is not a function
    at truffle-contract.js:16802
    at Object.<anonymous> (truffle-contract.js:17735)

它发生在 truffle-contract.js node_modules 包代码中:

var BigNumber = (new Web3()).toBigNumber(0).constructor;

web3.min.js 文件似乎不支持“toBigNumber”功能。 我在 package-lock.json 中确实有以下依赖项:

 "dependencies": {
        "web3": {
          "version": "0.20.6",
          "resolved": "https://registry.npmjs.org/web3/-/web3-0.20.6.tgz",
          "integrity": "sha1-PpcwauAk+yThCj11yIQwJWIhUSA=",
          "dev": true,
          "requires": {
            "bignumber.js": "git+https://github.com/frozeman/bignumber.js-nolookahead.git",
            "crypto-js": "^3.1.4",
            "utf8": "^2.1.1",
            "xhr2": "*",
            "xmlhttprequest": "*"
          }
        }
      }

不确定在哪里可以找到支持 toBigNumber 函数的正确 web3.min.js 文件

【问题讨论】:

  • Web 0.20 已有多年历史。我建议使用较新的教程作为您的基础学习材料。

标签: ethereum web3 truffle


【解决方案1】:

正如 Mikko 指出的,请使用最新的 lib (v1.2)

您也可以在 web3.utils 中使用“BN”作为 BigNumber。 web3.utils.toBN(number)

【讨论】:

    【解决方案2】:

    我包含了这个版本的 web3 而不是 v=1.0.0

    https://cdn.jsdelivr.net/gh/ethereum/web3.js@0.20.6/dist/web3.min.js

    这解决了问题

    【讨论】:

      【解决方案3】:

      根本原因是教程使用了旧版本的库,

      我正在尝试相同的教程,遇到相同的问题并修复

      1. 更新包版本
           "devDependencies": {
          "bootstrap": "4.1.3",
          "chai": "^4.1.2",
          "chai-as-promised": "^7.1.1",
          "chai-bignumber": "^2.0.2",
          "lite-server": "^2.3.0",
          "nodemon": "^1.17.3",
          "truffle": "^5.4.9",
          "@truffle/contract": "4.3.33",
          "web3": "1.5.2"
        }
      
      
      1. 更新 index.html
          <!-- Include all compiled plugins (below), or include individual files as needed -->
          <script src="vendor/bootstrap/dist/js/bootstrap.min.js"></script>
          <script src="vendor/web3/dist/web3.min.js"></script>
          <script src="vendor/@truffle/contract/dist/truffle-contract.min.js"></script>
          <script src="app.js"></script>
      
      1. 使用this link中的函数更新loadWeb3函数

         window.addEventListener('load', async () => {
         // Modern dapp browsers...
         if (window.ethereum) {
             window.web3 = new Web3(ethereum);
             try {
                 // Request account access if needed
                 await ethereum.enable();
                 // Acccounts now exposed
                 web3.eth.sendTransaction({/* ... */});
             } catch (error) {
                 // User denied account access...
             }
         }
         // Legacy dapp browsers...
         else if (window.web3) {
             window.web3 = new Web3(web3.currentProvider);
             // Acccounts always exposed
             web3.eth.sendTransaction({/* ... */});
         }
         // Non-dapp browsers...
         else {
             console.log('Non-Ethereum browser detected. You should consider trying MetaMask!');
         }
        

        });

      2. 更新 loadContract 函数

      App.contracts.TodoList.setProvider(new Web3.providers.HttpProvider("http://127.0.0.1:7545"));
      
      1. 尝试重启浏览器看看

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-23
        • 2021-01-13
        • 2018-02-10
        • 2022-11-04
        • 1970-01-01
        • 2015-07-19
        • 1970-01-01
        相关资源
        最近更新 更多