└── deploy.js /deploy.js: -------------------------------------------------------------------------------- 1 | const Web3 = require('web3'); 2 | const fs = require('fs'); 3 | const path = require('path'); 4 | 5 | // Установка соединения с Ethereum узлом 6 | const web3 = new Web3('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'); 7 | 8 | // Чтение скомпилированных ABI и байт-кода 9 | const abi = JSON.parse(fs.readFileSync(path.join(__dirname, 'build', 'SimpleStorage.abi'), 'utf8')); 10 | const bytecode = fs.readFileSync(path.join(__dirname, 'build', 'SimpleStorage.bin'), 'utf8'); 11 | 12 | // Адрес и приватный ключ аккаунта для деплоя 13 | const account = 'YOUR_ETHEREUM_ACCOUNT_ADDRESS'; 14 | const privateKey = 'YOUR_PRIVATE_KEY'; 15 | 16 | async function deployContract() { 17 | // Создание экземпляра контракта 18 | const contract = new web3.eth.Contract(abi); 19 | 20 | // Создание транзакции для деплоя контракта 21 | const deployTx = contract.deploy({ 22 | data: '0x' + bytecode, 23 | }); 24 | 25 | // Подсчет газа для транзакции 26 | const gas = await deployTx.estimateGas(); 27 | 28 | // Получение nonce для аккаунта 29 | const nonce = await web3.eth.getTransactionCount(account, 'latest'); 30 | 31 | // Создание подписанной транзакции 32 | const tx = { 33 | from: account, 34 | to: null, 35 | data: deployTx.encodeABI(), 36 | gas: gas, 37 | nonce: nonce, 38 | chainId: 1, // Mainnet 39 | }; 40 | 41 | // Подписание транзакции 42 | const signedTx = await web3.eth.accounts.signTransaction(tx, privateKey); 43 | 44 | // Отправка транзакции и получение транзакционного хеша 45 | const receipt = await web3.eth.sendSignedTransaction(signedTx.rawTransaction); 46 | 47 | console.log('Contract deployed at address:', receipt.contractAddress); 48 | } 49 | 50 | deployContract().catch(console.error); 51 | --------------------------------------------------------------------------------