【web3.eth.subscribe()】
這邊為了更了解 event 的運作,首先我們要來到 web3.js 來看 web3.eth.subscribe() 的運作。web3.eth.subscribe() 讓我們可以聆聽區塊鏈上合約的特定事件。
web3.eth.subscribe(type [, options] [, callback]);type: 輸入型態為String我們想要聆聽的類型。
options: 輸入型態為Mixed(optional) 根據想要聆聽的類型(type)來決定這邊選填的內容是什麼。
callback: 輸入型態為Function(optional) 回傳的第一個參數為 error 物件,第二個參數為 result 物件,第三個參數為聆聽類型(subscription)自己
呼叫完 web3.eth.subscribe() 後回傳的物件為 EventEmitter,內容如下:
subscription.id: subscription 的id,可以用來辨識或者取消聆聽此 subscriptionsubscription.subscribe([callback]): 可以使用同樣的參數來重新聆聽(re-subscribe)subscription.unsubscribe([callback]): 取消聆聽這個(Unsubscribes)subscription 並且在成功時回傳TRUEsubscription.arguments: subscription 的參數(arguments),可以被用來re-subscribing.on("data") returns Object: 以log物件當作參數執行每個即將發生的logon("changed") returns Object: 執行每個從區塊鏈被移除的log。log會有額外的屬性"removed: true"on("error") returns Object: 聆聽過程中如果出現錯誤就會執行on("connected") returns String: 聆聽成功後就會回傳subscription id
接下來我們講解 web3.eth.subscribe() 裡面 type 參數的重點聆聽類型 'logs',當然 type 參數還有很多其他的選擇,這些等到介紹 web3.js 的時候再專門講解。
web3.eth.subscribe('logs', options [, callback]);使用給定的 options 聆聽 logs。
參數 Parameters:
"logs"-String,聆聽的類型Object- 聆聽類型的optionsfromBlock-Number: 更早的區塊數量,預設為nulladdress-String|Array: 一個儲存address的陣列或一個address來得到某個特定帳號的logstopics-Array: 一個在 log 裡面出現的數值陣列,其順序是有意義的,如果我們希望不要使用某個元素可以使用null,e.g.[null, '0x00...']。
callback-Function: (optional) 回傳的第一個參數為 error 物件,第二個參數為 result 物件
回傳值 Returns:
EventEmitter:
"data" returns Object: 以log物件當作參數執行每個即將發生的log"changed" returns Object: 執行每個從區塊鏈被移除的log。log會有額外的屬性"removed: true""error" returns Object: 聆聽過程中如果出現錯誤就會執行"connected" returns Number: 聆聽成功後就會回傳subscription id
範例:
var subscription = web3.eth.subscribe('logs', {
address: '0x123456..',
topics: ['0x12345...']
}, function(error, result){
if (!error)
console.log(result);
})
.on("connected", function(subscriptionId){
console.log(subscriptionId);
})
.on("data", function(log){
console.log(log);
})
.on("changed", function(log){
});
// unsubscribes the subscription
subscription.unsubscribe(function(error, success){
if(success)
console.log('Successfully unsubscribed!');
});Last updated
Was this helpful?