Почему непостоянные функции Solidity Browser возвращают значения?

При вызове функции изменения состояния в цепочке возвращается объект квитанции TX. В браузере Solidity под виртуальной машиной Javascript возвращается возвращаемое значение, если оно задано.

Почему виртуальная машина Javascript ведет себя таким запутанным образом?

Например, следующий контракт содержит функцию изменения состояния, которая возвращает значение.

contract foo {

    uint public bar;

    function set(uint newbar) public returns (bool)
    {
        bar = newbar;
        return true;
    }
}

В виртуальной машине Javascript значение отображается как возвращенное...введите описание изображения здесь

Это противоречит поведению контракта в цепочке, который возвращает квитанцию ​​TX. Возвраты IOW не имеют смысла в функции изменения состояния (или я упускаю что-то действительно фундаментальное?)введите описание изображения здесь

Возвращаемое поведение Javascript VM может привести к ложному ощущению функциональности, из-за которого автор (например, я, который должен был знать лучше) затем пишет контракты в зависимости от таких возвращаемых значений, но которые не имеют абсолютно никакой функциональности в цепочке...

Другой пример, который работает в виртуальной машине, но ломается в цепочке, - это попытка взаимодействия с «новым» контрактом...

contract foo {
    uint public number = 42;
    function set(uint num)
    {
        number = num;
    }
}

contract fooFactory {
    foo public kungFoo;
    function newFoo()
    {
        kungFoo = new foo();
        kungFoo.set(1); // This call will throw on chain yet works in VM
    }
}

Ответы (1)

browser-solidity на Github описывается как «Только для браузера Solidity IDE и среда выполнения». Возврат значений из непостоянных функций — полезная функция IDE, похожая на мгновенное выполнение без необходимости ждать, пока блок будет добыт. Цель используемой виртуальной машины Javascript — упростить и ускорить разработку и отладку.

Недостатком является то, что среда не сохраняется, но надежность браузера может быть прикреплена непосредственно к узлу, такому как Geth (вариант поставщика Web3 ниже), или к «инжектированному Web3», такому как Mist или MetaMask, где можно использовать реальный блокчейн:

введите описание изображения здесь

Я не понимаю, как разрешение возвращать значение в непостоянных функциях JS VM способствует «более быстрой» отладке, когда на самом деле вводятся практики, которые по своей сути ошибочны, особенно для ожиданий между контрактами.
Я не слежу, и можно ли привести пример того, что вы наблюдали (или отредактировать вопрос)?