Փոխարկում, առևտուր և դուրսբերում

Ինքնապահառու դրամապանակից փոխանցումը չի ուղարկվում կամ ձախողվում է․ ինչպես գտնել պատճառը

Դրամապանակը գրում է, որ միջոցները չեն բավականացնում, թեև USDT կա, գործարքը կախվել է Pending-ում կամ ձախողվել է՝ միջնորդավճարը գանձելով։ Ինչպես TxID-ով տարբերել այս երեք դեպքերը և ինչ անել յուրաքանչյուրի դեպքում։

Ինքնապահառու դրամապանակից փոխանցումը չի ուղարկվում կամ ձախողվում է․ ինչպես գտնել պատճառը

Սեղմել եք «Ուղարկել», բայց ոչինչ չի տեղի ունեցել։ Կամ դրամապանակը գրել է «insufficient funds for gas», թեև հաշվին USDT կա։ Կամ գործարքը կախվել է «Pending» վիճակում և չի շարժվում։ Կամ դիտարկիչը ցույց է տալիս, որ գործարքը կատարվել է, բայց կարգավիճակը՝ ձախողված, ու միջնորդավճարը պահվել է։

Սրանք տարբեր իրավիճակներ են՝ տարբեր պատճառներով և տարբեր լուծումներով։ Ամենավատ արձագանքը բոլոր դեպքերում նույնն է՝ նորից սեղմել «Ուղարկել»։ Եթե առաջին գործարքը իրականում ցանցում է, երկրորդը կարող է նույնպես կատարվել, և դուք երկու անգամ կուղարկեք նույն գումարը։

Այս ուղեցույցը բորսայի մասին չէ։ Խոսքը այն դրամապանակների մասին է, որտեղ բանալիները ձեզ մոտ են՝ MetaMask, Trust Wallet, Ledger և նմանները։ Այստեղ ոչ մի աջակցության ծառայություն չի կարող ձեր փոխարեն գործարք չեղարկել կամ հետ բերել․ որոշումները ձերն են։ Եթե դեռ պարզ չէ, թե ինչով է դա տարբերվում բորսայի հաշվից, բորսայի և ինքնապահառու դրամապանակի տարբերության բացատրությունը արժե կարդալ նախքան շարունակելը։

Առաջին հարցը՝ TxID կա՞

Ամեն ինչ որոշվում է սրանով։ TxID-ն (գործարքի հեշ, սովորաբար 0x-ով սկսվող երկար տող) նշանակում է, որ գործարքը հասել է ցանց։ Եթե TxID չկա, գործարքը երբեք չի հեռացել ձեր սարքից։

Նայեք դրամապանակի պատմության բաժինը։ Երեք հնարավոր պատկեր․

  • Գրառում ընդհանրապես չկա, կամ կա «Failed»՝ առանց հեշի → գործարքը չի ուղարկվել։ Անցեք A բաժին։
  • Կա TxID, կարգավիճակը՝ Pending կամ Unconfirmed → գործարքը ցանցում է, բայց սպասում է։ Անցեք B բաժին։
  • Կա TxID, դիտարկիչում կարգավիճակը՝ Failed / Reverted → գործարքը մշակվել է և մերժվել։ Անցեք C բաժին։

Կարգավիճակը կարդացեք բլոկչեյնի դիտարկիչում, ոչ թե միայն դրամապանակի ներսում։ Դրամապանակը ցույց է տալիս իր տեսած պատկերը, որը կարող է հետ մնալ։ Թե ինչպես ճիշտ ցանցի դիտարկիչում գտնել գործարքը և կարդալ հաստատումները, մանրամասն նկարագրված է TxID-ի ստուգման ուղեցույցում։

A. Գործարքը չի ուղարկվում․ չկա ցանցի սեփական մետաղադրամը

Սա ամենահաճախ հանդիպող դեպքն է, և սովորաբար տարակուսանք է առաջացնում՝ «հաշվին 500 USDT կա, ինչո՞ւ եմ գրում, որ միջոցները չեն բավականացնում»։

