У контрактов также есть nonce?

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

Однако контракты по-прежнему могут создавать другие контракты, а для вновь созданного контракта имеет значение нецелевое отправление. Таким образом, кажется, что контракты также имеют nonces. Является ли это nonce увеличенным каждый раз, когда они называют другой контракт или только если они создают другой контракт?

26 голосов | спросил mKoeppelmann 30 Jpm1000000pmSat, 30 Jan 2016 22:27:55 +030016 2016, 22:27:55

2 ответа


31

Да, контракты имеют nonces . EIP 161 заключил контракт с новичком в 1 , а до EIP 161 - nonce, начинающийся с нуля. контракт увеличивается только тогда, когда этот контракт создает другой контракт (ссылка @ Zanzu YP). Когда контракт вызывает функцию на другом контракте, так называемую «внутреннюю транзакцию» (в http://live.ether.camp ), nonce не увеличивается.

Нексу можно получить, используя web3.eth.getTransactionCount. В контракте нет встроенного метода для доступа к nonce, включая его собственный. (Контракт может использовать свое хранилище, чтобы отслеживать его собственное nonce.)

Чтобы было ясно, в Ethereum есть только 2 типа учетных записей, и все они имеют те же 4 "физических" свойства: nonce, balance (in wei), хэш корневого корня хранения и код. Единственная «физическая» разница заключается в том, что контракт имеет ненулевой код.

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


Чтобы уточнить « У обычных учетных записей есть nonce, который увеличивается с каждой транзакцией », nonce учетной записи без контракта увеличивается только тогда, когда эта учетная запись берет на себя транзакцию (когда это отправитель из). Когда учетная запись является получателем (учетная запись from), ее nonce не увеличивается.

ответил eth 31 Jam1000000amSun, 31 Jan 2016 00:34:08 +030016 2016, 00:34:08
12

Ответ на ваш вопрос можно найти в желтой бумаге :

  

nonce: скалярное значение, равное количеству транзакций, отправленных с этого адреса, или, в случае счетов с соответствующим кодом, количество выполненных этим счетом контрактов

Помните: в Ethereum контракты представляют собой учетные записи с кодом, связанным с ними.

ответил zanzu 30 Jpm1000000pmSat, 30 Jan 2016 23:15:07 +030016 2016, 23:15:07

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132