You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Solidity和Truffle迁移合约时遇Buffer.from is not a function错误求助

问题描述

我使用Solidity和Truffle开发智能合约,执行迁移命令migrate时触发以下错误:

truffle(develop)> migrate
Uncaught TypeError: Buffer.from is not a function
    at Object.601827 (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/packages/core/lib/commands/migrate/index.js:4:18)
    at __webpack_require__ (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/webpack/bootstrap:19:1)
    at Object.853983 (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/packages/core/lib/commands/migrate/runMigrations.js:1:17)
    at __webpack_require__ (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/webpack/bootstrap:19:1)
    at Object.523459 (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/packages/migrate/index.js:5:16)
    at __webpack_require__ (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/webpack/bootstrap:19:1)
    at Object.120553 (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/packages/config/dist/index.js:12:26)
    at __webpack_require__ (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/webpack/bootstrap:19:1)
    at Object.969203 (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/packages/config/dist/configDefaults.js:27:36)
    at __webpack_require__ (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/webpack/bootstrap:19:1)
    at Object.200509 (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/packages/provider/index.js:2:14)
    at __webpack_require__ (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/webpack/bootstrap:19:1)
    at Object.503283 (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/node_modules/web3/lib/index.js:30:11)
    at __webpack_require__ (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/webpack/bootstrap:19:1)
    at Object.727646 (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/node_modules/web3-eth/lib/index.js:29:11)
    at __webpack_require__ (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/webpack/bootstrap:19:1)
    at Object.960306 (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/node_modules/web3-eth-ens/lib/index.js:21:11)
    at __webpack_require__ (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/webpack/bootstrap:19:1)
    at Object.529321 (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/node_modules/web3-eth-ens/lib/ENS.js:26:19)
    at __webpack_require__ (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/webpack/bootstrap:19:1)
    at Object.688894 (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/node_modules/web3-eth-ens/lib/lib/contentHash.js:31:19)
    at __webpack_require__ (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/webpack/bootstrap:19:1)
    at Object.378138 (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/node_modules/content-hash/src/index.js:19:16)
    at __webpack_require__ (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/webpack/bootstrap:19:1)
    at Object.576883 (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/node_modules/multicodec/src/index.js:16:31)
    at __webpack_require__ (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/webpack/bootstrap:19:1)
    at Object.209550 (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/node_modules/multicodec/src/varint-table.js:11:1)
    at varintEncode (/home/patricia/.nvm/versions/node/v13.14.0/lib/node_modules/truffle/build/webpack:/node_modules/multicodec/src/util.js:33:1)

操作系统为Ubuntu 18.04 TLS,已尝试多个Node.js 13+版本(13以下无法编译合约),所有版本组合均触发相同错误:

Truffle v5.5.24 (core: 5.5.24)
Ganache v7.4.0
Solidity v0.5.16 (solc-js)
Node v13.14.0
Web3.js v1.7.4

Truffle v5.5.23 (core: 5.5.23)
Ganache v7.3.2
Solidity v0.5.16 (solc-js)
Node v15.14.0
Web3.js v1.7.4

Truffle v5.5.24 (core: 5.5.24)
Ganache v7.4.0
Solidity v0.5.16 (solc-js)
Node v16.13.0
Web3.js v1.7.4

Truffle v5.5.24 (core: 5.5.24)
Ganache v7.4.0
Solidity v0.5.16 (solc-js)
Node v16.16.0
Web3.js v1.7.4

Truffle v5.5.24 (core: 5.5.24)
Ganache v7.4.0
Solidity v0.5.16 (solc-js)
Node v17.9.1
Web3.js v1.7.4
解决方案

这个错误源于Truffle打包后的代码中Buffer对象未被正确注入,导致Buffer.from无法被识别。以下是几个可行的修复步骤:

1. 全局安装buffer包并注入到Truffle环境

在终端执行以下命令:

npm install -g buffer

然后修改Truffle启动方式,注入Buffer后再进入开发环境:

NODE_OPTIONS="--require buffer" truffle develop

进入环境后执行migrate命令即可。

2. 降级Truffle到稳定版本

部分Truffle 5.5.x版本存在webpack打包兼容性问题,可尝试降级到v5.4.21版本:

npm uninstall -g truffle
npm install -g truffle@5.4.21

该版本打包逻辑更稳定,不会出现Buffer相关注入问题。

3. 清理项目本地依赖冲突

若全局与项目本地Truffle版本冲突,可移除本地依赖后重新安装:

rm -rf node_modules package-lock.json
npm install

之后使用本地版本执行迁移:

npx truffle migrate

4. 临时修改代码(应急方案)

若以上方法无效,可手动修改Truffle打包后的代码:找到错误路径中的multicodec/src/util.js文件,将Buffer.from替换为new Buffer:

// 原代码
varintEncode = function (num) {
  var buf = Buffer.from(varintEncode.bytes(num));
  // ...
}

// 修改后
varintEncode = function (num) {
  var buf = new Buffer(varintEncode.bytes(num));
  // ...
}

注意:此修改为临时方案,更新Truffle后会被覆盖。

内容的提问来源于stack exchange,提问作者Earthling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:06:26