Я знаю, что этот вопрос уже обсуждался несколько раз, но я не могу найти решение своей проблемы ни в одном из ответов,
Мой контракт был развернут нормально, прежде чем добавить следующую функцию:
function setApproval(address addr, bool approved)payable returns(string, uint, uint) {
//some logical operations and assignments
}
как только я добавляю функцию и пытаюсь развернуть контракт, я получаю эту ошибку
Произошла ошибка, спасение. Состояние сети неизвестно. Просмотрите успешные транзакции вручную. Ошибка: код контракта не может быть сохранен, проверьте количество газа.
тестовый сервер rpc показывает следующие журналы
Transaction: 0xd5791ac0c6059cbd43e00a7fabe566ada3f0572966f12ff25da6e04215840f39 Contract created: 0x9062592c5dd06340401c1e750ddb025defabf5be Gas usage: 4712388 Block Number: 16 Block Time: Sat Jul 22 2017 03:30:30 GMT+0530 (India Standard Time) Runtime Error: out of gas
снова после удаления этой функции контракт развернут без ошибок
что не так с этой функцией?
Мой код контракта составляет около 250 строк, есть ли ограничения на размер кода контракта??
заранее спасибо
В вашем 2_deploy_contracts.js
файле поменяйте газценапо умолчанию большее число, т.е.:
// 2_deploy_contracts.js
const MyContract = artifacts.require('./MyContract.sol')
module.exports = function (deployer) {
deployer.deploy(MyContract, { gas: 5000000 })
}
У меня была такая же проблема, и это сработало для меня.
Когда контракт наследуется от интерфейса и не реализует функцию, будет выдана эта ошибка.
Трюфель 4.0.4 солк 0.4.18
interface IF {
function doSomething() external view returns(uint);
}
contract Inherit is IF {
Inherit() public;
}
при развертывании. выдаст ошибку:
Не удалось сохранить код контракта. Проверьте количество газа.
решение заключается в реализации функции.
contract Inherit is IF {
doSomething() external view returns(uint) {
return 5;
}
}
Проблема, которая возникает редко, но вызывает точно такое же сообщение об ошибке, заключается в следующем:
В настоящее время размер кода контракта ограничен 24 КБ, и иногда ваш байт-код может быть больше, что вызовет ту же проблему.
Перейдите к JSON-файлу сборки контракта и проверьте, не превышает ли развернутый размер байт-кода 24 КБ.
Решение. Эту проблему можно решить с помощью различных оптимизаций контрактов, таких как удаление достаточного количества геттеров, публичных объявлений и т. д.
Я использовал решение @rhlsthrm с дополнительной модификацией, потому что его решение дало мне
Ошибка: превышен лимит блокированного газа
Мое решение для Geth.
Во-первых, получите лимит газа из последнего блока
с использованием
eth.getBlock("latest").gasLimit
скопируйте лимит газа, а затем вставьте его вот так
var Identity = artifacts.require("./Identity.sol");
module.exports = function(deployer) {
deployer.deploy(Identity, { gas: 794722 });
};
увеличьте значение газа в файле развертывания.
если вы зарегистрируете ошибку развертывания, вы можете увидеть детали газа, например:
cumulativeGasUsed: 1217170,
effectiveGasPrice: 2500000011,
gasUsed: 1000000,
пожалуйста, проверьте, меньше ли значение «gasUsed», чем «cumulativeGasUsed», поэтому вы должны увеличить значение газа в настройке кода развертывания, например:
const result = await new web3.eth.Contract(abi)
.deploy({
data: evm.bytecode.object,
})
.send({ from: accounts[0], gas: 1000000 });
измените значение газа (1000000) на (2000000) следующим образом:
const result = await new web3.eth.Contract(abi)
.deploy({
data: evm.bytecode.object,
})
.send({ from: accounts[0], gas: 2000000 });
Джефф
gasLimit
настройку, если есть.Исмаэль
eth.sendTransaction(params...., { gas: 10000000 })
.СвапнилКумбхар
СвапнилКумбхар
setApproval()
функции развертывается без каких-либо ошибок, и я могу вызывать функции с помощью предложенного вами метода, но как только я добавлю эту конкретную функцию и попробуйте повторно развернуть контракт, я получаю сообщение об ошибке, которое я указал в вопросеСвапнилКумбхар
truffle migrate --reset
Джефф
СвапнилКумбхар
retrurns
Исмаэль
deployer.deploy(MyContract, params.., {gas: 5000000});
увеличения количества газа, если это необходимо.pabloruiz55
СвапнилКумбхар