Разумное контрактное развертывание с узлом не работает - PullRequest
0 голосов
/ 30 августа 2018

У меня такая проблема. Я новичок в разработке блокчейнов, и я создал контракт Smart, используя основательность Чтобы скомпилировать и развернуть, я создал файл compile.js и deploy.js.

Это мой файл Solidity.

pragma solidity 0.4.20;

contract Election {
    // Model a Candidate
    struct Candidate {
        uint id;
        string name;
        uint voteCount;
    }

    // Store accounts that have voted
    mapping(address => bool) public voters;
    // Store Candidates
    // Fetch Candidate
    mapping(uint => Candidate) public candidates;
    // Store Candidates Count
    uint public candidatesCount;

    // voted event
    event votedEvent (
        uint indexed _candidateId
    );

    function Election () public {
        addCandidate("Candidate 1");
        addCandidate("Candidate 2");
    }

    function addCandidate (string _name) private {
        candidatesCount ++;
        candidates[candidatesCount] = Candidate(candidatesCount, _name, 0);
    }

    function vote (uint _candidateId) public {
        // require that they haven't voted before
        require(!voters[msg.sender]);

        // require a valid candidate
        require(_candidateId > 0 && _candidateId <= candidatesCount);

        // record that voter has voted
        voters[msg.sender] = true;

        // update candidate vote Count
        candidates[_candidateId].voteCount ++;

        // trigger voted event
        votedEvent(_candidateId);
    }
}

Это мой файл compile.js.

const path = require('path');
const fs =require('fs');
const solc = require('solc');

const electionPath= path.resolve(__dirname,'contracts','Election.sol');
const source = fs.readFileSync(electionPath,'utf8');
module.exports = solc.compile(source,1).contracts[':Election'];

Это мой файл deploy.js.

const HDWalletProvider = require('truffle-hdwallet-provider');
const Web3 = require('web3');
const { interface , bytecode } = require('./compile');

const provider = new HDWalletProvider(
    'retire embark gravity flight also ceiling dinr wine example slender armor rate',
    'https://rinkeby.infura.io/v3/mykey'
);

const web3 = new Web3(provider);

const deploy = async () => {
const accounts = await web3.eth.getAccounts();

console.log('Attempting to deploy from account',accounts[0]);
const result = await new web3.eth.Contract(JSON.parse(interface))
.deploy({data:bytecode})
.send({gas:'1000000',from :accounts[0]});

console.log( interface );
console.log( 'contract deploy to', result.options.address);

};

deploy();

Когда я нажимаю на файл deploy.js в командной строке, он выдает мне такую ​​ошибку.

TypeError: Cannot destructure property `interface` of 'undefined' or 'null'.
    at Object.<anonymous> (C:\Users\tharindusa\Desktop\election\deploy.js:3:34)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:191:16)
    at bootstrap_node.js:612:3

Может кто-нибудь помочь мне решить эту проблему? Я много ищу, но не смог найти подходящего решения для этого. Спасибо.

1 Ответ

0 голосов
/ 01 сентября 2018

Я получил ту же ошибку. Я использовал solc.compile(source, 1).errors, как предложил Адам, и нашел опечатку в контракте. Вы должны попробовать это.

...