Различные ошибки при развертывании с помощью консоли geth и truffle

Я пытаюсь развернуть контракт двумя разными способами, у меня ничего не получается.
Первый способ:
1. geth console —rinkeby —rpc —rpcapi db,eth,net,web3,personal —unlock="0x..." 2>>geth.log
У меня есть эфир на аккаунте, я правильно ввожу пароль, я уверен, что аккаунт есть в
списке solceth.accounts переменные binи abi. Я ставлю 0xперед двоичным кодом.
3. var contract = web3.eth.contract(abi)
4.var token = myContract.new( {from: eth.coinbase, data: bin, gas: 1000000}, function(e, myContract) { if (e) { console.log(e); } else { if (myContract.address) { console.log ("mined " +myCcontract.address); } } })

И это говорит, что

Ошибка: код контракта не может быть сохранен, проверьте количество газа.

Второй способ — использовать трюфель. Мне уже много раз удавалось развернуть контракт на rinkeby, но теперь я застрял на этой ошибке.
1. Запускаю gethи разблокирую аккаунт
2. Там мой truffle.js:

module.exports = {
сети: {
разработка: {
хост: "localhost",
порт: 8545,
network_id: "*", газ: 900000},
rinkeby: {
хост: '127.0.0.1',
порт: 8545,
network_id: 4 ,
gas: 4612388, // Лимит газа, используемый для развертывания
из: "0xeb1eb48fc3c2756cde3dce8a53472e437062f976" } } };

3. truffle migrate --reset --network rinkeby
И это говорит

Произошла ошибка, спасение. Состояние сети неизвестно. Просмотрите успешные транзакции вручную. TypeError: contract.detectNetwork не является функцией в /usr/local/lib/node_modules/truffle/build/cli.bundled.js:201861:21 в /usr/local/lib/node_modules/truffle/build/cli.bundled. js: 326484: 15 в

Моя цель состояла в том, чтобы научиться взаимодействовать с функциями контракта через консоль geth или truffle. Но что-то пошло не так. Пожалуйста, помогите мне исправить это.
Если вы дочитали до конца этого вопроса, спасибо уже

Ответы (2)

попробуйте сначала с testrpc - https://github.com/ethereumjs/testrpc .

И это сообщение об ошибке «Обнаружена ошибка, спасение. Состояние сети неизвестно» означает, что geth работает неправильно, или не использует порт 8545, или не работает из-за IP-адреса 127.0.0.1.

Попробуйте через testrpc. Вы получите большой опыт. Быстрее взаимодействовать с контрактами для целей тестирования

Я попробую это сейчас, просто чтобы узнать, будет ли он развернут или нет. Но мне нужно развернуть его в тестовой сети, чтобы мои коллеги могли попытаться взаимодействовать с ним.
Другой способ подключиться к узлу без geth — использовать infura. Не забудьте запустить «npm install truffle-hdwallet-provider». Вот текст, который нужно добавить в truffle.js: var HDWalletProvider = require("truffle-hdwallet-provider"); var mnemonic = "слова вашей учетной записи"; module.exports = { каталог_миграций: "./migrations", сети: { rinkeby: { провайдер: новый HDWalletProvider (мнемоника, " rinkeby.infura.io/" ), газ: 4500000, network_id: 4 } } }

В качестве альтернативы я написал небольшую библиотеку для развертывания, которая может кому-то пригодиться. Он развертывается с использованием ethers.js (стабильный родственник web3.js), и он многословен и блестящ :)

const etherlime = require('etherlime');

const ICOTokenContract = require('./build/contracts/ICOToken.json');

const randomAddress = '0xda8a06f1c910cab18ad187be1faa2b8606c2ec86';

const defaultConfigs = {
    gasPrice: 20000000000,
    gasLimit: 4700000
}

const deployer = new etherlime.InfuraPrivateKeyDeployer('Your Privste KEY', 'ropsten', 'Your infura API key', defaultConfigs);

const runICODeployment = async () => {
    const contractWrapper = await deployer.deploy(ICOTokenContract);
    const transferTransaction = await contractWrapper.contract.transferOwnership(randomAddress);
    const result = await contractWrapper.verboseWaitForTransaction(transferTransaction.hash, 'Transfer Ownership');
}
runICODeployment()

Поместите это в файл и запустите с помощью node.