WebSockets ఉపయోగించడం
ఇది ఎథీరియం బ్లాక్చైన్కు అభ్యర్థనలు చేయడానికి WebSockets మరియు Alchemy ఉపయోగించడంపై ఒక ప్రాథమిక స్థాయి గైడ్.
(opens in a new tab)WebSockets వర్సెస్ HTTP
HTTP వలె కాకుండా, WebSocketsతో, మీకు నిర్దిష్ట సమాచారం కావాల్సినప్పుడు నిరంతరం అభ్యర్థనలు చేయాల్సిన అవసరం లేదు. WebSockets మీ కోసం ఒక నెట్వర్క్ కనెక్షన్ను నిర్వహిస్తాయి (సరిగ్గా చేస్తే) మరియు మార్పుల కోసం వింటాయి.
ఏదైనా నెట్వర్క్ కనెక్షన్ మాదిరిగానే, WebSocket అంతరాయం లేకుండా ఎప్పటికీ తెరిచి ఉంటుందని మీరు అనుకోకూడదు, కానీ డ్రాప్ అయిన కనెక్షన్లను మరియు మాన్యువల్గా మళ్లీ కనెక్ట్ చేయడాన్ని సరిగ్గా నిర్వహించడం సవాలుగా ఉంటుంది. WebSockets యొక్క మరొక ప్రతికూలత ఏమిటంటే, మీరు ప్రతిస్పందనలో HTTP స్థితి కోడ్లను పొందలేరు, కేవలం ఎర్రర్ సందేశాన్ని మాత్రమే పొందుతారు.
Alchemy Web3 (opens in a new tab) ఎటువంటి కాన్ఫిగరేషన్ అవసరం లేకుండానే WebSocket వైఫల్యాలు మరియు మళ్లీ ప్రయత్నించడం కోసం హ్యాండ్లింగ్ను ఆటోమేటిక్గా జోడిస్తుంది.
దీన్ని ప్రయత్నించండి
WebSocketsను పరీక్షించడానికి సులభమైన మార్గం ఏమిటంటే, wscat (opens in a new tab) వంటి WebSocket అభ్యర్థనలను చేయడానికి కమాండ్ లైన్ టూల్ను ఇన్స్టాల్ చేయడం. wscatని ఉపయోగించి, మీరు ఈ క్రింది విధంగా అభ్యర్థనలను పంపవచ్చు:
గమనిక: మీకు Alchemy ఖాతా ఉంటే, మీరు demoని మీ స్వంత API కీతో భర్తీ చేయవచ్చు. ఉచిత Alchemy ఖాతా కోసం ఇక్కడ సైన్ అప్ చేయండి! (opens in a new tab)
wscat -c wss://eth-mainnet.ws.alchemyapi.io/ws/demo
> {"jsonrpc": "2.0", "id": 0, "method": "eth_gasPrice"}
< {"jsonrpc": "2.0", "result": "0xb2d05e00", "id": 0}
WebSockets ఎలా ఉపయోగించాలి
ప్రారంభించడానికి, మీ యాప్ కోసం WebSocket URLని ఉపయోగించి WebSocketని తెరవండి. మీ డ్యాష్బోర్డ్ (opens in a new tab)లో యాప్ పేజీని తెరిచి, "View Key"ని క్లిక్ చేయడం ద్వారా మీరు మీ యాప్ యొక్క WebSocket URLని కనుగొనవచ్చు. WebSockets కోసం మీ యాప్ యొక్క URL, HTTP అభ్యర్థనల కోసం దాని URLకి భిన్నంగా ఉంటుందని గమనించండి, అయితే "View Key"ని క్లిక్ చేయడం ద్వారా రెండింటినీ కనుగొనవచ్చు.
Alchemy API రిఫరెన్స్ (opens in a new tab)లో జాబితా చేయబడిన ఏవైనా APIలను WebSocket ద్వారా ఉపయోగించవచ్చు. అలా చేయడానికి, HTTP POST అభ్యర్థన యొక్క బాడీగా పంపబడే అదే పేలోడ్ను ఉపయోగించండి, కానీ దానికి బదులుగా ఆ పేలోడ్ను WebSocket ద్వారా పంపండి.
Web3తో
Web3 వంటి క్లయింట్ లైబ్రరీని ఉపయోగిస్తున్నప్పుడు WebSocketsకి మారడం చాలా సులభం. మీ Web3 క్లయింట్ను ఇన్స్టాన్షియేట్ చేస్తున్నప్పుడు HTTPకి బదులుగా WebSocket URLని పాస్ చేయండి. ఉదాహరణకు:
const web3 = new Web3("wss://eth-mainnet.ws.alchemyapi.io/ws/your-api-key")
web3.eth.getBlockNumber().then(console.log) // -> 7946893
సబ్స్క్రిప్షన్ API
WebSocket ద్వారా కనెక్ట్ అయినప్పుడు, మీరు రెండు అదనపు పద్ధతులను ఉపయోగించవచ్చు: eth_subscribe మరియు eth_unsubscribe. ఈ పద్ధతులు నిర్దిష్ట ఈవెంట్ల కోసం వినడానికి మరియు వెంటనే తెలియజేయబడటానికి మిమ్మల్ని అనుమతిస్తాయి.
eth_subscribe
పేర్కొన్న ఈవెంట్ల కోసం కొత్త సబ్స్క్రిప్షన్ను సృష్టిస్తుంది. eth_subscribe గురించి మరింత తెలుసుకోండి (opens in a new tab).
పారామితులు
- సబ్స్క్రిప్షన్ రకాలు
- ఐచ్ఛిక పారామితులు
మొదటి ఆర్గ్యుమెంట్ దేని కోసం వినాలో ఆ ఈవెంట్ రకాన్ని నిర్దేశిస్తుంది. రెండవ ఆర్గ్యుమెంట్ మొదటి ఆర్గ్యుమెంట్పై ఆధారపడి ఉండే అదనపు ఎంపికలను కలిగి ఉంటుంది. విభిన్న వివరణ రకాలు, వాటి ఎంపికలు మరియు వాటి ఈవెంట్ పేలోడ్లు క్రింద వివరించబడ్డాయి.
రిటర్న్స్
సబ్స్క్రిప్షన్ ID: ఈ ID స్వీకరించిన ఏవైనా ఈవెంట్లకు జోడించబడుతుంది మరియు eth_unsubscribeని ఉపయోగించి సబ్స్క్రిప్షన్ను రద్దు చేయడానికి కూడా ఉపయోగించవచ్చు.
సబ్స్క్రిప్షన్ ఈవెంట్లు
సబ్స్క్రిప్షన్ యాక్టివ్గా ఉన్నప్పుడు, మీరు ఈ క్రింది ఫీల్డ్లతో కూడిన ఆబ్జెక్ట్లైన ఈవెంట్లను స్వీకరిస్తారు:
jsonrpc: ఎల్లప్పుడూ "2.0"method: ఎల్లప్పుడూ "eth_subscription"params: ఈ క్రింది ఫీల్డ్లతో కూడిన ఆబ్జెక్ట్:subscription: ఈ సబ్స్క్రిప్షన్ను సృష్టించినeth_subscribeకాల్ ద్వారా తిరిగి ఇవ్వబడిన సబ్స్క్రిప్షన్ ID.result: సబ్స్క్రిప్షన్ రకాన్ని బట్టి కంటెంట్లు మారే ఆబ్జెక్ట్.
సబ్స్క్రిప్షన్ రకాలు
alchemy_newFullPendingTransactions
పెండింగ్ స్థితికి జోడించబడిన అన్ని లావాదేవీల కోసం లావాదేవీ సమాచారాన్ని అందిస్తుంది. ఈ సబ్స్క్రిప్షన్ రకం ప్రామాణిక Web3 కాల్ web3.eth.subscribe("pendingTransactions") మాదిరిగానే పెండింగ్లో ఉన్న లావాదేవీలకు సబ్స్క్రైబ్ చేస్తుంది, అయితే ఇది కేవలం లావాదేవీల హ్యాష్లకు బదులుగా పూర్తి లావాదేవీ సమాచారాన్ని విడుదల చేయడంలో భిన్నంగా ఉంటుంది.
ఉదాహరణ:
> {"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["alchemy_newFullPendingTransactions"]}
< {"id":1,"result":"0x9a52eeddc2b289f985c0e23a7d8427c8","jsonrpc":"2.0"}
< {
"jsonrpc":"2.0",
"method":"eth_subscription",
"params":{
"result":{
"blockHash":null,
"blockNumber":null,
"from":"0xa36452fc31f6f482ad823cd1cf5515177d57667f",
"gas":"0x1adb0",
"gasPrice":"0x7735c4d40",
"hash":"0x50bff0736c713458c92dd1848d12f3354149be1363123dae35e94e0f2a9d56bf",
"input":"0xa9059cbb0000000000000000000000000d0707963952f2fba59dd06f2b425ace40b492fe0000000000000000000000000000000000000000000015b1111266cfca100000",
"nonce":"0x0",
"to":"0xea38eaa3c86c8f9b751533ba2e562deb9acded40",
"transactionIndex":null,
"value":"0x0",
"v":"0x26",
"r":"0x195c2c1ed126088e12d290aa93541677d3e3b1d10f137e11f86b1b9227f01e3b",
"s":"0x60fc4edbf1527832a2a36dbc1e63ed6193a6eee654472fbebbf88ef1750b5344"},
"subscription":"0x9a52eeddc2b289f985c0e23a7d8427c8"
}
}
newHeads
చైన్ పునర్వ్యవస్థీకరణ సమయంలో సహా, చైన్కు కొత్త హెడర్ జోడించబడిన ప్రతిసారీ ఒక ఈవెంట్ను విడుదల చేస్తుంది.
చైన్ పునర్వ్యవస్థీకరణ జరిగినప్పుడు, ఈ సబ్స్క్రిప్షన్ కొత్త చైన్ కోసం అన్ని కొత్త హెడర్లను కలిగి ఉన్న ఈవెంట్ను విడుదల చేస్తుంది. ప్రత్యేకించి, దీని అర్థం మీరు ఒకే ఎత్తుతో బహుళ హెడర్లు విడుదల చేయబడటాన్ని చూడవచ్చు మరియు ఇలా జరిగినప్పుడు పునర్వ్యవస్థీకరణ తర్వాత వచ్చిన హెడర్ను సరైనదిగా తీసుకోవాలి.
ఉదాహరణ:
> {"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newHeads"]}
< {"jsonrpc":"2.0","id":2,"result":"0x9ce59a13059e417087c02d3236a0b1cc"}
< {
"jsonrpc": "2.0",
"method": "eth_subscription",
"params": {
"result": {
"extraData": "0xd983010305844765746887676f312e342e328777696e646f7773",
"gasLimit": "0x47e7c4",
"gasUsed": "0x38658",
"logsBloom":
"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"nonce": "0x084149998194cc5f",
"number": "0x1348c9",
"parentHash": "0x7736fab79e05dc611604d22470dadad26f56fe494421b5b333de816ce1f25701",
"receiptRoot": "0x2fab35823ad00c7bb388595cb46652fe7886e00660a01e867824d3dceb1c8d36",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"stateRoot": "0xb3346685172db67de536d8765c43c31009d0eb3bd9c501c9be3229203f15f378",
"timestamp": "0x56ffeff8",
"transactionsRoot": "0x0167ffa60e3ebc0b080cdb95f7c0087dd6c0e61413140e39d94d3468d7c9689f"
},
"subscription": "0x9ce59a13059e417087c02d3236a0b1cc"
}
}
logs
పేర్కొన్న ఫిల్టర్ ప్రమాణాలకు సరిపోలే కొత్తగా జోడించిన బ్లాక్లలో భాగమైన లాగ్లను విడుదల చేస్తుంది.
చైన్ పునర్వ్యవస్థీకరణ జరిగినప్పుడు, పాత చైన్లోని బ్లాక్లలో భాగమైన లాగ్లు trueకి సెట్ చేయబడిన removed ప్రాపర్టీతో మళ్లీ విడుదల చేయబడతాయి. ఇంకా, కొత్త చైన్లోని బ్లాక్లలో భాగమైన లాగ్లు విడుదల చేయబడతాయి, అంటే పునర్వ్యవస్థీకరణ విషయంలో ఒకే లావాదేవీకి సంబంధించిన లాగ్లను బహుళ సార్లు చూడటం సాధ్యమవుతుంది.
పారామితులు
- ఈ క్రింది ఫీల్డ్లతో కూడిన ఆబ్జెక్ట్:
address(ఐచ్ఛికం): చిరునామాను సూచించే స్ట్రింగ్ లేదా అటువంటి స్ట్రింగ్ల శ్రేణి.- ఈ చిరునామాలలో ఒకదాని నుండి సృష్టించబడిన లాగ్లు మాత్రమే విడుదల చేయబడతాయి.
topics: టాపిక్ స్పెసిఫైయర్ల శ్రేణి.- ప్రతి టాపిక్ స్పెసిఫైయర్
null, టాపిక్ను సూచించే స్ట్రింగ్ లేదా స్ట్రింగ్ల శ్రేణి అయి ఉంటుంది. nullకాని శ్రేణిలోని ప్రతి స్థానం, ఆ స్థానంలో ఇచ్చిన టాపిక్లలో ఒకదాన్ని కలిగి ఉన్న వాటికి మాత్రమే విడుదల చేయబడిన లాగ్లను పరిమితం చేస్తుంది.
- ప్రతి టాపిక్ స్పెసిఫైయర్
టాపిక్ స్పెసిఫికేషన్ల యొక్క కొన్ని ఉదాహరణలు:
[]: ఏవైనా టాపిక్లు అనుమతించబడతాయి.[A]: మొదటి స్థానంలో A (మరియు ఆ తర్వాత ఏదైనా).[null, B]: మొదటి స్థానంలో ఏదైనా మరియు రెండవ స్థానంలో B (మరియు ఆ తర్వాత ఏదైనా).[A, B]: మొదటి స్థానంలో A మరియు రెండవ స్థానంలో B (మరియు ఆ తర్వాత ఏదైనా).[[A, B], [A, B]]: మొదటి స్థానంలో (A లేదా B) మరియు రెండవ స్థానంలో (A లేదా B) (మరియు ఆ తర్వాత ఏదైనా).
ఉదాహరణ:
> {"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["logs", {"address": "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd", "topics": ["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"]}]}
< {"jsonrpc":"2.0","id":2,"result":"0x4a8a4c0517381924f9838102c5a4dcb7"}
< {
"jsonrpc": "2.0",
"method": "eth_subscription",
"params": {
"subscription": "0x4a8a4c0517381924f9838102c5a4dcb7",
"result": {
"address": "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd",
"blockHash": "0x61cdb2a09ab99abf791d474f20c2ea89bf8de2923a2d42bb49944c8c993cbf04",
"blockNumber": "0x29e87",
"data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003",
"logIndex":"0x0",
"topics":["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"],
"transactionHash": "0xe044554a0a55067caafd07f8020ab9f2af60bdfe337e395ecd84b4877a3d1ab4",
"transactionIndex": "0x0"
}
}
}
eth_unsubscribe
ఇకపై ఎలాంటి ఈవెంట్లు పంపబడకుండా ఇప్పటికే ఉన్న సబ్స్క్రిప్షన్ను రద్దు చేస్తుంది.
పారామితులు
- సబ్స్క్రిప్షన్ ID, గతంలో
eth_subscribeకాల్ నుండి తిరిగి ఇవ్వబడినట్లుగా.
రిటర్న్స్
సబ్స్క్రిప్షన్ విజయవంతంగా రద్దు చేయబడితే true, లేదా ఇచ్చిన IDతో సబ్స్క్రిప్షన్ ఏదీ లేకుంటే false.
ఉదాహరణ:
అభ్యర్థన
curl https://eth-mainnet.alchemyapi.io/v2/your-api-key
-X POST
-H "Content-Type: application/json"
-d '{"id": 1, "method": "eth_unsubscribe", "params": ["0x9cef478923ff08bf67fde6c64013158d"]}'
ఫలితం
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
ఉచితంగా Alchemyతో సైన్ అప్ చేయండి (opens in a new tab), మా డాక్యుమెంటేషన్ను (opens in a new tab) తనిఖీ చేయండి మరియు తాజా వార్తల కోసం, ట్విట్టర్ (opens in a new tab)లో మమ్మల్ని అనుసరించండి.
