Какая область переменных изменяет состояние контракта?

Я читал о состоянии смарт-контракта. Здесь

Также приводится небольшой пример договора.

contract SimpleStorage {
    uint storedData;

    function set(uint x) {
        storedData = x;
    }

    function get() constant returns (uint) {
        return storedData;
    }
}

Здесь у нас есть переменная storageData и если мы хотим ее установить, то транзакция с x отправляется и состояние контракта меняется. Насколько я понял правильно не нужно отправлять транзакцию для чтения хранимых данных. Я могу совершить местный звонок.

А как насчет следующего контракта:

contract SimpleStorage {

    function set(uint x) {
        uint storedData = x;
        return storedData;
    }
}

StoredData теперь находится внутри функции и сохраняет содержимое, но изменит ли это состояние контракта? Нужно ли отправлять транзакцию для вызова этой функции или достаточно локального вызова?

Судя по моим знаниям в области программирования, я бы сказал, что нет, но я не уверен, когда дело доходит до смарт-контрактов :)

Спасибо

Ответы (1)

Отличие первого примера от второго в том, что в первом storedDataон находится в хранилище контракта , а во втором uint— в переменной памяти . Хранилище сохраняется между транзакциями, память — нет. Таким образом, вы правы.

Могу ли я вызвать второй пример локально или для вызова функции также должна быть транзакция?
@Donut Для сети необходимо выполнить транзакцию, чтобы убедиться, что изменение разрешено.
Это неправда, если вы отправите его как транзакцию, он не вернет ничего полезного. Локальный вызов просто вернет то, что вы вводите. Ничто во втором примере в любом случае не имеет состояния.