У меня действительно странная проблема. Когда я развертываю контракт в JavaScriptVM с помощью Remix, включая следующую функцию:
function setLoanStatus(address _loan, bytes1 _newStatus) public {
// "A" = 0x41 / "I" = 0x49 / "S" = 0x53
var check = (_newStatus == 0x41 || _newStatus == 0x49 || _newStatus == 0x53);
if (check)
{
// Only update status if it is a valid value
loanStatusList[_loan] = _newStatus;
} // if (check)
} // function setLoanStatus(address _loan, bytes1 _newStatus) public {
кажется, что контракт развертывается, но если я попытаюсь посмотреть какое-либо значение, я получаю сообщение:
ошибка: не удалось декодировать вывод: TypeError: невозможно прочитать свойство «длина» неопределенного
Если я изменю видимость на внутреннюю , он будет развернут правильно, И если я разверну контракт с исходной функцией в Injected Web3, он будет работать правильно. Я использую тестовую сеть Ropsten.
Любые идеи, почему такое поведение происходит?
На самом деле это распространенная проблема среди новых пользователей ремиксов.
Во время развертывания в виртуальной машине Javascript попробуйте увеличить лимит газа в параметре ниже параметра «Среда Javascript и учетные записи».
Проблема в том, что из-за низкого лимита газа контракт не развертывается должным образом. Так что вы по сути общаетесь с неполным контрактом.
Увеличение лимита газа позволит правильно развернуть контракт, и проблема исчезнет навсегда.