Вот шаги, которые я предпринял, чтобы развернуть свои контракты в сети rinkeby:
Запустил эту команду:
geth --datadir=$HOME/.rinkeby --light init rinkeby.json
Запустил эту команду:
geth --networkid=4 --datadir=$HOME/.rinkeby --syncmode=light --bootnodes=enode://a24ac7c5484ef4ed0c5eb2d36620ba4e4aa13b8c84684e1b4aab0cebea2ae45cb4d375b77eab56516d34bfbd3c1a833fc51296ff084b770b94fb9028c4d25ccf@52.169.42.101:30303?discport=30304 --rpc --rpcapi db,eth,net ,web3,personal --rpcport 8545 --rpcaddr 127.0.0.1 --rpccorsdomain "*"
После того, как я подключился к сети, я использовал truffle со следующим кодом и командой для развертывания контракта:
Код:
module.exports = {
networks: {
rinkeby: {
network_id: 4,
host: '127.0.0.1',
port: 8545,
gas: 4000000
},
},
rpc: {
// Use the default host and port when not using rinkeby
host: 'localhost',
port: 8080,
},
};
Команда:
truffle compile; truffle migrate --network rinkeby
Это ошибка, которую я получаю:
Using network 'rinkeby'.
/usr/lib/node_modules/truffle/build/cli.bundled.js:23538
throw new Error("Expected parameter '" + key + "' not passed to function.");
^
Error: Expected parameter 'from' not passed to function.
at /usr/lib/node_modules/truffle/build/cli.bundled.js:23538:15
at Array.forEach (native)
at Object.options (/usr/lib/node_modules/truffle/build/cli.bundled.js:23536:19)
at Object.run (/usr/lib/node_modules/truffle/build/cli.bundled.js:66868:12)
at /usr/lib/node_modules/truffle/build/cli.bundled.js:88946:23
at /usr/lib/node_modules/truffle/build/cli.bundled.js:67033:9
at /usr/lib/node_modules/truffle/build/cli.bundled.js:66861:7
at done (/usr/lib/node_modules/truffle/build/cli.bundled.js:155469:5)
at /usr/lib/node_modules/truffle/build/cli.bundled.js:155526:11
at FSReqWrap.oncomplete (fs.js:153:5)
Что неверно в процессе, которому я следовал? Я не могу понять, почему появляется эта ошибка и как ее убрать.
Проблема была в файле truffle.js.
module.exports = {
networks: {
rinkeby: {
network_id: 4,
host: '127.0.0.1',
port: 8545,
gas: 4000000,
from: <your account address>
},
},
rpc: {
// Use the default host and port when not using rinkeby
host: 'localhost',
port: 8080,
},
};
Просто нужно добавить from: <account address>
в информацию о конфигурации rinkeby.
У меня была своя доля трудностей с конфигурацией трюфеля. Я сделал свою маленькую библиотеку для развертывания с помощью ethers.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()
Поместите это в файл js и запустите его через узел
Сепультура
truffle compile
?коленоlb4darth
Исмаэль