Transactions

合約也有隨機數嗎?

  • March 22, 2018

合約也有隨機數嗎?如果有,它是如何計算的?通常的賬戶有一個隨機數,每筆交易都會增加一個隨機數。但是,合約不能進行交易,它們只能進行由交易觸發的呼叫。

但是合約仍然可以創建其他合約,並且對於新生成的合約,發送者的 nonce 是相關的。因此,契約似乎也有隨機數。每次他們呼叫另一個合約時,這個隨機數會增加還是只有在他們創建另一個合約時才會增加?

是的,合約有 noncesEIP 161 使合約隨機數從 1 開始,而在 EIP 161 之前,隨機數將從 0 開始。合約的隨機數僅在該合約創建另一個合約時才會增加(@zanzu 的 YP 參考)。當一個合約呼叫另一個合約的函式時,即所謂的“內部交易”(在http://live.ether.camp中),nonce 不會增加。

nonce 可以通過使用來獲得web3.eth.getTransactionCount 合約沒有內置的方法來訪問賬戶的 nonce,包括它自己的。(合約可以使用它的儲存來跟踪它自己的 nonce。)

明確地說,乙太坊中只有 2 種類型的賬戶,它們都具有相同的 4 個“物理”屬性:nonce、餘額(以 wei 為單位)、儲存樹根雜湊和程式碼。 唯一的“物理”差異是合約具有非零程式碼。

在行為方面,合約和普通賬戶之間存在更多差異。隨機數的增加是一種行為差異;另一個主要問題是合約的私鑰儲存在哪裡?


為了澄清“普通賬戶的隨機數隨著每筆交易而增加”,非合約賬戶的隨機數僅在該賬戶發起交易時(當它是發件人from賬戶時)增加。當一個帳戶是接收者(to帳戶)時,它的 nonce 不會增加。

引用自:https://ethereum.stackexchange.com/questions/764