Որովհետև միջնորդավճարը USDT-ով չի վճարվում։ Յուրաքանչյուր ցանց իր հաշվարկային ծախսը գանձում է իր սեփական մետաղադրամով, և թոքենը դրա փոխարեն չի ընդունվում․

Ցանց Ինչո՞վ է վճարվում միջնորդավճարը
Ethereum (ERC-20) ETH
BNB Smart Chain (BEP-20) BNB
Polygon POL
Arbitrum, Base, Optimism ETH այդ նույն ցանցում
Tron (TRC-20) TRX՝ Energy և Bandwidth-ի տեսքով

Ուշադրություն երկրորդ սյունակի վերջին տողին։ Arbitrum-ում վճարելու համար պետք է ETH հենց Arbitrum-ում․ Ethereum-ի հիմնական ցանցում ընկած ETH-ը այդ գործարքի համար հասանելի չէ։ Նույն հասցեն է, բայց ուրիշ ցանց, ուրիշ մնացորդ։

Tron-ի դեպքում մեխանիզմը մի փոքր այլ է և արժե հասկանալ, քանի որ USDT-ի փոխանցումների զգալի մասը հենց TRC-20-ով է անցնում։

TRON-ի պաշտոնական մշակողների փաստաթղթերի Resource Model էջը, որտեղ թվարկված են ցանցի երեք ռեսուրսները՝ Bandwidth, Energy և TRON Power

Ինչպես երևում է TRON-ի պաշտոնական փաստաթղթերում, ցանցը գործում է ռեսուրսների մոդելով․ Bandwidth-ը ծածկում է գործարքի ծավալը, Energy-ն՝ սմարթ-կոնտրակտի հաշվարկը։ USDT-ի փոխանցումը կոնտրակտի կանչ է, ուստի Energy է պահանջում։ Energy-ն կարելի է ստանալ TRX սառեցնելով, կամ ցանցը պարզապես կայրի համարժեք TRX ձեր մնացորդից։ Երկու դեպքում էլ եզրակացությունը նույնն է․ TRX-ի զրոյական մնացորդով USDT-ը TRC-20-ով չի ուղարկվի։

Ինչ անել։ Հասցեին փոխանցեք ցանցի մետաղադրամի փոքր քանակ և կրկնեք գործարքը։ Գումարը մեծ պետք չէ, բայց ուղարկեք ճիշտ այն ցանցով, որով պատրաստվում եք ծախսել այն։ Հենց այստեղ է ամենից հաճախ կրկնվում ցանցի ընտրության սխալը․ եթե արդեն սխալ ցանցով եք ուղարկել, ցանցի սխալի վերականգնման սահմանները նկարագրում են, թե ինչն է իրատեսական և ինչը՝ ոչ։

B. Կա TxID, բայց գործարքը կախված է Pending-ում

Գործարքը ցանցում է և սպասում է հերթին։ Երկու սովորական պատճառ․

Միջնորդավճարը ցածր է ընթացիկ մակարդակից։ Դուք առաջարկել եք գին, որը տվյալ պահին բավարար չէ, որ ձեր գործարքը ներառվի բլոկում։ Երբ ցանցի ծանրաբեռնվածությունն ընկնի, այն կարող է ինքնուրույն անցնել՝ մի քանի րոպեից մինչև ժամեր անց։

Նույն հասցեից առաջ կա ավելի հին կախված գործարք։ Ethereum-ի տիպի ցանցերում գործարքները կատարվում են խիստ հերթականությամբ՝ ըստ nonce համարի։ Եթե nonce 12-ը կախված է, ապա 13-ը և 14-ը չեն կատարվի, նույնիսկ եթե դրանց միջնորդավճարը բարձր է։ Խցանումը ամենահին գործարքն է։

