Попытка развернуть умный контракт без трюфеля (ручной маршрут) - PullRequest
0 голосов
/ 05 июня 2018

Я новичок и хочу интегрировать интерфейс (угловой js) с блокчейном.

Я успешно скомпилировал и развернул умный контракт с использованием Truffle.Могу ли я использовать умный контракт, не используя трюфель, т.е. ручной маршрут.Я искал много блогов, но не мог найти лучший источник для этого вопроса.Если у вас есть лучший источник, пожалуйста, помогите мне

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Я создал программу развертывания контракта с помощью 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);
                }

            }
        });
    });

}
0 голосов
/ 05 июня 2018

Хотя это и не идеально, технически вы можете использовать онлайновую IDE Remix (http://remix.ethereum.org/), если у вас установлена ​​Metamask.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...