Я создал программу развертывания контракта с помощью nodeJS.Пожалуйста, найдите ниже код.
Шаг 1: Установите nodeJS и NPM на ваш компьютер.
Шаг 2: Создайте папку «deployer» и добавьте package.json в ту же папку
Шаг 3: Создайте «контракты» и «скомпилированную» папку в папке «deployer»
Шаг 4: создал файл deployer.js в папке «deployer».
Шаг 5: Запустите $ npmкоманда установки
Шаг 6. Сохраните файл смарт-контракта ".sol" в папке "контракты".
Шаг 7. Выполните команду $ node deployer.js, чтобы развернуть контракт на локальном клиенте Ganache (трюфель).Если у вас есть другой клиент или блокчейн-узел.Пожалуйста, обновите URL RPC в файле "deployer.js".ИЛИ установите RPC-клиент Ganache, вы найдете трюфельный сайт.
Файлы:
package.json:
{
"name": "deployer",
"version": "1.0.0",
"description": "Test deployer",
"main": "deployer.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Mahesh Patil",
"license": "ISC",
"dependencies": {
"async": "^2.6.0",
"body-parser": "1.15.2",
"express": "4.14.0",
"request": "2.79.0",
"solc": "0.4.8",
"web3": "0.18.2"
}
}
========== deployer.js:
var Web3 = require("web3");
// Replace the blockchain node url, I am installed Ganache client very easy for testing
var web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:7545/"));
var fs = require('fs');
var solc = require('solc');
var async = require('async');
var cDir = fs.readdirSync("./contracts");
console.log(cDir);
var contracts = cDir.reduce(function (acc, file) {
acc[file] = fs.readFileSync("./contracts/" + file, { encoding: "utf8" });
return acc;
}, {});
var output = solc.compile({ sources: contracts }, 1);
if (output.errors) {
throw output.errors;
};
var owner = web3.eth.coinbase;
web3.eth.defaultAccount = owner;
var contracts = [];
web3.personal.unlockAccount(owner, "", 120000, function (err, success) {
var all = [];
Object.keys(output.contracts).forEach(function (name) {
var contract = output.contracts[name];
contract.interface = JSON.parse(contract.interface);
deployContract(contract, name).then(res => {
console.log(name, " Address: ", res);
})
});
});
function deployContract(contract, fileName) {
return new Promise((resolve, reject) => {
web3.eth.contract(contract.interface).new({
data: "0x" + contract.bytecode,
gas: 900000, // If you get gas issue please change this value according error
// privateFor: [],
from: owner,
}, function (err, myContract) {
if (err) {
console.log(err);
reject(err);
}
if (!err) {
if (!myContract.address) {
console.log(fileName + " : " + myContract.transactionHash); // The hash of the transaction, which deploys the contract
} else {
contract.address = myContract.address;
fs.writeFileSync("./compiled/" + fileName + ".json", JSON.stringify(contract, null, 4));
//cb(null, myContract.address); // the contract address
resolve(myContract.address);
}
}
});
});
}