Ինչ կարող եք անել։ Դրամապանակները առաջարկում են «Speed up» և «Cancel» գործառույթները։ Երկուսն էլ նույն բանն են անում՝ ուղարկում են նոր գործարք նույն nonce-ով և ավելի բարձր միջնորդավճարով․ «Cancel»-ի դեպքում դա ինքդ քեզ ուղղված զրոյական փոխանցում է, որը զբաղեցնում է այդ nonce-ը։ Ցանցն ընդունում է դրանցից միայն մեկը։

Սահմանները, որոնք պետք է հստակ հասկանալ․

  • Չեղարկումը երաշխավորված չէ։ Եթե սկզբնական գործարքը կատարվի ձեր փոխարինողից առաջ, չեղարկումն ուշացել է։
  • Չեղարկումն ինքը նույնպես միջնորդավճար է պահանջում։ Անվճար դուրս գալ չկա։
  • Արդեն հաստատված գործարքը չի չեղարկվում։ Ոչ մի կոճակ, ոչ մի ծառայություն դա հետ չի բերում։
  • Երկրորդ փոխանցում մի ուղարկեք նույն ստացողին, քանի դեռ առաջինը Pending է։ Եթե երկուսն էլ անցնեն, գումարը երկու անգամ կգնա։

C. Կա TxID, կարգավիճակը՝ Failed, միջնորդավճարը գանձվել է

Սա ամենադժվար ընդունվող դեպքն է․ գործարքը չկայացավ, բայց փողը պահվեց։

MetaMask-ի պաշտոնական աջակցության էջը «Why did I pay gas fees for a failed transaction?» վերնագրով՝ բացատրությամբ, որ վճարը գնում է վալիդատորներին և ենթակա չէ վերադարձի

MetaMask-ի պաշտոնական աջակցության էջը դա բացատրում է ուղիղ․ վճարը ստանում է ոչ թե դրամապանակը, այլ ցանցի վալիդատորները, և այն վճարվում է հաշվարկի համար՝ անկախ արդյունքից։ Ձախողված գործարքը նույնպես ստուգվել և կատարվել է, պարզապես ընդհատվել է կեսից։ Այդ աշխատանքն արդեն ծախսված է։

Տեսնենք, թե ինչ տեսք ունի դա շղթայում։ Ստորև Ethereum-ի իրական գործարք է՝ 26,031,201 բլոկից, որը ցանկացած պահի կարող եք բացել դիտարկիչում ինքներդ։

3xpl դիտարկիչում Ethereum-ի ձախողված գործարքի էջը․ միջնորդավճարը՝ 0.000223181938951450 ETH, իսկ փոխանցված գումարը՝ զրո, նշված է նախազգուշական նշանով

Ուշադրություն երկու թվի վրա։ Transaction fee՝ 0.000223181938951450 ETH (մոտ 0.60 ԱՄՆ դոլար այդ պահին), իսկ ներքևում՝ Amount transferred՝ 0, ջնջված գծով և նախազգուշական նշանով։ Այսինքն՝ վճարվել է, բայց ոչինչ չի տեղափոխվել։

Այս գործարքի թվերը լավ ցույց են տալիս, թե ինչպես է հաշվարկվում գումարը։ Gas limit-ը սահմանված էր 635,568 միավոր, բայց փաստացի ծախսվեց 107,350-ը՝ մինչև ընդհատումը։ Gas-ի գինը ստացվում է բաժանումով․

0.000223181938951450 ETH × 10^18 ÷ 107,350 = 2,079,012,007 wei ≈ 2.079 Gwei

Հակառակ ուղղությամբ ստուգում․ 107,350 × 2,079,012,007 ÷ 10^18 = 0.00022318 ETH։ Համընկնում է։

Այստեղից երկու օգտակար եզրակացություն․

  1. Չծախսված gas-ը վերադարձվում է։ Եթե ամբողջ 635,568 limit-ը գանձվեր, վճարը կլիներ 0.001321 ETH՝ գրեթե վեց անգամ ավելի։ Gas limit-ը առավելագույն թույլատրելի ծախսն է, ոչ թե ֆիքսված գինը։
  2. Վճարը կախված է նրանից, թե որքան հեռու է հասել գործարքը մինչև ընդհատվելը, ոչ թե նրանից՝ հաջողվե՞ց այն, թե՞ ոչ։

