Ruka hadi kwenye maudhui makuu

Kutumia WebSockets

Alchemy
websockets
kudadisi
JavaScript
Mwanzilishi
Elan Halpern
1 Desemba 2020
6 dakika za kusoma

Huu ni mwongozo wa kiwango cha kuanzia wa kutumia WebSockets na Alchemy kufanya maombi kwenye mnyororo wa vitalu wa Ethereum.

 (opens in a new tab)WebSockets dhidi ya HTTP

Tofauti na HTTP, ukiwa na WebSockets, huhitaji kufanya maombi mfululizo unapohitaji taarifa maalum. WebSockets hudumisha muunganisho wa mtandao kwa ajili yako (kama ikifanywa kwa usahihi) na kusikiliza mabadiliko.

Kama ilivyo kwa muunganisho wowote wa mtandao, hupaswi kudhani kuwa WebSocket itabaki wazi milele bila kukatizwa, lakini kushughulikia kwa usahihi miunganisho iliyokatika na kuunganisha tena kwa mikono inaweza kuwa changamoto kupata usahihi. Hasara nyingine ya WebSockets ni kwamba hupati misimbo ya hali ya HTTP katika majibu, bali unapata tu ujumbe wa hitilafu.

Alchemy Web3 (opens in a new tab) huongeza kiotomatiki ushughulikiaji wa hitilafu za WebSocket na kujaribu tena bila usanidi wowote unaohitajika.

Ijaribu

Njia rahisi zaidi ya kujaribu WebSockets ni kusakinisha zana ya mstari wa amri kwa ajili ya kufanya maombi ya WebSocket kama vile wscat (opens in a new tab). Kwa kutumia wscat, unaweza kutuma maombi kama ifuatavyo:

Kumbuka: ikiwa una akaunti ya Alchemy unaweza kubadilisha demo na ufunguo wako wa API. Jisajili kwa akaunti ya bure ya Alchemy hapa! (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}

Jinsi ya kutumia WebSockets

Ili kuanza, fungua WebSocket ukitumia URL ya WebSocket kwa programu yako. Unaweza kupata URL ya WebSocket ya programu yako kwa kufungua ukurasa wa programu katika dashibodi yako (opens in a new tab) na kubofya "View Key". Kumbuka kwamba URL ya programu yako kwa WebSockets ni tofauti na URL yake kwa maombi ya HTTP, lakini zote zinaweza kupatikana kwa kubofya "View Key".

Where to find your WebSocket URL in your Alchemy dashboard

API yoyote iliyoorodheshwa katika Rejeleo la API ya Alchemy (opens in a new tab) inaweza kutumika kupitia WebSocket. Ili kufanya hivyo, tumia mzigo (payload) uleule ambao ungetumwa kama kiini cha ombi la HTTP POST, lakini badala yake tuma mzigo huo kupitia WebSocket.

Pamoja na Web3

Kubadilika kwenda kwenye WebSockets unapotumia maktaba ya mteja kama Web3 ni rahisi. Pitisha tu URL ya WebSocket badala ya ile ya HTTP unapounda mteja wako wa Web3. Kwa mfano:

const web3 = new Web3("wss://eth-mainnet.ws.alchemyapi.io/ws/your-api-key")

web3.eth.getBlockNumber().then(console.log) // -> 7946893

API ya Usajili

Unapounganishwa kupitia WebSocket, unaweza kutumia mbinu mbili za ziada: eth_subscribe na eth_unsubscribe. Mbinu hizi zitakuruhusu kusikiliza matukio mahususi na kujulishwa mara moja.

eth_subscribe

Hutengeneza usajili mpya kwa matukio yaliyobainishwa. Jifunze zaidi kuhusu eth_subscribe (opens in a new tab).

Vigezo

  1. Aina za usajili
  2. Vigezo vya hiari

Hoja ya kwanza inabainisha aina ya tukio la kusikiliza. Hoja ya pili ina chaguo za ziada ambazo zinategemea hoja ya kwanza. Aina tofauti za maelezo, chaguo zake, na mizigo ya matukio yake yameelezwa hapa chini.

Hurejesha

Kitambulisho cha usajili: Kitambulisho hiki kitaambatishwa kwenye matukio yoyote yaliyopokelewa, na kinaweza pia kutumika kughairi usajili kwa kutumia eth_unsubscribe.

