Web3js
我們什麼時候應該呼叫()、觀察()或獲取()一個事件?
我發現這個概念非常混亂,我應該什麼時候使用watch、call或get 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()
用於合約中的事件日誌,而不是函式。日誌是合約設計的一個重要方面。如果日誌設計得當,軟體客戶可以了解很多關於契約內部發生的事情。希望能幫助到你。