Ինչու է գործարքը մերժվում

Ամենատարածված պատճառները․

  • Out of gas։ Gas limit-ը ցածր է եղել, քան պահանջվում էր։ Կրկնելիս limit-ը պետք է բարձրացնել, ոչ թե միջնորդավճարի գինը։
  • Թոքենի թույլտվությունը (approval) բացակայում է կամ քիչ է։ Կոնտրակտը փորձել է վերցնել ձեր թոքենը, բայց թույլատրված սահմանը չի բավականացրել։
  • Կոնտրակտի պայմանը չի կատարվել։ Փոխանակման դեպքում՝ գինը շարժվել է թույլատրված շեղումից դուրս, և գործարքը ինքն իրեն ընդհատվել է, որպեսզի ձեզ ավելի վատ փոխարժեք չտա։ Այս դեպքում մերժումը պաշտպանություն է, ոչ թե սխալ։

Կարևոր․ ձախողված գործարքի դեպքում ձեր հիմնական գումարը տեղից չի շարժվել։ Համոզվեք դրանում՝ բացելով ձեր հասցեն դիտարկիչում և նայելով մնացորդը, ոչ թե դրամապանակի ցուցադրությանը։

Երբ խնդիրը ձերը չէ

Կան դեպքեր, երբ ուղարկելը ձախողվում է ոչ թե ձեր հաշվի, այլ կապի պատճառով։ Եթե դրամապանակը գրում է ցանցի կամ հանգույցի սխալ, ամբողջ մնացորդը ցույց է տալիս զրո, կամ ցանկացած գործարք ակնթարթորեն ձախողվում է՝ նախքան հաստատում խնդրելը, ապա հավանաբար RPC հանգույցն է անհասանելի։ Ձեր միջոցները տեղում են՝ դրանք շղթայում են, ոչ թե ծրագրում։ Ստուգեք հասցեն դիտարկիչում․ եթե այնտեղ մնացորդը ճիշտ է, սպասեք կամ ցանցի կարգավորումներում փոխեք RPC հասցեն։

Իսկ ահա ինչ ոչ ոք չի կարող անել՝ ոչ դրամապանակի մշակողը, ոչ որևէ ծառայություն․ վերադարձնել հաստատված գործարքը, վերադարձնել ձախողված գործարքի միջնորդավճարը, կամ «արագացնել» այն, ինչ արդեն մտել է բլոկ։ Եթե որևէ մեկը հենց դա է առաջարկում վճարի դիմաց, դա խարդախություն է։

Ստուգաթերթ նախքան կրկնելը

  1. Գտեք TxID-ն և կարգավիճակը կարդացեք դիտարկիչում, ոչ թե դրամապանակում։
  2. Ստուգեք ցանցի սեփական մետաղադրամի մնացորդը հենց այն ցանցում, որով ուղարկում եք։
  3. Եթե գործարքը Pending է՝ մի ուղարկեք երկրորդը։ Սպասեք կամ օգտագործեք Speed up-ը։
  4. Եթե Failed է՝ նախ ստուգեք հասցեի մնացորդը, հետո նոր որոշեք կրկնել։
  5. Out of gas-ի դեպքում բարձրացրեք gas limit-ը, ոչ թե գինը։
  6. Կրկնելուց առաջ համոզվեք, որ ստացողի հասցեն և ցանցը նույնն են, ինչ նախատեսել էիք։

Աղբյուրներ

  • TRON-ի մշակողների փաստաթղթեր՝ ռեսուրսների մոդել (Bandwidth, Energy) — developers.tron.network/docs/resource-model
  • MetaMask-ի աջակցություն՝ ինչու է ձախողված գործարքի միջնորդավճարը գանձվում — support.metamask.io
  • Օրինակում բերված գործարքը՝ Ethereum, բլոկ 26,031,201, հեշ 0x65292751b678443847d4bb8bc389f4faa630d44a96ab721b547a16bf1797c487