Ethereum ERC20 пытается развернуть на альфа-лунной базе (тестовая сеть Moonbeam), и я получаю «Источник «@openzeppelin/контракты/токен/ERC20/ERC20.sol» не найден:»

#ethereum #solidity

Вопрос:

Структура моего проекта выглядит следующим образом:

 contracts ├── CExampleToken.sol ├── compile.js ├── create-eth-wallet.js ├── deploy.js ├── package-lock.json ├── package.json └── node_modules  

Это мой код:

CExampleToken.сол

 pragma solidity 0.8.9;  import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol";  contract CExampleToken is ERC20 {  constructor() ERC20("CExample", "CEXT") {  _mint(msg.sender, 25000000);  } }  

compile.js

 const path = require('path'); const fs = require('fs'); const solc = require('solc');  const contractPath = path.resolve(__dirname, 'CExampleToken.sol'); const source = fs.readFileSync(contractPath, 'utf8'); const input = {  language: "Solidity",  sources: {  'CExampleToken.sol': {  content: source,  },  },  settings: {  outputSelection: {  '*': {  '*': ['*']  },  },  }, }; const tempFile = JSON.parse(solc.compile(JSON.stringify(input))); console.log(tempFile); const contractFile = tempFile.contracts['CExampleToken.sol']['CExampleToken']; module.exports = contractFile;  

deploy.js

 const Web3 = require('web3'); const contractFile = require('./compile');  const bytecode = contractFile.evm.bytecode.object; const abi = contractFile.abi; const privKey = lt;my private key heregt;; const address = lt;my address heregt;; const web3 = new Web3('https://rpc.testnet.moonbeam.network');  const deploy = async () =gt; {  const cexampletoken = new web3.eth.Contract(abi);   const cexampletokenTx = cexampletoken.deploy({  data: bytecode,  });    const createTransaction = await web3.eth.accounts.signTransaction(  {  from: address,  data: cexampletokenTx.encodeABI(),  gas: '4294967295'  },  privKey  );   const createReceipt = await web3.eth.sendSignedTransaction(  createTransaction.rawTransaction  );  console.log("Contract was sucessfully deployed at address: ", createReceipt.contractAddress); };  deploy();  

I am trying to compile and deploy by going

 cd contracts node deploy.js  

But I get this error:

 lt;myusernamegt;@lt;mycomputernamegt; contracts % node deploy.js  {  errors: [  {  component: 'general',  errorCode: '1878',  formattedMessage: 'Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing "SPDX-License-Identifier: lt;SPDX-Licensegt;" to each source file. Use "SPDX-License-Identifier: UNLICENSED" for non-open-source code. Please see https://spdx.org for more information.n'    '--gt; CExampleToken.soln'    'n',  message: 'SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing "SPDX-License-Identifier: lt;SPDX-Licensegt;" to each source file. Use "SPDX-License-Identifier: UNLICENSED" for non-open-source code. Please see https://spdx.org for more information.',  severity: 'warning',  sourceLocation: [Object],  type: 'Warning'  },  {  component: 'general',  errorCode: '6275',  formattedMessage: 'ParserError: Source "@openzeppelin/contracts/token/ERC20/ERC20.sol" not found: File import callback not supportedn'    ' --gt; CExampleToken.sol:3:1:n'    ' |n'    '3 | import "@openzeppelin/contracts/token/ERC20/ERC20.sol";n'    ' | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^n'    'n',  message: 'Source "@openzeppelin/contracts/token/ERC20/ERC20.sol" not found: File import callback not supported',  severity: 'error',  sourceLocation: [Object],  type: 'ParserError'  },  {  component: 'general',  errorCode: '6275',  formattedMessage: 'ParserError: Source "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol" not found: File import callback not supportedn'    ' --gt; CExampleToken.sol:4:1:n'    ' |n'    '4 | import "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol";n'    ' | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^n'    'n',  message: 'Source "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol" not found: File import callback not supported',  severity: 'error',  sourceLocation: [Object],  type: 'ParserError'  }  ],  sources: {} } /Users/lt;myusernamegt;/Desktop/Coding/CodingTestSpace/MoonbeamTutorial101921/contracts/compile.js:24 const contractFile = tempFile.contracts['CExampleToken.sol']['CExampleToken'];  ^  TypeError: Cannot read properties of undefined (reading 'CExampleToken.sol')  at Object.lt;anonymousgt; (/Users/lt;myusernamegt;/Desktop/Coding/CodingTestSpace/MoonbeamTutorial101921/contracts/compile.js:24:40)  at Module._compile (node:internal/modules/cjs/loader:1101:14)  at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)  at Module.load (node:internal/modules/cjs/loader:981:32)  at Function.Module._load (node:internal/modules/cjs/loader:822:12)  at Module.require (node:internal/modules/cjs/loader:1005:19)  at require (node:internal/modules/cjs/helpers:102:18)  at Object.lt;anonymousgt; (/Users/lt;myusernamegt;/Desktop/Coding/CodingTestSpace/MoonbeamTutorial101921/contracts/deploy.js:2:22)  at Module._compile (node:internal/modules/cjs/loader:1101:14)  at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)  at Module.load (node:internal/modules/cjs/loader:981:32)  at Function.Module._load (node:internal/modules/cjs/loader:822:12)  at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:79:12)  at node:internal/main/run_main_module:17:47 lt;myusernamegt;@lt;mycomputernamegt; contracts %   

Кстати, я установил openzeppelin. Когда я создавал проект, я сделал

  1. контракты на компакт-диски
  2. инициализация npm
  3. npm установить solc@последняя версия
  4. установка npm @openzeppelin/контракты

В чем проблема и как ее решить?

Обновить
Хорошо, я исправил проблему благодаря @ahmad-gorji
Эта проблема заключалась в том, что контракты @openzeppelin использовали другой компилятор, поэтому я скопировал функции, которые @openzeppelin должен был импортировать непосредственно в мой CExampleToken.файл сол.

Сейчас я получаю новую ошибку…

 RuntimeError: abort(Error: Returned error: submit transaction to pool failed: Pool(InvalidTransaction(InvalidTransaction::ExhaustsResources))). Build with -s ASSERTIONS=1 for more info. at process.abort (/home/Coding/CodingTestSpace/MoonbeamTutorial101921/contracts/node_modules/solc/soljson.js:1:13012) at process.emit (node:events:390:28) at emit (node:internal/process/promises:136:22) at processPromiseRejections (node:internal/process/promises:242:25) at processTicksAndRejections (node:internal/process/task_queues:97:32) at runNextTicks (node:internal/process/task_queues:65:3) at listOnTimeout (node:internal/timers:526:9) at processTimers (node:internal/timers:500:7) myusername@mycompname contracts %  

Я думаю, что это может быть связано с узлом rpc тестовой сети moonbeam :/. Это сеть, которую я использую в соответствующем коде.

 const web3 = new Web3('https://rpc.testnet.moonbeam.network');  

Комментарии:

1. У меня тоже была такая же проблема в ремиксе, я скопировал все контракты openzeppelin, и все стало хорошо 🙁

2. Я пытался, чтобы это все еще не работало

3. Какую ошибку он выдает при копировании кода?!

4. Та же самая ошибка, что и раньше.

5. Вы ошиблись, я имел в виду, что скопировал весь код контракта и вставил его в файл солидности в Remix