Оригинальный текст здесь[1].
import { Web3 } from "web3";
// set a provider - MUST be a WebSocket(WSS) provider
const web3 = new Web3("wss://ethereum-rpc.publicnode.com");
async function subscribe() {
// create a new contract object, providing the ABI and address
const contract = new web3.eth.Contract(abi, address);
// subscribe to the smart contract event
const subscription = contract.events.EventName();
// new value every time the event is emitted
subscription.on("data", console.log);
}
// function to unsubscribe from a subscription
async function unsubscribe(subscription) {
await subscription.unsubscribe();
}
subscribe();
unsubscribe(subscription);
Стандартные узлы Ethereum, такие как Geth, поддерживают подписку на определенные события[2]. Кроме того, есть несколько узлов Ethereum, которые предлагают дополнительные индивидуальные подписки. Как вы видели в этом руководстве, web3.js позволяет вам напрямую подписываться на стандартные события. Он также предоставляет вам возможность подписаться на индивидуальные подписки, как вы можете видеть в руководстве «Пользовательские подписки»[3].
Это важно, если вы разработчик, предоставляющий своим пользователям индивидуальные подписки. Мы рекомендуем вам разработать плагин web3.js после прочтения раздела «Пользовательские подписки»[4] ниже. Вы можете узнать, как разрабатывать плагины, в Руководстве разработчика плагинов web3.js [5].
•on("data")
- Запускается каждый раз при поступлении нового журнала с объектом журнала в качестве параметра.
•on("changed")
- Запускается всякий раз, когда журнал удаляется из блокчейна. Журнал будет иметь дополнительные свойства "removed: true"。
•on("error")
- Вызывается при возникновении ошибки в подписке.
•on("connected")
- Срабатывает один раз после успешного подключения подписки. Вернуть идентификатор подписки.
•logs
:существоватьLogsSubscription
Реализовано в классе
import { Web3 } from "web3";
const web3 = new Web3("wss://ethereum-rpc.publicnode.com");
async function subscribe() {
//create subcription
const subcription = await web3.eth.subscribe("logs");
//print logs of the latest mined block
subcription.on("data", (data) => console.log(data));
}
// function to unsubscribe from a subscription
async function unsubscribe(subscription) {
await subscription.unsubscribe();
}
subscribe();
unsubscribe(subscription);
•newPendingTransactions
:существоватьNewPendingTransactionsSubscription[6]Реализовано в классе•pendingTransactions
:иnewPendingTransactions
Такой же
import { Web3 } from "web3";
const web3 = new Web3("wss://ethereum-rpc.publicnode.com");
async function subscribe() {
//create subcription
const subcription = await web3.eth.subscribe("pendingTransactions"); //or ("newPendingTransactions")
//print tx hashs of pending transactions
subcription.on("data", (data) => console.log(data));
}
// function to unsubscribe from a subscription
async function unsubscribe(subscription) {
await subscription.unsubscribe();
}
subscribe();
unsubscribe(subscription);
•newBlockHeader
:существоватьNewHeadsSubscription[7]Реализовано в классе•newHeads
:иnewBlockHeader
Такой же
import { Web3 } from "web3";
const web3 = new Web3("wss://ethereum-rpc.publicnode.com");
async function subscribe() {
//create subcription
const subcription = await web3.eth.subscribe("newBlockHeaders"); //or ("newHeads")
//print block header everytime a block is mined
subcription.on("data", (data) => console.log(data));
}
// function to unsubscribe from a subscription
async function unsubscribe(subscription) {
await subscription.unsubscribe();
}
subscribe();
unsubscribe(subscription);
•syncing
:существоватьSyncingSubscription[8]Реализовано в классе
import { Web3 } from "web3";
const web3 = new Web3("wss://ethereum-rpc.publicnode.com");
async function subscribe() {
//create subcription
const subcription = await web3.eth.subscribe("syncing");
//this will return `true` when the node is syncing
//when it’s finished syncing will return `false`, for the `changed` event.
subcription.on("data", (data) => console.log(data));
}
// function to unsubscribe from a subscription
async function unsubscribe(subscription) {
await subscription.unsubscribe();
}
subscribe();
unsubscribe(subscription);
Отказ от ответственности: эта работа распространяется под лицензией Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)[9]. Пожалуйста, укажите источник при ее использовании. Автор: мэнбин[10] блог: мэнбин[11] Github: mengbin92[12] cnblogs: Непреднамеренно полюбила воду[13] Сообщество разработчиков Tencent Cloud: Мюнстер[14]
[1]
здесь: https://docs.web3js.org/guides/events_subscriptions/
[2]
Стандартные узлы Ethereum, такие как Geth, поддерживают подписку на определенные события: https://geth.ethereum.org/docs/interacting-with-geth/rpc/pubsub#supported-subscriptions
[3]
Пользовательская подписка: https://docs.web3js.org/guides/events_subscriptions/custom_subscriptions
[4]
Пользовательская подписка: https://docs.web3js.org/guides/events_subscriptions/custom_subscriptions
[5]
Руководство разработчика плагина web3.js: https://docs.web3js.org/guides/web3_plugin_guide/plugin_authors
[6]
NewPendingTransactionsSubscription: https://docs.web3js.org/api/web3-eth/class/NewPendingTransactionsSubscription
[7]
NewHeadsSubscription: https://docs.web3js.org/api/web3-eth/class/NewHeadsSubscription
[8]
SyncingSubscription: https://docs.web3js.org/api/web3-eth/class/SyncingSubscription
[9]
С указанием авторства-Некоммерческая-ShareAlike 4.0 интернациональность (CC BY-NC-SA 4.0): https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh
[10]
mengbin: mengbin1992@outlook.com
[11]
mengbin: https://mengbin.top
[12]
mengbin92: https://mengbin92.github.io/
[13]
Влюбляюсь в воду нечаянно: https://www.cnblogs.com/lianshuiwuyi/
[14]
Мюнстер: https://cloud.tencent.com/developer/user/6649301