Хранилище смарт-контрактов

Я собирался создать свой первый смарт-контракт, на который наткнулся на следующие вопросы:

  1. Где именно хранится код контракта, я читал, что он как бы хранится в блокчейне, значит ли это, что каждый узел, у которого есть экземпляр полного блокчейна, также имеет код контракта?

  2. Должен ли майнер, чтобы добыть новый блок, сначала выполнить все вызовы контракта и установить значения, а затем начать искать решение головоломки POW и значение одноразового номера, и если да, то можем ли мы иметь майнеры ASIC для эфириума, такие как биткойн, потому что они могут выполнять только определенную работу, но коды контрактов каждый раз разные?

  3. Когда майнер хочет проверить транзакцию, которая имеет вызов контракта, должен ли он запускать код контракта? если да, значит ли это, что каждый контракт будет выполняться несколько раз, пока, наконец, один майнер не сможет найти правильный одноразовый номер и решить головоломку? если это правда, это означает, что код контракта может запускаться много раз без необходимости?

  4. Где хранятся значения переменных контракта, я имею в виду, что если у нас есть отображение солидности, оно может содержать множество ключевых значений, так где же хранится этот ключ, значения? если они хранятся в блокчейне, то они должны храниться в каждом узле, у которого есть копия блокчейна, что означает, что массивные данные будут храниться снова и снова, и это будет такая трата памяти.

  5. Когда контракт самоуничтожается, что именно происходит, в нем упоминается, что код будет удален из блокчейна, значит ли это, что транзакция делает его недоступным для следующих транзакций, или он действительно действительно изменяет блокчейн и удаляет его закодированный из старых блоков?

Ответы (1)

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

Состояние сохраняется в блокчейне, да. Вы также правы, говоря, что у каждого полного узла есть копия всего блокчейна, включая все состояния.

Должен ли майнер, чтобы добыть новый блок, сначала выполнить все вызовы контракта и установить значения, а затем начать искать решение головоломки POW и значение одноразового номера, и если да, то можем ли мы иметь майнеры ASIC для эфириума, такие как биткойн, потому что они могут выполнять только определенную работу, но коды контрактов каждый раз разные??

Задача шахтеров — просто решить головоломку с военнопленными. Когда они это делают, у них есть возможность добывать блок. Теперь они выбирают, какие транзакции они хотят включить в этот конкретный блок. Эти транзакции определяют все изменения состояния, которые были сделаны, поэтому технически майнеру не нужно в них вникать.

Что касается вопроса ASIC, Ethereum POW был разработан, чтобы быть жестким с памятью, а это означает, что ASIC трудно майнить.

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

Смотрите мой ответ выше как ответ на этот вопрос. Подводя итог, майнер просто выбирает транзакцию. Причина, по которой он не запускается несколько раз, заключается в том, что есть только один майнер, который первым находит блок и получает за это вознаграждение. Это единственный майнер, который транслирует транзакцию, а также вызовы контракта в сеть Ethereum.

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

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

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

Это не изменяет блокчейн, так как это невозможно. Что он делает (не вдаваясь в технические подробности), так это запрещает кому-либо снова вызывать этот контракт. Лучший пример для рассмотрения — эксплойт кошелька Parity , так как это важный пример использования selfdestruct.