Matukio ya usajili

Wakati usajili unaendelea, utapokea matukio ambayo ni vipengee (objects) vyenye nyanja zifuatazo:

  • jsonrpc: Kila wakati "2.0"
  • method: Kila wakati "eth_subscription"
  • params: Kipengee chenye nyanja zifuatazo:
    • subscription: Kitambulisho cha usajili kilichorejeshwa na wito wa eth_subscribe uliotengeneza usajili huu.
    • result: Kipengee ambacho yaliyomo yake hutofautiana kulingana na aina ya usajili.

Aina za usajili

  1. alchemy_newFullPendingTransactions

Hurejesha taarifa za muamala kwa miamala yote inayoongezwa kwenye hali inayosubiri. Aina hii ya usajili hujiandikisha kwa miamala inayosubiri, sawa na wito wa kawaida wa Web3 web3.eth.subscribe("pendingTransactions"), lakini inatofautiana kwa kuwa inatoa taarifa kamili za muamala badala ya heshi za muamala pekee.

Mfano:

  1. newHeads

Hutoa tukio wakati wowote kichwa kipya kinapoongezwa kwenye mnyororo, ikiwa ni pamoja na wakati wa upangaji upya wa mnyororo.

Wakati upangaji upya wa mnyororo unapotokea, usajili huu utatoa tukio lenye vichwa vyote vipya kwa mnyororo mpya. Hasa, hii inamaanisha kuwa unaweza kuona vichwa vingi vikitolewa vikiwa na urefu sawa, na hili linapotokea kichwa cha baadaye kinapaswa kuchukuliwa kama kile sahihi baada ya upangaji upya.

Mfano:

  1. logs

Hutoa kumbukumbu (logs) ambazo ni sehemu ya vitalu vilivyoongezwa hivi karibuni vinavyolingana na vigezo maalum vya kuchuja.

Wakati upangaji upya wa mnyororo unapotokea, kumbukumbu ambazo ni sehemu ya vitalu kwenye mnyororo wa zamani zitatolewa tena huku sifa ya removed ikiwekwa kuwa true. Zaidi ya hayo, kumbukumbu ambazo ni sehemu ya vitalu kwenye mnyororo mpya hutolewa, ikimaanisha kuwa inawezekana kuona kumbukumbu za muamala uleule mara nyingi katika hali ya upangaji upya.

Vigezo

  1. Kipengee chenye nyanja zifuatazo:
    • address (hiari): ama mfuatano (string) unaowakilisha anwani au safu (array) ya mifuatano kama hiyo.
      • Ni kumbukumbu tu zilizoundwa kutoka kwa mojawapo ya anwani hizi ndizo zitatolewa.
    • topics: safu ya vibainishi vya mada.
      • Kila kibainishi cha mada ni ama null, mfuatano unaowakilisha mada, au safu ya mifuatano.
      • Kila nafasi katika safu ambayo si null huzuia kumbukumbu zinazotolewa kwa zile tu zilizo na mojawapo ya mada zilizotolewa katika nafasi hiyo.

Baadhi ya mifano ya vipimo vya mada:

  • []: Mada zozote zinaruhusiwa.
  • [A]: A katika nafasi ya kwanza (na chochote kinachofuata).
  • [null, B]: Chochote katika nafasi ya kwanza na B katika nafasi ya pili (na chochote kinachofuata).
  • [A, B]: A katika nafasi ya kwanza na B katika nafasi ya pili (na chochote kinachofuata).
  • [[A, B], [A, B]]: (A au B) katika nafasi ya kwanza na (A au B) katika nafasi ya pili (na chochote kinachofuata).

Mfano:

eth_unsubscribe

Hufuta usajili uliopo ili hakuna matukio zaidi yatakayotumwa.

Vigezo

  1. Kitambulisho cha Usajili, kama kilivyorejeshwa hapo awali kutoka kwa wito wa eth_subscribe.

Hurejesha

true ikiwa usajili ulighairiwa kwa ufanisi, au false ikiwa hakuna usajili uliokuwepo wenye kitambulisho kilichotolewa.

Mfano:

Ombi

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"]}'

Matokeo

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": true
}

Jisajili na Alchemy (opens in a new tab) bila malipo, angalia nyaraka zetu (opens in a new tab), na kwa habari za hivi punde, tufuate kwenye Twitter (opens in a new tab).