Web3js

我們什麼時候應該呼叫()、觀察()或獲取()一個事件?

  • April 3, 2022

我發現這個概念非常混亂,我應該什麼時候使用watchcallget to listen to an event?它們有什麼不同,什麼時候應該使用它們?

var event1 = newInst.getSupplier({'OwnAdd': someaddr},{fromBlock:'latest, toBlock:'pending'}, function(error, result) {
   console.log("listening bro1");
   if (!error)
       console.log(result.args);
});

當我更改呼叫或觀看或獲取時,輸出會有什麼不同?

getSupplier - 如果是視圖或純智能合約函式將推遲到呼叫(所以它們是相同的)如果有狀態更改它將推遲到 sendTransaction

該呼叫應立即從區塊鏈返回值 - 不涉及探勘。

觀察或過濾將等待一個事件被添加到日誌中——如果該事件是由智能合約發出的。也就是說,如果您在過濾器上使用手錶。

通過在過濾器上呼叫 get 獲取日誌將返回與過濾器匹配的日誌。

更多細節在這裡:https ://github.com/ethereum/wiki/wiki/JavaScript-API#contract-methods

call()是一個只讀操作,它返回一個值但不能改變狀態。這種行為可以由合約本身提出。看看這裡:事務和呼叫有什麼區別?

sendTransaction() 可以更改合約狀態,返回交易雜湊但不能**更改狀態。

此外,如果上述內容難以理解,這可能會有所幫助:https ://blog.b9lab.com/calls-vs-transactions-in-ethereum-smart-contracts-62d6b17d0bc2

watch()用於合約中的事件日誌,而不是函式。日誌是合約設計的一個重要方面。如果日誌設計得當,軟體客戶可以了解很多關於契約內部發生的事情。

希望能幫助到你。

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