Sale.new({ from: state.account, value: value, gas: 4000000 }).then((instance) => {
// do something with instance
}).catch((err) => {
alert(err)
})
Когда приведенный выше код запускается, я иногда получаю эту ошибку:The contract code couldn't be stored, please check your gas amount.
Контракт, который я пытаюсь создать, почти точно такой же, как и контракт на безопасный удаленный платеж в документации Solidity, может быть, всего на несколько строк больше.
Странно то, что контракт фактически создается, и я вижу успешную транзакцию в MetaMask, а эфир вычитается из моего счета. Я могу даже тогда использовать Sale.at(<new contract address>)
для взаимодействия с созданным контрактом. Я тестировал в сети Ropsten.
Одна вещь, которую вы здесь не упомянули, это то, что раньше это работало нормально, но около недели назад это перестало работать.
Это заставляет меня думать, что это ошибка с MetaMask, и мне жаль, что мы еще не выяснили это: https://github.com/MetaMask/metamask-plugin/issues/1361
Это похоже на одну из тех очень общих ошибок. Я столкнулся с этим, когда добавил аргумент функции, не обновляя файл ABI (я храню определения функций и функции в отдельных файлах) — это приводило к тому, что определение функции не соответствовало реализации.
Надеюсь, это поможет кому-то.
вы получили ошибку после исключения в конструкторе.
я думаю, что что-то не так с этим фрагментом:
function Purchase() payable {
seller = msg.sender;
value = msg.value / 2;
if (2 * value != msg.value) throw;
}
это может вызвать исключение while 2*value==msg.value
.
web3.toWei(web3.toBigNumber(0.1).times(2), 'ether')
Итак, я думаю, что конструктор должен иметь возможность разделить отправленное значение поровну на 2 части, потому что перед отправкой оно было умножено на 2.
мкай