Openzeppelin-Sdk
編譯後無法將 undefined 或 null 轉換為對象
我的智能合約項目已經初始化,
oz init
我只有一個合約。執行後oz compile
我收到一條錯誤消息Cannot convert undefined or null to object
的完整輸出
oz compile
:✖ Compiling contracts with solc 0.8.4 (commit.c7e474f2) Cannot convert undefined or null to object
這不是編譯錯誤。如果存在編譯問題,這將以預期的方式顯示。
為了隔離錯誤來源,我創建了一個只有一份契約的空項目。
環境
- MacOS 大蘇爾 11.2.3 (20D91)
- 節點 v14.13.0
- npm 6.14.7
文件夾內容為:
.openzeppelin
- 項目.json
契約
- 令牌.sol
網路.js
節點模組
包-lock.json
包.json
項目.json
{ "manifestVersion": "2.2", "contracts": {}, "dependencies": {}, "name": "net2u-token", "version": "1.0.0", "compiler": { "compilerSettings": { "optimizer": {} }, "typechain": { "enabled": false } }, "telemetryOptIn": true }
包.json
{ "name": "token", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "oz compile && mocha --exit --recursive test" }, "author": "", "license": "MIT", "devDependencies": { "@openzeppelin/cli": "^2.8.2", "@openzeppelin/contracts": "^4.1.0" } }
令牌.sol
//SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.4; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract Net4uToken is Ownable, ERC20 { constructor (string memory name_, string memory symbol_) ERC20(name_, symbol_) Ownable() {} }
網路.js
module.exports = { networks: { development: { protocol: 'http', host: 'localhost', port: 8545, gas: 5000000, gasPrice: 5e9, networkId: '*', }, }, };
我可以使用 solc 0.7.5 和
npx oz compile
.令牌.sol:
//SPDX-License-Identifier: UNLICENSED pragma solidity ^0.7.5; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract Net4uToken is Ownable, ERC20 { constructor (string memory name_, string memory symbol_) ERC20(name_, symbol_) Ownable() {} }
項目.json:
{ "manifestVersion": "2.2", "contracts": {}, "dependencies": {}, "name": "net2u-token", "version": "1.0.0", "compiler": { "compilerSettings": { "optimizer": { "enabled": false, "runs": "200" } }, "typechain": { "enabled": false }, "manager": "openzeppelin", "solcVersion": "0.7.5", "artifactsDir": "build/contracts", "contractsDir": "contracts" }, "telemetryOptIn": false }
我還
@openzeppelin/contracts
使用 : 更改了包版本以匹配 solc 0.7.5npm i @openzeppelin/contracts@3.4.0
。我無法使用 solc 0.7.6 和 0.8.x 版本進行編譯,並且遇到與您相同的錯誤:
Cannot convert undefined or null to object
。我還嘗試從文件中編譯範例智能合約,這是相同的場景:我可以使用 0.7.5 編譯,但不能使用更新的 solc 版本。
這可能是因為 OpenZeppelin SDK 不再維護。從他們的文件:
OpenZeppelin SDK 沒有被積極開發。我們建議改用升級外掛。有關更多資訊,請參閱建構互操作性:為什麼我們專注於升級外掛。